OSDN Git Service

Introduce half-brightness icon in Power Control widget.
authorAmith Yamasani <yamasani@google.com>
Mon, 3 Oct 2011 18:54:16 +0000 (11:54 -0700)
committerAmith Yamasani <yamasani@google.com>
Mon, 3 Oct 2011 22:22:04 +0000 (15:22 -0700)
Bug: 5358696
Change-Id: Iae484e786f4dd7a5e88078b69053f01425b79aef

AndroidManifest.xml
res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png [new file with mode: 0644]
res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png [new file with mode: 0644]
res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png [new file with mode: 0644]
src/com/android/settings/widget/SettingsAppWidgetProvider.java

index 71a2d7f..4bbb54a 100644 (file)
                 android:enabled="@bool/has_powercontrol_widget">
             <intent-filter>
                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
+                <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
+                <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
                 <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
                 <action android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" />
                 <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png
new file mode 100644 (file)
index 0000000..3a5a043
Binary files /dev/null and b/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png
new file mode 100644 (file)
index 0000000..fe043f5
Binary files /dev/null and b/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png
new file mode 100644 (file)
index 0000000..b6d238b
Binary files /dev/null and b/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png differ
index 656bf47..656d072 100644 (file)
@@ -100,6 +100,10 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
     private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10;
     private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON;
     private static final int DEFAULT_BACKLIGHT = (int) (android.os.Power.BRIGHTNESS_ON * 0.4f);
+    /** Minimum brightness at which the indicator is shown at half-full and ON */
+    private static final int HALF_BRIGHTNESS_THRESHOLD = (int) (0.3 * MAXIMUM_BACKLIGHT);
+    /** Minimum brightness at which the indicator is shown at full */
+    private static final int FULL_BRIGHTNESS_THRESHOLD = (int) (0.8 * MAXIMUM_BACKLIGHT);
 
     private static final StateTracker sWifiState = new WifiStateTracker();
     private static final StateTracker sBluetoothState = new BluetoothStateTracker();
@@ -580,6 +584,14 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
         }
     }
 
+    private static void checkObserver(Context context) {
+        if (sSettingsObserver == null) {
+            sSettingsObserver = new SettingsObserver(new Handler(),
+                    context.getApplicationContext());
+            sSettingsObserver.startObserving();
+        }
+    }
+
     @Override
     public void onUpdate(Context context, AppWidgetManager appWidgetManager,
             int[] appWidgetIds) {
@@ -598,11 +610,7 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
                 new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"),
                 PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                 PackageManager.DONT_KILL_APP);
-        if (sSettingsObserver == null) {
-            sSettingsObserver = new SettingsObserver(new Handler(),
-                    context.getApplicationContext());
-            sSettingsObserver.startObserving();
-        }
+        checkObserver(context);
     }
 
     @Override
@@ -653,6 +661,7 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
         // Update specific list of appWidgetIds if given, otherwise default to all
         final AppWidgetManager gm = AppWidgetManager.getInstance(context);
         gm.updateAppWidget(THIS_APPWIDGET, views);
+        checkObserver(context);
     }
 
     /**
@@ -669,19 +678,30 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
 
         if (getBrightnessMode(context)) {
             views.setImageViewResource(R.id.img_brightness,
-                                       R.drawable.ic_appwidget_settings_brightness_auto_holo);
-            views.setImageViewResource(R.id.ind_brightness,
-                                       R.drawable.appwidget_settings_ind_on_r_holo);
-        } else if (getBrightness(context)) {
-            views.setImageViewResource(R.id.img_brightness,
-                                       R.drawable.ic_appwidget_settings_brightness_full_holo);
+                    R.drawable.ic_appwidget_settings_brightness_auto_holo);
             views.setImageViewResource(R.id.ind_brightness,
-                                       R.drawable.appwidget_settings_ind_on_r_holo);
+                    R.drawable.appwidget_settings_ind_on_r_holo);
         } else {
-            views.setImageViewResource(R.id.img_brightness,
-                                       R.drawable.ic_appwidget_settings_brightness_off_holo);
-            views.setImageViewResource(R.id.ind_brightness,
-                                       R.drawable.appwidget_settings_ind_off_r_holo);
+            final int brightness = getBrightness(context);
+            // Set the icon
+            if (brightness > FULL_BRIGHTNESS_THRESHOLD) {
+                views.setImageViewResource(R.id.img_brightness,
+                        R.drawable.ic_appwidget_settings_brightness_full_holo);
+            } else if (brightness > HALF_BRIGHTNESS_THRESHOLD) {
+                views.setImageViewResource(R.id.img_brightness,
+                        R.drawable.ic_appwidget_settings_brightness_half_holo);
+            } else {
+                views.setImageViewResource(R.id.img_brightness,
+                        R.drawable.ic_appwidget_settings_brightness_off_holo);
+            }
+            // Set the ON state
+            if (brightness > HALF_BRIGHTNESS_THRESHOLD) {
+                views.setImageViewResource(R.id.ind_brightness,
+                        R.drawable.appwidget_settings_ind_on_r_holo);
+            } else {
+                views.setImageViewResource(R.id.ind_brightness,
+                        R.drawable.appwidget_settings_ind_off_r_holo);
+            }
         }
     }
 
@@ -747,24 +767,23 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
     }
 
     /**
-     * Gets state of brightness.
+     * Gets brightness level.
      *
      * @param context
-     * @return true if more than moderately bright.
+     * @return brightness level between 0 and 255.
      */
-    private static boolean getBrightness(Context context) {
+    private static int getBrightness(Context context) {
         try {
             IPowerManager power = IPowerManager.Stub.asInterface(
                     ServiceManager.getService("power"));
             if (power != null) {
                 int brightness = Settings.System.getInt(context.getContentResolver(),
                         Settings.System.SCREEN_BRIGHTNESS);
-                return brightness > 100;
+                return brightness;
             }
         } catch (Exception e) {
-            Log.d(TAG, "getBrightness: " + e);
         }
-        return false;
+        return 0;
     }
 
     /**