diff options
Diffstat (limited to 'packages/SystemUI/src/com')
3 files changed, 139 insertions, 73 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index 325a605..65b022a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -18,6 +18,7 @@ package com.android.systemui.statusbar; import android.content.Context; import android.util.AttributeSet; +import android.util.Slog; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -32,8 +33,16 @@ public class SignalClusterView extends LinearLayout implements NetworkController.SignalCluster { + static final boolean DEBUG = false; + static final String TAG = "SignalClusterView"; + NetworkController mNC; + private boolean mWifiVisible = false; + private int mWifiStrengthId = 0, mWifiActivityId = 0; + private boolean mMobileVisible = false; + private int mMobileStrengthId = 0, mMobileActivityId = 0, mMobileTypeId = 0; + ViewGroup mWifiGroup, mMobileGroup; ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType; @@ -50,6 +59,7 @@ public class SignalClusterView } public void setNetworkController(NetworkController nc) { + if (DEBUG) Slog.d(TAG, "NetworkController=" + nc); mNC = nc; } @@ -64,37 +74,74 @@ public class SignalClusterView mMobile = (ImageView) findViewById(R.id.mobile_signal); mMobileActivity = (ImageView) findViewById(R.id.mobile_inout); mMobileType = (ImageView) findViewById(R.id.mobile_type); + + apply(); } @Override protected void onDetachedFromWindow() { + mWifiGroup = null; + mWifi = null; + mWifiActivity = null; + mMobileGroup = null; + mMobile = null; + mMobileActivity = null; + mMobileType = null; + super.onDetachedFromWindow(); } public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon) { + mWifiVisible = visible; + mWifiStrengthId = strengthIcon; + mWifiActivityId = activityIcon; + + apply(); + } + + public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon, + int typeIcon) { + mMobileVisible = visible; + mMobileStrengthId = strengthIcon; + mMobileActivityId = activityIcon; + mMobileTypeId = typeIcon; + + apply(); + } + + // Run after each indicator change. + private void apply() { if (mWifiGroup == null) return; - if (visible) { + if (mWifiVisible) { mWifiGroup.setVisibility(View.VISIBLE); - mWifi.setImageResource(strengthIcon); - mWifiActivity.setImageResource(activityIcon); + mWifi.setImageResource(mWifiStrengthId); + mWifiActivity.setImageResource(mWifiActivityId); } else { mWifiGroup.setVisibility(View.GONE); } - } - public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon, - int typeIcon) { - if (mMobileGroup == null) return; + if (DEBUG) Slog.d(TAG, + String.format("wifi: %s sig=%d act=%d", + (mWifiVisible ? "VISIBLE" : "GONE"), + mWifiStrengthId, mWifiActivityId)); - if (visible) { + if (mMobileVisible) { mMobileGroup.setVisibility(View.VISIBLE); - mMobile.setImageResource(strengthIcon); - mMobileActivity.setImageResource(activityIcon); - mMobileType.setImageResource(typeIcon); + mMobile.setImageResource(mMobileStrengthId); + mMobileActivity.setImageResource(mMobileActivityId); + mMobileType.setImageResource(mMobileTypeId); } else { mMobileGroup.setVisibility(View.GONE); } + + if (DEBUG) Slog.d(TAG, + String.format("mobile: %s sig=%d act=%d typ=%d", + (mMobileVisible ? "VISIBLE" : "GONE"), + mMobileStrengthId, mMobileActivityId, mMobileTypeId)); + + mMobileType.setVisibility( + !mWifiVisible ? View.VISIBLE : View.GONE); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 81c25e0..71cbc61 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -348,6 +348,7 @@ public class PhoneStatusBar extends StatusBar { final SignalClusterView signalCluster = (SignalClusterView)sb.findViewById(R.id.signal_cluster); mNetworkController.addSignalCluster(signalCluster); + signalCluster.setNetworkController(mNetworkController); // Recents Panel updateRecentsPanel(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index 1a24d05..16db1d7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -79,11 +79,11 @@ public class NetworkController extends BroadcastReceiver { String mNetworkNameDefault; String mNetworkNameSeparator; int mPhoneSignalIconId; - int mDataDirectionIconId; - int mDataDirectionOverlayIconId; + int mDataDirectionIconId; // data + data direction on phones int mDataSignalIconId; int mDataTypeIconId; boolean mDataActive; + int mMobileActivityIconId; // overlay arrows for data direction String mContentDescriptionPhoneSignal; String mContentDescriptionWifi; @@ -97,6 +97,7 @@ public class NetworkController extends BroadcastReceiver { int mWifiLevel; String mWifiSsid; int mWifiIconId = 0; + int mWifiActivityIconId = 0; // overlay arrows for wifi direction int mWifiActivity = WifiManager.DATA_ACTIVITY_NONE; // bluetooth @@ -221,8 +222,17 @@ public class NetworkController extends BroadcastReceiver { mLabelViews.add(v); } - public void addSignalCluster(SignalCluster v) { - mSignalClusters.add(v); + public void addSignalCluster(SignalCluster cluster) { + mSignalClusters.add(cluster); + cluster.setWifiIndicators( + mWifiEnabled, + mWifiIconId, + mWifiActivityIconId); + cluster.setMobileDataIndicators( + hasMobileDataFeature(), + mPhoneSignalIconId, + mMobileActivityIconId, + mDataTypeIconId); } public void setStackedMode(boolean stacked) { @@ -670,7 +680,7 @@ public class NetworkController extends BroadcastReceiver { if (mDataAndWifiStacked) { mWifiIconId = 0; } else { - mWifiIconId = WifiIcons.WIFI_SIGNAL_STRENGTH[0][0]; + mWifiIconId = mWifiEnabled ? WifiIcons.WIFI_SIGNAL_STRENGTH[0][0] : 0; } mContentDescriptionWifi = mContext.getString(R.string.accessibility_no_wifi); } @@ -735,85 +745,93 @@ public class NetworkController extends BroadcastReceiver { // ===== Update the views ======================================================= - // figure out what to show- there should be one connected network or nothing - // General order of preference is: wifi, 3G than bluetooth. This might vary by product. void refreshViews() { Context context = mContext; - int combinedSignalIconId; - int dataDirectionOverlayIconId = 0, - wifiActivityIconId = 0, - mobileActivityIconId = 0; - int dataTypeIconId; - String label; + int combinedSignalIconId = 0; + int combinedActivityIconId = 0; + String label = ""; int N; + if (mDataConnected) { + label = mNetworkName; + combinedSignalIconId = mDataSignalIconId; + switch (mDataActivity) { + case TelephonyManager.DATA_ACTIVITY_IN: + mMobileActivityIconId = R.drawable.stat_sys_signal_in; + break; + case TelephonyManager.DATA_ACTIVITY_OUT: + mMobileActivityIconId = R.drawable.stat_sys_signal_out; + break; + case TelephonyManager.DATA_ACTIVITY_INOUT: + mMobileActivityIconId = R.drawable.stat_sys_signal_inout; + break; + default: + mMobileActivityIconId = 0; + break; + } + + combinedActivityIconId = mMobileActivityIconId; + combinedSignalIconId = mDataSignalIconId; // set by updateDataIcon() + mContentDescriptionCombinedSignal = mContentDescriptionDataType; + } + if (mWifiConnected) { if (mWifiSsid == null) { label = context.getString(R.string.status_bar_settings_signal_meter_wifi_nossid); + mWifiActivityIconId = 0; // no wifis, no bits } else { label = mWifiSsid; switch (mWifiActivity) { case WifiManager.DATA_ACTIVITY_IN: - dataDirectionOverlayIconId = R.drawable.stat_sys_wifi_in; + mWifiActivityIconId = R.drawable.stat_sys_wifi_in; break; case WifiManager.DATA_ACTIVITY_OUT: - dataDirectionOverlayIconId = R.drawable.stat_sys_wifi_out; + mWifiActivityIconId = R.drawable.stat_sys_wifi_out; break; case WifiManager.DATA_ACTIVITY_INOUT: - dataDirectionOverlayIconId = R.drawable.stat_sys_wifi_inout; + mWifiActivityIconId = R.drawable.stat_sys_wifi_inout; break; case WifiManager.DATA_ACTIVITY_NONE: break; } - wifiActivityIconId = dataDirectionOverlayIconId; } - combinedSignalIconId = mWifiIconId; + + combinedActivityIconId = mWifiActivityIconId; + combinedSignalIconId = mWifiIconId; // set by updateWifiIcons() mContentDescriptionCombinedSignal = mContentDescriptionWifi; - dataTypeIconId = 0; - } else if (mDataConnected) { - label = mNetworkName; - combinedSignalIconId = mDataSignalIconId; - switch (mDataActivity) { - case TelephonyManager.DATA_ACTIVITY_IN: - dataDirectionOverlayIconId = R.drawable.stat_sys_signal_in; - break; - case TelephonyManager.DATA_ACTIVITY_OUT: - dataDirectionOverlayIconId = R.drawable.stat_sys_signal_out; - break; - case TelephonyManager.DATA_ACTIVITY_INOUT: - dataDirectionOverlayIconId = R.drawable.stat_sys_signal_inout; - break; - default: - dataDirectionOverlayIconId = 0; - break; - } - mobileActivityIconId = dataDirectionOverlayIconId; - combinedSignalIconId = mDataSignalIconId; - mContentDescriptionCombinedSignal = mContentDescriptionDataType; - dataTypeIconId = mDataTypeIconId; - } else if (mBluetoothTethered) { + } + + if (mBluetoothTethered) { label = mContext.getString(R.string.bluetooth_tethered); combinedSignalIconId = mBluetoothTetherIconId; mContentDescriptionCombinedSignal = mContext.getString( R.string.accessibility_bluetooth_tether); - dataTypeIconId = 0; - } else if (mAirplaneMode && + } + + 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; mContentDescriptionCombinedSignal = mContext.getString( R.string.accessibility_airplane_mode); - dataTypeIconId = R.drawable.stat_sys_signal_flightmode; // was 0; - } else { + + // look again; your radios are now airplanes + mPhoneSignalIconId = mDataSignalIconId = R.drawable.stat_sys_signal_flightmode; + mDataTypeIconId = 0; + + combinedSignalIconId = mDataSignalIconId; + } + else if (!mDataConnected && !mWifiConnected && !mBluetoothTethered) { + // pretty much totally disconnected + label = context.getString(R.string.status_bar_settings_signal_meter_disconnected); // On devices without mobile radios, we want to show the wifi icon combinedSignalIconId = hasMobileDataFeature() ? mDataSignalIconId : mWifiIconId; mContentDescriptionCombinedSignal = hasMobileDataFeature() ? mContentDescriptionDataType : mContentDescriptionWifi; - dataTypeIconId = 0; + mDataTypeIconId = 0; } if (DEBUG) { @@ -825,7 +843,7 @@ public class NetworkController extends BroadcastReceiver { + " combinedSignalIconId=0x" + Integer.toHexString(combinedSignalIconId) + "/" + getResourceName(combinedSignalIconId) - + " dataDirectionOverlayIconId=0x" + Integer.toHexString(dataDirectionOverlayIconId) + + " combinedActivityIconId=0x" + Integer.toHexString(combinedActivityIconId) + " mAirplaneMode=" + mAirplaneMode + " mDataActivity=" + mDataActivity + " mPhoneSignalIconId=0x" + Integer.toHexString(mPhoneSignalIconId) @@ -837,21 +855,21 @@ public class NetworkController extends BroadcastReceiver { } if (mLastPhoneSignalIconId != mPhoneSignalIconId - || mLastDataDirectionOverlayIconId != dataDirectionOverlayIconId + || mLastDataDirectionOverlayIconId != combinedActivityIconId || mLastWifiIconId != mWifiIconId - || mLastDataTypeIconId != dataTypeIconId) + || mLastDataTypeIconId != mDataTypeIconId) { // NB: the mLast*s will be updated later for (SignalCluster cluster : mSignalClusters) { cluster.setWifiIndicators( mWifiEnabled, mWifiIconId, - wifiActivityIconId); + mWifiActivityIconId); cluster.setMobileDataIndicators( hasMobileDataFeature(), mPhoneSignalIconId, - mobileActivityIconId, - dataTypeIconId); + mMobileActivityIconId, + mDataTypeIconId); } } @@ -905,35 +923,35 @@ public class NetworkController extends BroadcastReceiver { } // the data network type overlay - if (mLastDataTypeIconId != dataTypeIconId) { - mLastDataTypeIconId = dataTypeIconId; + if (mLastDataTypeIconId != mDataTypeIconId) { + mLastDataTypeIconId = mDataTypeIconId; N = mDataTypeIconViews.size(); for (int i=0; i<N; i++) { final ImageView v = mDataTypeIconViews.get(i); - if (dataTypeIconId == 0) { + if (mDataTypeIconId == 0) { v.setVisibility(View.INVISIBLE); } else { v.setVisibility(View.VISIBLE); - v.setImageResource(dataTypeIconId); + v.setImageResource(mDataTypeIconId); v.setContentDescription(mContentDescriptionDataType); } } } // the data direction overlay - if (mLastDataDirectionOverlayIconId != dataDirectionOverlayIconId) { + if (mLastDataDirectionOverlayIconId != combinedActivityIconId) { if (DEBUG) { - Slog.d(TAG, "changing data overlay icon id to " + dataDirectionOverlayIconId); + Slog.d(TAG, "changing data overlay icon id to " + combinedActivityIconId); } - mLastDataDirectionOverlayIconId = dataDirectionOverlayIconId; + mLastDataDirectionOverlayIconId = combinedActivityIconId; N = mDataDirectionOverlayIconViews.size(); for (int i=0; i<N; i++) { final ImageView v = mDataDirectionOverlayIconViews.get(i); - if (dataDirectionOverlayIconId == 0) { + if (combinedActivityIconId == 0) { v.setVisibility(View.INVISIBLE); } else { v.setVisibility(View.VISIBLE); - v.setImageResource(dataDirectionOverlayIconId); + v.setImageResource(combinedActivityIconId); v.setContentDescription(mContentDescriptionDataType); } } |