Convert more of StatusFragment to PreferenceControllers

Bug: 67410808
Test: RunSettingsRoboTests
Change-Id: Ia79d89d3d3b70bf7af950daa3e588db3f7f597e2
This commit is contained in:
Tony Mantler
2017-10-06 10:24:22 -07:00
parent ba00aaa0df
commit b35a19bce8
8 changed files with 200 additions and 241 deletions

View File

@@ -2695,8 +2695,6 @@
<string name="status_bt_address">Bluetooth address</string> <string name="status_bt_address">Bluetooth address</string>
<!-- About phone, status item title. The hardware serial number. [CHAR LIMIT=30]--> <!-- About phone, status item title. The hardware serial number. [CHAR LIMIT=30]-->
<string name="status_serial_number">Serial number</string> <string name="status_serial_number">Serial number</string>
<!-- About phone, status item value if the actual value is not available. -->
<string name="status_unavailable">Unavailable</string>
<!-- About phone, status item title. How long the device has been running since its last reboot. --> <!-- About phone, status item title. How long the device has been running since its last reboot. -->
<string name="status_up_time">Up time</string> <string name="status_up_time">Up time</string>
<!-- About phone, status item title. How much time the device has had its main CPU awake. --> <!-- About phone, status item title. How much time the device has had its main CPU awake. -->
@@ -5532,8 +5530,6 @@
<!-- Messaage shown in dialog when you can't manually sync --> <!-- Messaage shown in dialog when you can't manually sync -->
<string name="cant_sync_dialog_message">Sync for this item is currently disabled. To change this setting, temporarily turn on background data and automatic sync.</string> <string name="cant_sync_dialog_message">Sync for this item is currently disabled. To change this setting, temporarily turn on background data and automatic sync.</string>
<string name="wimax_settings">4G</string>
<string name="status_wimax_mac_address">4G MAC address</string>
<!-- This is displayed to the user when the device needs to be decrypted --> <!-- This is displayed to the user when the device needs to be decrypted -->
<string name="enter_password">To start Android, enter your password</string> <string name="enter_password">To start Android, enter your password</string>
<!-- Informational text on the pin entry screen prompting the user for their pin --> <!-- Informational text on the pin entry screen prompting the user for their pin -->
@@ -9071,10 +9067,4 @@
<!-- Note displayed when certain features are not available on low ram devices. [CHAR LIMIT=NONE] --> <!-- Note displayed when certain features are not available on low ram devices. [CHAR LIMIT=NONE] -->
<string name="disabled_low_ram_device">This feature is not available on this device</string> <string name="disabled_low_ram_device">This feature is not available on this device</string>
<!--Label of IMS registration header -->
<string name="ims_reg_title">"IMS registration state"</string>
<!--Used when IMS registration state is registered -->
<string name="ims_reg_status_registered">"Registered"</string>
<!--Used when IMS registration state is not registered -->
<string name="ims_reg_status_not_registered">"Not registered"</string>
</resources> </resources>

View File

@@ -82,13 +82,6 @@
android:title="@string/status_up_time" android:title="@string/status_up_time"
android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder"
android:persistent="false" /> android:persistent="false" />
<Preference
android:key="wimax_mac_address"
android:enabled="false"
android:shouldDisableView="false"
android:title="@string/status_wimax_mac_address"
android:summary="@string/summary_placeholder"
android:persistent="false" />
<Preference <Preference
android:key="ims_reg_state" android:key="ims_reg_state"
android:enabled="false" android:enabled="false"

View File

@@ -0,0 +1,35 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.deviceinfo;
import android.content.Context;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.deviceinfo.AbstractBluetoothAddressPreferenceController;
/**
* Concrete subclass of bluetooth address preference controller
*/
public class BluetoothAddressPreferenceController extends
AbstractBluetoothAddressPreferenceController implements PreferenceControllerMixin {
public BluetoothAddressPreferenceController(Context context, Lifecycle lifecycle) {
super(context, lifecycle);
}
// This space intentionally left blank
}

