OSDN Git Service

Fix the display priority of the airplane mode icon.
authorMike Corrigan <michael.corrigan@motorola.com>
Thu, 24 Feb 2011 21:24:47 +0000 (15:24 -0600)
committerDaniel Sandler <dsandler@google.com>
Tue, 1 Mar 2011 18:20:07 +0000 (13:20 -0500)
The airplane icon is used as a fallback when no
other radios are available *and* the AIRPLANE_MODE_ON system
setting is set to 1. (NetworkController now tracks changes to
the setting via ACTION_AIRPLANE_MODE_CHANGED broadcasts.)

This fixes wifi-only devices, for which the previous logic
did not correctly and consistently detect airplane mode.

Bug: 3489820
Change-Id: I226bb0e977f6a5fd3f2d829ba51ca54c5c910ef3

packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java

index f2c838a..0dc7e8d 100644 (file)
@@ -98,6 +98,8 @@ public class NetworkController extends BroadcastReceiver {
     private int mInetCondition = 0;
     private static final int INET_CONDITION_THRESHOLD = 50;
 
+    private boolean mAirplaneMode = false;
+
     // our ui
     Context mContext;
     ArrayList<ImageView> mPhoneSignalIconViews = new ArrayList<ImageView>();
@@ -155,8 +157,12 @@ public class NetworkController extends BroadcastReceiver {
         filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
         filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
         filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
+        filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
         context.registerReceiver(this, filter);
 
+        // AIRPLANE_MODE_CHANGED is sent at boot; we've probably already missed it
+        updateAirplaneMode();
+
         // yuck
         mBatteryStats = BatteryStatsService.getService();
     }
@@ -212,6 +218,9 @@ public class NetworkController extends BroadcastReceiver {
             refreshViews();
         } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
             refreshViews();
+        } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
+            updateAirplaneMode();
+            refreshViews();
         }
     }
 
@@ -379,18 +388,16 @@ public class NetworkController extends BroadcastReceiver {
         return (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
     }
 
+    private void updateAirplaneMode() {
+        mAirplaneMode = (Settings.System.getInt(mContext.getContentResolver(),
+            Settings.System.AIRPLANE_MODE_ON, 0) == 1);
+    }
+
     private final void updateTelephonySignalStrength() {
-        // Display signal strength while in "emergency calls only" mode
-        if (mServiceState == null || (!hasService() && !mServiceState.isEmergencyOnly())) {
+        if (!hasService()) {
             //Slog.d(TAG, "updateTelephonySignalStrength: no service");
-            if (Settings.System.getInt(mContext.getContentResolver(),
-                    Settings.System.AIRPLANE_MODE_ON, 0) == 1) {
-                mPhoneSignalIconId = R.drawable.stat_sys_signal_flightmode;
-                mDataSignalIconId = R.drawable.stat_sys_signal_flightmode;
-            } else {
-                mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
-                mDataSignalIconId = R.drawable.stat_sys_signal_0; // note we use 0 instead of null
-            }
+            mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
+            mDataSignalIconId = R.drawable.stat_sys_signal_0; // note we use 0 instead of null
         } else {
             if (mSignalStrength == null) {
                 mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
@@ -734,6 +741,12 @@ public class NetworkController extends BroadcastReceiver {
             label = mContext.getString(R.string.bluetooth_tethered);
             combinedSignalIconId = mBluetoothTetherIconId;
             dataTypeIconId = 0;
+        } else if (mAirplaneMode &&
+                (mServiceState == null || (!hasService() && !mServiceState.isEmergencyOnly()))) {
+            // Only display the flight-mode icon if not in "emergency calls only" mode.
+            label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
+            combinedSignalIconId = R.drawable.stat_sys_signal_flightmode;
+            dataTypeIconId = 0;
         } else {
             label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
             // On devices without mobile radios, we want to show the wifi icon
@@ -747,6 +760,7 @@ public class NetworkController extends BroadcastReceiver {
                     + Integer.toHexString(combinedSignalIconId)
                     + "/" + getResourceName(combinedSignalIconId)
                     + " dataDirectionOverlayIconId=0x" + Integer.toHexString(dataDirectionOverlayIconId)
+                    + " mAirplaneMode=" + mAirplaneMode
                     + " mDataActivity=" + mDataActivity
                     + " mPhoneSignalIconId=0x" + Integer.toHexString(mPhoneSignalIconId)
                     + " mDataDirectionIconId=0x" + Integer.toHexString(mDataDirectionIconId)