SettingsAppWidgetProvider.java revision cd03f5320d42290b1619933954a344b59dc55f4f
103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff/* 203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Copyright (C) 2009 The Android Open Source Project 303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Licensed under the Apache License, Version 2.0 (the "License"); 503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * you may not use this file except in compliance with the License. 603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * You may obtain a copy of the License at 703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * http://www.apache.org/licenses/LICENSE-2.0 903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 1003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Unless required by applicable law or agreed to in writing, software 1103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * distributed under the License is distributed on an "AS IS" BASIS, 1203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * See the License for the specific language governing permissions and 1403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * limitations under the License. 1503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 1603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 1703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffpackage com.android.settings.widget; 1803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 1903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.app.PendingIntent; 2003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.appwidget.AppWidgetManager; 2103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.appwidget.AppWidgetProvider; 22d63c0112251ab4e4e977545368dd703d875012a4Nick Pellyimport android.bluetooth.BluetoothAdapter; 2303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.content.ComponentName; 2403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.content.ContentResolver; 2503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.content.Context; 2603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.content.IContentService; 2703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.content.Intent; 2803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.content.pm.PackageManager; 2903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.location.LocationManager; 3003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.net.ConnectivityManager; 3103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.net.Uri; 3203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.net.wifi.WifiManager; 33cd03f5320d42290b1619933954a344b59dc55f4fMike Lockwoodimport android.os.IPowerManager; 3403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.os.RemoteException; 3503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.os.ServiceManager; 3603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.provider.Settings; 3703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.util.Log; 3803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport android.widget.RemoteViews; 39e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriffimport android.widget.Toast; 4003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport com.android.settings.R; 4103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffimport com.android.settings.bluetooth.LocalBluetoothManager; 4203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 4303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff/** 4403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Provides control of power-related settings from a widget. 4503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 4603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriffpublic class SettingsAppWidgetProvider extends AppWidgetProvider { 4703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff static final String TAG = "SettingsAppWidgetProvider"; 4803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 4903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff static final ComponentName THIS_APPWIDGET = 5003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff new ComponentName("com.android.settings", 5103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff "com.android.settings.widget.SettingsAppWidgetProvider"); 5203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 5303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static LocalBluetoothManager mLocalBluetoothManager = null; 5403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 5503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int BUTTON_WIFI = 0; 5603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int BUTTON_BRIGHTNESS = 1; 5703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int BUTTON_SYNC = 2; 5803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int BUTTON_GPS = 3; 5903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int BUTTON_BLUETOOTH = 4; 6003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 6103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int STATE_DISABLED = 0; 6203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int STATE_ENABLED = 1; 6303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int STATE_INTERMEDIATE = 2; 6403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 6503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 6603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Minimum and maximum brightnesses. Don't go to 0 since that makes the display unusable 6703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 6803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10; 6903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON; 7003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static final int DEFAULT_BACKLIGHT = (int) (android.os.Power.BRIGHTNESS_ON * 0.4f); 7103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 7203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff @Override 7303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff public void onUpdate(Context context, AppWidgetManager appWidgetManager, 7403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff int[] appWidgetIds) { 7503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff // Update each requested appWidgetId 7603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff RemoteViews view = buildUpdate(context, -1); 7703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 7803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff for (int i = 0; i < appWidgetIds.length; i++) { 7903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff appWidgetManager.updateAppWidget(appWidgetIds[i], view); 8003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 8103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 8203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 8303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff @Override 8403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff public void onEnabled(Context context) { 8503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff PackageManager pm = context.getPackageManager(); 8603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff pm.setComponentEnabledSetting( 8703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"), 8803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 8903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff PackageManager.DONT_KILL_APP); 9003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 9103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 9203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff @Override 9303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff public void onDisabled(Context context) { 9403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Class clazz = com.android.settings.widget.SettingsAppWidgetProvider.class; 9503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff PackageManager pm = context.getPackageManager(); 9603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff pm.setComponentEnabledSetting( 9703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"), 9803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 9903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff PackageManager.DONT_KILL_APP); 10003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 10103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 10203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 10303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Load image for given widget and build {@link RemoteViews} for it. 10403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 10503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff static RemoteViews buildUpdate(Context context, int appWidgetId) { 10603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff RemoteViews views = new RemoteViews(context.getPackageName(), 10703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff R.layout.widget); 10803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setOnClickPendingIntent(R.id.btn_wifi, getLaunchPendingIntent(context, appWidgetId, 10903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff BUTTON_WIFI)); 11003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setOnClickPendingIntent(R.id.btn_brightness, 11103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff getLaunchPendingIntent(context, 11203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff appWidgetId, BUTTON_BRIGHTNESS)); 11303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setOnClickPendingIntent(R.id.btn_sync, 11403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff getLaunchPendingIntent(context, 11503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff appWidgetId, BUTTON_SYNC)); 11603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setOnClickPendingIntent(R.id.btn_gps, 11703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff getLaunchPendingIntent(context, appWidgetId, BUTTON_GPS)); 11803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setOnClickPendingIntent(R.id.btn_bluetooth, 11903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff getLaunchPendingIntent(context, 12003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff appWidgetId, BUTTON_BLUETOOTH)); 12103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 12203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff updateButtons(views, context); 12303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return views; 12403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 12503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 12603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 12703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Updates the widget when something changes, or when a button is pushed. 12803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 12903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 13003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 13103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff public static void updateWidget(Context context) { 13203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff RemoteViews views = buildUpdate(context, -1); 13303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff // Update specific list of appWidgetIds if given, otherwise default to all 13403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff final AppWidgetManager gm = AppWidgetManager.getInstance(context); 13503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff gm.updateAppWidget(THIS_APPWIDGET, views); 13603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 13703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 13803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 13903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Updates the buttons based on the underlying states of wifi, etc. 14003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 14103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param views The RemoteViews to update. 14203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 14303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 14403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static void updateButtons(RemoteViews views, Context context) { 14503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff switch (getWifiState(context)) { 14603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff case STATE_DISABLED: 14703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_wifi, R.drawable.widget_btn_wifi_off); 14803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff break; 14903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff case STATE_ENABLED: 15003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_wifi, R.drawable.widget_btn_wifi); 15103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff break; 15203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff case STATE_INTERMEDIATE: 15303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_wifi, R.drawable.widget_btn_wifi_gray); 15403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff break; 15503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 15603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (getBrightness(context)) { 15703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_brightness, R.drawable.widget_btn_brightness); 15803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else { 15903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_brightness, R.drawable.widget_btn_brightness_off); 16003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 16103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (getBackgroundDataState(context)) { 16203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_sync, R.drawable.widget_btn_sync); 16303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else { 16403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_sync, R.drawable.widget_btn_sync_off); 16503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 16603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (getGpsState(context)) { 16703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_gps, R.drawable.widget_btn_gps); 16803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else { 16903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_gps, R.drawable.widget_btn_gps_off); 17003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 17103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff switch (getBluetoothState(context)) { 17203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff case STATE_DISABLED: 17303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_bluetooth, R.drawable.widget_btn_bluetooth_off); 17403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff break; 17503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff case STATE_ENABLED: 17603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff views.setImageViewResource(R.id.btn_bluetooth, R.drawable.widget_btn_bluetooth); 17703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff break; 17803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff case STATE_INTERMEDIATE: 179e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff views.setImageViewResource(R.id.btn_bluetooth, 180e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff R.drawable.widget_btn_bluetooth_gray); 18103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff break; 18203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 18303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 18403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 18503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 18603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Creates PendingIntent to notify the widget of a button click. 18703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 18803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 18903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param appWidgetId 19003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @return 19103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 192e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff private static PendingIntent getLaunchPendingIntent(Context context, int appWidgetId, 193e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff int buttonId) { 19403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Intent launchIntent = new Intent(); 19503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff launchIntent.setClass(context, SettingsAppWidgetProvider.class); 19603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff launchIntent.addCategory(Intent.CATEGORY_ALTERNATIVE); 19703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff launchIntent.setData(Uri.parse("custom:" + buttonId)); 19803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff PendingIntent pi = PendingIntent.getBroadcast(context, 0 /* no requestCode */, 19903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff launchIntent, 0 /* no flags */); 20003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return pi; 20103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 20203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 20303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 20403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Receives and processes a button pressed intent or state change. 20503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 20603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 20703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param intent Indicates the pressed button. 20803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 20903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff @Override 21003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff public void onReceive(Context context, Intent intent) { 21103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff super.onReceive(context, intent); 21203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) { 21303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Uri data = intent.getData(); 21403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff int buttonId = Integer.parseInt(data.getSchemeSpecificPart()); 21503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (buttonId == BUTTON_WIFI) { 21603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff toggleWifi(context); 21703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else if (buttonId == BUTTON_BRIGHTNESS) { 21803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff toggleBrightness(context); 21903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else if (buttonId == BUTTON_SYNC) { 22003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff toggleBackgroundData(context); 22103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else if (buttonId == BUTTON_GPS) { 22203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff toggleGps(context); 22303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else if (buttonId == BUTTON_BLUETOOTH) { 22403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff toggleBluetooth(context); 22503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 22603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 22703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff // State changes fall through 22803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff updateWidget(context); 22903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 23003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 23103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 23203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Gets the state of Wi-Fi 23303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 23403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 23503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @return STATE_ENABLED, STATE_DISABLED, or STATE_INTERMEDIATE 23603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 23703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static int getWifiState(Context context) { 23803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 23903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff int wifiState = wifiManager.getWifiState(); 24003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (wifiState == WifiManager.WIFI_STATE_DISABLED) { 24103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return STATE_DISABLED; 24203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else if (wifiState == WifiManager.WIFI_STATE_ENABLED) { 24303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return STATE_ENABLED; 24403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else { 24503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return STATE_INTERMEDIATE; 24603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 24703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 24803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 24903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 25003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Toggles the state of Wi-Fi 25103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 25203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 25303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 25403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private void toggleWifi(Context context) { 25503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 25603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff int wifiState = getWifiState(context); 25703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (wifiState == STATE_ENABLED) { 25803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff wifiManager.setWifiEnabled(false); 25903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else if (wifiState == STATE_DISABLED) { 26003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff wifiManager.setWifiEnabled(true); 26103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 262e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff Toast.makeText(context, R.string.gadget_toggle_wifi, Toast.LENGTH_SHORT).show(); 26303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 26403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 26503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 26603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Gets the state of background data. 26703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 26803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 26903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @return true if enabled 27003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 27103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static boolean getBackgroundDataState(Context context) { 272e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff ConnectivityManager connManager = 273e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 27403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return connManager.getBackgroundDataSetting(); 27503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 27603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 27703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 27803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Toggle background data and sync tickles. 27903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 28003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 28103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 28203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private void toggleBackgroundData(Context context) { 283e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff ConnectivityManager connManager = 284e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 28503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff boolean sync = getBackgroundDataState(context); 28603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff connManager.setBackgroundDataSetting(!sync); 28731989d7994f863191301eac8154b4887b949b2caFred Quintana ContentResolver.setMasterSyncAutomatically(!sync); 28803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 28903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 29003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 29103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Gets the state of GPS location. 29203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 29303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 29403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @return true if enabled. 29503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 29603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static boolean getGpsState(Context context) { 29703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff ContentResolver resolver = context.getContentResolver(); 29803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return Settings.Secure.isLocationProviderEnabled(resolver, LocationManager.GPS_PROVIDER); 29903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 30003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 30103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 30203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Toggles the state of GPS. 30303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 30403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 30503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 30603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private void toggleGps(Context context) { 30703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff ContentResolver resolver = context.getContentResolver(); 30803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff boolean enabled = getGpsState(context); 309e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff Settings.Secure.setLocationProviderEnabled(resolver, LocationManager.GPS_PROVIDER, 310e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff !enabled); 31103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 31203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 31303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 31403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Gets state of brightness. 31503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 31603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 31703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @return true if more than moderately bright. 31803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 31903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static boolean getBrightness(Context context) { 32003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff try { 321cd03f5320d42290b1619933954a344b59dc55f4fMike Lockwood IPowerManager power = IPowerManager.Stub.asInterface( 322cd03f5320d42290b1619933954a344b59dc55f4fMike Lockwood ServiceManager.getService("power")); 323cd03f5320d42290b1619933954a344b59dc55f4fMike Lockwood if (power != null) { 32403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff int brightness = Settings.System.getInt(context.getContentResolver(), 32503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Settings.System.SCREEN_BRIGHTNESS); 32603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return brightness > 100; 32703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 32803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } catch (Exception e) { 32903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Log.d(TAG, "getBrightness: " + e); 33003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 33103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return false; 33203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 33303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 33403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 33503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Increases or decreases the brightness. 33603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 33703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 33803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 33903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private void toggleBrightness(Context context) { 34003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff try { 341cd03f5320d42290b1619933954a344b59dc55f4fMike Lockwood IPowerManager power = IPowerManager.Stub.asInterface( 342cd03f5320d42290b1619933954a344b59dc55f4fMike Lockwood ServiceManager.getService("power")); 343cd03f5320d42290b1619933954a344b59dc55f4fMike Lockwood if (power != null) { 34403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff ContentResolver cr = context.getContentResolver(); 34503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff int brightness = Settings.System.getInt(cr, 34603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Settings.System.SCREEN_BRIGHTNESS); 34703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff // Rotate MINIMUM -> DEFAULT -> MAXIMUM 34803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff // Technically, not a toggle... 34903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (brightness < DEFAULT_BACKLIGHT) { 35003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff brightness = DEFAULT_BACKLIGHT; 35103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else if (brightness < MAXIMUM_BACKLIGHT) { 35203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff brightness = MAXIMUM_BACKLIGHT; 35303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else { 35403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff brightness = MINIMUM_BACKLIGHT; 35503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 356cd03f5320d42290b1619933954a344b59dc55f4fMike Lockwood power.setBacklightBrightness(brightness); 35703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, brightness); 35803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff brightness = Settings.System.getInt(cr, 35903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Settings.System.SCREEN_BRIGHTNESS); 36003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 36103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } catch (RemoteException e) { 36203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Log.d(TAG, "toggleBrightness: " + e); 36303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } catch (Settings.SettingNotFoundException e) { 36403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff Log.d(TAG, "toggleBrightness: " + e); 36503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 36603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 36703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 36803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 36903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Gets state of bluetooth 37003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 37103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 37203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @return STATE_ENABLED, STATE_DISABLED, or STATE_INTERMEDIATE 37303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 37403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private static int getBluetoothState(Context context) { 37503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (mLocalBluetoothManager == null) { 37603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff mLocalBluetoothManager = LocalBluetoothManager.getInstance(context); 37703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (mLocalBluetoothManager == null) { 37803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return STATE_INTERMEDIATE; // On emulator? 37903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 38003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 38103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff int state = mLocalBluetoothManager.getBluetoothState(); 382ca564d6bdaa56fba60f499e092e1024fff5d1abaNick Pelly if (state == BluetoothAdapter.STATE_OFF) { 38303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return STATE_DISABLED; 384ca564d6bdaa56fba60f499e092e1024fff5d1abaNick Pelly } else if (state == BluetoothAdapter.STATE_ON) { 38503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return STATE_ENABLED; 38603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else { 38703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff return STATE_INTERMEDIATE; 38803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 38903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 39003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff 39103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff /** 39203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * Toggles the state of bluetooth 39303a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * 39403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff * @param context 39503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff */ 39603a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff private void toggleBluetooth(Context context) { 39703a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff int state = getBluetoothState(context); 39803a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff if (state == STATE_ENABLED) { 39903a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff mLocalBluetoothManager.setBluetoothEnabled(false); 40003a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } else if (state == STATE_DISABLED) { 40103a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff mLocalBluetoothManager.setBluetoothEnabled(true); 40203a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 403e936f5b386b39781e8f5e1ab423ebaf790dd9742Ken Shirriff Toast.makeText(context, R.string.gadget_toggle_bluetooth, Toast.LENGTH_SHORT).show(); 40403a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff } 40503a6110b4f62e72592b451c05848cfaad8c65324Ken Shirriff} 406