View File

@@ -0,0 +1,36 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.deviceinfo;
import android.content.Context;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.deviceinfo.AbstractImsStatusPreferenceController;
/**
* Concrete subclass of IMS status preference controller
*/
public class ImsStatusPreferenceController extends AbstractImsStatusPreferenceController
implements PreferenceControllerMixin {
public ImsStatusPreferenceController(Context context,
Lifecycle lifecycle) {
super(context, lifecycle);
}
// This space intentionally left blank
}

View File

@@ -0,0 +1,35 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.deviceinfo;
import android.content.Context;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.deviceinfo.AbstractIpAddressPreferenceController;
/**
* Concrete subclass of IP address preference controller
*/
public class IpAddressPreferenceController extends AbstractIpAddressPreferenceController implements
PreferenceControllerMixin {
public IpAddressPreferenceController(Context context, Lifecycle lifecycle) {
super(context, lifecycle);
}
// This space intentionally left blank
}

View File

@@ -16,115 +16,45 @@
package com.android.settings.deviceinfo; package com.android.settings.deviceinfo;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserManager; import android.os.UserManager;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.ArrayUtils;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable; import com.android.settings.search.Indexable;
import com.android.settingslib.core.lifecycle.Lifecycle;
import java.lang.ref.WeakReference;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import static android.content.Context.CONNECTIVITY_SERVICE; /**
import static android.content.Context.WIFI_SERVICE; * Fragment for showing device hardware info, such as MAC addresses and serial numbers
*/
public class Status extends SettingsPreferenceFragment implements Indexable { public class Status extends SettingsPreferenceFragment implements Indexable {
private static final String KEY_BATTERY_STATUS = "battery_status"; private static final String KEY_BATTERY_STATUS = "battery_status";
private static final String KEY_BATTERY_LEVEL = "battery_level"; private static final String KEY_BATTERY_LEVEL = "battery_level";
private static final String KEY_IP_ADDRESS = "wifi_ip_address";
private static final String KEY_WIFI_MAC_ADDRESS = "wifi_mac_address";
private static final String KEY_BT_ADDRESS = "bt_address";
private static final String KEY_WIMAX_MAC_ADDRESS = "wimax_mac_address";
private static final String KEY_SIM_STATUS = "sim_status"; private static final String KEY_SIM_STATUS = "sim_status";
private static final String KEY_IMEI_INFO = "imei_info"; private static final String KEY_IMEI_INFO = "imei_info";
private static final String KEY_IMS_REGISTRATION_STATE = "ims_reg_state";
// Broadcasts to listen to for connectivity changes.
private static final String[] CONNECTIVITY_INTENTS = {
BluetoothAdapter.ACTION_STATE_CHANGED,
ConnectivityManager.CONNECTIVITY_ACTION,
WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
WifiManager.NETWORK_STATE_CHANGED_ACTION,
};
private static final int EVENT_UPDATE_STATS = 500;
private static final int EVENT_UPDATE_CONNECTIVITY = 600;
private ConnectivityManager mCM;
private WifiManager mWifiManager;
private Resources mRes;
private String mUnavailable;
private SerialNumberPreferenceController mSerialNumberPreferenceController; private SerialNumberPreferenceController mSerialNumberPreferenceController;
private UptimePreferenceController mUptimePreferenceController;
private Preference mUptime;
private Preference mBatteryStatus; private Preference mBatteryStatus;
private Preference mBatteryLevel; private Preference mBatteryLevel;
private Preference mBtAddress; private BluetoothAddressPreferenceController mBluetoothAddressPreferenceController;
private Preference mIpAddress; private IpAddressPreferenceController mIpAddressPreferenceController;
private Preference mWifiMacAddress; private WifiMacAddressPreferenceController mWifiMacAddressPreferenceController;
private Preference mWimaxMacAddress; private ImsStatusPreferenceController mImsStatusPreferenceController;
private Preference mImsStatus;
private Handler mHandler;
private static class MyHandler extends Handler {
private WeakReference<Status> mStatus;
public MyHandler(Status activity) {
mStatus = new WeakReference<Status>(activity);
}
@Override
public void handleMessage(Message msg) {
Status status = mStatus.get();
if (status == null) {
return;
}
switch (msg.what) {
case EVENT_UPDATE_STATS:
status.updateTimes();
sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);
break;
case EVENT_UPDATE_CONNECTIVITY:
status.updateConnectivity();
break;
}
}
}
private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() { private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
@@ -138,68 +68,33 @@ public class Status extends SettingsPreferenceFragment implements Indexable {
} }
}; };
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 @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
mHandler = new MyHandler(this); final Context context = getContext();
final Lifecycle lifecycle = getLifecycle();
mCM = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); mSerialNumberPreferenceController = new SerialNumberPreferenceController(context);
mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE); mUptimePreferenceController = new UptimePreferenceController(context, lifecycle);
mSerialNumberPreferenceController = new SerialNumberPreferenceController(getActivity()); mBluetoothAddressPreferenceController =
new BluetoothAddressPreferenceController(context, lifecycle);
mIpAddressPreferenceController = new IpAddressPreferenceController(context, lifecycle);
mWifiMacAddressPreferenceController =
new WifiMacAddressPreferenceController(context, lifecycle);
mImsStatusPreferenceController = new ImsStatusPreferenceController(context, lifecycle);
addPreferencesFromResource(R.xml.device_info_status); addPreferencesFromResource(R.xml.device_info_status);
mBatteryLevel = findPreference(KEY_BATTERY_LEVEL); mBatteryLevel = findPreference(KEY_BATTERY_LEVEL);
mBatteryStatus = findPreference(KEY_BATTERY_STATUS); 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);
mImsStatus = findPreference(KEY_IMS_REGISTRATION_STATE);
mRes = getResources();
mUnavailable = mRes.getString(R.string.status_unavailable);
// Note - missing in zaku build, be careful later...
mUptime = findPreference("up_time");
final PreferenceScreen screen = getPreferenceScreen(); final PreferenceScreen screen = getPreferenceScreen();
if (!hasBluetooth()) {
screen.removePreference(mBtAddress);
mBtAddress = null;
}
if (!hasWimax()) {
screen.removePreference(mWimaxMacAddress);
mWimaxMacAddress = null;
}
mConnectivityIntentFilter = new IntentFilter();
for (String intent: CONNECTIVITY_INTENTS) {
mConnectivityIntentFilter.addAction(intent);
}
updateConnectivity();
mSerialNumberPreferenceController.displayPreference(screen); mSerialNumberPreferenceController.displayPreference(screen);
mUptimePreferenceController.displayPreference(screen);
mBluetoothAddressPreferenceController.displayPreference(screen);
mIpAddressPreferenceController.displayPreference(screen);
mWifiMacAddressPreferenceController.displayPreference(screen);
mImsStatusPreferenceController.displayPreference(screen);
// Remove SimStatus and Imei for Secondary user as it access Phone b/19165700 // Remove SimStatus and Imei for Secondary user as it access Phone b/19165700
// Also remove on Wi-Fi only devices. // Also remove on Wi-Fi only devices.
@@ -219,11 +114,8 @@ public class Status extends SettingsPreferenceFragment implements Indexable {
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
getContext().registerReceiver(mConnectivityReceiver, mConnectivityIntentFilter,
android.Manifest.permission.CHANGE_NETWORK_STATE, null);
getContext().registerReceiver(mBatteryInfoReceiver, getContext().registerReceiver(mBatteryInfoReceiver,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);
} }
@Override @Override
@@ -231,8 +123,6 @@ public class Status extends SettingsPreferenceFragment implements Indexable {
super.onPause(); super.onPause();
getContext().unregisterReceiver(mBatteryInfoReceiver); getContext().unregisterReceiver(mBatteryInfoReceiver);
getContext().unregisterReceiver(mConnectivityReceiver);
mHandler.removeMessages(EVENT_UPDATE_STATS);
} }
/** /**
@@ -246,96 +136,6 @@ public class Status extends SettingsPreferenceFragment implements Indexable {
} }
} }
private void setWimaxStatus() {
if (mWimaxMacAddress != null) {
String macAddress = SystemProperties.get("net.wimax.mac.address", mUnavailable);
mWimaxMacAddress.setSummary(macAddress);
}
}
private void setWifiStatus() {
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
boolean hasMacAddress = wifiInfo != null && wifiInfo.hasRealMacAddress();
String macAddress = hasMacAddress ? wifiInfo.getMacAddress() : null;
mWifiMacAddress.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress : mUnavailable);
}
private void setIpAddressStatus() {
String ipAddress = Utils.getDefaultIpAddresses(this.mCM);
if (ipAddress != null) {
mIpAddress.setSummary(ipAddress);
} else {
mIpAddress.setSummary(mUnavailable);
}
}
private void setBtStatus() {
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
if (bluetooth != null && mBtAddress != null) {
String address = bluetooth.isEnabled() ? bluetooth.getAddress() : null;
if (!TextUtils.isEmpty(address)) {
// Convert the address to lowercase for consistency with the wifi MAC address.
mBtAddress.setSummary(address.toLowerCase());
} else {
mBtAddress.setSummary(mUnavailable);
}
}
}
private void setImsRegistrationStatus() {
CarrierConfigManager configManager = (CarrierConfigManager)
getSystemService(Context.CARRIER_CONFIG_SERVICE);
int subId = SubscriptionManager.getDefaultDataSubscriptionId();
PersistableBundle config = null;
if (configManager != null) {
config = configManager.getConfigForSubId(subId);
}
if (config != null && config.getBoolean(
CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)) {
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mImsStatus.setSummary((tm != null && tm.isImsRegistered(subId)) ?
R.string.ims_reg_status_registered : R.string.ims_reg_status_not_registered);
} else {
removePreferenceFromScreen(KEY_IMS_REGISTRATION_STATE);
mImsStatus = null;
}
}
void updateConnectivity() {
setWimaxStatus();
setWifiStatus();
setBtStatus();
setIpAddressStatus();
setImsRegistrationStatus();
}
void updateTimes() {
long at = SystemClock.uptimeMillis() / 1000;
long ut = SystemClock.elapsedRealtime() / 1000;
if (ut == 0) {
ut = 1;
}
mUptime.setSummary(convert(ut));
}
private String pad(int n) {
if (n >= 10) {
return String.valueOf(n);
} else {
return "0" + String.valueOf(n);
}
}
private String convert(long t) {
int s = (int)(t % 60);
int m = (int)((t / 60) % 60);
int h = (int)((t / 3600));
return h + ":" + pad(m) + ":" + pad(s);
}
/** /**
* For Search. * For Search.
*/ */

View File

@@ -0,0 +1,35 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.deviceinfo;
import android.content.Context;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.deviceinfo.AbstractUptimePreferenceController;
/**
* Concrete subclass of uptime preference controller
*/
public class UptimePreferenceController extends AbstractUptimePreferenceController
implements PreferenceControllerMixin {
public UptimePreferenceController(Context context, Lifecycle lifecycle) {
super(context, lifecycle);
}
// This space intentionally left blank
}

View File

@@ -0,0 +1,35 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.deviceinfo;
import android.content.Context;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.deviceinfo.AbstractWifiMacAddressPreferenceController;
/**
* Concrete subclass of WIFI MAC address preference controller
*/
public class WifiMacAddressPreferenceController extends AbstractWifiMacAddressPreferenceController
implements PreferenceControllerMixin {
public WifiMacAddressPreferenceController(Context context, Lifecycle lifecycle) {
super(context, lifecycle);
}
// This space intentionally left blank
}