Fix the display priority of the airplane mode icon.

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
This commit is contained in:
Mike Corrigan
2011-02-24 15:24:47 -06:00
committed by Daniel Sandler
parent 0eb6af8929
commit bd15112a29

View File

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