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