Merge "Pass in context when loading icons from Tile"
diff --git a/res/values/bools.xml b/res/values/bools.xml
index b406605..08bb08c 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -32,6 +32,9 @@
Can be overridden for specific product builds. -->
<bool name="auto_confirm_bluetooth_activation_dialog">false</bool>
+ <!-- Whether the device name is shown in About device or not -->
+ <bool name="config_show_device_name">true</bool>
+
<!-- Whether to show a preference item for the manual in About phone -->
<bool name="config_show_manual">false</bool>
<!-- Whether to show a preference item for regulatory information in About phone -->
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index b70b613..22c1844 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -133,6 +133,14 @@
android:summary="@string/summary_placeholder"
android:selectable="false"/>
+ <!-- Device up time -->
+ <Preference
+ android:key="up_time"
+ android:order="37"
+ android:title="@string/status_up_time"
+ android:summary="@string/summary_placeholder"
+ android:selectable="false" />
+
<!-- Safety & regulatory manual -->
<Preference
android:key="safety_info"
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index 4ff67b7..b4db4ed 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -23,12 +23,16 @@
<com.android.settings.applications.LayoutPreference
android:key="battery_header"
+ android:title="@string/summary_placeholder"
android:selectable="false"
- android:layout="@layout/battery_header" />
+ android:layout="@layout/battery_header"
+ settings:controller="com.android.settings.fuelgauge.BatteryHeaderPreferenceController" />
<PreferenceCategory
android:key="battery_tip"
- android:layout="@layout/preference_category_no_label" />
+ android:title="@string/summary_placeholder"
+ android:layout="@layout/preference_category_no_label"
+ settings:controller="com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController" />
<Preference
android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings"
@@ -47,7 +51,8 @@
<SwitchPreference
android:key="battery_percentage"
android:title="@string/battery_percentage"
- android:summary="@string/battery_percentage_description" />
+ android:summary="@string/battery_percentage_description"
+ settings:controller="com.android.settings.display.BatteryPercentagePreferenceController" />
<com.android.settings.fuelgauge.PowerGaugePreference
diff --git a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
index 0d4df99..558e7cb 100644
--- a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
@@ -27,6 +27,7 @@
import com.android.settings.bluetooth.BluetoothLengthDeviceNameFilter;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.R;
import com.android.settings.widget.ValidatedEditTextPreference;
import com.android.settings.wifi.tether.WifiDeviceNameTextValidator;
import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
@@ -90,7 +91,9 @@
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ return mContext.getResources().getBoolean(R.bool.config_show_device_name)
+ ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
}
@Override
diff --git a/src/com/android/settings/deviceinfo/UptimePreferenceController.java b/src/com/android/settings/deviceinfo/UptimePreferenceController.java
new file mode 100644
index 0000000..4f02594
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/UptimePreferenceController.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 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
+}
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index 976a254..29acf45 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -46,6 +46,7 @@
import com.android.settings.deviceinfo.PhoneNumberPreferenceController;
import com.android.settings.deviceinfo.RegulatoryInfoPreferenceController;
import com.android.settings.deviceinfo.SafetyInfoPreferenceController;
+import com.android.settings.deviceinfo.UptimePreferenceController;
import com.android.settings.deviceinfo.WifiMacAddressPreferenceController;
import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController;
import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController;
@@ -134,6 +135,7 @@
controllers.add(new FccEquipmentIdPreferenceController(context));
controllers.add(
new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
+ controllers.add(new UptimePreferenceController(context, lifecycle));
return controllers;
}
diff --git a/src/com/android/settings/display/BatteryPercentagePreferenceController.java b/src/com/android/settings/display/BatteryPercentagePreferenceController.java
index 0bd4445..50fbc64 100644
--- a/src/com/android/settings/display/BatteryPercentagePreferenceController.java
+++ b/src/com/android/settings/display/BatteryPercentagePreferenceController.java
@@ -21,8 +21,8 @@
import android.provider.Settings;
import com.android.internal.R;
+import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
@@ -31,24 +31,18 @@
* A controller to manage the switch for showing battery percentage in the status bar.
*/
-public class BatteryPercentagePreferenceController extends AbstractPreferenceController implements
+public class BatteryPercentagePreferenceController extends BasePreferenceController implements
PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
- private static final String KEY_BATTERY_PERCENTAGE = "battery_percentage";
-
- public BatteryPercentagePreferenceController(Context context) {
- super(context);
+ public BatteryPercentagePreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
}
@Override
- public boolean isAvailable() {
- return mContext.getResources()
- .getBoolean(R.bool.config_battery_percentage_setting_available);
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_BATTERY_PERCENTAGE;
+ public int getAvailabilityStatus() {
+ return mContext.getResources().getBoolean(
+ R.bool.config_battery_percentage_setting_available) ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
}
@Override
diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
index 71eb554..5b5f50a 100644
--- a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
@@ -27,6 +27,7 @@
import com.android.settings.R;
import com.android.settings.applications.LayoutPreference;
+import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.Utils;
@@ -42,7 +43,7 @@
/**
* Controller that update the battery header view
*/
-public class BatteryHeaderPreferenceController extends AbstractPreferenceController
+public class BatteryHeaderPreferenceController extends BasePreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnStart {
@VisibleForTesting
static final String KEY_BATTERY_HEADER = "battery_header";
@@ -56,30 +57,35 @@
@VisibleForTesting
TextView mSummary2;
- private final Activity mActivity;
- private final PreferenceFragmentCompat mHost;
- private final Lifecycle mLifecycle;
+ private Activity mActivity;
+ private PreferenceFragmentCompat mHost;
+ private Lifecycle mLifecycle;
private final PowerManager mPowerManager;
private LayoutPreference mBatteryLayoutPref;
- public BatteryHeaderPreferenceController(Context context, Activity activity,
- PreferenceFragmentCompat host, Lifecycle lifecycle) {
- super(context);
- mActivity = activity;
- mHost = host;
- mLifecycle = lifecycle;
- if (mLifecycle != null) {
- mLifecycle.addObserver(this);
- }
+ public BatteryHeaderPreferenceController(Context context, String key) {
+ super(context, key);
mPowerManager = context.getSystemService(PowerManager.class);
}
+ public void setActivity(Activity activity) {
+ mActivity = activity;
+ }
+
+ public void setFragment(PreferenceFragmentCompat fragment) {
+ mHost = fragment;
+ }
+
+ public void setLifecycle(Lifecycle lifecycle) {
+ mLifecycle = lifecycle;
+ }
+
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- mBatteryLayoutPref = (LayoutPreference) screen.findPreference(KEY_BATTERY_HEADER);
- mBatteryMeterView = (BatteryMeterView) mBatteryLayoutPref
+ mBatteryLayoutPref = (LayoutPreference) screen.findPreference(getPreferenceKey());
+ mBatteryMeterView = mBatteryLayoutPref
.findViewById(R.id.battery_header_icon);
mBatteryPercentText = mBatteryLayoutPref.findViewById(R.id.battery_percent);
mSummary1 = mBatteryLayoutPref.findViewById(R.id.summary1);
@@ -89,13 +95,8 @@
}
@Override
- public boolean isAvailable() {
- return true;
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_BATTERY_HEADER;
+ public int getAvailabilityStatus() {
+ return AVAILABLE_UNSEARCHABLE;
}
@Override
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 843aeec..2ae5876 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -25,7 +25,6 @@
import android.provider.SearchIndexableResource;
import android.text.BidiFormatter;
import android.text.format.Formatter;
-import android.util.SparseArray;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -40,19 +39,15 @@
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.display.BatteryPercentagePreferenceController;
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.utils.PowerUtil;
import com.android.settingslib.utils.StringUtil;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -198,6 +193,22 @@
};
@Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ final SettingsActivity activity = (SettingsActivity) getActivity();
+
+ mBatteryHeaderPreferenceController = use(BatteryHeaderPreferenceController.class);
+ mBatteryHeaderPreferenceController.setActivity(activity);
+ mBatteryHeaderPreferenceController.setFragment(this);
+ mBatteryHeaderPreferenceController.setLifecycle(getSettingsLifecycle());
+
+ mBatteryTipPreferenceController = use(BatteryTipPreferenceController.class);
+ mBatteryTipPreferenceController.setActivity(activity);
+ mBatteryTipPreferenceController.setFragment(this);
+ mBatteryTipPreferenceController.setBatteryTipListener(this::onBatteryTipHandled);
+ }
+
+ @Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setAnimationAllowed(true);
@@ -232,22 +243,6 @@
}
@Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- final Lifecycle lifecycle = getSettingsLifecycle();
- final SettingsActivity activity = (SettingsActivity) getActivity();
- final List<AbstractPreferenceController> controllers = new ArrayList<>();
- mBatteryHeaderPreferenceController = new BatteryHeaderPreferenceController(
- context, activity, this /* host */, lifecycle);
- controllers.add(mBatteryHeaderPreferenceController);
- mBatteryTipPreferenceController = new BatteryTipPreferenceController(context,
- KEY_BATTERY_TIP, (SettingsActivity) getActivity(), this /* fragment */, this /*
- BatteryTipListener */);
- controllers.add(mBatteryTipPreferenceController);
- controllers.add(new BatteryPercentagePreferenceController(context));
- return controllers;
- }
-
- @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (DEBUG) {
menu.add(Menu.NONE, MENU_STATS_TYPE, Menu.NONE, R.string.menu_stats_total)
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
index 0a9a4c7..158ffd4 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
@@ -59,24 +59,27 @@
InstrumentedPreferenceFragment mFragment;
public BatteryTipPreferenceController(Context context, String preferenceKey) {
- this(context, preferenceKey, null, null, null);
- }
-
- public BatteryTipPreferenceController(Context context, String preferenceKey,
- SettingsActivity settingsActivity, InstrumentedPreferenceFragment fragment,
- BatteryTipListener batteryTipListener) {
super(context, preferenceKey);
- mBatteryTipListener = batteryTipListener;
mBatteryTipMap = new HashMap<>();
- mFragment = fragment;
- mSettingsActivity = settingsActivity;
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
mNeedUpdate = true;
}
+ public void setActivity(SettingsActivity activity) {
+ mSettingsActivity = activity;
+ }
+
+ public void setFragment(InstrumentedPreferenceFragment fragment) {
+ mFragment = fragment;
+ }
+
+ public void setBatteryTipListener(BatteryTipListener lsn) {
+ mBatteryTipListener = lsn;
+ }
+
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ return AVAILABLE_UNSEARCHABLE;
}
@Override
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 27e1a98..d5ef9aa 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -24,6 +24,7 @@
import android.icu.text.ListFormatter;
import android.provider.SearchIndexableResource;
import android.text.BidiFormatter;
+import android.text.TextUtils;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto;
@@ -153,21 +154,25 @@
private final Context mContext;
private final SummaryLoader mSummaryLoader;
+ private final WifiMasterSwitchPreferenceController mWifiPreferenceController;
private final MobileNetworkPreferenceController mMobileNetworkPreferenceController;
private final TetherPreferenceController mTetherPreferenceController;
public SummaryProvider(Context context, SummaryLoader summaryLoader) {
this(context, summaryLoader,
+ new WifiMasterSwitchPreferenceController(context, null),
new MobileNetworkPreferenceController(context),
new TetherPreferenceController(context, null /* lifecycle */));
}
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
SummaryProvider(Context context, SummaryLoader summaryLoader,
+ WifiMasterSwitchPreferenceController wifiPreferenceController,
MobileNetworkPreferenceController mobileNetworkPreferenceController,
TetherPreferenceController tetherPreferenceController) {
mContext = context;
mSummaryLoader = summaryLoader;
+ mWifiPreferenceController = wifiPreferenceController;
mMobileNetworkPreferenceController = mobileNetworkPreferenceController;
mTetherPreferenceController = tetherPreferenceController;
}
@@ -176,20 +181,27 @@
@Override
public void setListening(boolean listening) {
if (listening) {
- final List<String> summaries = new ArrayList<>();
+ final String wifiSummary = BidiFormatter.getInstance()
+ .unicodeWrap(mContext.getString(R.string.wifi_settings_title));
+ final String mobileSummary = mContext.getString(
+ R.string.network_dashboard_summary_mobile);
+ final String dataUsageSummary = mContext.getString(
+ R.string.network_dashboard_summary_data_usage);
+ final String hotspotSummary = mContext.getString(
+ R.string.network_dashboard_summary_hotspot);
- summaries.add(BidiFormatter.getInstance()
- .unicodeWrap(mContext.getString(R.string.wifi_settings_title)));
- if (mMobileNetworkPreferenceController.isAvailable()) {
- summaries.add(mContext.getString(
- R.string.network_dashboard_summary_mobile));
+ final List<String> summaries = new ArrayList<>();
+ if (mWifiPreferenceController.isAvailable() && !TextUtils.isEmpty(wifiSummary)) {
+ summaries.add(wifiSummary);
}
- final String dataUsageSettingSummary = mContext.getString(
- R.string.network_dashboard_summary_data_usage);
- summaries.add(dataUsageSettingSummary);
- if (mTetherPreferenceController.isAvailable()) {
- summaries.add(mContext.getString(
- R.string.network_dashboard_summary_hotspot));
+ if (mMobileNetworkPreferenceController.isAvailable() && !TextUtils.isEmpty(mobileSummary)) {
+ summaries.add(mobileSummary);
+ }
+ if (!TextUtils.isEmpty(dataUsageSummary)) {
+ summaries.add(dataUsageSummary);
+ }
+ if (mTetherPreferenceController.isAvailable() && !TextUtils.isEmpty(hotspotSummary)) {
+ summaries.add(hotspotSummary);
}
mSummaryLoader.setSummary(this, ListFormatter.getInstance().format(summaries));
}
diff --git a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
index 156e230..1284b6a 100644
--- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
+++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
@@ -84,8 +84,7 @@
@Override
public void updateState(Preference preference) {
if (mPreference != null && mPreference instanceof GearPreference) {
- if (mLockPatternUtils.isSecure(mUserId)
- || !mLockPatternUtils.isLockScreenDisabled(mUserId)) {
+ if (mLockPatternUtils.isSecure(mUserId)) {
((GearPreference) mPreference).setOnGearClickListener(this);
} else {
((GearPreference) mPreference).setOnGearClickListener(null);
diff --git a/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider b/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider
index b329072..e69de29 100644
--- a/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider
+++ b/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider
@@ -1 +0,0 @@
-com.android.settings.fuelgauge.PowerUsageSummary
diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml
index 2d95b65..6d82451 100644
--- a/tests/robotests/res/values-mcc999/config.xml
+++ b/tests/robotests/res/values-mcc999/config.xml
@@ -61,6 +61,7 @@
<bool name="config_show_wifi_ip_address">false</bool>
<bool name="config_show_wifi_mac_address">false</bool>
<bool name="config_disable_uninstall_update">true</bool>
+ <bool name="config_show_device_name">false</bool>
<!-- List of a11y components on the device allowed to be enabled by Settings Slices -->
<string-array name="config_settings_slices_accessibility_components" translatable="false">
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java
index 0e6bf8d..68b48a8 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java
@@ -16,6 +16,8 @@
package com.android.settings.deviceinfo;
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
@@ -41,6 +43,7 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
import androidx.preference.PreferenceScreen;
@@ -80,6 +83,17 @@
}
@Test
+ public void getAvailibilityStatus_availableByDefault() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ @Config(qualifiers = "mcc999")
+ public void getAvailabilityStatus_unsupportedWhenSet() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
public void constructor_defaultDeviceNameIsModelName() {
assertThat(mController.getSummary()).isEqualTo(Build.MODEL);
}
diff --git a/tests/robotests/src/com/android/settings/display/BatteryPercentagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BatteryPercentagePreferenceControllerTest.java
index 673abb0..140fc5c 100644
--- a/tests/robotests/src/com/android/settings/display/BatteryPercentagePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/BatteryPercentagePreferenceControllerTest.java
@@ -32,13 +32,15 @@
@RunWith(SettingsRobolectricTestRunner.class)
public class BatteryPercentagePreferenceControllerTest {
+ private static final String PREF_KEY = "battery_percentage";
+
private Context mContext;
private BatteryPercentagePreferenceController mController;
@Before
public void setup() {
mContext = RuntimeEnvironment.application;
- mController = new BatteryPercentagePreferenceController(mContext);
+ mController = new BatteryPercentagePreferenceController(mContext, PREF_KEY);
}
private int getPercentageSetting() {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
index 91cb078..337b950 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
@@ -36,6 +36,7 @@
import com.android.settings.R;
import com.android.settings.applications.LayoutPreference;
+import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
@@ -68,6 +69,7 @@
})
public class BatteryHeaderPreferenceControllerTest {
+ private static final String PREF_KEY = "battery_header";
private static final int BATTERY_LEVEL = 60;
private static final String TIME_LEFT = "2h30min";
private static final String BATTERY_STATUS = "Charging";
@@ -121,8 +123,11 @@
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- mController = new BatteryHeaderPreferenceController(
- mContext, mActivity, mPreferenceFragment, mLifecycle);
+ mController = new BatteryHeaderPreferenceController(mContext, PREF_KEY);
+ mLifecycle.addObserver(mController);
+ mController.setActivity(mActivity);
+ mController.setFragment(mPreferenceFragment);
+ mController.setLifecycle(mLifecycle);
mController.mBatteryMeterView = mBatteryMeterView;
mController.mBatteryPercentText = mBatteryPercentText;
mController.mSummary1 = mSummary;
@@ -207,4 +212,10 @@
assertThat(mBatteryMeterView.getPowerSave()).isEqualTo(value);
}
}
+
+ @Test
+ public void getAvailabilityStatus_returnAvailableUnsearchable() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.AVAILABLE_UNSEARCHABLE);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 97e272b..68d9994 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -223,21 +223,6 @@
}
@Test
- public void preferenceControllers_getPreferenceKeys_existInPreferenceScreen() {
- final Context context = RuntimeEnvironment.application;
- final PowerUsageSummary fragment = new PowerUsageSummary();
- final List<String> preferenceScreenKeys =
- XmlTestUtils.getKeysFromPreferenceXml(context, fragment.getPreferenceScreenResId());
- final List<String> preferenceKeys = new ArrayList<>();
-
- for (AbstractPreferenceController controller : fragment.createPreferenceControllers(context)) {
- preferenceKeys.add(controller.getPreferenceKey());
- }
-
- assertThat(preferenceScreenKeys).containsAllIn(preferenceKeys);
- }
-
- @Test
public void restartBatteryTipLoader() {
//TODO: add policy logic here when BatteryTipPolicy is implemented
doReturn(mLoaderManager).when(mFragment).getLoaderManager();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java
index 7e9ffeb..e7aafef 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java
@@ -31,6 +31,7 @@
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
@@ -100,8 +101,7 @@
mNewBatteryTips = new ArrayList<>();
mNewBatteryTips.add(new SummaryTip(BatteryTip.StateType.INVISIBLE, AVERAGE_TIME_MS));
- mBatteryTipPreferenceController = new BatteryTipPreferenceController(mContext, KEY_PREF,
- mSettingsActivity, mFragment, mBatteryTipListener);
+ mBatteryTipPreferenceController = buildBatteryTipPreferenceController();
mBatteryTipPreferenceController.mPreferenceGroup = mPreferenceGroup;
mBatteryTipPreferenceController.mPrefContext = mContext;
}
@@ -139,8 +139,7 @@
final Bundle bundle = new Bundle();
mBatteryTipPreferenceController.saveInstanceState(bundle);
- final BatteryTipPreferenceController controller = new BatteryTipPreferenceController(
- mContext, KEY_PREF, mSettingsActivity, mFragment, mBatteryTipListener);
+ final BatteryTipPreferenceController controller = buildBatteryTipPreferenceController();
controller.mPreferenceGroup = mPreferenceGroup;
controller.mPrefContext = mContext;
controller.restoreInstanceState(bundle);
@@ -154,8 +153,7 @@
// Battery tip list is null at this time
mBatteryTipPreferenceController.saveInstanceState(bundle);
- final BatteryTipPreferenceController controller = new BatteryTipPreferenceController(
- mContext, KEY_PREF, mSettingsActivity, mFragment, mBatteryTipListener);
+ final BatteryTipPreferenceController controller = buildBatteryTipPreferenceController();
// Should not crash
controller.restoreInstanceState(bundle);
@@ -176,6 +174,12 @@
verify(mBatteryTipListener).onBatteryTipHandled(mBatteryTip);
}
+ @Test
+ public void getAvailabilityStatus_returnAvailableUnsearchable() {
+ assertThat(mBatteryTipPreferenceController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.AVAILABLE_UNSEARCHABLE);
+ }
+
private void assertOnlyContainsSummaryTip(final PreferenceGroup preferenceGroup) {
assertThat(preferenceGroup.getPreferenceCount()).isEqualTo(1);
@@ -185,4 +189,14 @@
assertThat(preference.getSummary()).isEqualTo(
mContext.getString(R.string.battery_tip_summary_summary));
}
+
+ private BatteryTipPreferenceController buildBatteryTipPreferenceController() {
+ final BatteryTipPreferenceController controller = new BatteryTipPreferenceController(
+ mContext, KEY_PREF);
+ controller.setActivity(mSettingsActivity);
+ controller.setFragment(mFragment);
+ controller.setBatteryTipListener(mBatteryTipListener);
+
+ return controller;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
index 187f0dc..d6310ab 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
@@ -26,6 +26,7 @@
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.wifi.WifiMasterSwitchPreferenceController;
import com.android.settingslib.drawer.CategoryKey;
import org.junit.Before;
@@ -66,6 +67,8 @@
@Test
public void summaryProviderSetListening_hasMobileAndHotspot_shouldReturnMobileSummary() {
+ final WifiMasterSwitchPreferenceController wifiPreferenceController =
+ mock(WifiMasterSwitchPreferenceController.class);
final MobileNetworkPreferenceController mobileNetworkPreferenceController =
mock(MobileNetworkPreferenceController.class);
final TetherPreferenceController tetherPreferenceController =
@@ -74,12 +77,14 @@
final SummaryLoader summaryLoader = mock(SummaryLoader.class);
final SummaryLoader.SummaryProvider provider =
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
- mobileNetworkPreferenceController, tetherPreferenceController);
+ wifiPreferenceController, mobileNetworkPreferenceController,
+ tetherPreferenceController);
provider.setListening(false);
verifyZeroInteractions(summaryLoader);
+ when(wifiPreferenceController.isAvailable()).thenReturn(true);
when(mobileNetworkPreferenceController.isAvailable()).thenReturn(true);
when(tetherPreferenceController.isAvailable()).thenReturn(true);
@@ -90,6 +95,8 @@
@Test
public void summaryProviderSetListening_noMobileOrHotspot_shouldReturnSimpleSummary() {
+ final WifiMasterSwitchPreferenceController wifiPreferenceController =
+ mock(WifiMasterSwitchPreferenceController.class);
final MobileNetworkPreferenceController mobileNetworkPreferenceController =
mock(MobileNetworkPreferenceController.class);
final TetherPreferenceController tetherPreferenceController =
@@ -98,12 +105,14 @@
final SummaryLoader summaryLoader = mock(SummaryLoader.class);
final SummaryLoader.SummaryProvider provider =
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
- mobileNetworkPreferenceController, tetherPreferenceController);
+ wifiPreferenceController, mobileNetworkPreferenceController,
+ tetherPreferenceController);
provider.setListening(false);
verifyZeroInteractions(summaryLoader);
+ when(wifiPreferenceController.isAvailable()).thenReturn(true);
when(mobileNetworkPreferenceController.isAvailable()).thenReturn(false);
when(tetherPreferenceController.isAvailable()).thenReturn(false);
diff --git a/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java
index 6cc1704..fda5942 100644
--- a/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java
@@ -17,17 +17,28 @@
package com.android.settings.security;
import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.os.UserManager;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import androidx.preference.PreferenceScreen;
+import androidx.preference.PreferenceViewHolder;
import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowUtils;
+import com.android.settings.widget.GearPreference;
import org.junit.Before;
import org.junit.Test;
@@ -47,10 +58,15 @@
private UserManager mUserManager;
@Mock
private DevicePolicyManager mDevicePolicyManager;
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
private Context mContext;
private FakeFeatureFactory mFeatureFactory;
private ChangeScreenLockPreferenceController mController;
+ private View mGearView;
+ private GearPreference mGearPreference;
+ private PreferenceViewHolder mPreferenceViewHolder;
@Before
public void setUp() {
@@ -75,4 +91,149 @@
public void testDeviceAdministrators_ifDisabled_shouldNotBeShown() {
assertThat(mController.isAvailable()).isFalse();
}
+
+ @Test
+ public void updateState_notSecureDisableKeyguard_shouldNotShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true);
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.GONE);
+ }
+
+ @Test
+ public void updateState_notSecureDisableKeyguard_summaryShouldShowOff() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true);
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_off));
+ }
+
+ @Test
+ public void updateState_notSecureWithSwipeKeyguard_shouldNotShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.GONE);
+ }
+
+ @Test
+ public void updateState_notSecureWithSwipeKeyguard_summaryShouldShowSwipe() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_none));
+ }
+
+ @Test
+ public void updateState_secureWithPinKeyguard_shouldShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void updateState_secureWithPinKeyguard_summaryShouldShowPin() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_pin));
+ }
+
+ @Test
+ public void updateState_secureWithPasswordKeyguard_shouldShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void updateState_secureWithPasswordKeyguard_summaryShouldShowPassword() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_password));
+ }
+
+ @Test
+ public void updateState_secureWithPatternKeyguard_shouldShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void updateState_secureWithPatternKeyguard_summaryShouldShowPattern() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_pattern));
+ }
+
+ private void mockGearPreferenceAndViewHolder() {
+ mGearPreference = new GearPreference(mContext, null);
+ mGearView = new View(mContext);
+ PreferenceViewHolder viewHolder = PreferenceViewHolder.createInstanceForTests(
+ LayoutInflater.from(mContext).inflate(
+ mGearPreference.getLayoutResource(), null, false));
+ mPreferenceViewHolder = spy(viewHolder);
+ doReturn(mGearView).when(mPreferenceViewHolder).findViewById(R.id.settings_button);
+ when(mPreferenceScreen.findPreference(anyString())).thenReturn(mGearPreference);
+ }
+
+ private void showPreference() {
+ mController.displayPreference(mPreferenceScreen);
+ mController.updateState(mGearPreference);
+ mGearPreference.onBindViewHolder(mPreferenceViewHolder);
+ }
}
\ No newline at end of file