Merge "Fix runInstrumentableFragmentCodeInspection test case fail" into sc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 437ffbe..cb53a02 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1490,6 +1490,7 @@
<activity android:name=".applications.specialaccess.deviceadmin.DeviceAdminAdd"
android:label="@string/device_admin_add_title"
android:exported="true"
+ android:theme="@style/Theme.SubSettings"
android:clearTaskOnLaunch="true">
<intent-filter>
<action android:name="android.app.action.ADD_DEVICE_ADMIN" />
@@ -1971,7 +1972,7 @@
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.deviceinfo.StorageSettings" />
+ android:value="com.android.settings.deviceinfo.StorageDashboardFragment" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
diff --git a/res/layout-land/udfps_enroll_enrolling_land.xml b/res/layout-land/udfps_enroll_enrolling_land.xml
new file mode 100644
index 0000000..7ccd396
--- /dev/null
+++ b/res/layout-land/udfps_enroll_enrolling_land.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 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.
+-->
+
+<com.google.android.setupdesign.GlifLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/setup_wizard_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout="@layout/sud_glif_blank_template"
+ style="?attr/fingerprint_layout_theme">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:clipToPadding="false"
+ android:clipChildren="false">
+
+ <!-- Both texts are kept as separate text views so it doesn't jump around in portrait.
+ See layouts/fingerprint_enroll_enrolling_base.xml. -->
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="match_parent"
+ android:layout_marginStart="?attr/sudMarginStart"
+ android:layout_marginBottom="@dimen/sud_content_frame_padding_bottom"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:orientation="vertical">
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:fillViewport="true">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:clipChildren="false"
+ android:clipToPadding="false">
+
+ <ImageView
+ android:id="@+id/sud_layout_icon"
+ style="@style/SudGlifIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="?attr/sudGlifHeaderGravity"
+ android:layout_marginStart="0dp"
+ android:layout_marginEnd="0dp"
+ android:src="@drawable/ic_fingerprint_header" />
+
+ <TextView
+ android:id="@+id/suc_layout_title"
+ style="@style/SudGlifHeaderTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="0dp"
+ android:layout_marginEnd="0dp" />
+
+ <TextView
+ style="@style/SudDescription.Glif"
+ android:id="@+id/sud_layout_subtitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ </LinearLayout>
+
+ </ScrollView>
+
+ </LinearLayout>
+
+ </LinearLayout>
+</com.google.android.setupdesign.GlifLayout>
\ No newline at end of file
diff --git a/res/layout-land/udfps_enroll_find_sensor_land.xml b/res/layout-land/udfps_enroll_find_sensor_land.xml
new file mode 100644
index 0000000..6335afb
--- /dev/null
+++ b/res/layout-land/udfps_enroll_find_sensor_land.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 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.
+-->
+
+<com.google.android.setupdesign.GlifLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/setup_wizard_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout="@layout/sud_glif_blank_template"
+ style="?attr/fingerprint_layout_theme">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:clipToPadding="false"
+ android:clipChildren="false">
+
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="match_parent"
+ android:layout_marginStart="?attr/sudMarginStart"
+ android:layout_marginBottom="@dimen/sud_content_frame_padding_bottom"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:orientation="vertical">
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:fillViewport="true">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:clipChildren="false"
+ android:clipToPadding="false">
+
+ <ImageView
+ android:id="@+id/sud_layout_icon"
+ style="@style/SudGlifIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="?attr/sudGlifHeaderGravity"
+ android:layout_marginStart="0dp"
+ android:layout_marginEnd="0dp"
+ android:src="@drawable/ic_fingerprint_header" />
+
+ <TextView
+ android:id="@+id/suc_layout_title"
+ style="@style/SudGlifHeaderTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="0dp"
+ android:layout_marginEnd="0dp" />
+
+ <TextView
+ android:id="@+id/sud_layout_subtitle"
+ style="@style/SudDescription.Glif"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ </LinearLayout>
+
+ </ScrollView>
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+</com.google.android.setupdesign.GlifLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e65806b..2e98ec5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5843,6 +5843,8 @@
<string name="history_details_title">History details</string>
<!-- Preference title for advanced battery usage [CHAR LIMIT=40] -->
<string name="advanced_battery_preference_title">View battery usage</string>
+ <!-- Preference summary for advanced battery usage [CHAR LIMIT=40] -->
+ <string name="advanced_battery_preference_summary">View usage for past 24 hours</string>
<!-- Activity title for battery usage details for an app. or power consumer -->
<string name="battery_details_title">Battery usage</string>
@@ -5979,7 +5981,7 @@
<string name="battery_auto_restriction_summary">Detect when apps drain battery</string>
<!-- Summary for battery manager when it is on -->
- <string name="battery_manager_on" product="default">On / Detecting when apps drain battery</string>
+ <string name="battery_manager_summary">Detecting when apps drain battery</string>
<!-- Summary for battery manager when it is off -->
<string name="battery_manager_off">Off</string>
@@ -6245,6 +6247,9 @@
<!-- Battery saver: Label for preference to indicate there is a routine based schedule [CHAR_LIMIT=40] -->
<string name="battery_saver_auto_routine">Based on your routine</string>
+ <!-- Battery saver: Summary for preference to indicate there is a routine based schedule [CHAR_LIMIT=40] -->
+ <string name="battery_saver_pref_auto_routine_summary">Will turn on based on your routine</string>
+
<!-- Battery saver: Label for preference to indicate there is a percentage based schedule [CHAR_LIMIT=40] -->
<string name="battery_saver_auto_percentage">Based on percentage</string>
@@ -6612,7 +6617,7 @@
<!-- Message displayed to let the user know that some of the options are disabled by admin. [CHAR LIMIT=NONE] -->
<string name="admin_disabled_other_options">Other options are disabled by your admin</string>
- <string name="admin_more_details">More details</string>
+ <string name="admin_more_details">Learn more</string>
<string name="notification_log_title">Notification log</string>
<string name="notification_history_title">Notification history</string>
@@ -12804,6 +12809,12 @@
<!-- Power menu setting privacy no secure screen lock set [CHAR_LIMIT=NONE] -->
<string name="power_menu_privacy_not_secure">To use, first set a screen lock</string>
+ <!-- Power menu setting use long press power to invoke assistant. [CHAR_LIMIT=NONE] -->
+ <string name="power_menu_long_press_for_assist">Hold for Assistant</string>
+
+ <!-- Power menu setting use log press power to invoke assistant summary. [CHAR_LIMIT=NONE] -->
+ <string name="power_menu_long_press_for_assist_summary">Trigger the Assistant by holding the power button</string>
+
<!-- Device controls toggle name [CHAR LIMIT=60] -->
<string name="device_controls_setting_toggle">Show device controls</string>
diff --git a/res/xml/power_menu_settings.xml b/res/xml/power_menu_settings.xml
index c7fba71..bfe9c20 100644
--- a/res/xml/power_menu_settings.xml
+++ b/res/xml/power_menu_settings.xml
@@ -20,6 +20,13 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/power_menu_setting_name">
+ <SwitchPreference
+ android:key="gesture_power_menu_long_press_for_assist"
+ android:title="@string/power_menu_long_press_for_assist"
+ android:summary="@string/power_menu_long_press_for_assist_summary"
+ settings:controller="com.android.settings.gestures.LongPressPowerButtonPreferenceController"
+ />
+
<Preference
android:key="gesture_global_actions_panel_summary"
android:title="@string/cards_passes_sentence"
diff --git a/res/xml/tether_prefs.xml b/res/xml/tether_prefs.xml
index 37194d9..d86f420 100644
--- a/res/xml/tether_prefs.xml
+++ b/res/xml/tether_prefs.xml
@@ -49,9 +49,9 @@
android:summary="@string/ethernet_tethering_subtext"
settings:keywords="@string/keywords_hotspot_tethering" />
- <Preference
+ <com.android.settingslib.widget.FooterPreference
android:key="disabled_on_data_saver"
- android:summary="@string/tether_settings_disabled_on_data_saver"
+ android:title="@string/tether_settings_disabled_on_data_saver"
android:selectable="false"
- settings:allowDividerAbove="true" />
+ settings:searchable="false"/>
</PreferenceScreen>
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
index 78dfe9b..725390e 100644
--- a/res/xml/top_level_settings.xml
+++ b/res/xml/top_level_settings.xml
@@ -78,7 +78,7 @@
android:summary="@string/summary_placeholder"
android:icon="@drawable/ic_homepage_storage"
android:order="-60"
- android:fragment="com.android.settings.deviceinfo.StorageSettings"
+ android:fragment="com.android.settings.deviceinfo.StorageDashboardFragment"
settings:controller="com.android.settings.deviceinfo.TopLevelStoragePreferenceController"/>
<Preference
diff --git a/res/xml/top_level_settings_grouped.xml b/res/xml/top_level_settings_grouped.xml
index 704a106..df935d0 100644
--- a/res/xml/top_level_settings_grouped.xml
+++ b/res/xml/top_level_settings_grouped.xml
@@ -59,7 +59,7 @@
settings:controller="com.android.settings.fuelgauge.TopLevelBatteryPreferenceController"/>
<com.android.settings.homepage.HomepagePreference
- android:fragment="com.android.settings.deviceinfo.StorageSettings"
+ android:fragment="com.android.settings.deviceinfo.StorageDashboardFragment"
android:icon="@drawable/ic_homepage_storage_v2"
android:key="top_level_storage"
android:order="-100"
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index 1fe3f17..0625bbb 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -71,6 +71,7 @@
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity;
import org.xmlpull.v1.XmlPullParserException;
@@ -79,7 +80,10 @@
import java.util.List;
import java.util.Optional;
-public class DeviceAdminAdd extends Activity {
+/**
+ * A confirmation screen for enabling administractor.
+ */
+public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
static final String TAG = "DeviceAdminAdd";
static final int DIALOG_WARNING = 1;
diff --git a/src/com/android/settings/biometrics/BiometricUtils.java b/src/com/android/settings/biometrics/BiometricUtils.java
index d93a321..f338eb5 100644
--- a/src/com/android/settings/biometrics/BiometricUtils.java
+++ b/src/com/android/settings/biometrics/BiometricUtils.java
@@ -24,6 +24,7 @@
import android.content.IntentSender;
import android.os.storage.StorageManager;
import android.util.Log;
+import android.view.Surface;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -241,4 +242,14 @@
}
return false;
}
+
+ /**
+ * Returns {@code true} if the screen is going into a landscape mode and the angle is equal to
+ * 270.
+ * @param context Context that we use to get the display this context is associated with
+ * @return True if the angle of the rotation is equal to 270.
+ */
+ public static boolean isReverseLandscape(@NonNull Context context) {
+ return context.getDisplay().getRotation() == Surface.ROTATION_270;
+ }
}
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index 10b31e3..8def63d 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -47,6 +47,7 @@
import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollSidecar;
import com.android.settings.biometrics.BiometricErrorDialog;
+import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
@@ -98,6 +99,7 @@
private boolean mCanAssumeUdfps;
@Nullable private ProgressBar mProgressBar;
private ObjectAnimator mProgressAnim;
+ private TextView mDescriptionText;
private TextView mErrorText;
private Interpolator mFastOutSlowInInterpolator;
private Interpolator mLinearOutSlowInInterpolator;
@@ -145,7 +147,11 @@
mCanAssumeUdfps = props.size() == 1 && props.get(0).isAnyUdfpsType();
if (mCanAssumeUdfps) {
- setContentView(R.layout.udfps_enroll_enrolling);
+ if (BiometricUtils.isReverseLandscape(getApplicationContext())) {
+ setContentView(R.layout.udfps_enroll_enrolling_land);
+ } else {
+ setContentView(R.layout.udfps_enroll_enrolling);
+ }
setDescriptionText(R.string.security_settings_udfps_enroll_start_message);
} else {
setContentView(R.layout.fingerprint_enroll_enrolling);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
index 94eb278..8bc03ac 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
@@ -112,7 +112,11 @@
protected int getContentView() {
if (mCanAssumeUdfps) {
- return R.layout.udfps_enroll_find_sensor_layout;
+ if (BiometricUtils.isReverseLandscape(getApplicationContext())) {
+ return R.layout.udfps_enroll_find_sensor_land;
+ } else {
+ return R.layout.udfps_enroll_find_sensor_layout;
+ }
}
return R.layout.fingerprint_enroll_find_sensor;
}
diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
index e0527f9..c16b95c 100644
--- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
@@ -60,7 +60,6 @@
mPreference = new RestrictedSwitchPreference(context);
mPreference.setTitle(R.string.adaptive_sleep_title);
mPreference.setSummary(R.string.adaptive_sleep_description);
- mPreference.setIcon(R.drawable.empty_icon);
mPreference.setChecked(isChecked());
mPreference.setKey(PREFERENCE_KEY);
mPreference.setOnPreferenceClickListener(preference -> {
diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java
index 3b0d333..a15a7a0 100644
--- a/src/com/android/settings/display/ScreenTimeoutSettings.java
+++ b/src/com/android/settings/display/ScreenTimeoutSettings.java
@@ -164,7 +164,8 @@
final String textMoreDetails = getResources().getString(R.string.admin_more_details);
final SpannableString spannableString = new SpannableString(
- textDisabledByAdmin + System.lineSeparator() + textMoreDetails);
+ textDisabledByAdmin + System.lineSeparator()
+ + System.lineSeparator() + textMoreDetails);
final ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
@@ -174,7 +175,7 @@
if (textDisabledByAdmin != null && textMoreDetails != null) {
spannableString.setSpan(clickableSpan, textDisabledByAdmin.length() + 1,
- textDisabledByAdmin.length() + textMoreDetails.length() + 1,
+ textDisabledByAdmin.length() + textMoreDetails.length() + 2,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java
index 6c3add3..09380ff 100644
--- a/src/com/android/settings/fuelgauge/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryEntry.java
@@ -155,9 +155,10 @@
mBatteryConsumer = batteryConsumer;
mIsHidden = isHidden;
mDefaultPackageName = packageName;
- mConsumedPower = batteryConsumer.getConsumedPower();
if (batteryConsumer instanceof UidBatteryConsumer) {
+ mConsumedPower = batteryConsumer.getConsumedPower();
+
UidBatteryConsumer uidBatteryConsumer = (UidBatteryConsumer) batteryConsumer;
int uid = uidBatteryConsumer.getUid();
if (mDefaultPackageName == null) {
@@ -183,11 +184,15 @@
getQuickNameIconForUid(uid, packages);
return;
} else if (batteryConsumer instanceof SystemBatteryConsumer) {
+ mConsumedPower = batteryConsumer.getConsumedPower()
+ - ((SystemBatteryConsumer) batteryConsumer).getPowerConsumedByApps();
final Pair<Integer, String> resourcePair = getResourcePairFromDrainType(
context, ((SystemBatteryConsumer) batteryConsumer).getDrainType());
iconId = resourcePair.first;
name = resourcePair.second;
} else if (batteryConsumer instanceof UserBatteryConsumer) {
+ mConsumedPower = batteryConsumer.getConsumedPower();
+
UserInfo info = um.getUserInfo(((UserBatteryConsumer) batteryConsumer).getUserId());
if (info != null) {
icon = Utils.getUserIcon(context, um, info);
diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java
index fba163d..15070c3 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverController.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverController.java
@@ -111,7 +111,7 @@
Utils.formatPercentage(percent)) :
mContext.getString(R.string.battery_saver_off_summary);
} else {
- return mContext.getString(R.string.battery_saver_auto_routine);
+ return mContext.getString(R.string.battery_saver_pref_auto_routine_summary);
}
}
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
index 73b875b..11f28b7 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
@@ -24,6 +24,6 @@
/**
* Get replacement activity for a given activity or fragment path.
*/
- String getReplacingActivityName(String activity);
+ String getReplacingActivityName(String originalActivity);
}
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
index e410695..218d096 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
@@ -16,13 +16,21 @@
package com.android.settings.fuelgauge;
+import android.content.Context;
+
/**
* Feature provider implementation for battery settings usage.
*/
public class BatterySettingsFeatureProviderImpl implements BatterySettingsFeatureProvider {
+ protected Context mContext;
+
+ public BatterySettingsFeatureProviderImpl(Context context) {
+ mContext = context.getApplicationContext();
+ }
+
@Override
- public String getReplacingActivityName(String activity) {
+ public String getReplacingActivityName(String originalActivity) {
return null;
}
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
index 9565036..790264c 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
@@ -19,7 +19,6 @@
import android.app.AppOpsManager;
import android.content.Context;
import android.os.UserManager;
-import android.provider.Settings;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -34,7 +33,6 @@
*/
public class BatteryManagerPreferenceController extends BasePreferenceController {
private static final String KEY_BATTERY_MANAGER = "smart_battery_manager";
- private static final int ON = 1;
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
private AppOpsManager mAppOpsManager;
private UserManager mUserManager;
@@ -56,24 +54,17 @@
public void updateState(Preference preference) {
super.updateState(preference);
final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager).size();
- final String setting = mPowerUsageFeatureProvider.isSmartBatterySupported()
- ? Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED
- : Settings.Global.APP_AUTO_RESTRICTION_ENABLED;
- final boolean featureOn =
- Settings.Global.getInt(mContext.getContentResolver(), setting, ON) == ON;
- updateSummary(preference, featureOn, num);
+ updateSummary(preference, num);
}
@VisibleForTesting
- void updateSummary(Preference preference, boolean featureOn, int num) {
+ void updateSummary(Preference preference, int num) {
if (num > 0) {
preference.setSummary(mContext.getResources().getQuantityString(
R.plurals.battery_manager_app_restricted, num, num));
- } else if (featureOn) {
- preference.setSummary(R.string.battery_manager_on);
} else {
- preference.setSummary(R.string.battery_manager_off);
+ preference.setSummary(R.string.battery_manager_summary);
}
}
}
diff --git a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
new file mode 100644
index 0000000..7a45602
--- /dev/null
+++ b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2021 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.gestures;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
+import android.provider.Settings;
+
+import androidx.annotation.Nullable;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.core.TogglePreferenceController;
+
+/**
+ * Configures the behaviour of long press power button action.
+ */
+public class LongPressPowerButtonPreferenceController extends TogglePreferenceController implements
+ LifecycleObserver {
+
+ private static final String POWER_BUTTON_LONG_PRESS_SETTING =
+ Settings.Global.POWER_BUTTON_LONG_PRESS;
+ private static final Uri POWER_BUTTON_LONG_PRESS_SETTING_URI =
+ Settings.Global.getUriFor(POWER_BUTTON_LONG_PRESS_SETTING);
+
+ // Used for fallback to global actions if necessary.
+ @VisibleForTesting
+ static final String CARDS_AVAILABLE_KEY =
+ Settings.Secure.GLOBAL_ACTIONS_PANEL_AVAILABLE;
+ @VisibleForTesting
+ static final String CARDS_ENABLED_KEY = Settings.Secure.GLOBAL_ACTIONS_PANEL_ENABLED;
+
+ /**
+ * Value used for long press power button behaviour when Assist setting is enabled.
+ *
+ * {@link com.android.server.policy.PhoneWindowManager#LONG_PRESS_POWER_GLOBAL_ACTIONS} for
+ * source of the value.
+ */
+ @VisibleForTesting
+ static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
+ @VisibleForTesting
+ static final int LONG_PRESS_POWER_SHUT_OFF = 2;
+ @VisibleForTesting
+ static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5; // Settings.Secure.ASSISTANT
+
+ /**
+ * Value used for long press power button behaviour when the Assist setting is disabled.
+ *
+ * If this value matches Assist setting, then it falls back to Global Actions panel or
+ * power menu, depending on their respective settings.
+ */
+ private static final int POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE =
+ R.integer.config_longPressOnPowerBehavior;
+
+ @Nullable
+ private SettingObserver mSettingsObserver;
+
+ public LongPressPowerButtonPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mSettingsObserver = new SettingObserver(screen.findPreference(getPreferenceKey()));
+ }
+
+ /**
+ * Called when the settings pages resumes.
+ */
+ @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+ public void onResume() {
+ if (mSettingsObserver != null) {
+ mSettingsObserver.register();
+ }
+ }
+
+ /**
+ * Called when the settings page pauses.
+ */
+ @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+ public void onPause() {
+ if (mSettingsObserver != null) {
+ mSettingsObserver.unregister();
+ }
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ final boolean enabled = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable);
+ return enabled ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ }
+
+ @Override
+ public boolean isChecked() {
+ final int powerButtonValue = Settings.Global.getInt(mContext.getContentResolver(),
+ POWER_BUTTON_LONG_PRESS_SETTING,
+ mContext.getResources().getInteger(POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE));
+ return powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE;
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ if (isChecked) {
+ return Settings.Global.putInt(mContext.getContentResolver(),
+ POWER_BUTTON_LONG_PRESS_SETTING, LONG_PRESS_POWER_ASSISTANT_VALUE);
+ }
+
+ // We need to determine the right disabled value - we set it to device default
+ // if it's different than Assist, otherwise we fallback to either global actions or power
+ //menu.
+ final int defaultPowerButtonValue = mContext.getResources().getInteger(
+ POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE);
+ if (defaultPowerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
+ final int fallbackValue = isCardsOrControlsAvailable() ? LONG_PRESS_POWER_GLOBAL_ACTIONS
+ : LONG_PRESS_POWER_SHUT_OFF;
+ return Settings.Global.putInt(mContext.getContentResolver(),
+ POWER_BUTTON_LONG_PRESS_SETTING, fallbackValue);
+ }
+
+ return Settings.Global.putInt(mContext.getContentResolver(),
+ POWER_BUTTON_LONG_PRESS_SETTING, defaultPowerButtonValue);
+ }
+
+ /**
+ * Returns true if the global actions menu on power button click is enabled via any of the
+ * content options.
+ */
+ private boolean isCardsOrControlsAvailable() {
+ final ContentResolver resolver = mContext.getContentResolver();
+ final boolean cardsAvailable = Settings.Secure.getInt(resolver, CARDS_AVAILABLE_KEY, 0)
+ != 0;
+ final boolean controlsAvailable = mContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_CONTROLS);
+ return cardsAvailable || controlsAvailable;
+ }
+
+ private final class SettingObserver extends ContentObserver {
+
+ private final Preference mPreference;
+
+ SettingObserver(Preference preference) {
+ super(new Handler(Looper.getMainLooper()));
+ mPreference = preference;
+ }
+
+ public void register() {
+ final ContentResolver cr = mContext.getContentResolver();
+ cr.registerContentObserver(POWER_BUTTON_LONG_PRESS_SETTING_URI, false, this);
+ }
+
+ public void unregister() {
+ final ContentResolver cr = mContext.getContentResolver();
+ cr.unregisterContentObserver(this);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ updateState(mPreference);
+ }
+ }
+
+}
diff --git a/src/com/android/settings/gestures/PowerMenuPreferenceController.java b/src/com/android/settings/gestures/PowerMenuPreferenceController.java
index 6ef583b..b11ba65 100644
--- a/src/com/android/settings/gestures/PowerMenuPreferenceController.java
+++ b/src/com/android/settings/gestures/PowerMenuPreferenceController.java
@@ -57,7 +57,8 @@
@Override
public int getAvailabilityStatus() {
- return isCardsAvailable() || isControlsAvailable() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ return isCardsAvailable() || isControlsAvailable() || isAssistInvocationAvailable()
+ ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
private boolean isControlsAvailable() {
@@ -68,4 +69,9 @@
return Settings.Secure.getInt(mContext.getContentResolver(),
CARDS_AVAILABLE_SETTING, 0) == 1;
}
+
+ private boolean isAssistInvocationAvailable() {
+ return mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable);
+ }
}
diff --git a/src/com/android/settings/homepage/contextualcards/slices/LowStorageSlice.java b/src/com/android/settings/homepage/contextualcards/slices/LowStorageSlice.java
index 576b435..3812534 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/LowStorageSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/LowStorageSlice.java
@@ -33,7 +33,7 @@
import com.android.settings.R;
import com.android.settings.SubSettings;
import com.android.settings.Utils;
-import com.android.settings.deviceinfo.StorageSettings;
+import com.android.settings.deviceinfo.StorageDashboardFragment;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBuilderUtils;
@@ -107,7 +107,7 @@
.toString();
return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
- StorageSettings.class.getName(), "" /* key */,
+ StorageDashboardFragment.class.getName(), "" /* key */,
screenTitle,
SettingsEnums.SLICE)
.setClassName(mContext.getPackageName(), SubSettings.class.getName())
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 9105c10..00f9a0e 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -138,7 +138,7 @@
@Override
public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider(Context context) {
if (mBatterySettingsFeatureProvider == null) {
- mBatterySettingsFeatureProvider = new BatterySettingsFeatureProviderImpl();
+ mBatterySettingsFeatureProvider = new BatterySettingsFeatureProviderImpl(context);
}
return mBatterySettingsFeatureProvider;
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
index b3b8196..52f682c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
@@ -105,7 +105,8 @@
Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
- assertThat(mBatterySaverController.getSummary()).isEqualTo("Based on your routine");
+ assertThat(mBatterySaverController.getSummary()).
+ isEqualTo("Will turn on based on your routine");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceControllerTest.java
index 435aa88..b01e3b1 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceControllerTest.java
@@ -63,31 +63,20 @@
}
@Test
- public void updateState_smartBatteryOnWithRestrictApps_showSummary() {
- mController.updateSummary(mPreference, true /* smartBatteryOn */, 2);
+ public void updateState_smartBatteryWithRestrictApps_showSummary() {
+ mController.updateSummary(mPreference, 2);
assertThat(mPreference.getSummary()).isEqualTo("2 apps restricted");
}
@Test
- public void updateState_smartBatteryOnWithoutRestriction_showSummary() {
+ public void updateState_smartBatteryWithoutRestriction_showSummary() {
when(mFeatureFactory.powerUsageFeatureProvider.isSmartBatterySupported()).thenReturn(true);
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, ON);
mController.updateState(mPreference);
- assertThat(mPreference.getSummary()).isEqualTo("On / Detecting when apps drain battery");
- }
-
- @Test
- public void updateState_smartBatteryOff_showSummary() {
- when(mFeatureFactory.powerUsageFeatureProvider.isSmartBatterySupported()).thenReturn(true);
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, OFF);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.getSummary()).isEqualTo("Off");
+ assertThat(mPreference.getSummary()).isEqualTo("Detecting when apps drain battery");
}
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetectorTest.java
index 0fd3ccf..5794b6c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetectorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetectorTest.java
@@ -54,9 +54,9 @@
}
@Test
- public void testDetect_notDisabled_tipVisible() {
+ public void testDetect_notDisabled_tipInvisible() {
SummaryDetector detector = new SummaryDetector(mPolicy, AVERAGE_TIME_MS);
- assertThat(detector.detect().isVisible()).isTrue();
+ assertThat(detector.detect().isVisible()).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java
new file mode 100644
index 0000000..de58c99
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2021 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.gestures;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.Application;
+import android.content.res.Resources;
+import android.provider.Settings;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class LongPressPowerButtonPreferenceControllerTest {
+
+ private static final String KEY_LONG_PRESS_POWER_BUTTON =
+ "gesture_power_menu_long_press_for_assist";
+
+ private Application mContext;
+ private Resources mResources;
+ private LongPressPowerButtonPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = spy(RuntimeEnvironment.application);
+ mResources = mock(Resources.class);
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+ mController = new LongPressPowerButtonPreferenceController(mContext,
+ KEY_LONG_PRESS_POWER_BUTTON);
+ }
+
+ @Test
+ public void isAvailable_configIsTrue_shouldReturnTrue() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void isAvailable_configIsFalse_shouldReturnFalse() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void preferenceChecked_longPressPowerSettingSetToAssistant() {
+ mController.onPreferenceChange(null, true);
+
+ assertThat(Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
+ LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE);
+ }
+
+ @Test
+ public void preferenceUnchecked_longPressPowerSettingSetToDefaultValue() {
+ // Value out of range chosen deliberately.
+ when(mResources.getInteger(
+ com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(8);
+
+ mController.onPreferenceChange(null, false);
+ assertThat(Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8);
+ }
+
+ @Test
+ public void preferenceUnchecked_assistDefault_setShutOff() {
+ // Value out of range chosen deliberately.
+ when(mResources.getInteger(
+ com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(
+ LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE);
+
+ mController.onPreferenceChange(null, false);
+ assertThat(Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
+ LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_SHUT_OFF);
+ }
+
+ @Test
+ public void preferenceUnchecked_assistDefaultGlobalActionsEnabled_setGlobalActions() {
+ // Value out of range chosen deliberately.
+ when(mResources.getInteger(
+ com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(
+ LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE);
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ LongPressPowerButtonPreferenceController.CARDS_AVAILABLE_KEY, 1);
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ LongPressPowerButtonPreferenceController.CARDS_ENABLED_KEY, 1);
+
+ mController.onPreferenceChange(null, false);
+ assertThat(Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
+ LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_GLOBAL_ACTIONS);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
index 570a680..f8d81f2 100644
--- a/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
@@ -18,8 +18,13 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
import android.content.Context;
import android.content.pm.PackageManager;
+import android.content.res.Resources;
import android.provider.Settings;
import com.android.settings.core.BasePreferenceController;
@@ -35,6 +40,7 @@
@RunWith(RobolectricTestRunner.class)
public class PowerMenuPreferenceControllerTest {
private Context mContext;
+ private Resources mResources;
private PowerMenuPreferenceController mController;
private ShadowPackageManager mShadowPackageManager;
@@ -44,17 +50,26 @@
private static final String CARDS_ENABLED = Settings.Secure.GLOBAL_ACTIONS_PANEL_ENABLED;
private static final String CARDS_AVAILABLE = Settings.Secure.GLOBAL_ACTIONS_PANEL_AVAILABLE;
+
@Before
public void setUp() {
- mContext = RuntimeEnvironment.application;
+ mContext = spy(RuntimeEnvironment.application);
+ mResources = mock(Resources.class);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+ when(mContext.getResources()).thenReturn(mResources);
mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
mController = new PowerMenuPreferenceController(mContext, KEY_GESTURE_POWER_MENU);
}
@Test
- public void getAvailabilityStatus_bothAvailable_available() {
+ public void getAvailabilityStatus_allAvailable_available() {
Settings.Secure.putInt(mContext.getContentResolver(), CARDS_AVAILABLE, 1);
mShadowPackageManager.setSystemFeature(CONTROLS_FEATURE, true);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
@@ -64,6 +79,9 @@
public void getAvailabilityStatus_onlyCardsAvailable_available() {
Settings.Secure.putInt(mContext.getContentResolver(), CARDS_AVAILABLE, 1);
mShadowPackageManager.setSystemFeature(CONTROLS_FEATURE, false);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
@@ -73,15 +91,69 @@
public void getAvailabilityStatus_onlyControlsAvailable_available() {
Settings.Secure.putInt(mContext.getContentResolver(), CARDS_AVAILABLE, 0);
mShadowPackageManager.setSystemFeature(CONTROLS_FEATURE, true);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
}
@Test
- public void getAvailabilityStatus_bothUnavailable_unavailable() {
+ public void getAvailabilityStatus_controlsAndCardsAvailable_available() {
+ Settings.Secure.putInt(mContext.getContentResolver(), CARDS_AVAILABLE, 1);
+ mShadowPackageManager.setSystemFeature(CONTROLS_FEATURE, true);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_controlsAndAssistAvailable_available() {
+ Settings.Secure.putInt(mContext.getContentResolver(), CARDS_AVAILABLE, 0);
+ mShadowPackageManager.setSystemFeature(CONTROLS_FEATURE, true);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_cardsAndAssistAvailable_available() {
+ Settings.Secure.putInt(mContext.getContentResolver(), CARDS_AVAILABLE, 1);
+ mShadowPackageManager.setSystemFeature(CONTROLS_FEATURE, false);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_onlyAssistAvailable_available() {
Settings.Secure.putInt(mContext.getContentResolver(), CARDS_AVAILABLE, 0);
mShadowPackageManager.setSystemFeature(CONTROLS_FEATURE, false);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_allUnavailable_unavailable() {
+ Settings.Secure.putInt(mContext.getContentResolver(), CARDS_AVAILABLE, 0);
+ mShadowPackageManager.setSystemFeature(CONTROLS_FEATURE, false);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.CONDITIONALLY_UNAVAILABLE);