Home | History | Annotate | Download | only in bluetooth
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.cts.verifier.bluetooth;
     18 
     19 import com.android.cts.verifier.PassFailButtons;
     20 import com.android.cts.verifier.R;
     21 
     22 import android.bluetooth.BluetoothAdapter;
     23 import android.bluetooth.BluetoothDevice;
     24 import android.content.Intent;
     25 import android.os.Bundle;
     26 import android.os.Handler;
     27 import android.os.Message;
     28 import android.provider.Settings;
     29 import android.view.View;
     30 import android.view.View.OnClickListener;
     31 import android.view.Window;
     32 import android.widget.Button;
     33 import android.widget.TextView;
     34 import android.widget.Toast;
     35 
     36 public class ConnectionAccessClientActivity extends PassFailButtons.Activity {
     37 
     38     private static final int ENABLE_BLUETOOTH_REQUEST = 1;
     39     private static final int PICK_SERVER_DEVICE_REQUEST = 2;
     40 
     41     private BluetoothAdapter mBluetoothAdapter;
     42     private BluetoothChatService mChatService;
     43     private String mDeviceAddress;
     44     private Button mPickServerButton;
     45 
     46     @Override
     47     protected void onCreate(Bundle savedInstanceState) {
     48         super.onCreate(savedInstanceState);
     49         requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
     50         setContentView(R.layout.bt_connection_access);
     51         setInfoResources(R.string.bt_connection_access_client,
     52                 R.string.bt_connection_access_client_info, 0);
     53         setPassFailButtonClickListeners();
     54 
     55         View settings = findViewById(R.id.bt_settings);
     56         settings.setOnClickListener(new OnClickListener() {
     57             @Override
     58             public void onClick(View view) {
     59                 startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));
     60             }
     61         });
     62 
     63         mPickServerButton = (Button) findViewById(R.id.bt_pick_server_button);
     64         mPickServerButton.setVisibility(View.VISIBLE);
     65         mPickServerButton.setOnClickListener(new OnClickListener() {
     66             @Override
     67             public void onClick(View v) {
     68                 startDevicePickerActivity();
     69             }
     70         });
     71 
     72         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
     73         if (!mBluetoothAdapter.isEnabled()) {
     74             mPickServerButton.setEnabled(false);
     75             startEnableBluetoothActivity();
     76         }
     77     }
     78 
     79     private void startDevicePickerActivity() {
     80         Intent intent = new Intent(this, DevicePickerActivity.class);
     81         startActivityForResult(intent, PICK_SERVER_DEVICE_REQUEST);
     82     }
     83 
     84     private void startEnableBluetoothActivity() {
     85         Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
     86         startActivityForResult(intent, ENABLE_BLUETOOTH_REQUEST);
     87     }
     88 
     89     @Override
     90     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     91         super.onActivityResult(requestCode, resultCode, data);
     92         switch (requestCode) {
     93             case ENABLE_BLUETOOTH_REQUEST:
     94                 if (resultCode == RESULT_OK) {
     95                     mPickServerButton.setEnabled(true);
     96                 } else {
     97                     setResult(RESULT_CANCELED);
     98                     finish();
     99                 }
    100                 break;
    101 
    102             case PICK_SERVER_DEVICE_REQUEST:
    103                 if (resultCode == RESULT_OK) {
    104                     mDeviceAddress = data.getStringExtra(DevicePickerActivity.EXTRA_DEVICE_ADDRESS);
    105                     startChartService();
    106                 }
    107                 break;
    108         }
    109     }
    110 
    111     private void startChartService() {
    112         mChatService = new BluetoothChatService(this, new ChatHandler(),
    113                 BluetoothChatService.HANDSFREE_INSECURE_UUID);
    114         BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(mDeviceAddress);
    115         mChatService.connect(device, false);
    116     }
    117 
    118     private class ChatHandler extends Handler {
    119         @Override
    120         public void handleMessage(Message msg) {
    121             super.handleMessage(msg);
    122             switch (msg.what) {
    123                 case BluetoothChatService.MESSAGE_STATE_CHANGE:
    124                     handleStateChange(msg);
    125                     break;
    126 
    127                 case BluetoothChatService.MESSAGE_DEVICE_NAME:
    128                     handleDeviceName(msg);
    129                     break;
    130 
    131                 case BluetoothChatService.MESSAGE_TOAST:
    132                     handleToast(msg);
    133                     break;
    134             }
    135         }
    136     }
    137 
    138     private void handleStateChange(Message msg) {
    139         int state = msg.arg1;
    140         switch (state) {
    141             case BluetoothChatService.STATE_CONNECTING:
    142                 setProgressBarIndeterminateVisibility(true);
    143                 Toast.makeText(this, R.string.bt_connecting, Toast.LENGTH_SHORT).show();
    144                 break;
    145 
    146             case BluetoothChatService.STATE_CONNECTED:
    147                 setProgressBarIndeterminateVisibility(false);
    148                 Toast.makeText(this, R.string.bt_connected, Toast.LENGTH_SHORT).show();
    149                 break;
    150 
    151             case BluetoothChatService.STATE_NONE:
    152                 setProgressBarIndeterminateVisibility(false);
    153                 break;
    154         }
    155     }
    156 
    157     private void handleDeviceName(Message msg) {
    158         mDeviceAddress = msg.getData().getString(BluetoothChatService.DEVICE_NAME);
    159     }
    160 
    161     private void handleToast(Message msg) {
    162         String toast = msg.getData().getString(BluetoothChatService.TOAST);
    163         Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
    164     }
    165 }
    166