1436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby/* 2436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * Copyright (C) 2011 The Android Open Source Project 3436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * 4436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 5436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * you may not use this file except in compliance with the License. 6436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * You may obtain a copy of the License at 7436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * 8436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * http://www.apache.org/licenses/LICENSE-2.0 9436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * 10436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * Unless required by applicable law or agreed to in writing, software 11436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 12436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * See the License for the specific language governing permissions and 14436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * limitations under the License. 15436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby */ 16436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 17436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambypackage com.android.settings.bluetooth; 18436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 19436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambyimport android.app.AlertDialog; 20436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambyimport android.bluetooth.BluetoothProfile; 21436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambyimport android.content.Context; 22436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambyimport android.content.DialogInterface; 23436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambyimport android.widget.Toast; 24436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 25436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambyimport com.android.settings.R; 26f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monkimport com.android.settings.bluetooth.DockService.DockBluetoothCallback; 27689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWestimport com.android.settings.search.Index; 28689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWestimport com.android.settings.search.SearchIndexableRaw; 29f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monkimport com.android.settingslib.bluetooth.LocalBluetoothManager; 30f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monkimport com.android.settingslib.bluetooth.LocalBluetoothManager.BluetoothManagerCallback; 31f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monkimport com.android.settingslib.bluetooth.Utils.ErrorListener; 32436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 33436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby/** 34436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * Utils is a helper class that contains constants for various 35436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * Android resource IDs, debug logging flags, and static methods 36436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * for creating dialogs. 37436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby */ 38f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monkpublic final class Utils { 39f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk static final boolean V = com.android.settingslib.bluetooth.Utils.V; // verbose logging 40f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk static final boolean D = com.android.settingslib.bluetooth.Utils.D; // regular logging 41436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 42436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private Utils() { 43436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 44436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 45436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby public static int getConnectionStateSummary(int connectionState) { 46436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby switch (connectionState) { 47436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothProfile.STATE_CONNECTED: 48436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return R.string.bluetooth_connected; 49436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothProfile.STATE_CONNECTING: 50436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return R.string.bluetooth_connecting; 51436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothProfile.STATE_DISCONNECTED: 52436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return R.string.bluetooth_disconnected; 53436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothProfile.STATE_DISCONNECTING: 54436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return R.string.bluetooth_disconnecting; 55436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby default: 56436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return 0; 57436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 58436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 59436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 60436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // Create (or recycle existing) and show disconnect dialog. 61436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby static AlertDialog showDisconnectDialog(Context context, 62436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby AlertDialog dialog, 63436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby DialogInterface.OnClickListener disconnectListener, 64436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby CharSequence title, CharSequence message) { 65436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (dialog == null) { 66436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby dialog = new AlertDialog.Builder(context) 67436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby .setPositiveButton(android.R.string.ok, disconnectListener) 68436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby .setNegativeButton(android.R.string.cancel, null) 69436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby .create(); 70436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } else { 71436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (dialog.isShowing()) { 72436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby dialog.dismiss(); 73436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 74436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // use disconnectListener for the correct profile(s) 75436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby CharSequence okText = context.getText(android.R.string.ok); 76436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby dialog.setButton(DialogInterface.BUTTON_POSITIVE, 77436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby okText, disconnectListener); 78436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 79436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby dialog.setTitle(title); 80436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby dialog.setMessage(message); 81436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby dialog.show(); 82436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return dialog; 83436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 84436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 85436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // TODO: wire this up to show connection errors... 86436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby static void showConnectingError(Context context, String name) { 87436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // if (!mIsConnectingErrorPossible) { 88436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // return; 89436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // } 90436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // mIsConnectingErrorPossible = false; 91436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 92436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby showError(context, name, R.string.bluetooth_connecting_error_message); 93436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 94436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 95436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby static void showError(Context context, String name, int messageResId) { 96436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby String message = context.getString(messageResId, name); 97f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk LocalBluetoothManager manager = getLocalBtManager(context); 98bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim Context activity = manager.getForegroundActivity(); 99bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim if(manager.isForegroundActivity()) { 100bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim new AlertDialog.Builder(activity) 101436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby .setTitle(R.string.bluetooth_error_title) 102436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby .setMessage(message) 103436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby .setPositiveButton(android.R.string.ok, null) 104436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby .show(); 105bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim } else { 106bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 107bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim } 108436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 109689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest 110689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest /** 111689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest * Update the search Index for a specific class name and resources. 112689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest */ 113689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest public static void updateSearchIndex(Context context, String className, String title, 114689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest String screenTitle, int iconResId, boolean enabled) { 115689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest SearchIndexableRaw data = new SearchIndexableRaw(context); 116689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest data.className = className; 117689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest data.title = title; 118689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest data.screenTitle = screenTitle; 119689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest data.iconResId = iconResId; 120689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest data.enabled = enabled; 121689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest 122689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest Index.getInstance(context).updateFromSearchIndexableData(data); 123689d2ce29b3093c32d1d2b70caa6fb36a4ecefcbPauloftheWest } 124f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk 125f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk public static LocalBluetoothManager getLocalBtManager(Context context) { 126f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk return LocalBluetoothManager.getInstance(context, mOnInitCallback); 127f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk } 128f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk 129f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk private static final ErrorListener mErrorListener = new ErrorListener() { 130f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk @Override 131f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk public void onShowError(Context context, String name, int messageResId) { 132f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk showError(context, name, messageResId); 133f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk } 134f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk }; 135f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk 136f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk private static final BluetoothManagerCallback mOnInitCallback = new BluetoothManagerCallback() { 137f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk @Override 138f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk public void onBluetoothManagerInitialized(Context appContext, 139f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk LocalBluetoothManager bluetoothManager) { 140f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk bluetoothManager.getEventManager().registerCallback( 141f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk new DockBluetoothCallback(appContext)); 142f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk com.android.settingslib.bluetooth.Utils.setErrorListener(mErrorListener); 143f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk } 144f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk }; 145436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby} 146