Merge "Make chart time slot not clickable when accessibility servie is enabled" into sc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0d032aa..f427d53 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -731,13 +731,7 @@
<!-- In the security screen, the header title for security statuses -->
<string name="security_status_title">Security status</string>
<!-- Summary for Security settings, explaining a few important settings under it [CHAR LIMIT=NONE] -->
- <string name="security_dashboard_summary_face">Screen lock, face unlock</string>
- <!-- Summary for Security settings, explaining a few important settings under it [CHAR LIMIT=NONE] -->
- <string name="security_dashboard_summary">Screen lock, fingerprint</string>
- <!-- Summary for Security settings when fingerprint is not supported [CHAR LIMIT=NONE]-->
- <string name="security_dashboard_summary_no_fingerprint">Screen lock</string>
- <!-- Summary for Security settings when biometric unlock is supported [CHAR LIMIT=NONE] -->
- <string name="security_dashboard_summary_biometric">Screen lock, biometric unlock, app security</string>
+ <string name="security_dashboard_summary">Screen lock, Find My Device, app security</string>
<!-- Face enrollment and settings --><skip />
<!-- Message shown in summary field when face unlock is set up. [CHAR LIMIT=40] -->
@@ -10791,16 +10785,7 @@
<!-- Summary of display with screen sleep timeout [CHAR LIMIT=NONE] -->
<string name="display_summary">Sleep after <xliff:g id="timeout_description" example="10 minutes">%1$s</xliff:g> of inactivity</string>
<!-- Summary for Display settings, explaining a few important settings under it [CHAR LIMIT=NONE]-->
- <string name="display_dashboard_summary">Wallpaper, sleep, font size</string>
-
- <!-- Summary for Display settings, explaining a few important settings under it [CHAR LIMIT=NONE]-->
- <string name="display_dashboard_summary_with_style">Styles, wallpapers, screen timeout, font size</string>
-
- <!-- Summary for the top level Display Settings [CHAR LIMIT=NONE]-->
- <string name="display_dashboard_summary_2">Screen timeout, font size</string>
-
- <!-- Summary for Display settings, explaining a few important settings under it [CHAR LIMIT=NONE]-->
- <string name="display_dashboard_nowallpaper_summary">Sleep, font size</string>
+ <string name="display_dashboard_summary">Screen timeout, font size</string>
<!-- Example summary of display used in Setup Wizard preview screen [CHAR LIMIT=NONE] -->
<string name="display_summary_example">Sleep after 10 minutes of inactivity</string>
diff --git a/res/xml/top_level_settings_grouped.xml b/res/xml/top_level_settings_grouped.xml
index 6c03380..7b4f8a1 100644
--- a/res/xml/top_level_settings_grouped.xml
+++ b/res/xml/top_level_settings_grouped.xml
@@ -86,7 +86,7 @@
android:key="top_level_display"
android:order="-80"
android:title="@string/display_settings"
- android:summary="@string/summary_placeholder"
+ android:summary="@string/display_dashboard_summary"
settings:controller="com.android.settings.display.TopLevelDisplayPreferenceController"/>
<com.android.settingslib.RestrictedTopLevelPreference
@@ -112,7 +112,7 @@
android:key="top_level_security"
android:order="-50"
android:title="@string/security_settings_title"
- android:summary="@string/security_dashboard_summary_biometric"
+ android:summary="@string/security_dashboard_summary"
settings:controller="com.android.settings.security.TopLevelSecurityEntryPreferenceController"/>
<Preference
diff --git a/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java
index 6b06daf..cfee6a4 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java
@@ -47,6 +47,7 @@
long mTotalBytes;
private UsageProgressBarPreference mUsageProgressBarPreference;
private StorageEntry mStorageEntry;
+ boolean mIsUpdateStateFromSelectedStorageEntry;
public StorageUsageProgressBarPreferenceController(Context context, String key) {
super(context, key);
@@ -68,7 +69,6 @@
@Override
public void displayPreference(PreferenceScreen screen) {
mUsageProgressBarPreference = screen.findPreference(getPreferenceKey());
- getStorageStatsAndUpdateUi();
}
private void getStorageStatsAndUpdateUi() {
@@ -101,12 +101,18 @@
if (mUsageProgressBarPreference == null) {
return;
}
+ mIsUpdateStateFromSelectedStorageEntry = true;
ThreadUtils.postOnMainThread(() -> updateState(mUsageProgressBarPreference));
});
}
@Override
public void updateState(Preference preference) {
+ if (!mIsUpdateStateFromSelectedStorageEntry) {
+ // Returns here to avoid jank by unnecessary UI update.
+ return;
+ }
+ mIsUpdateStateFromSelectedStorageEntry = false;
mUsageProgressBarPreference.setUsageSummary(
getStorageSummary(R.string.storage_usage_summary, mUsedBytes));
mUsageProgressBarPreference.setTotalSummary(
diff --git a/src/com/android/settings/display/TopLevelDisplayPreferenceController.java b/src/com/android/settings/display/TopLevelDisplayPreferenceController.java
index 73aafe5..5fda13e 100644
--- a/src/com/android/settings/display/TopLevelDisplayPreferenceController.java
+++ b/src/com/android/settings/display/TopLevelDisplayPreferenceController.java
@@ -33,18 +33,4 @@
? AVAILABLE
: UNSUPPORTED_ON_DEVICE;
}
-
- @Override
- public CharSequence getSummary() {
- final WallpaperPreferenceController controller =
- new WallpaperPreferenceController(mContext, "unused_key");
- if (controller.isAvailable()) {
- return mContext.getText(
- controller.areStylesAvailable()
- ? R.string.display_dashboard_summary_with_style
- : R.string.display_dashboard_summary);
- } else {
- return mContext.getText(R.string.display_dashboard_nowallpaper_summary);
- }
- }
}
diff --git a/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java
index d16a6d2..a5149b9 100644
--- a/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java
@@ -21,47 +21,27 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-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.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-
-import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import java.util.ArrayList;
-import java.util.List;
-
@RunWith(RobolectricTestRunner.class)
public class TopLevelDisplayPreferenceControllerTest {
private Context mContext;
- @Mock
- private PackageManager mPackageManager;
-
private TopLevelDisplayPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
- when(mContext.getPackageManager()).thenReturn(mPackageManager);
- when(mContext.getString(R.string.config_wallpaper_picker_package)).thenReturn("pkg");
- when(mContext.getString(R.string.config_wallpaper_picker_class)).thenReturn("cls");
-
mController = new TopLevelDisplayPreferenceController(mContext, "test_key");
}
@@ -75,38 +55,4 @@
public void getAvailabilityStatus_unsupportedWhenSet() {
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
}
-
- @Test
- public void getSummary_hasWallpaper_shouldReturnWallpaperSummary() {
- final List<ResolveInfo> resolveInfos = new ArrayList<>();
- resolveInfos.add(mock(ResolveInfo.class));
- when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
- .thenReturn(resolveInfos);
-
- assertThat(mController.getSummary())
- .isEqualTo(mContext.getText(R.string.display_dashboard_summary));
- }
-
- @Test
- public void getSummary_hasWallpaperWithStyles_shouldReturnWallpaperSummary() {
- when(mContext.getString(R.string.config_styles_and_wallpaper_picker_class))
- .thenReturn("any.nonempty.class");
- final List<ResolveInfo> resolveInfos = new ArrayList<>();
- resolveInfos.add(mock(ResolveInfo.class));
- when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
- .thenReturn(resolveInfos);
-
- assertThat(mController.getSummary())
- .isEqualTo(mContext.getText(R.string.display_dashboard_summary_with_style));
- }
-
- @Test
- public void getSummary_hasWallpaper_shouldReturnNoWallpaperSummary() {
- final List<ResolveInfo> resolveInfos = new ArrayList<>();
- when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
- .thenReturn(resolveInfos);
-
- assertThat(mController.getSummary())
- .isEqualTo(mContext.getText(R.string.display_dashboard_nowallpaper_summary));
- }
}
diff --git a/tests/unit/src/com/android/settings/applications/HibernatedAppsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/HibernatedAppsPreferenceControllerTest.java
index a34e634..39c966d 100644
--- a/tests/unit/src/com/android/settings/applications/HibernatedAppsPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/applications/HibernatedAppsPreferenceControllerTest.java
@@ -24,17 +24,24 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.usage.IUsageStatsManager;
+import android.app.usage.UsageStats;
+import android.app.usage.UsageStatsManager;
import android.apphibernation.AppHibernationManager;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
import android.content.res.Resources;
+import android.os.RemoteException;
import android.provider.DeviceConfig;
import androidx.test.core.app.ApplicationProvider;
@@ -58,11 +65,11 @@
PackageManager mPackageManager;
@Mock
AppHibernationManager mAppHibernationManager;
+ @Mock
+ IUsageStatsManager mIUsageStatsManager;
private static final String KEY = "key";
private Context mContext;
private HibernatedAppsPreferenceController mController;
- private PackageInfo mHibernatedPackage;
- private PackageInfo mAutoRevokedPackage;
@Before
public void setUp() {
@@ -73,10 +80,9 @@
when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mContext.getSystemService(AppHibernationManager.class))
.thenReturn(mAppHibernationManager);
+ when(mContext.getSystemService(UsageStatsManager.class)).thenReturn(
+ new UsageStatsManager(mContext, mIUsageStatsManager));
mController = new HibernatedAppsPreferenceController(mContext, KEY);
- mHibernatedPackage =
- getHibernatedPackage(mAppHibernationManager, mPackageManager, mContext);
- mAutoRevokedPackage = getAutoRevokedPackage(mPackageManager, mContext);
}
@Test
@@ -88,36 +94,71 @@
}
@Test
- public void getSummary_shouldReturnCorrectly() {
+ public void getSummary_getsRightCountForHibernatedPackage() {
+ final PackageInfo hibernatedPkg = getHibernatedPackage();
when(mPackageManager.getInstalledPackages(anyInt())).thenReturn(
- Arrays.asList(mHibernatedPackage, mAutoRevokedPackage, new PackageInfo()));
+ Arrays.asList(hibernatedPkg, new PackageInfo()));
when(mContext.getResources()).thenReturn(mock(Resources.class));
- final int totalHibernated = 2;
mController.getSummary();
- verify(mContext.getResources()).getQuantityString(
- anyInt(), eq(totalHibernated), eq(totalHibernated));
+ verify(mContext.getResources()).getQuantityString(anyInt(), eq(1), eq(1));
}
- private static PackageInfo getHibernatedPackage(
- AppHibernationManager apm, PackageManager pm, Context context) {
+ @Test
+ public void getSummary_getsRightCountForUnusedAutoRevokedPackage() {
+ final PackageInfo autoRevokedPkg = getAutoRevokedPackage();
+ when(mPackageManager.getInstalledPackages(anyInt())).thenReturn(
+ Arrays.asList(autoRevokedPkg, new PackageInfo()));
+ when(mContext.getResources()).thenReturn(mock(Resources.class));
+
+ mController.getSummary();
+ verify(mContext.getResources()).getQuantityString(anyInt(), eq(1), eq(1));
+ }
+
+ @Test
+ public void getSummary_getsRightCountForUsedAutoRevokedPackage() {
+ final PackageInfo usedAutoRevokedPkg = getAutoRevokedPackage();
+ setAutoRevokedPackageUsageStats();
+ when(mPackageManager.getInstalledPackages(anyInt())).thenReturn(
+ Arrays.asList(usedAutoRevokedPkg, new PackageInfo()));
+ when(mContext.getResources()).thenReturn(mock(Resources.class));
+
+ mController.getSummary();
+ verify(mContext.getResources()).getQuantityString(anyInt(), eq(0), eq(0));
+ }
+
+ private PackageInfo getHibernatedPackage() {
final PackageInfo pi = new PackageInfo();
pi.packageName = HIBERNATED_PACKAGE_NAME;
pi.requestedPermissions = new String[] {PERMISSION};
- when(apm.getHibernatingPackagesForUser()).thenReturn(Arrays.asList(pi.packageName));
- when(pm.getPermissionFlags(
- pi.requestedPermissions[0], pi.packageName, context.getUser()))
+ when(mAppHibernationManager.getHibernatingPackagesForUser())
+ .thenReturn(Arrays.asList(pi.packageName));
+ when(mPackageManager.getPermissionFlags(
+ pi.requestedPermissions[0], pi.packageName, mContext.getUser()))
.thenReturn(PackageManager.FLAG_PERMISSION_AUTO_REVOKED);
return pi;
}
- private static PackageInfo getAutoRevokedPackage(PackageManager pm, Context context) {
+ private PackageInfo getAutoRevokedPackage() {
final PackageInfo pi = new PackageInfo();
pi.packageName = AUTO_REVOKED_PACKAGE_NAME;
pi.requestedPermissions = new String[] {PERMISSION};
- when(pm.getPermissionFlags(
- pi.requestedPermissions[0], pi.packageName, context.getUser()))
+ when(mPackageManager.getPermissionFlags(
+ pi.requestedPermissions[0], pi.packageName, mContext.getUser()))
.thenReturn(PackageManager.FLAG_PERMISSION_AUTO_REVOKED);
return pi;
}
+
+ private void setAutoRevokedPackageUsageStats() {
+ final UsageStats us = new UsageStats();
+ us.mPackageName = AUTO_REVOKED_PACKAGE_NAME;
+ us.mLastTimeVisible = System.currentTimeMillis();
+ try {
+ when(mIUsageStatsManager.queryUsageStats(
+ anyInt(), anyLong(), anyLong(), anyString(), anyInt()))
+ .thenReturn(new ParceledListSlice(Arrays.asList(us)));
+ } catch (RemoteException e) {
+ // no-op
+ }
+ }
}