Merge "Centered fingerprint icon" into tm-qpr-dev
diff --git a/res/layout/search_bar_two_pane_version.xml b/res/layout/search_bar_two_pane_version.xml
index 9ce220c..f98985c 100644
--- a/res/layout/search_bar_two_pane_version.xml
+++ b/res/layout/search_bar_two_pane_version.xml
@@ -38,6 +38,6 @@
android:layout_height="wrap_content"
android:paddingStart="@dimen/search_bar_title_padding_start_regular_two_pane"
android:layout_gravity="start"
- android:text="@string/search_menu"/>
+ android:text="@string/search_settings"/>
</Toolbar>
</com.google.android.material.card.MaterialCardView>
\ No newline at end of file
diff --git a/res/layout/sfps_enroll_finish_base.xml b/res/layout/sfps_enroll_finish_base.xml
index f58b86c..f442e90 100644
--- a/res/layout/sfps_enroll_finish_base.xml
+++ b/res/layout/sfps_enroll_finish_base.xml
@@ -30,15 +30,6 @@
android:clipToPadding="false"
android:clipChildren="false">
- <com.android.settings.biometrics.fingerprint.FingerprintRequireScreenOnToAuthToggle
- style="@style/SudSwitchStyle"
- android:id="@+id/require_screen_on_to_auth_toggle"
- android:layout_gravity="start"
- android:paddingLeft="0dp"
- android:paddingStart="0dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
<com.google.android.setupdesign.view.FillContentLayout
android:layout_width="@dimen/sfps_enrollment_finished_icon_max_size"
android:layout_height="@dimen/sfps_enrollment_finished_icon_max_size"
diff --git a/res/layout/sfps_require_screen_on_to_auth_toggle.xml b/res/layout/sfps_require_screen_on_to_auth_toggle.xml
deleted file mode 100644
index 02bb979..0000000
--- a/res/layout/sfps_require_screen_on_to_auth_toggle.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- ~ Copyright (C) 2022 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.
- -->
-
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="start"
- style="?attr/fingerprint_layout_theme">
-
- <!-- Title -->
- <com.google.android.setupdesign.view.RichTextView
- android:id="@+id/title"
- android:paddingTop="8dp"
- android:paddingBottom="4dp"
- android:layout_alignParentStart="true"
- android:textAlignment="viewStart"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/security_settings_require_screen_on_to_auth_title"
- android:textColor="?android:attr/textColorPrimary"
- android:textSize="@dimen/sud_description_text_size"
- />
-
- <!-- Subtitle -->
- <TextView
- android:id="@+id/subtitle"
- android:paddingBottom="8dp"
- android:layout_alignParentStart="true"
- android:textAlignment="viewStart"
- android:layout_toStartOf="@+id/toggle"
- android:layout_below="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/security_settings_require_screen_on_to_auth_description"
- android:textColor="?android:attr/textColorSecondary"/>
-
- <!-- Toggle -->
- <Switch
- android:layout_alignParentEnd="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/toggle"
- android:layout_centerVertical="true"
- android:checked="false"
- style="@style/SudSwitchStyle"/>
-
-</RelativeLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 32bfa1c..5fafdbf 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1287,14 +1287,12 @@
<string name="security_settings_udfps_enroll_progress_a11y_message">Enrolling fingerprint <xliff:g id="percentage" example="10">%d</xliff:g> percent</string>
<!-- Title shown in fingerprint enrollment dialog once enrollment is completed [CHAR LIMIT=29] -->
<string name="security_settings_fingerprint_enroll_finish_title">Fingerprint added</string>
- <!-- Message shown in SFPS enrollment dialog once enrollment is completed [CHAR LIMIT=NONE] -->
- <string name="security_settings_sfps_enroll_finish">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
<!-- Message shown in fingerprint enrollment dialog once enrollment is completed (tablet) [CHAR LIMIT=NONE] -->
- <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps</string>
+ <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
<!-- Message shown in fingerprint enrollment dialog once enrollment is completed (device) [CHAR LIMIT=NONE] -->
- <string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps</string>
+ <string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
<!-- Message shown in fingerprint enrollment dialog once enrollment is completed (default) [CHAR LIMIT=NONE] -->
- <string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps</string>
+ <string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
<!-- Title for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
<string name="security_settings_require_screen_on_to_auth_title">Unlock only when screen is on</string>
<!-- Description for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
diff --git a/res/xml/app_data_usage.xml b/res/xml/app_data_usage.xml
index e94c4ff..aacc1f6 100644
--- a/res/xml/app_data_usage.xml
+++ b/res/xml/app_data_usage.xml
@@ -51,6 +51,7 @@
<PreferenceCategory
android:key="app_data_usage_settings_category"
+ settings:isPreferenceVisible="@bool/config_show_sim_info"
android:layout="@layout/preference_category_no_label">
<Preference
diff --git a/res/xml/network_provider_internet.xml b/res/xml/network_provider_internet.xml
index c9c576e..981afb3 100644
--- a/res/xml/network_provider_internet.xml
+++ b/res/xml/network_provider_internet.xml
@@ -99,6 +99,7 @@
android:title="@string/data_saver_title"
android:icon="@drawable/ic_settings_data_usage"
android:order="10"
+ settings:isPreferenceVisible="@bool/config_show_data_saver"
android:fragment="com.android.settings.datausage.DataSaverSummary"/>
<com.android.settings.vpn2.VpnInfoPreference
diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml
index 5b37f6a..3dd6e18 100644
--- a/res/xml/special_access.xml
+++ b/res/xml/special_access.xml
@@ -97,12 +97,14 @@
android:key="premium_sms"
android:title="@string/premium_sms_access"
android:fragment="com.android.settings.applications.specialaccess.premiumsms.PremiumSmsAccess"
+ settings:isPreferenceVisible="@bool/config_show_premium_sms"
settings:controller="com.android.settings.applications.specialaccess.premiumsms.PremiumSmsController" />
<Preference
android:key="data_saver"
android:title="@string/unrestricted_data_saver"
android:fragment="com.android.settings.datausage.UnrestrictedDataAccess"
+ settings:isPreferenceVisible="@bool/config_show_data_saver"
settings:controller="com.android.settings.applications.specialaccess.DataSaverController" />
<Preference
diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
index 732163b..747bd78 100644
--- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
@@ -153,7 +153,7 @@
} else {
Log.i(TAG, "Launch : " + mPackageName + " with package name");
AdvancedPowerUsageDetail.startBatteryDetailPage(mParent.getActivity(), mParent,
- mPackageName);
+ mPackageName, UserHandle.CURRENT);
}
return true;
}
diff --git a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
index e827325..32662a2 100644
--- a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
@@ -35,6 +35,7 @@
import com.android.settings.Utils;
import com.android.settings.datausage.AppDataUsage;
import com.android.settings.datausage.DataUsageUtils;
+import com.android.settings.network.SubscriptionUtil;
import com.android.settingslib.AppItem;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -147,7 +148,8 @@
}
private static NetworkTemplate getTemplate(Context context) {
- if (DataUsageUtils.hasReadyMobileRadio(context)) {
+ if (SubscriptionUtil.isSimHardwareVisible(context)
+ && DataUsageUtils.hasReadyMobileRadio(context)) {
return new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE).setMeteredness(
NetworkStats.METERED_YES).build();
}
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 6b032fb..d335324 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -659,7 +659,8 @@
break;
case LIST_TYPE_BATTERY_OPTIMIZATION:
AdvancedPowerUsageDetail.startBatteryDetailPage(
- getActivity(), this, mCurrentPkgName);
+ getActivity(), this, mCurrentPkgName,
+ UserHandle.getUserHandleForUid(mCurrentUid));
break;
// TODO: Figure out if there is a way where we can spin up the profile's settings
// process ahead of time, to avoid a long load of data when user clicks on a managed
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
index 4506310..b8ec5e6 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
@@ -25,7 +25,6 @@
import android.os.Bundle;
import android.util.Log;
import android.view.View;
-import android.widget.CompoundButton;
import androidx.annotation.VisibleForTesting;
@@ -45,7 +44,6 @@
public class FingerprintEnrollFinish extends BiometricEnrollBase {
private static final String TAG = "FingerprintEnrollFinish";
- private static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH = "require_screen_on_to_auth_toggle";
private static final String ACTION_FINGERPRINT_SETTINGS =
"android.settings.FINGERPRINT_SETTINGS";
@VisibleForTesting
@@ -54,15 +52,10 @@
private FingerprintManager mFingerprintManager;
- private FingerprintSettingsRequireScreenOnToAuthPreferenceController
- mRequireScreenOnToAuthPreferenceController;
- private FingerprintRequireScreenOnToAuthToggle mRequireScreenOnToAuthToggle;
private boolean mCanAssumeSfps;
private boolean mIsAddAnotherOrFinish;
- private CompoundButton.OnCheckedChangeListener mRequireScreenOnToAuthToggleListener;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -72,20 +65,11 @@
mCanAssumeSfps = props != null && props.size() == 1 && props.get(0).isAnySidefpsType();
if (mCanAssumeSfps) {
setContentView(R.layout.sfps_enroll_finish);
- mRequireScreenOnToAuthPreferenceController =
- new FingerprintSettingsRequireScreenOnToAuthPreferenceController(
- getApplicationContext(),
- KEY_REQUIRE_SCREEN_ON_TO_AUTH
- );
} else {
setContentView(R.layout.fingerprint_enroll_finish);
}
setHeaderText(R.string.security_settings_fingerprint_enroll_finish_title);
- if (mCanAssumeSfps) {
- setDescriptionText(R.string.security_settings_sfps_enroll_finish);
- } else {
- setDescriptionText(R.string.security_settings_fingerprint_enroll_finish_v2_message);
- }
+ setDescriptionText(R.string.security_settings_fingerprint_enroll_finish_v2_message);
mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
mFooterBarMixin.setSecondaryButton(
@@ -104,20 +88,6 @@
.setTheme(R.style.SudGlifButton_Primary)
.build()
);
-
- if (mCanAssumeSfps) {
- mRequireScreenOnToAuthToggleListener =
- (buttonView, isChecked) -> {
- mRequireScreenOnToAuthPreferenceController.setChecked(isChecked);
- };
- mRequireScreenOnToAuthToggle = findViewById(R.id.require_screen_on_to_auth_toggle);
- mRequireScreenOnToAuthToggle.setChecked(
- mRequireScreenOnToAuthPreferenceController.isChecked());
- mRequireScreenOnToAuthToggle.setListener(mRequireScreenOnToAuthToggleListener);
- mRequireScreenOnToAuthToggle.setOnClickListener(v -> {
- mRequireScreenOnToAuthToggle.getSwitch().toggle();
- });
- }
}
@Override
@@ -131,13 +101,6 @@
@Override
protected void onResume() {
super.onResume();
- if (mCanAssumeSfps) {
- mRequireScreenOnToAuthToggleListener.onCheckedChanged(
- mRequireScreenOnToAuthToggle.getSwitch(),
- mRequireScreenOnToAuthToggle.isChecked()
- );
- }
-
FooterButton addButton = mFooterBarMixin.getSecondaryButton();
final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintRequireScreenOnToAuthToggle.java b/src/com/android/settings/biometrics/fingerprint/FingerprintRequireScreenOnToAuthToggle.java
deleted file mode 100644
index f88c9aa..0000000
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintRequireScreenOnToAuthToggle.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2022 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.biometrics.fingerprint;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.widget.CompoundButton;
-import android.widget.LinearLayout;
-import android.widget.Switch;
-
-import com.android.settings.R;
-
-/**
- * A layout that contains a start-justified title, and an end-justified switch.
- */
-public class FingerprintRequireScreenOnToAuthToggle extends LinearLayout {
- private Switch mSwitch;
-
- public FingerprintRequireScreenOnToAuthToggle(Context context) {
- this(context, null /* attrs */);
- }
-
- public FingerprintRequireScreenOnToAuthToggle(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public FingerprintRequireScreenOnToAuthToggle(
- Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
-
- LayoutInflater.from(context).inflate(R.layout.sfps_require_screen_on_to_auth_toggle,
- this, true /* attachToRoot */);
-
- mSwitch = findViewById(R.id.toggle);
- mSwitch.setClickable(true);
- mSwitch.setFocusable(false);
- }
-
- public boolean isChecked() {
- return mSwitch.isChecked();
- }
-
- /**
- *
- * @param checked
- */
- public void setChecked(boolean checked) {
- mSwitch.setChecked(checked);
- }
-
- /**
- *
- * @param listener
- */
- public void setListener(CompoundButton.OnCheckedChangeListener listener) {
- mSwitch.setOnCheckedChangeListener(listener);
- }
-
- public Switch getSwitch() {
- return mSwitch;
- }
-}
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index d57a2a1..e15cead 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -45,6 +45,7 @@
import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
+import com.android.settings.network.SubscriptionUtil;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.AppItem;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -109,6 +110,10 @@
private long mSelectedCycle;
private boolean mIsLoading;
+ public boolean isSimHardwareVisible(Context context) {
+ return SubscriptionUtil.isSimHardwareVisible(context);
+ }
+
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -161,7 +166,7 @@
final UidDetailProvider uidDetailProvider = getUidDetailProvider();
if (mAppItem.key > 0) {
- if (!UserHandle.isApp(mAppItem.key)) {
+ if ((!isSimHardwareVisible(mContext)) || !UserHandle.isApp(mAppItem.key)) {
final UidDetail uidDetail = uidDetailProvider.getUidDetail(mAppItem.key, true);
mIcon = uidDetail.icon;
mLabel = uidDetail.label;
@@ -328,6 +333,9 @@
}
private void updatePrefs(boolean restrictBackground, boolean unrestrictData) {
+ if (!isSimHardwareVisible(mContext)) {
+ return;
+ }
setBackPreferenceListAnimatorIfLoaded();
final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted(
mContext, mPackageName, UserHandle.getUserId(mAppItem.key));
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 57931c1..baf8e7e 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -42,6 +42,7 @@
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.network.SubscriptionUtil;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.net.DataUsageController;
@@ -102,6 +103,10 @@
super.onCreate(icicle);
final Context context = getContext();
+ if (!SubscriptionUtil.isSimHardwareVisible(context)) {
+ finish();
+ return;
+ }
mDataUsageController = new DataUsageController(context);
Bundle args = getArguments();
@@ -498,7 +503,8 @@
@Override
protected boolean isPageSearchEnabled(Context context) {
- return DataUsageUtils.hasMobileData(context);
+ return SubscriptionUtil.isSimHardwareVisible(context)
+ && DataUsageUtils.hasMobileData(context);
}
};
diff --git a/src/com/android/settings/datausage/DataSaverSummary.java b/src/com/android/settings/datausage/DataSaverSummary.java
index 744f692..4712e6f 100644
--- a/src/com/android/settings/datausage/DataSaverSummary.java
+++ b/src/com/android/settings/datausage/DataSaverSummary.java
@@ -59,6 +59,11 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ if (!isDataSaverVisible(getContext())) {
+ finishFragment();
+ return;
+ }
+
addPreferencesFromResource(R.xml.data_saver);
mUnrestrictedAccess = findPreference(KEY_UNRESTRICTED_ACCESS);
mApplicationsState = ApplicationsState.getInstance(
@@ -192,12 +197,18 @@
}
+ public static boolean isDataSaverVisible(Context context) {
+ return context.getResources()
+ .getBoolean(R.bool.config_show_data_saver);
+ }
+
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.data_saver) {
@Override
protected boolean isPageSearchEnabled(Context context) {
- return DataUsageUtils.hasMobileData(context)
+ return isDataSaverVisible(context)
+ && DataUsageUtils.hasMobileData(context)
&& DataUsageUtils.getDefaultSubscriptionId(context)
!= SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index abcc45f..fabf059 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -75,11 +75,19 @@
return R.string.help_url_data_usage;
}
+ public boolean isSimHardwareVisible(Context context) {
+ return SubscriptionUtil.isSimHardwareVisible(context);
+ }
+
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Context context = getContext();
+ if (!isSimHardwareVisible(context)) {
+ finish();
+ return;
+ }
enableProxySubscriptionManager(context);
boolean hasMobileData = DataUsageUtils.hasMobileData(context);
@@ -137,6 +145,9 @@
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
final Activity activity = getActivity();
final ArrayList<AbstractPreferenceController> controllers = new ArrayList<>();
+ if (!isSimHardwareVisible(context)) {
+ return controllers;
+ }
mSummaryController =
new DataUsageSummaryPreferenceController(activity, getSettingsLifecycle(), this,
DataUsageUtils.getDefaultSubscriptionId(activity));
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index f6ed2a1..3705dfc 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -227,7 +227,8 @@
* Start packageName's battery detail page.
*/
public static void startBatteryDetailPage(
- Activity caller, Instrumentable instrumentable, String packageName) {
+ Activity caller, Instrumentable instrumentable, String packageName,
+ UserHandle userHandle) {
final Bundle args = new Bundle(3);
final PackageManager packageManager = caller.getPackageManager();
args.putString(EXTRA_PACKAGE_NAME, packageName);
@@ -243,6 +244,7 @@
.setTitleRes(R.string.battery_details_title)
.setArguments(args)
.setSourceMetricsCategory(instrumentable.getMetricsCategory())
+ .setUserHandle(userHandle)
.launch();
}
@@ -531,7 +533,6 @@
private CharSequence getAppActiveTime(Bundle bundle) {
final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
- final int consumedPower = bundle.getInt(EXTRA_POWER_USAGE_AMOUNT);
final int uid = bundle.getInt(EXTRA_UID, 0);
final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null);
final long totalTimeMs = foregroundTimeMs + backgroundTimeMs;
@@ -543,9 +544,7 @@
return null;
}
if (totalTimeMs == 0) {
- usageTimeSummary = getText(
- isChartGraphEnabled && consumedPower > 0 ? R.string.battery_usage_without_time
- : R.string.battery_not_usage);
+ usageTimeSummary = getText(R.string.battery_usage_without_time);
} else if (slotTime == null) {
// Shows summary text with last full charge if slot time is null.
usageTimeSummary = getAppFullChargeActiveSummary(
diff --git a/src/com/android/settings/notification/history/NotificationHistoryActivity.java b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
index 4fecfc9..1f83cc7 100644
--- a/src/com/android/settings/notification/history/NotificationHistoryActivity.java
+++ b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
@@ -73,6 +73,10 @@
public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
private static String TAG = "NotifHistory";
+ // MAX_RECENT_DISMISS_ITEM_COUNT needs to be less or equals than
+ // R.integer.config_notificationServiceArchiveSize, which is the Number of notifications kept
+ // in the notification service historical archive
+ private static final int MAX_RECENT_DISMISS_ITEM_COUNT = 50;
private ViewGroup mHistoryOn;
private ViewGroup mHistoryOff;
@@ -388,7 +392,8 @@
snoozed = getSnoozedNotifications();
dismissed = mNm.getHistoricalNotificationsWithAttribution(
NotificationHistoryActivity.this.getPackageName(),
- NotificationHistoryActivity.this.getAttributionTag(), 6, false);
+ NotificationHistoryActivity.this.getAttributionTag(),
+ MAX_RECENT_DISMISS_ITEM_COUNT, false);
} catch (SecurityException | RemoteException e) {
Log.d(TAG, "OnPaused called while trying to retrieve notifications");
}
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
index 39d51fa..ed04910 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
@@ -18,9 +18,13 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
import static org.mockito.Mockito.spy;
import android.content.Context;
+import android.content.res.Resources;
+
+import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
@@ -34,23 +38,35 @@
public class DataSaverControllerTest {
private Context mContext;
+ private Resources mResources;
private DataSaverController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+
+ mResources = spy(mContext.getResources());
+ when(mContext.getResources()).thenReturn(mResources);
+
mController = new DataSaverController(mContext, "key");
}
@Test
public void testDataSaver_byDefault_shouldBeShown() {
+ when(mResources.getBoolean(R.bool.config_show_data_saver)).thenReturn(true);
assertThat(mController.isAvailable()).isTrue();
}
@Test
@Config(qualifiers = "mcc999")
+ public void testDataSaver_ifDisabledByCarrier_shouldNotBeShown() {
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
public void testDataSaver_ifDisabled_shouldNotBeShown() {
+ when(mResources.getBoolean(R.bool.config_show_data_saver)).thenReturn(false);
assertThat(mController.isAvailable()).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java
index 4c4acc7..ed4cbd1 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java
@@ -21,8 +21,12 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.res.Resources;
+
+import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
@@ -36,23 +40,35 @@
public class PremiumSmsControllerTest {
private Context mContext;
+ private Resources mResources;
private PremiumSmsController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+
+ mResources = spy(mContext.getResources());
+ when(mContext.getResources()).thenReturn(mResources);
+
mController = new PremiumSmsController(mContext, "key");
}
@Test
public void getAvailability_byDefault_shouldBeShown() {
+ when(mResources.getBoolean(R.bool.config_show_premium_sms)).thenReturn(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
@Test
@Config(qualifiers = "mcc999")
+ public void getAvailability_disabledByCarrier_returnUnavailable() {
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
public void getAvailability_disabled_returnUnavailable() {
+ when(mResources.getBoolean(R.bool.config_show_premium_sms)).thenReturn(false);
assertThat(mController.isAvailable()).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java
index 53d46ca..5982413 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java
@@ -21,8 +21,12 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.res.Resources;
+
+import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
@@ -36,23 +40,35 @@
public class PremiumSmsScreenPreferenceControllerTest {
private Context mContext;
+ private Resources mResources;
private PremiumSmsScreenPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+
+ mResources = spy(mContext.getResources());
+ when(mContext.getResources()).thenReturn(mResources);
+
mController = new PremiumSmsScreenPreferenceController(mContext, "key");
}
@Test
public void getAvailability_byDefault_shouldBeShown() {
+ when(mResources.getBoolean(R.bool.config_show_premium_sms)).thenReturn(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
@Test
@Config(qualifiers = "mcc999")
+ public void getAvailability_disabledByCarrier_returnUnavailable() {
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
public void getAvailability_disabled_returnUnavailable() {
+ when(mResources.getBoolean(R.bool.config_show_premium_sms)).thenReturn(false);
assertThat(mController.isAvailable()).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
index 483d746..bccec3e 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
@@ -110,7 +110,10 @@
@Test
@Config(shadows = ShadowFragment.class)
public void onCreate_appUid_shouldGetAppLabelFromAppInfo() throws NameNotFoundException {
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
final FragmentActivity activity = spy(Robolectric.setupActivity(FragmentActivity.class));
doReturn(mPackageManager).when(activity).getPackageManager();
doReturn(activity).when(mFragment).getActivity();
@@ -140,7 +143,10 @@
@Test
@Config(shadows = ShadowFragment.class)
public void onCreate_notAppUid_shouldGetAppLabelFromUidDetailProvider() {
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
ReflectionHelpers.setField(mFragment, "mDashboardFeatureProvider",
FakeFeatureFactory.setupForTest().dashboardFeatureProvider);
doReturn(Robolectric.setupActivity(FragmentActivity.class)).when(mFragment).getActivity();
@@ -167,7 +173,10 @@
@Test
public void bindAppHeader_allWorkApps_shouldNotShowAppInfoLink() {
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
when(mFragment.getPreferenceManager())
.thenReturn(mock(PreferenceManager.class, RETURNS_DEEP_STUBS));
@@ -184,7 +193,10 @@
throws PackageManager.NameNotFoundException {
final int fakeUserId = 100;
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
final ArraySet<String> packages = new ArraySet<>();
packages.add("pkg");
final AppItem appItem = new AppItem(123456789);
@@ -210,7 +222,10 @@
@Test
public void changePreference_backgroundData_shouldUpdateUI() {
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
final AppItem appItem = new AppItem(123456789);
final RestrictedSwitchPreference pref = mock(RestrictedSwitchPreference.class);
final DataSaverBackend dataSaverBackend = mock(DataSaverBackend.class);
@@ -227,7 +242,10 @@
@Test
public void updatePrefs_restrictedByAdmin_shouldDisablePreference() {
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
final int testUid = 123123;
final AppItem appItem = new AppItem(testUid);
final RestrictedSwitchPreference restrictBackgroundPref
@@ -255,7 +273,10 @@
@Test
public void bindData_noAppUsageData_shouldHideCycleSpinner() {
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
final SpinnerPreference cycle = mock(SpinnerPreference.class);
ReflectionHelpers.setField(mFragment, "mCycle", cycle);
final Preference preference = mock(Preference.class);
@@ -271,7 +292,10 @@
@Test
public void bindData_hasAppUsageData_shouldShowCycleSpinnerAndUpdateUsageSummary() {
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
final Context context = RuntimeEnvironment.application;
ReflectionHelpers.setField(mFragment, "mContext", context);
final long backgroundBytes = 1234L;
@@ -300,7 +324,10 @@
@Test
public void onCreateLoader_categoryApp_shouldQueryDataUsageUsingAppKey() {
- mFragment = new AppDataUsage();
+ mFragment = new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ };
final Context context = RuntimeEnvironment.application;
final int testUid = 123123;
final AppItem appItem = new AppItem(testUid);
@@ -323,7 +350,10 @@
@Test
public void onCreateLoader_categoryUser_shouldQueryDataUsageUsingAssociatedUids() {
- mFragment = new AppDataUsage();
+ mFragment = new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ };
final Context context = RuntimeEnvironment.application;
final int testUserId = 11;
final AppItem appItem = new AppItem(testUserId);
@@ -360,7 +390,10 @@
appItem.category = AppItem.CATEGORY_APP;
appItem.addUid(uid);
- mFragment = new AppDataUsage();
+ mFragment = new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ };
ReflectionHelpers.setField(mFragment, "mContext", RuntimeEnvironment.application);
ReflectionHelpers.setField(mFragment, "mCycles", testCycles);
ReflectionHelpers.setField(mFragment, "mAppItem", appItem);
@@ -393,7 +426,10 @@
builder.setStartTime(tenDaysAgo).setEndTime(now).setTotalUsage(1234L);
data.add(builder.build());
- mFragment = new AppDataUsage();
+ mFragment = new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ };
ReflectionHelpers.setField(mFragment, "mContext", RuntimeEnvironment.application);
ReflectionHelpers.setField(mFragment, "mCycleAdapter", mock(CycleAdapter.class));
ReflectionHelpers.setField(mFragment, "mSelectedCycle", tenDaysAgo);
@@ -420,7 +456,10 @@
ShadowDataUsageUtils.HAS_SIM = false;
ShadowSubscriptionManager.setDefaultDataSubscriptionId(
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
- mFragment = spy(new AppDataUsage());
+ mFragment = spy(new AppDataUsage() {
+ @Override
+ public boolean isSimHardwareVisible(Context context) { return true; }
+ });
doReturn(Robolectric.setupActivity(FragmentActivity.class)).when(mFragment).getActivity();
doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
final UidDetailProvider uidDetailProvider = mock(UidDetailProvider.class);
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
index 6d10814..68d49fc 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
@@ -29,12 +29,15 @@
import android.app.usage.NetworkStatsManager;
import android.content.Context;
+import android.content.res.Resources;
import android.net.NetworkPolicyManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import androidx.fragment.app.FragmentActivity;
+import com.android.settings.R;
+
import com.android.settings.testutils.shadow.ShadowDashboardFragment;
import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
import com.android.settings.testutils.shadow.ShadowUserManager;
@@ -70,6 +73,7 @@
private NetworkStatsManager mNetworkStatsManager;
private TelephonyManager mTelephonyManager;
private Context mContext;
+ private Resources mResources;
private FragmentActivity mActivity;
/**
@@ -84,13 +88,18 @@
ShadowUserManager.getShadow().setIsAdminUser(true);
shadowContext.setSystemService(Context.NETWORK_POLICY_SERVICE, mNetworkPolicyManager);
- mContext = RuntimeEnvironment.application;
+ mContext = spy(RuntimeEnvironment.application);
mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
final ShadowTelephonyManager shadowTelephonyManager = Shadows.shadowOf(mTelephonyManager);
shadowTelephonyManager.setTelephonyManagerForSubscriptionId(
SubscriptionManager.INVALID_SUBSCRIPTION_ID, mTelephonyManager);
shadowTelephonyManager.setTelephonyManagerForSubscriptionId(1, mTelephonyManager);
mActivity = spy(Robolectric.buildActivity(FragmentActivity.class).get());
+
+ mResources = spy(mContext.getResources());
+ doReturn(mResources).when(mContext).getResources();
+ doReturn(true).when(mResources).getBoolean(R.bool.config_show_sim_info);
+
doReturn(mNetworkStatsManager).when(mActivity).getSystemService(NetworkStatsManager.class);
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 6a1280f..90e8caf 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -434,8 +434,7 @@
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
- assertThat(captor.getValue().toString())
- .isEqualTo("No usage from last full charge");
+ assertThat(captor.getValue().toString()).isEmpty();
}
@Test
@@ -742,7 +741,8 @@
public void startBatteryDetailPage_noBatteryUsage_hasBasicData() {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
- AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment, PACKAGE_NAME[0]);
+ AdvancedPowerUsageDetail.startBatteryDetailPage(
+ mActivity, mFragment, PACKAGE_NAME[0], UserHandle.OWNER);
verify(mActivity).startActivity(captor.capture());
@@ -760,7 +760,8 @@
PackageManager.NameNotFoundException {
doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
- AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment, PACKAGE_NAME[0]);
+ AdvancedPowerUsageDetail.startBatteryDetailPage(
+ mActivity, mFragment, PACKAGE_NAME[0], UserHandle.OWNER);
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
}