Merge commit 'f9ca318a3d2aceaf5c9e54610073a9017442be9b' into HEAD
diff --git a/res/layout/preference_linearcolor.xml b/res/layout/preference_linearcolor.xml
index d3a2603..754558d 100644
--- a/res/layout/preference_linearcolor.xml
+++ b/res/layout/preference_linearcolor.xml
@@ -19,7 +19,7 @@
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingEnd="?android:attr/scrollbarSize">
<com.android.settings.applications.LinearColorBar
- android:id="@+android:id/linear_color_bar"
+ android:id="@+id/linear_color_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index a8d0e8f..b9e729c 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -345,9 +345,7 @@
* @param context the application context
* @return the formatted and newline-separated IP addresses, or null if none.
*/
- public static String getDefaultIpAddresses(Context context) {
- ConnectivityManager cm = (ConnectivityManager)
- context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ public static String getDefaultIpAddresses(ConnectivityManager cm) {
LinkProperties prop = cm.getActiveLinkProperties();
return formatIpAddresses(prop);
}
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index aa10c9e..0a1dcb1 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -1085,6 +1085,7 @@
mOptionsMenu.findItem(SHOW_RUNNING_SERVICES).setVisible(showingBackground);
mOptionsMenu.findItem(SHOW_BACKGROUND_PROCESSES).setVisible(!showingBackground);
mOptionsMenu.findItem(RESET_APP_PREFERENCES).setVisible(false);
+ mShowBackground = showingBackground;
} else {
mOptionsMenu.findItem(SORT_ORDER_ALPHA).setVisible(mSortOrder != SORT_ORDER_ALPHA);
mOptionsMenu.findItem(SORT_ORDER_SIZE).setVisible(mSortOrder != SORT_ORDER_SIZE);
diff --git a/src/com/android/settings/applications/RunningProcessesView.java b/src/com/android/settings/applications/RunningProcessesView.java
index 52c4841..8eb0496 100644
--- a/src/com/android/settings/applications/RunningProcessesView.java
+++ b/src/com/android/settings/applications/RunningProcessesView.java
@@ -434,6 +434,9 @@
@Override
public void onClick(View v) {
mAdapter.setShowBackground(true);
+ if (mOwner != null) {
+ mOwner.getActivity().invalidateOptionsMenu();
+ }
}
});
mForegroundProcessText = (TextView)findViewById(R.id.foregroundText);
@@ -441,6 +444,9 @@
@Override
public void onClick(View v) {
mAdapter.setShowBackground(false);
+ if (mOwner != null) {
+ mOwner.getActivity().invalidateOptionsMenu();
+ }
}
});
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
index 6a15027..b27b241 100644
--- a/src/com/android/settings/deviceinfo/Status.java
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -47,6 +47,7 @@
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.PhoneStateIntentReceiver;
+import com.android.internal.util.ArrayUtils;
import com.android.settings.R;
import com.android.settings.Utils;
@@ -117,23 +118,41 @@
static final String CB_AREA_INFO_SENDER_PERMISSION =
"android.permission.RECEIVE_EMERGENCY_BROADCAST";
+ // Broadcasts to listen to for connectivity changes.
+ private static final String[] CONNECTIVITY_INTENTS = {
+ BluetoothAdapter.ACTION_STATE_CHANGED,
+ ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE,
+ WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
+ WifiManager.NETWORK_STATE_CHANGED_ACTION,
+ };
+
private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200;
private static final int EVENT_SERVICE_STATE_CHANGED = 300;
private static final int EVENT_UPDATE_STATS = 500;
+ private static final int EVENT_UPDATE_CONNECTIVITY = 600;
+
+ private ConnectivityManager mCM;
private TelephonyManager mTelephonyManager;
+ private WifiManager mWifiManager;
+
private Phone mPhone = null;
private PhoneStateIntentReceiver mPhoneStateReceiver;
private Resources mRes;
- private Preference mSignalStrength;
- private Preference mUptime;
private boolean mShowLatestAreaInfo;
- private String sUnknown;
+ private String mUnknown;
+ private String mUnavailable;
+ private Preference mSignalStrength;
+ private Preference mUptime;
private Preference mBatteryStatus;
private Preference mBatteryLevel;
+ private Preference mBtAddress;
+ private Preference mIpAddress;
+ private Preference mWifiMacAddress;
+ private Preference mWimaxMacAddress;
private Handler mHandler;
@@ -165,6 +184,10 @@
status.updateTimes();
sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);
break;
+
+ case EVENT_UPDATE_CONNECTIVITY:
+ status.updateConnectivity();
+ break;
}
}
}
@@ -207,20 +230,47 @@
}
};
+ private IntentFilter mConnectivityIntentFilter;
+ private final BroadcastReceiver mConnectivityReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (ArrayUtils.contains(CONNECTIVITY_INTENTS, action)) {
+ mHandler.sendEmptyMessage(EVENT_UPDATE_CONNECTIVITY);
+ }
+ }
+ };
+
+ private boolean hasBluetooth() {
+ return BluetoothAdapter.getDefaultAdapter() != null;
+ }
+
+ private boolean hasWimax() {
+ return mCM.getNetworkInfo(ConnectivityManager.TYPE_WIMAX) != null;
+ }
+
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
mHandler = new MyHandler(this);
+ mCM = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
+ mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
addPreferencesFromResource(R.xml.device_info_status);
mBatteryLevel = findPreference(KEY_BATTERY_LEVEL);
mBatteryStatus = findPreference(KEY_BATTERY_STATUS);
+ mBtAddress = findPreference(KEY_BT_ADDRESS);
+ mWifiMacAddress = findPreference(KEY_WIFI_MAC_ADDRESS);
+ mWimaxMacAddress = findPreference(KEY_WIMAX_MAC_ADDRESS);
+ mIpAddress = findPreference(KEY_IP_ADDRESS);
mRes = getResources();
- sUnknown = mRes.getString(R.string.device_info_default);
+ mUnknown = mRes.getString(R.string.device_info_default);
+ mUnavailable = mRes.getString(R.string.status_unavailable);
+
if (UserHandle.myUserId() == UserHandle.USER_OWNER) {
mPhone = PhoneFactory.getDefaultPhone();
}
@@ -291,10 +341,22 @@
}
}
- setWimaxStatus();
- setWifiStatus();
- setBtStatus();
- setIpAddressStatus();
+ if (!hasBluetooth()) {
+ getPreferenceScreen().removePreference(mBtAddress);
+ mBtAddress = null;
+ }
+
+ if (!hasWimax()) {
+ getPreferenceScreen().removePreference(mWimaxMacAddress);
+ mWimaxMacAddress = null;
+ }
+
+ mConnectivityIntentFilter = new IntentFilter();
+ for (String intent: CONNECTIVITY_INTENTS) {
+ mConnectivityIntentFilter.addAction(intent);
+ }
+
+ updateConnectivity();
String serial = Build.SERIAL;
if (serial != null && !serial.equals("")) {
@@ -325,6 +387,8 @@
CB_AREA_INFO_SENDER_PERMISSION);
}
}
+ registerReceiver(mConnectivityReceiver, mConnectivityIntentFilter,
+ android.Manifest.permission.CHANGE_NETWORK_STATE, null);
registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);
}
@@ -341,6 +405,7 @@
unregisterReceiver(mAreaInfoReceiver);
}
unregisterReceiver(mBatteryInfoReceiver);
+ unregisterReceiver(mConnectivityReceiver);
mHandler.removeMessages(EVENT_UPDATE_STATS);
}
@@ -371,7 +436,7 @@
private void setSummaryText(String preference, String text) {
if (TextUtils.isEmpty(text)) {
- text = sUnknown;
+ text = mUnknown;
}
// some preferences may be missing
if (findPreference(preference) != null) {
@@ -474,55 +539,47 @@
}
private void setWimaxStatus() {
- ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
- NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIMAX);
-
- if (ni == null) {
- PreferenceScreen root = getPreferenceScreen();
- Preference ps = (Preference) findPreference(KEY_WIMAX_MAC_ADDRESS);
- if (ps != null) root.removePreference(ps);
- } else {
- Preference wimaxMacAddressPref = findPreference(KEY_WIMAX_MAC_ADDRESS);
- String macAddress = SystemProperties.get("net.wimax.mac.address",
- getString(R.string.status_unavailable));
- wimaxMacAddressPref.setSummary(macAddress);
+ if (mWimaxMacAddress != null) {
+ String macAddress = SystemProperties.get("net.wimax.mac.address", mUnavailable);
+ mWimaxMacAddress.setSummary(macAddress);
}
}
+
private void setWifiStatus() {
- WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
- WifiInfo wifiInfo = wifiManager.getConnectionInfo();
-
- Preference wifiMacAddressPref = findPreference(KEY_WIFI_MAC_ADDRESS);
-
+ WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
- wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress
- : getString(R.string.status_unavailable));
+ mWifiMacAddress.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress : mUnavailable);
}
private void setIpAddressStatus() {
- Preference ipAddressPref = findPreference(KEY_IP_ADDRESS);
- String ipAddress = Utils.getDefaultIpAddresses(this);
+ String ipAddress = Utils.getDefaultIpAddresses(this.mCM);
if (ipAddress != null) {
- ipAddressPref.setSummary(ipAddress);
+ mIpAddress.setSummary(ipAddress);
} else {
- ipAddressPref.setSummary(getString(R.string.status_unavailable));
+ mIpAddress.setSummary(mUnavailable);
}
}
private void setBtStatus() {
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
- Preference btAddressPref = findPreference(KEY_BT_ADDRESS);
-
- if (bluetooth == null) {
- // device not BT capable
- getPreferenceScreen().removePreference(btAddressPref);
- } else {
+ if (bluetooth != null && mBtAddress != null) {
String address = bluetooth.isEnabled() ? bluetooth.getAddress() : null;
- btAddressPref.setSummary(!TextUtils.isEmpty(address) ? address
- : getString(R.string.status_unavailable));
+ if (!TextUtils.isEmpty(address)) {
+ // Convert the address to lowercase for consistency with the wifi MAC address.
+ mBtAddress.setSummary(address.toLowerCase());
+ } else {
+ mBtAddress.setSummary(mUnavailable);
+ }
}
}
+ void updateConnectivity() {
+ setWimaxStatus();
+ setWifiStatus();
+ setBtStatus();
+ setIpAddressStatus();
+ }
+
void updateTimes() {
long at = SystemClock.uptimeMillis() / 1000;
long ut = SystemClock.elapsedRealtime() / 1000;
diff --git a/src/com/android/settings/wifi/AdvancedWifiSettings.java b/src/com/android/settings/wifi/AdvancedWifiSettings.java
index 7663058..bbcd50d 100644
--- a/src/com/android/settings/wifi/AdvancedWifiSettings.java
+++ b/src/com/android/settings/wifi/AdvancedWifiSettings.java
@@ -16,8 +16,10 @@
package com.android.settings.wifi;
+import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiWatchdogStateMachine;
@@ -53,6 +55,18 @@
private WifiManager mWifiManager;
+ private IntentFilter mFilter;
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action.equals(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION) ||
+ action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+ refreshWifiInfo();
+ }
+ }
+ };
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -63,15 +77,26 @@
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
+ mFilter = new IntentFilter();
+ mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
+ mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
}
@Override
public void onResume() {
super.onResume();
initPreferences();
+ getActivity().registerReceiver(mReceiver, mFilter,
+ android.Manifest.permission.CHANGE_NETWORK_STATE, null);
refreshWifiInfo();
}
+ @Override
+ public void onPause() {
+ super.onPause();
+ getActivity().unregisterReceiver(mReceiver);
+ }
+
private void initPreferences() {
CheckBoxPreference notifyOpenNetworks =
(CheckBoxPreference) findPreference(KEY_NOTIFY_OPEN_NETWORKS);