diff --git a/res/drawable/ic_error_outline.xml b/res/drawable/ic_error_outline.xml deleted file mode 100644 index 2ddc6d4d501..00000000000 --- a/res/drawable/ic_error_outline.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 81858b759c5..4b208990faf 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -500,15 +500,6 @@ App Language - - Update the app - - - You need to update the app for the latest available languages - - - Update now - Suggested languages @@ -4751,7 +4742,7 @@ Reset app preferences? - This will reset all preferences for:\n\n
  • Disabled apps
  • \n
  • Disabled app notifications
  • \n
  • Default applications for actions
  • \n
  • Background data restrictions for apps
  • \n
  • Any permission restrictions
  • \n\nYou will not lose any app data.
    + This will reset all preferences for:\n\n
  • Disabled apps
  • \n
  • Disabled app notifications
  • \n
  • Default applications for actions
  • \n
  • Background data restrictions for apps
  • \n
  • Any permission restrictions
  • \n
  • Battery usage settings
  • \n\nYou will not lose any app data.
    Reset apps @@ -7860,7 +7851,11 @@ Help & feedback - Help articles, phone & chat + Help articles, phone & chat + + Help articles, tablet & chat + + Help articles, device & chat diff --git a/res/xml/app_locale_details.xml b/res/xml/app_locale_details.xml index e01db2f9389..f849441b03f 100644 --- a/res/xml/app_locale_details.xml +++ b/res/xml/app_locale_details.xml @@ -24,13 +24,6 @@ android:title="@string/desc_app_locale_disclaimer" android:order="1"/> - - { tryCommitFontSizeConfig(); tryCommitDisplaySizeConfig(); @@ -92,8 +99,8 @@ class TextReadingPreviewController extends BasePreferenceController implements /* message= */ "Display size preference is null, the preview controller" + " couldn't get the info"); - mLastFontProgress = mFontSizePreference.getProgress(); - mLastDisplayProgress = mDisplaySizePreference.getProgress(); + mLastFontProgress = mFontSizeData.getInitialIndex(); + mLastDisplayProgress = mDisplaySizeData.getInitialIndex(); final Configuration origConfig = mContext.getResources().getConfiguration(); final boolean isLayoutRtl = @@ -131,6 +138,15 @@ class TextReadingPreviewController extends BasePreferenceController implements postCommitDelayed(CHANGE_BY_SEEKBAR_DELAY_MS); } + /** + * The entry point is used for logging. + * + * @param entryPoint from which settings page + */ + void setEntryPoint(@EntryPoint int entryPoint) { + mEntryPoint = entryPoint; + } + /** * Avoids the flicker when switching to the previous or next level. * @@ -162,6 +178,16 @@ class TextReadingPreviewController extends BasePreferenceController implements if (fontProgress != mLastFontProgress) { mFontSizeData.commit(fontProgress); mLastFontProgress = fontProgress; + + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Font size: " + fontProgress); + } + + SettingsStatsLog.write( + SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED, + AccessibilityStatsLogUtils.convertToItemKeyName(mFontSizePreference.getKey()), + fontProgress, + AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint)); } } @@ -170,6 +196,17 @@ class TextReadingPreviewController extends BasePreferenceController implements if (displayProgress != mLastDisplayProgress) { mDisplaySizeData.commit(displayProgress); mLastDisplayProgress = displayProgress; + + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Display size: " + displayProgress); + } + + SettingsStatsLog.write( + SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED, + AccessibilityStatsLogUtils.convertToItemKeyName( + mDisplaySizePreference.getKey()), + displayProgress, + AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint)); } } diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index a6aeb897357..9289db61f21 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -147,8 +147,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends return AccessibilityGestureNavigationTutorial .showAccessibilityGestureTutorialDialog(getPrefContext()); case DialogEnums.MAGNIFICATION_EDIT_SHORTCUT: - final CharSequence dialogTitle = getPrefContext().getString( - R.string.accessibility_shortcut_title, mPackageName); + final CharSequence dialogTitle = getShortcutTitle(); final int dialogType = WizardManagerHelper.isAnySetupWizard(getIntent()) ? DialogType.EDIT_SHORTCUT_MAGNIFICATION_SUW : DialogType.EDIT_SHORTCUT_MAGNIFICATION; diff --git a/src/com/android/settings/applications/AppLocaleUtil.java b/src/com/android/settings/applications/AppLocaleUtil.java index 77fba89e861..31357968a07 100644 --- a/src/com/android/settings/applications/AppLocaleUtil.java +++ b/src/com/android/settings/applications/AppLocaleUtil.java @@ -99,7 +99,8 @@ public class AppLocaleUtil { * Check the function of per app language is supported by current application. */ public static boolean isAppLocaleSupported(Context context, String packageName) { - if (getPackageLocales(context, packageName) != null) { + LocaleList localeList = getPackageLocales(context, packageName); + if (localeList != null && localeList.size() > 0) { return true; } diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java index 20cddeca629..88b9d513c82 100644 --- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java +++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java @@ -21,12 +21,8 @@ import android.app.Activity; import android.app.LocaleManager; import android.app.settings.SettingsEnums; import android.content.Context; -import android.content.Intent; import android.content.pm.ApplicationInfo; -import android.content.pm.InstallSourceInfo; import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.net.Uri; import android.os.Bundle; import android.os.LocaleList; import android.os.UserHandle; @@ -34,7 +30,6 @@ import android.util.FeatureFlagUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.TextView; @@ -48,8 +43,6 @@ import com.android.settings.applications.AppLocaleUtil; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState.AppEntry; -import com.android.settingslib.widget.BannerMessagePreference; -import com.android.settingslib.widget.BannerMessagePreference.AttentionLevel; import com.android.settingslib.widget.LayoutPreference; import java.util.Locale; @@ -62,7 +55,6 @@ public class AppLocaleDetails extends SettingsPreferenceFragment { private static final String TAG = "AppLocaleDetails"; private static final String KEY_APP_DESCRIPTION = "app_locale_description"; - private static final String KEY_WARNINGS = "key_warnings"; private static final String KEY_APP_DISCLAIMER = "app_locale_disclaimer"; private boolean mCreated = false; @@ -96,7 +88,6 @@ public class AppLocaleDetails extends SettingsPreferenceFragment { mPrefOfDescription = getPreferenceScreen().findPreference(KEY_APP_DESCRIPTION); mPrefOfDisclaimer = getPreferenceScreen().findPreference(KEY_APP_DISCLAIMER); mApplicationInfo = getApplicationInfo(mPackageName, getContext().getUserId()); - setWarningMessage(); setDisclaimerPreference(); } @@ -119,7 +110,6 @@ public class AppLocaleDetails extends SettingsPreferenceFragment { } private void refreshUi() { - setWarningMessage(); setDescription(); } @@ -156,26 +146,6 @@ public class AppLocaleDetails extends SettingsPreferenceFragment { getPreferenceScreen().addPreference(pref); } - private void setWarningMessage() { - BannerMessagePreference warningPreference = - (BannerMessagePreference) getPreferenceScreen().findPreference(KEY_WARNINGS); - try { - InstallSourceInfo installSourceInfo = - getContext().getPackageManager().getInstallSourceInfo(mPackageName); - if (mApplicationInfo.isSystemApp() - && installSourceInfo.getInstallingPackageName() == null) { - warningPreference.setAttentionLevel(AttentionLevel.MEDIUM); - warningPreference.setPositiveButtonOnClickListener(mBannerButtonClickListener); - warningPreference.setPositiveButtonText(R.string.warnings_button_update); - warningPreference.setVisible(true); - } else { - warningPreference.setVisible(false); - } - } catch (NameNotFoundException e) { - Log.e(TAG, "Exception while retrieving the package installer of " + mPackageName, e); - } - } - private void setDisclaimerPreference() { if (FeatureFlagUtils.isEnabled( getContext(), FeatureFlagUtils.SETTINGS_APP_LOCALE_OPT_IN_ENABLED)) { @@ -192,19 +162,6 @@ public class AppLocaleDetails extends SettingsPreferenceFragment { } } - private OnClickListener mBannerButtonClickListener = new OnClickListener() { - @Override - public void onClick(View v) { - startActivity(getAppSearchIntent(mPackageName)); - } - }; - - private static Intent getAppSearchIntent(String pkg) { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("market://details?id=" + pkg)); - return intent; - } - private ApplicationInfo getApplicationInfo(String packageName, int userId) { ApplicationInfo applicationInfo; try { diff --git a/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java b/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java index 80ce8020035..7b7e3e944ea 100644 --- a/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java +++ b/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java @@ -90,6 +90,12 @@ public class ButtonActionDialogFragment extends InstrumentedDialogFragment imple @Override public void onClick(DialogInterface dialog, int which) { + // When it's in a multi-window mode, force stopping an app will lead to an activity + // recreate, and the dialog fragment will also be recreated. So dismiss the dialog before + // stopping the app. + if (mId == ButtonActionDialogFragment.DialogType.FORCE_STOP) { + dialog.dismiss(); + } final AppButtonsDialogListener lsn = (AppButtonsDialogListener) getTargetFragment(); lsn.handleDialogClick(mId); diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java index 547869f7393..387f21603e6 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java @@ -111,6 +111,11 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements lottieAnimationView.setVisibility(View.GONE); lottieAnimationViewPortrait.setVisibility(View.VISIBLE); break; + case Surface.ROTATION_180: + lottieAnimationView.setVisibility(View.VISIBLE); + lottieAnimationView.setRotation(180); + lottieAnimationViewPortrait.setVisibility(View.GONE); + break; case Surface.ROTATION_270: lottieAnimationView.setVisibility(View.GONE); lottieAnimationViewPortrait.setVisibility(View.VISIBLE); @@ -353,10 +358,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements @Override public void onOrientationChanged(int orientation) { final int currentRotation = getDisplay().getRotation(); - if ((mPreviousRotation == Surface.ROTATION_90 - && currentRotation == Surface.ROTATION_270) || ( - mPreviousRotation == Surface.ROTATION_270 - && currentRotation == Surface.ROTATION_90)) { + if ((currentRotation + 2) % 4 == mPreviousRotation) { mPreviousRotation = currentRotation; recreate(); } diff --git a/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java b/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java index d4f93fa83cd..42a3a16da3e 100644 --- a/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java +++ b/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java @@ -132,7 +132,6 @@ public class VolumeOptionMenuController implements LifecycleObserver, OnCreateOp if (mStorageEntry.isPrivate()) { if (!mStorageEntry.isDefaultInternalStorage()) { mRename.setVisible(true); - mUnmount.setVisible(true); mFormatAsPortable.setVisible(true); } diff --git a/src/com/android/settings/location/TopLevelLocationPreferenceController.java b/src/com/android/settings/location/TopLevelLocationPreferenceController.java index ec58a3422d2..5effe6c6210 100644 --- a/src/com/android/settings/location/TopLevelLocationPreferenceController.java +++ b/src/com/android/settings/location/TopLevelLocationPreferenceController.java @@ -31,9 +31,9 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll private static final IntentFilter INTENT_FILTER_LOCATION_MODE_CHANGED = new IntentFilter(LocationManager.MODE_CHANGED_ACTION); private final LocationManager mLocationManager; - /** Total number of apps that has location permission. */ - private int mNumTotal = -1; private int mNumTotalLoading = 0; + /** Summary text. */ + private static String sSummary = null; private BroadcastReceiver mReceiver; private Preference mPreference; private AtomicInteger loadingInProgress = new AtomicInteger(0); @@ -51,12 +51,11 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll @Override public CharSequence getSummary() { if (mLocationManager.isLocationEnabled()) { - if (mNumTotal == -1) { - return mContext.getString(R.string.location_settings_loading_app_permission_stats); + if (sSummary == null) { + sSummary = mContext.getString( + R.string.location_settings_loading_app_permission_stats); } - return mContext.getResources().getQuantityString( - R.plurals.location_settings_summary_location_on, - mNumTotal, mNumTotal); + return sSummary; } else { return mContext.getString(R.string.location_settings_summary_location_off); } @@ -64,7 +63,8 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll @VisibleForTesting void setLocationAppCount(int numApps) { - mNumTotal = numApps; + sSummary = mContext.getResources().getQuantityString( + R.plurals.location_settings_summary_location_on, numApps, numApps); refreshSummary(mPreference); } diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index 5215a33fcc4..150dbe0483d 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -106,29 +106,20 @@ public class NotificationBackend { return row; } - public AppRow loadAppRow(Context context, PackageManager pm, - RoleManager roleManager, PackageInfo app) { + public AppRow loadAppRow(Context context, PackageManager pm, PackageInfo app) { final AppRow row = loadAppRow(context, pm, app.applicationInfo); - recordCanBeBlocked(context, pm, roleManager, app, row); + recordCanBeBlocked(app, row); return row; } - void recordCanBeBlocked(Context context, PackageManager pm, RoleManager rm, PackageInfo app, - AppRow row) { - + void recordCanBeBlocked(PackageInfo app, AppRow row) { try { row.systemApp = row.lockedImportance = - sINM.isPermissionFixed(app.packageName, row.userId); + sINM.isImportanceLocked(app.packageName, app.applicationInfo.uid); } catch (RemoteException e) { Log.w(TAG, "Error calling NMS", e); } - // The permission system cannot make role permissions 'fixed', so check for these - // roles explicitly - List roles = rm.getHeldRolesFromController(app.packageName); - if (roles.contains(RoleManager.ROLE_DIALER) - || roles.contains(RoleManager.ROLE_EMERGENCY)) { - row.systemApp = row.lockedImportance = true; - } + // if the app targets T but has not requested the permission, we cannot change the // permission state if (app.applicationInfo.targetSdkVersion > Build.VERSION_CODES.S_V2) { @@ -139,24 +130,6 @@ public class NotificationBackend { } } - @VisibleForTesting static void markAppRowWithBlockables(String[] nonBlockablePkgs, AppRow row, - String packageName) { - if (nonBlockablePkgs != null) { - int N = nonBlockablePkgs.length; - for (int i = 0; i < N; i++) { - String pkg = nonBlockablePkgs[i]; - if (pkg == null) { - continue; - } else if (pkg.contains(":")) { - // handled by NotificationChannel.isImportanceLockedByOEM() - continue; - } else if (packageName.equals(nonBlockablePkgs[i])) { - row.systemApp = row.lockedImportance = true; - } - } - } - } - static public CharSequence getDeviceList(ICompanionDeviceManager cdm, LocalBluetoothManager lbm, String pkg, int userId) { boolean multiple = false; @@ -191,10 +164,9 @@ public class NotificationBackend { public boolean enableSwitch(Context context, ApplicationInfo app) { try { PackageInfo info = context.getPackageManager().getPackageInfo( - app.packageName, PackageManager.GET_SIGNATURES); - RoleManager rm = context.getSystemService(RoleManager.class); + app.packageName, PackageManager.GET_PERMISSIONS); final AppRow row = new AppRow(); - recordCanBeBlocked(context, context.getPackageManager(), rm, info, row); + recordCanBeBlocked(info, row); boolean systemBlockable = !row.systemApp || (row.systemApp && row.banned); return systemBlockable && !row.lockedImportance; } catch (PackageManager.NameNotFoundException e) { diff --git a/src/com/android/settings/notification/app/NotificationPreferenceController.java b/src/com/android/settings/notification/app/NotificationPreferenceController.java index 9d339f02737..fb19d9d6b4c 100644 --- a/src/com/android/settings/notification/app/NotificationPreferenceController.java +++ b/src/com/android/settings/notification/app/NotificationPreferenceController.java @@ -24,6 +24,7 @@ import android.app.NotificationChannel; import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.content.Context; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ShortcutInfo; import android.graphics.drawable.Drawable; @@ -171,7 +172,8 @@ public abstract class NotificationPreferenceController extends AbstractPreferenc return overrideCanConfigureValue; } if (mAppRow != null) { - return !mAppRow.systemApp && !mAppRow.lockedImportance; + boolean systemBlockable = !mAppRow.systemApp || (mAppRow.systemApp && mAppRow.banned); + return systemBlockable && !mAppRow.lockedImportance; } return true; } diff --git a/src/com/android/settings/notification/app/NotificationSettings.java b/src/com/android/settings/notification/app/NotificationSettings.java index afc9a66716d..192a0ee9fc7 100644 --- a/src/com/android/settings/notification/app/NotificationSettings.java +++ b/src/com/android/settings/notification/app/NotificationSettings.java @@ -25,7 +25,6 @@ import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; import android.app.NotificationManager; -import android.app.role.RoleManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -69,7 +68,6 @@ abstract public class NotificationSettings extends DashboardFragment { protected PackageManager mPm; protected NotificationBackend mBackend = new NotificationBackend(); protected NotificationManager mNm; - protected RoleManager mRm; protected Context mContext; protected int mUid; @@ -116,7 +114,6 @@ abstract public class NotificationSettings extends DashboardFragment { mPm = getPackageManager(); mNm = NotificationManager.from(mContext); - mRm = mContext.getSystemService(RoleManager.class); mPkg = mArgs != null && mArgs.containsKey(AppInfoBase.ARG_PACKAGE_NAME) ? mArgs.getString(AppInfoBase.ARG_PACKAGE_NAME) @@ -290,7 +287,7 @@ abstract public class NotificationSettings extends DashboardFragment { } private void loadAppRow() { - mAppRow = mBackend.loadAppRow(mContext, mPm, mRm, mPkgInfo); + mAppRow = mBackend.loadAppRow(mContext, mPm, mPkgInfo); } private void loadChannelGroup() { diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java index d9ed6b08b63..432104d27cc 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java @@ -18,7 +18,9 @@ package com.android.settings.applications.appinfo; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -72,6 +74,21 @@ public class ButtonActionDialogFragmentTest { verify(mTargetFragment).handleDialogClick(anyInt()); } + @Test + public void testOnClick_forceStop_dismissDialog() { + ButtonActionDialogFragment fragment = + spy(ButtonActionDialogFragment.newInstance(FORCE_STOP_ID)); + FragmentController.setupFragment(fragment, FragmentActivity.class, 0 /* containerViewId */, + null /* bundle */); + doReturn(mTargetFragment).when(fragment).getTargetFragment(); + doNothing().when(mTargetFragment).handleDialogClick(anyInt()); + final AlertDialog dialog = mock(AlertDialog.class); + + fragment.onClick(dialog, 0); + + verify(dialog).dismiss(); + } + @Test public void testOnCreateDialog_forceStopDialog() { ButtonActionDialogFragment fragment = ButtonActionDialogFragment.newInstance(FORCE_STOP_ID); diff --git a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java index 68e7f88ddf5..f0bc705c491 100644 --- a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java @@ -56,31 +56,41 @@ public class TopLevelLocationPreferenceControllerTest { } @Test - public void getSummary_whenLocationIsOn_shouldShowLoadingString() { + public void getSummary_whenLocationIsOn_shouldPreservePreviousText() { + final int locationAppCount = 5; + // Retrieve summary text once. + mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); + mController.setLocationAppCount(locationAppCount); + mController.getSummary(); + // Turn off location. + mLocationManager.setLocationEnabledForUser(false, android.os.Process.myUserHandle()); + // Turn on location again and check if the previous summary text is still cached. mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); assertThat(mController.getSummary()).isEqualTo( - mContext.getString(R.string.location_settings_loading_app_permission_stats)); + mContext.getResources().getQuantityString( + R.plurals.location_settings_summary_location_on, locationAppCount, + locationAppCount)); } @Test public void getSummary_whenLocationAppCountIsOne_shouldShowSingularString() { - final int LOCATION_APP_COUNT = 1; + final int locationAppCount = 1; mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); - mController.setLocationAppCount(LOCATION_APP_COUNT); + mController.setLocationAppCount(locationAppCount); assertThat(mController.getSummary()).isEqualTo( mContext.getResources().getQuantityString( R.plurals.location_settings_summary_location_on, - LOCATION_APP_COUNT, LOCATION_APP_COUNT)); + locationAppCount, locationAppCount)); } @Test public void getSummary_whenLocationAppCountIsGreaterThanOne_shouldShowPluralString() { - final int LOCATION_APP_COUNT = 5; + final int locationAppCount = 5; mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); - mController.setLocationAppCount(LOCATION_APP_COUNT); + mController.setLocationAppCount(locationAppCount); assertThat(mController.getSummary()).isEqualTo( mContext.getResources().getQuantityString( R.plurals.location_settings_summary_location_on, - LOCATION_APP_COUNT, LOCATION_APP_COUNT)); + locationAppCount, locationAppCount)); } } \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java index 5745aa0718d..764962fa3b2 100644 --- a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java +++ b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -80,69 +81,17 @@ public class NotificationBackendTest { } @Test - public void testMarkAppRow_unblockablePackage() { - AppRow appRow = new AppRow(); - String packageName = "foo.bar.unblockable"; - appRow.pkg = packageName; - String[] nonBlockablePkgs = new String[2]; - nonBlockablePkgs[0] = packageName; - nonBlockablePkgs[1] = "some.other.package"; - NotificationBackend.markAppRowWithBlockables(nonBlockablePkgs, appRow, packageName); - - // This package has a package lock but no locked channels - assertTrue(appRow.lockedImportance); - } - - @Test - public void testMarkAppRow_defaultPackage() { - PackageInfo pi = new PackageInfo(); - pi.packageName = "test"; - pi.applicationInfo = new ApplicationInfo(); - pi.applicationInfo.packageName = "test"; - List roles = new ArrayList<>(); - roles.add(RoleManager.ROLE_DIALER); - RoleManager rm = mock(RoleManager.class); - when(rm.getHeldRolesFromController(anyString())).thenReturn(roles); - - AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application, - mock(PackageManager.class), rm, pi); - - assertTrue(appRow.systemApp); - } - - @Test - public void testMarkAppRow_fixedPermission_withRole() throws Exception { + public void testMarkAppRow_fixedImportance() throws Exception { PackageInfo pi = new PackageInfo(); pi.packageName = "test"; pi.applicationInfo = new ApplicationInfo(); pi.applicationInfo.packageName = "test"; pi.applicationInfo.uid = 123; - List roles = new ArrayList<>(); - roles.add(RoleManager.ROLE_DIALER); - RoleManager rm = mock(RoleManager.class); - when(rm.getHeldRolesFromController(anyString())).thenReturn(roles); - when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false); + when(mInm.isImportanceLocked(pi.packageName, 123)).thenReturn(true); AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application, - mock(PackageManager.class), rm, pi); - - assertTrue(appRow.systemApp); - assertTrue(appRow.lockedImportance); - } - - @Test - public void testMarkAppRow_fixedPermission() throws Exception { - PackageInfo pi = new PackageInfo(); - pi.packageName = "test"; - pi.applicationInfo = new ApplicationInfo(); - pi.applicationInfo.packageName = "test"; - pi.applicationInfo.uid = 123; - - when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(true); - - AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application, - mock(PackageManager.class), mock(RoleManager.class), pi); + mock(PackageManager.class), pi); assertTrue(appRow.systemApp); assertTrue(appRow.lockedImportance); @@ -156,10 +105,10 @@ public class NotificationBackendTest { pi.applicationInfo.packageName = "test"; pi.applicationInfo.uid = 123; - when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false); + when(mInm.isImportanceLocked(anyString(), anyInt())).thenReturn(false); AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application, - mock(PackageManager.class), mock(RoleManager.class), pi); + mock(PackageManager.class), pi); assertFalse(appRow.systemApp); assertFalse(appRow.lockedImportance); @@ -178,7 +127,7 @@ public class NotificationBackendTest { when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false); AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application, - mock(PackageManager.class), mock(RoleManager.class), pi); + mock(PackageManager.class), pi); assertFalse(appRow.systemApp); assertTrue(appRow.lockedImportance); @@ -198,29 +147,12 @@ public class NotificationBackendTest { when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false); AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application, - mock(PackageManager.class), mock(RoleManager.class), pi); + mock(PackageManager.class), pi); assertFalse(appRow.systemApp); assertFalse(appRow.lockedImportance); } - @Test - public void testMarkAppRow_notDefaultPackage() { - PackageInfo pi = new PackageInfo(); - pi.packageName = "test"; - pi.applicationInfo = new ApplicationInfo(); - pi.applicationInfo.packageName = "test"; - List roles = new ArrayList<>(); - roles.add(RoleManager.ROLE_HOME); - RoleManager rm = mock(RoleManager.class); - when(rm.getHeldRolesFromController(anyString())).thenReturn(roles); - - AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application, - mock(PackageManager.class), rm, pi); - - assertFalse(appRow.systemApp); - } - @Test public void testGetAggregatedUsageEvents_multipleEventsAgg() { List events = new ArrayList<>(); diff --git a/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java index 4ba5fe7f644..b2f1673f317 100644 --- a/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java @@ -284,24 +284,36 @@ public class NotificationPreferenceControllerTest { } @Test - public void testIsAppBlockable_postMigration_locked() { + public void testIsAppBlockable_fixedPermission() { mController = new TestPreferenceController(mContext, mBackend); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); - appRow.lockedImportance = true; + appRow.systemApp = true; appRow.banned = false; mController.onResume(appRow, null, null, null, null, null, null); assertFalse(mController.isAppBlockable()); } @Test - public void testIsAppBlockable_postMigration_locked_butAppOff() { + public void testIsAppBlockable_fixedPermission_butAppOff() { mController = new TestPreferenceController(mContext, mBackend); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); - appRow.lockedImportance = true; + appRow.systemApp = true; appRow.banned = true; mController.onResume(appRow, null, null, null, null, null, null); + assertTrue(mController.isAppBlockable()); + } + + @Test + public void testIsAppBlockable_notFixedButAppInBadState() { + mController = new TestPreferenceController(mContext, mBackend); + + NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); + appRow.systemApp = false; + appRow.banned = true; + appRow.lockedImportance = true; + mController.onResume(appRow, null, null, null, null, null, null); assertFalse(mController.isAppBlockable()); } diff --git a/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java index 314f8c22138..8bd9b018d18 100644 --- a/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java +++ b/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java @@ -142,7 +142,6 @@ public class VolumeOptionMenuControllerTest { mController.onPrepareOptionsMenu(mMenu); verify(mController.mRename, atLeastOnce()).setVisible(true); - verify(mController.mUnmount, atLeastOnce()).setVisible(true); verify(mController.mFormatAsPortable, atLeastOnce()).setVisible(true); verify(mController.mMount, never()).setVisible(true); verify(mController.mFormat, never()).setVisible(true);