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.app.AlertDialog; 23 import android.app.ProgressDialog; 24 import android.bluetooth.BluetoothAdapter; 25 import android.content.BroadcastReceiver; 26 import android.content.Context; 27 import android.content.Intent; 28 import android.content.IntentFilter; 29 import android.os.Bundle; 30 import android.util.Log; 31 import android.view.View; 32 import android.view.View.OnClickListener; 33 import android.widget.ToggleButton; 34 35 /** 36 * Activity for testing that Bluetooth can be disabled and enabled properly. The activity shows 37 * a button that toggles Bluetooth by disabling it via {@link BluetoothAdapter#disable()} and 38 * enabling it via the Intent action {@link BluetoothAdapter#ACTION_REQUEST_ENABLE}. 39 */ 40 public class BluetoothToggleActivity extends PassFailButtons.Activity { 41 42 private static final String TAG = BluetoothToggleActivity.class.getName(); 43 44 private static final int START_ENABLE_BLUETOOTH_REQUEST = 1; 45 46 private BluetoothAdapter mBluetoothAdapter; 47 48 private BluetoothBroadcastReceiver mReceiver; 49 50 private ProgressDialog mDisablingDialog; 51 52 private ToggleButton mToggleButton; 53 54 private int mNumDisabledTimes = 0; 55 56 private int mNumEnabledTimes = 0; 57 58 @Override 59 protected void onCreate(Bundle savedInstanceState) { 60 super.onCreate(savedInstanceState); 61 setContentView(R.layout.bt_toggle); 62 setPassFailButtonClickListeners(); 63 64 mReceiver = new BluetoothBroadcastReceiver(); 65 IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); 66 registerReceiver(mReceiver, filter); 67 68 mDisablingDialog = new ProgressDialog(this); 69 mDisablingDialog.setMessage(getString(R.string.bt_disabling)); 70 71 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 72 73 getPassButton().setEnabled(false); 74 75 mToggleButton = (ToggleButton) findViewById(R.id.bt_toggle_button); 76 mToggleButton.setChecked(mBluetoothAdapter.isEnabled()); 77 mToggleButton.setOnClickListener(new OnClickListener() { 78 @Override 79 public void onClick(View v) { 80 if (mToggleButton.isChecked()) { 81 enableBluetooth(); 82 } else { 83 disableBluetooth(); 84 } 85 } 86 }); 87 } 88 89 private void enableBluetooth() { 90 mDisablingDialog.dismiss(); 91 mToggleButton.setEnabled(false); 92 Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 93 startActivityForResult(intent, START_ENABLE_BLUETOOTH_REQUEST); 94 } 95 96 @Override 97 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 98 super.onActivityResult(requestCode, resultCode, data); 99 switch (requestCode) { 100 case START_ENABLE_BLUETOOTH_REQUEST: 101 boolean enabledBluetooth = RESULT_OK == resultCode; 102 mToggleButton.setChecked(enabledBluetooth); 103 mToggleButton.setEnabled(true); 104 break; 105 } 106 } 107 108 private void disableBluetooth() { 109 mDisablingDialog.show(); 110 mToggleButton.setEnabled(false); 111 if (!mBluetoothAdapter.disable()) { 112 mDisablingDialog.dismiss(); 113 mToggleButton.setEnabled(true); 114 new AlertDialog.Builder(this) 115 .setIcon(android.R.drawable.ic_dialog_alert) 116 .setMessage(R.string.bt_disabling_error) 117 .setPositiveButton(android.R.string.ok, null) 118 .show(); 119 } 120 } 121 122 class BluetoothBroadcastReceiver extends BroadcastReceiver { 123 @Override 124 public void onReceive(Context context, Intent intent) { 125 int previousState = intent.getIntExtra(BluetoothAdapter.EXTRA_PREVIOUS_STATE, -1); 126 int newState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); 127 Log.i(TAG, "Previous state: " + previousState + " New state: " + newState); 128 129 if (BluetoothAdapter.STATE_OFF == newState 130 && (BluetoothAdapter.STATE_ON == previousState 131 || BluetoothAdapter.STATE_TURNING_OFF == previousState)) { 132 mNumDisabledTimes++; 133 } 134 135 if (BluetoothAdapter.STATE_ON == newState 136 && (BluetoothAdapter.STATE_OFF == previousState 137 || BluetoothAdapter.STATE_TURNING_ON == previousState)) { 138 mNumEnabledTimes++; 139 } 140 141 if (BluetoothAdapter.STATE_OFF == newState) { 142 mDisablingDialog.dismiss(); 143 mToggleButton.setEnabled(true); 144 } 145 146 mToggleButton.setChecked(mBluetoothAdapter.isEnabled()); 147 getPassButton().setEnabled(mNumDisabledTimes > 0 && mNumEnabledTimes > 0); 148 } 149 } 150 151 @Override 152 protected void onDestroy() { 153 super.onDestroy(); 154 unregisterReceiver(mReceiver); 155 } 156 } 157