diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 603900c1aed..764e1d2e4d7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -436,6 +436,17 @@
android:value="com.android.settings.biometrics.face.FaceSettings" />
+
+
+
+
+
+
+
+
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="8dp"/>
Don\'t wake for notifications
- Hide from notification list
+ Hide from pull-down shade
Never
@@ -8382,13 +8382,13 @@
- Allow text messages
+ Allow messages
To be sure allowed messages make sound, check whether your device is set to ring, vibrate, or silent.
- For \u2018%1$s\u2019 incoming text messages are blocked. You can adjust settings to allow your friends, family, or other contacts to reach you.
+ For \u2018%1$s\u2019 incoming messages are blocked. You can adjust settings to allow your friends, family, or other contacts to reach you.
SMS, MMS, and messaging apps
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 8268ce18fad..26d4aa892c2 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -211,4 +211,25 @@
- @*android:string/config_headlineFontFamilyMedium
+
+
+
diff --git a/res/xml/accessibility_content_timeout_settings.xml b/res/xml/accessibility_content_timeout_settings.xml
index 2d9072b222d..ea8d88ae68c 100644
--- a/res/xml/accessibility_content_timeout_settings.xml
+++ b/res/xml/accessibility_content_timeout_settings.xml
@@ -25,8 +25,8 @@
diff --git a/res/xml/accessibility_control_timeout_settings.xml b/res/xml/accessibility_control_timeout_settings.xml
index ea8d8c64580..e5a6e5b0b26 100644
--- a/res/xml/accessibility_control_timeout_settings.xml
+++ b/res/xml/accessibility_control_timeout_settings.xml
@@ -25,8 +25,8 @@
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 4cc2f44a313..f6fe0c25183 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -32,6 +32,7 @@ public class Settings extends SettingsActivity {
public static class BluetoothSettingsActivity extends SettingsActivity { /* empty */ }
public static class CreateShortcutActivity extends SettingsActivity { /* empty */ }
public static class FaceSettingsActivity extends SettingsActivity { /* empty */ }
+ public static class FingerprintSettingsActivity extends SettingsActivity { /* empty */ }
public static class SimSettingsActivity extends SettingsActivity { /* empty */ }
public static class TetherSettingsActivity extends SettingsActivity { /* empty */ }
public static class WifiTetherSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
index b8ec103b015..02b07236ab3 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
@@ -30,9 +30,11 @@ import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase;
+import com.android.settings.password.ChooseLockSettingsHelper;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
+import com.google.android.setupcompat.util.WizardManagerHelper;
/**
* Activity which concludes fingerprint enrollment.
@@ -40,6 +42,8 @@ import com.google.android.setupcompat.template.FooterButton;
public class FingerprintEnrollFinish extends BiometricEnrollBase {
private static final String TAG = "FingerprintEnrollFinish";
+ private static final String ACTION_FINGERPRINT_SETTINGS =
+ "android.settings.FINGERPRINT_SETTINGS";
@VisibleForTesting
static final int REQUEST_ADD_ANOTHER = 1;
@VisibleForTesting
@@ -104,6 +108,11 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
protected void onNextButtonClick(View view) {
updateFingerprintSuggestionEnableState();
setResult(RESULT_FINISHED);
+ if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
+ postEnroll();
+ } else {
+ launchFingerprintSettings();
+ }
finish();
}
@@ -127,6 +136,24 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
}
}
+ private void postEnroll() {
+ final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
+ if (fpm != null) {
+ int result = fpm.postEnroll();
+ if (result < 0) {
+ Log.w(TAG, "postEnroll failed: result = " + result);
+ }
+ }
+ }
+
+ private void launchFingerprintSettings() {
+ final Intent intent = new Intent(ACTION_FINGERPRINT_SETTINGS);
+ intent.setPackage(Utils.SETTINGS_PACKAGE_NAME);
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ }
+
private void onAddAnotherButtonClick(View view) {
startActivityForResult(getFingerprintEnrollingIntent(), REQUEST_ADD_ANOTHER);
}
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index 9418094f191..9a07821376a 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -276,6 +276,9 @@ public class FingerprintSettings extends SubSettings {
Activity activity = getActivity();
mFingerprintManager = Utils.getFingerprintManagerOrNull(activity);
+ mToken = getIntent().getByteArrayExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
+
mAuthenticateSidecar = (FingerprintAuthenticateSidecar)
getFragmentManager().findFragmentByTag(TAG_AUTHENTICATE_SIDECAR);
if (mAuthenticateSidecar == null) {
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 24fccef9dd7..f50d6ada227 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -54,6 +54,7 @@ import com.android.settings.backup.PrivacySettings;
import com.android.settings.backup.ToggleBackupSettingFragment;
import com.android.settings.backup.UserBackupSettingsActivity;
import com.android.settings.biometrics.face.FaceSettings;
+import com.android.settings.biometrics.fingerprint.FingerprintSettings;
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
@@ -203,6 +204,7 @@ public class SettingsGateway {
AccountSyncSettings.class.getName(),
AssistGestureSettings.class.getName(),
FaceSettings.class.getName(),
+ FingerprintSettings.FingerprintSettingsFragment.class.getName(),
SwipeToNotificationSettings.class.getName(),
DoubleTapPowerSettings.class.getName(),
DoubleTapScreenSettings.class.getName(),
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 78391f271b1..85a08793b42 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -19,6 +19,7 @@ package com.android.settings.fuelgauge;
import static com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType;
import android.app.settings.SettingsEnums;
+import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
@@ -107,7 +108,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
BatteryTipPreferenceController mBatteryTipPreferenceController;
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
- private final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {
+ @VisibleForTesting
+ final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange, Uri uri) {
restartBatteryInfoLoader();
@@ -201,21 +203,6 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
}
};
- @Override
- public void onStop() {
- getContentResolver().unregisterContentObserver(mSettingsObserver);
- super.onStop();
- }
-
- @Override
- public void onResume() {
- super.onResume();
- getContentResolver().registerContentObserver(
- Global.getUriFor(Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
- false,
- mSettingsObserver);
- }
-
@Override
public void onAttach(Context context) {
super.onAttach(context);
@@ -251,6 +238,21 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
updateBatteryTipFlag(icicle);
}
+ @Override
+ public void onResume() {
+ super.onResume();
+ getContentResolver().registerContentObserver(
+ Global.getUriFor(Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
+ false,
+ mSettingsObserver);
+ }
+
+ @Override
+ public void onPause() {
+ getContentResolver().unregisterContentObserver(mSettingsObserver);
+ super.onPause();
+ }
+
@Override
public int getMetricsCategory() {
return SettingsEnums.FUELGAUGE_POWER_USAGE_SUMMARY_V2;
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
index 74ff6134dcf..a50cf41a385 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
@@ -50,7 +50,7 @@ import java.util.concurrent.TimeoutException;
public class ContextualCardLoader extends AsyncLoaderCompat> {
@VisibleForTesting
- static final int DEFAULT_CARD_COUNT = 4;
+ static final int DEFAULT_CARD_COUNT = 2;
static final int CARD_CONTENT_LOADER_ID = 1;
private static final String TAG = "ContextualCardLoader";
@@ -141,42 +141,19 @@ public class ContextualCardLoader extends AsyncLoaderCompat
}
}
- try {
- // The maximum cards are four small cards OR
- // one large card with two small cards OR
- // two large cards
- if (visibleCards.size() <= 2 || getNumberOfLargeCard(visibleCards) == 0) {
- // four small cards
- return visibleCards;
- }
+ if (!CardContentProvider.DELETE_CARD_URI.equals(mNotifyUri)) {
+ final MetricsFeatureProvider metricsFeatureProvider =
+ FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
- if (visibleCards.size() == DEFAULT_CARD_COUNT) {
- hiddenCards.add(visibleCards.remove(visibleCards.size() - 1));
- }
+ metricsFeatureProvider.action(mContext,
+ SettingsEnums.ACTION_CONTEXTUAL_CARD_SHOW,
+ ContextualCardLogUtils.buildCardListLog(visibleCards));
- if (getNumberOfLargeCard(visibleCards) == 1) {
- // One large card with two small cards
- return visibleCards;
- }
-
- hiddenCards.add(visibleCards.remove(visibleCards.size() - 1));
-
- // Two large cards
- return visibleCards;
- } finally {
- if (!CardContentProvider.DELETE_CARD_URI.equals(mNotifyUri)) {
- final MetricsFeatureProvider metricsFeatureProvider =
- FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
-
- metricsFeatureProvider.action(mContext,
- SettingsEnums.ACTION_CONTEXTUAL_CARD_SHOW,
- ContextualCardLogUtils.buildCardListLog(visibleCards));
-
- metricsFeatureProvider.action(mContext,
- SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW,
- ContextualCardLogUtils.buildCardListLog(hiddenCards));
- }
+ metricsFeatureProvider.action(mContext,
+ SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW,
+ ContextualCardLogUtils.buildCardListLog(hiddenCards));
}
+ return visibleCards;
}
@VisibleForTesting
@@ -208,12 +185,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat
return cards;
}
- private int getNumberOfLargeCard(List cards) {
- return (int) cards.stream()
- .filter(card -> isLargeCard(card))
- .count();
- }
-
private boolean isLargeCard(ContextualCard card) {
return card.getSliceUri().equals(CONTEXTUAL_WIFI_SLICE_URI)
|| card.getSliceUri().equals(BLUETOOTH_DEVICES_SLICE_URI)
diff --git a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
index a262191d395..ee9d089a342 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
@@ -459,7 +459,7 @@ public class NotificationChannelSlice implements CustomSliceable {
private boolean isChannelConfigurable(NotificationChannel channel,
NotificationBackend.AppRow appRow) {
if (channel != null && appRow != null) {
- return !TextUtils.equals(channel.getId(), appRow.lockedChannelId);
+ return !channel.isImportanceLockedByOEM();
}
return false;
diff --git a/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRow.java b/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRow.java
index 4edce14dda3..bf91f53f3aa 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRow.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRow.java
@@ -16,6 +16,7 @@
package com.android.settings.homepage.contextualcards.slices;
+import android.app.role.RoleManager;
import android.content.Context;
import android.content.pm.PackageInfo;
@@ -46,7 +47,7 @@ class NotificationMultiChannelAppRow implements Callable 1) {
return mNotificationBackend.loadAppRow(mContext, mContext.getPackageManager(),
- mPackageInfo);
+ mContext.getSystemService(RoleManager.class), mPackageInfo);
}
return null;
}
diff --git a/src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java b/src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java
index 58e19165104..f7b32221ea2 100644
--- a/src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java
+++ b/src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java
@@ -123,11 +123,14 @@ abstract public class AbstractZenModeAutomaticRulePreferenceController extends
return new ComponentName(ci.packageName, ci.name);
}
// old service backed rule
- final String configurationActivity =
- ci.metaData.getString(ConditionProviderService.META_DATA_CONFIGURATION_ACTIVITY);
- if (configurationActivity != null) {
- return ComponentName.unflattenFromString(configurationActivity);
+ if (ci.metaData != null) {
+ final String configurationActivity = ci.metaData.getString(
+ ConditionProviderService.META_DATA_CONFIGURATION_ACTIVITY);
+ if (configurationActivity != null) {
+ return ComponentName.unflattenFromString(configurationActivity);
+ }
}
+
return null;
}
diff --git a/src/com/android/settings/notification/BlockPreferenceController.java b/src/com/android/settings/notification/BlockPreferenceController.java
index 960526cb05b..37589d9ea8e 100644
--- a/src/com/android/settings/notification/BlockPreferenceController.java
+++ b/src/com/android/settings/notification/BlockPreferenceController.java
@@ -54,13 +54,7 @@ public class BlockPreferenceController extends NotificationPreferenceController
if (mAppRow == null) {
return false;
}
- if (mChannel != null) {
- return isChannelBlockable();
- } else if (mChannelGroup != null) {
- return isChannelGroupBlockable();
- } else {
- return !mAppRow.systemApp || (mAppRow.systemApp && mAppRow.banned);
- }
+ return true;
}
public void updateState(Preference preference) {
@@ -78,6 +72,19 @@ public class BlockPreferenceController extends NotificationPreferenceController
}
bar.setDisabledByAdmin(mAdmin);
+ if (mChannel != null && !isChannelBlockable()) {
+ bar.setEnabled(false);
+ }
+
+ if (mChannelGroup != null && !isChannelGroupBlockable()) {
+ bar.setEnabled(false);
+ }
+
+ if (mChannel == null && mAppRow.systemApp
+ && (!mAppRow.banned || mAppRow.lockedImportance)) {
+ bar.setEnabled(false);
+ }
+
if (mChannel != null) {
bar.setChecked(!mAppRow.banned
&& mChannel.getImportance() != NotificationManager.IMPORTANCE_NONE);
diff --git a/src/com/android/settings/notification/HighImportancePreferenceController.java b/src/com/android/settings/notification/HighImportancePreferenceController.java
index b82cb1facc2..da9b3b46537 100644
--- a/src/com/android/settings/notification/HighImportancePreferenceController.java
+++ b/src/com/android/settings/notification/HighImportancePreferenceController.java
@@ -62,7 +62,7 @@ public class HighImportancePreferenceController extends NotificationPreferenceCo
@Override
public void updateState(Preference preference) {
if (mAppRow != null && mChannel != null) {
- preference.setEnabled(mAdmin == null && isChannelBlockable());
+ preference.setEnabled(mAdmin == null && !mChannel.isImportanceLockedByOEM());
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
pref.setChecked(mChannel.getImportance() >= IMPORTANCE_HIGH);
diff --git a/src/com/android/settings/notification/ImportancePreferenceController.java b/src/com/android/settings/notification/ImportancePreferenceController.java
index 708fc15bf38..46b2ec6ca78 100644
--- a/src/com/android/settings/notification/ImportancePreferenceController.java
+++ b/src/com/android/settings/notification/ImportancePreferenceController.java
@@ -59,9 +59,9 @@ public class ImportancePreferenceController extends NotificationPreferenceContro
@Override
public void updateState(Preference preference) {
if (mAppRow!= null && mChannel != null) {
- preference.setEnabled(mAdmin == null && isChannelBlockable());
+ preference.setEnabled(mAdmin == null && !mChannel.isImportanceLockedByOEM());
ImportancePreference pref = (ImportancePreference) preference;
- pref.setConfigurable(isChannelBlockable());
+ pref.setConfigurable(!mChannel.isImportanceLockedByOEM());
pref.setImportance(mChannel.getImportance());
pref.setDisplayInStatusBar(mBackend.showSilentInStatusBar(mContext.getPackageName()));
// TODO: b/128445911 pass along lock screen setting
diff --git a/src/com/android/settings/notification/MinImportancePreferenceController.java b/src/com/android/settings/notification/MinImportancePreferenceController.java
index 84cead13f1d..0af0c8dd331 100644
--- a/src/com/android/settings/notification/MinImportancePreferenceController.java
+++ b/src/com/android/settings/notification/MinImportancePreferenceController.java
@@ -62,7 +62,7 @@ public class MinImportancePreferenceController extends NotificationPreferenceCon
@Override
public void updateState(Preference preference) {
if (mAppRow != null && mChannel != null) {
- preference.setEnabled(mAdmin == null && isChannelBlockable());
+ preference.setEnabled(mAdmin == null && !mChannel.isImportanceLockedByOEM());
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
pref.setChecked(mChannel.getImportance() == IMPORTANCE_MIN);
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index def820c990c..747c541e4b6 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -21,6 +21,7 @@ import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
import android.app.INotificationManager;
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
+import android.app.role.RoleManager;
import android.app.usage.IUsageStatsManager;
import android.app.usage.UsageEvents;
import android.content.ComponentName;
@@ -86,14 +87,22 @@ public class NotificationBackend {
return !systemApp || (systemApp && blocked);
}
- public AppRow loadAppRow(Context context, PackageManager pm, PackageInfo app) {
+ public AppRow loadAppRow(Context context, PackageManager pm,
+ RoleManager roleManager, PackageInfo app) {
final AppRow row = loadAppRow(context, pm, app.applicationInfo);
- recordCanBeBlocked(context, pm, app, row);
+ recordCanBeBlocked(context, pm, roleManager, app, row);
return row;
}
- void recordCanBeBlocked(Context context, PackageManager pm, PackageInfo app, AppRow row) {
+ void recordCanBeBlocked(Context context, PackageManager pm, RoleManager rm, PackageInfo app,
+ AppRow row) {
row.systemApp = Utils.isSystemPackage(context.getResources(), pm, app);
+ List roles = rm.getHeldRolesFromController(app.packageName);
+ if (roles.contains(RoleManager.ROLE_SMS)
+ || roles.contains(RoleManager.ROLE_DIALER)
+ || roles.contains(RoleManager.ROLE_EMERGENCY)) {
+ row.systemApp = true;
+ }
final String[] nonBlockablePkgs = context.getResources().getStringArray(
com.android.internal.R.array.config_nonBlockableNotificationPackages);
markAppRowWithBlockables(nonBlockablePkgs, row, app.packageName);
@@ -108,10 +117,8 @@ public class NotificationBackend {
if (pkg == null) {
continue;
} else if (pkg.contains(":")) {
- // Interpret as channel; lock only this channel for this app.
- if (packageName.equals(pkg.split(":", 2)[0])) {
- row.lockedChannelId = pkg.split(":", 2 )[1];
- }
+ // handled by NotificationChannel.isImportanceLockedByOEM()
+ continue;
} else if (packageName.equals(nonBlockablePkgs[i])) {
row.systemApp = row.lockedImportance = true;
}
@@ -123,8 +130,9 @@ public class NotificationBackend {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
app.packageName, PackageManager.GET_SIGNATURES);
+ RoleManager rm = context.getSystemService(RoleManager.class);
final AppRow row = new AppRow();
- recordCanBeBlocked(context, context.getPackageManager(), info, row);
+ recordCanBeBlocked(context, context.getPackageManager(), rm, info, row);
return row.systemApp;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
@@ -491,7 +499,6 @@ public class NotificationBackend {
public boolean first; // first app in section
public boolean systemApp;
public boolean lockedImportance;
- public String lockedChannelId;
public boolean showBadge;
public boolean allowBubbles;
public int userId;
diff --git a/src/com/android/settings/notification/NotificationPreferenceController.java b/src/com/android/settings/notification/NotificationPreferenceController.java
index 1bfe47ecf96..d09ea4dc3dc 100644
--- a/src/com/android/settings/notification/NotificationPreferenceController.java
+++ b/src/com/android/settings/notification/NotificationPreferenceController.java
@@ -110,27 +110,13 @@ public abstract class NotificationPreferenceController extends AbstractPreferenc
}
}
- private boolean isChannelConfigurable() {
- if (mAppRow != null && mAppRow.lockedImportance) {
- return false;
- }
- if (mChannel != null && mAppRow != null) {
- return !Objects.equals(mChannel.getId(), mAppRow.lockedChannelId);
- }
- return false;
- }
-
protected boolean isChannelBlockable() {
if (mChannel != null && mAppRow != null) {
- if (!isChannelConfigurable()) {
+ if (mChannel.isImportanceLockedByCriticalDeviceFunction()
+ || mChannel.isImportanceLockedByOEM()) {
return mChannel.getImportance() == IMPORTANCE_NONE;
}
- if (mChannel.isImportanceLockedByOEM()
- || mChannel.isImportanceLockedByCriticalDeviceFunction()) {
- return false;
- }
-
return mChannel.isBlockableSystem() || !mAppRow.systemApp
|| mChannel.getImportance() == IMPORTANCE_NONE;
}
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index 163671a979b..32d8e913f78 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -25,6 +25,7 @@ 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;
@@ -36,7 +37,6 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.graphics.BlendMode;
import android.graphics.BlendModeColorFilter;
-import android.graphics.ColorFilter;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.LayerDrawable;
@@ -71,6 +71,7 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
protected PackageManager mPm;
protected NotificationBackend mBackend = new NotificationBackend();
protected NotificationManager mNm;
+ protected RoleManager mRm;
protected Context mContext;
protected int mUid;
@@ -101,6 +102,7 @@ abstract public class NotificationSettingsBase 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)
@@ -195,7 +197,7 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
}
private void loadAppRow() {
- mAppRow = mBackend.loadAppRow(mContext, mPm, mPkgInfo);
+ mAppRow = mBackend.loadAppRow(mContext, mPm, mRm, mPkgInfo);
}
private void loadChannelGroup() {
@@ -342,7 +344,7 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
protected boolean isChannelConfigurable(NotificationChannel channel) {
if (channel != null && mAppRow != null) {
- return !channel.getId().equals(mAppRow.lockedChannelId);
+ return !channel.isImportanceLockedByOEM();
}
return false;
}
@@ -353,6 +355,14 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
return true;
}
+ if (channel.isImportanceLockedByCriticalDeviceFunction()) {
+ return false;
+ }
+
+ if (channel.isImportanceLockedByOEM()) {
+ return false;
+ }
+
return channel.isBlockableSystem()
|| channel.getImportance() == NotificationManager.IMPORTANCE_NONE;
}
diff --git a/src/com/android/settings/wifi/WifiDialogActivity.java b/src/com/android/settings/wifi/WifiDialogActivity.java
index 8268eccac6b..77827867630 100644
--- a/src/com/android/settings/wifi/WifiDialogActivity.java
+++ b/src/com/android/settings/wifi/WifiDialogActivity.java
@@ -60,16 +60,18 @@ public class WifiDialogActivity extends Activity implements WifiDialog.WifiDialo
private WifiDialog mDialog;
+ private Intent mIntent;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
- final Intent intent = getIntent();
- if (WizardManagerHelper.isSetupWizardIntent(intent)) {
- setTheme(SetupWizardUtils.getTransparentTheme(intent));
+ mIntent = getIntent();
+ if (WizardManagerHelper.isSetupWizardIntent(mIntent)) {
+ setTheme(SetupWizardUtils.getTransparentTheme(mIntent));
}
super.onCreate(savedInstanceState);
- final Bundle accessPointState = intent.getBundleExtra(KEY_ACCESS_POINT_STATE);
+ final Bundle accessPointState = mIntent.getBundleExtra(KEY_ACCESS_POINT_STATE);
AccessPoint accessPoint = null;
if (accessPointState != null) {
accessPoint = new AccessPoint(this, accessPointState);
@@ -175,9 +177,11 @@ public class WifiDialogActivity extends Activity implements WifiDialog.WifiDialo
@Override
public void onScan(WifiDialog dialog, String ssid) {
+ Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid);
+ WizardManagerHelper.copyWizardManagerExtras(mIntent, intent);
+
// Launch QR code scanner to join a network.
- startActivityForResult(WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid),
- REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
+ startActivityForResult(intent, REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
}
@Override
diff --git a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
index 392b27dc46d..2229895c6cd 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
@@ -18,7 +18,6 @@ package com.android.settings.wifi.dpp;
import android.app.ActionBar;
import android.app.settings.SettingsEnums;
-import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
@@ -30,6 +29,8 @@ import androidx.fragment.app.FragmentTransaction;
import com.android.settings.R;
import com.android.settings.core.InstrumentedActivity;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
/**
* To provision "this" device with specified Wi-Fi network.
*
@@ -54,6 +55,10 @@ public class WifiDppEnrolleeActivity extends InstrumentedActivity implements
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
+ setTheme(R.style.LightTheme_SettingsBase_SetupWizard);
+ }
+
setContentView(R.layout.wifi_dpp_activity);
mFragmentManager = getSupportFragmentManager();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 2ee6d0c9588..2dd0d9be71e 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -33,16 +33,20 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.provider.Settings;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
+import androidx.annotation.VisibleForTesting;
import androidx.loader.app.LoaderManager;
+import androidx.preference.PreferenceScreen;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
@@ -51,6 +55,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.XmlTestUtils;
+import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
import com.android.settingslib.widget.LayoutPreference;
import org.junit.Before;
@@ -66,6 +71,7 @@ import org.mockito.stubbing.Answer;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList;
import java.util.List;
@@ -117,6 +123,14 @@ public class PowerUsageSummaryTest {
private MenuItem mAdvancedPageMenu;
@Mock
private BatteryInfo mBatteryInfo;
+ @Mock
+ private ContentResolver mContentResolver;
+ @Mock
+ private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
+ @Mock
+ private VisibilityLoggerMixin mVisibilityLoggerMixin;
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
private List mUsageList;
private Context mRealContext;
@@ -148,7 +162,7 @@ public class PowerUsageSummaryTest {
.thenReturn(sAdditionalBatteryInfoIntent);
when(mBatteryHelper.getTotalPower()).thenReturn(TOTAL_POWER);
when(mBatteryHelper.getStats().computeBatteryRealtime(anyLong(), anyInt()))
- .thenReturn(TIME_SINCE_LAST_FULL_CHARGE_US);
+ .thenReturn(TIME_SINCE_LAST_FULL_CHARGE_US);
when(mNormalBatterySipper.getUid()).thenReturn(UID);
mNormalBatterySipper.totalPowerMah = POWER_MAH;
@@ -176,6 +190,11 @@ public class PowerUsageSummaryTest {
mFragment.mScreenUsagePref = mScreenUsagePref;
mFragment.mLastFullChargePref = mLastFullChargePref;
mFragment.mBatteryUtils = spy(new BatteryUtils(mRealContext));
+ ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin);
+ ReflectionHelpers.setField(mFragment, "mBatteryBroadcastReceiver",
+ mBatteryBroadcastReceiver);
+ doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
+ when(mFragment.getContentResolver()).thenReturn(mContentResolver);
}
@Test
@@ -207,10 +226,10 @@ public class PowerUsageSummaryTest {
public void nonIndexableKeys_MatchPreferenceKeys() {
final Context context = RuntimeEnvironment.application;
final List niks =
- PowerUsageSummary.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(context);
+ PowerUsageSummary.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(context);
final List keys =
- XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.power_usage_summary);
+ XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.power_usage_summary);
assertThat(keys).containsAllIn(niks);
}
@@ -223,25 +242,25 @@ public class PowerUsageSummaryTest {
mFragment.restartBatteryTipLoader();
verify(mLoaderManager)
- .restartLoader(eq(PowerUsageSummary.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
+ .restartLoader(eq(PowerUsageSummary.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
}
@Test
public void showBothEstimates_summariesAreBothModified() {
when(mFeatureFactory.powerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(any()))
- .thenReturn(true);
+ .thenReturn(true);
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) {
return mRealContext.getString(
- R.string.power_usage_old_debug, invocation.getArguments()[0]);
+ R.string.power_usage_old_debug, invocation.getArguments()[0]);
}
}).when(mFeatureFactory.powerUsageFeatureProvider).getOldEstimateDebugString(any());
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) {
return mRealContext.getString(
- R.string.power_usage_enhanced_debug, invocation.getArguments()[0]);
+ R.string.power_usage_enhanced_debug, invocation.getArguments()[0]);
}
}).when(mFeatureFactory.powerUsageFeatureProvider).getEnhancedEstimateDebugString(any());
@@ -336,6 +355,24 @@ public class PowerUsageSummaryTest {
verify(mFragment).restartBatteryTipLoader();
}
+ @Test
+ public void onResume_registerContentObserver() {
+ mFragment.onResume();
+
+ verify(mContentResolver).registerContentObserver(
+ Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
+ false,
+ mFragment.mSettingsObserver);
+ }
+
+ @Test
+ public void onPause_unregisterContentObserver() {
+ mFragment.onPause();
+
+ verify(mContentResolver).unregisterContentObserver(
+ mFragment.mSettingsObserver);
+ }
+
public static class TestFragment extends PowerUsageSummary {
private Context mContext;
@@ -348,6 +385,12 @@ public class PowerUsageSummaryTest {
return mContext;
}
+ @Override
+ protected ContentResolver getContentResolver() {
+ // Override it so we can access this method in test
+ return super.getContentResolver();
+ }
+
@Override
void showBothEstimates() {
List fakeBatteryInfo = new ArrayList<>(2);
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
index c2a3aa9cc9e..b7c21b8ae88 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
@@ -60,6 +60,14 @@ public class ContextualCardLoaderTest {
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
}
+ @Test
+ public void loadInBackground_legacyMode_shouldReturnNothing() {
+ assertThat(mContext.getResources().getBoolean(R.bool.config_use_legacy_suggestion))
+ .isTrue();
+
+ assertThat(mContextualCardLoader.loadInBackground()).isEmpty();
+ }
+
@Test
public void getDisplayableCards_twoEligibleCards_shouldShowAll() {
final List cards = getContextualCardList().stream().limit(2)
@@ -72,53 +80,16 @@ public class ContextualCardLoaderTest {
}
@Test
- public void getDisplayableCards_fiveEligibleCardsNoLarge_shouldShowDefaultCardCount() {
- final List fiveCards = getContextualCardListWithNoLargeCard();
- doReturn(fiveCards).when(mContextualCardLoader).filterEligibleCards(anyList());
+ public void getDisplayableCards_fourEligibleCards_shouldShowDefaultCardCount() {
+ final List fourCards = getContextualCardList();
+ doReturn(fourCards).when(mContextualCardLoader).filterEligibleCards(anyList());
- final List result = mContextualCardLoader.getDisplayableCards(
- fiveCards);
+ final List result = mContextualCardLoader
+ .getDisplayableCards(fourCards);
assertThat(result).hasSize(DEFAULT_CARD_COUNT);
}
- @Test
- public void getDisplayableCards_threeEligibleCardsOneLarge_shouldShowThreeCards() {
- final List cards = getContextualCardList().stream().limit(2)
- .collect(Collectors.toList());
- cards.add(new ContextualCard.Builder()
- .setName("test_gesture")
- .setCardType(ContextualCard.CardType.SLICE)
- .setSliceUri(Uri.parse(
- "content://com.android.settings.test.slices/action/gesture_pick_up"))
- .build());
- doReturn(cards).when(mContextualCardLoader).filterEligibleCards(anyList());
-
- final List result = mContextualCardLoader.getDisplayableCards(cards);
-
- assertThat(result).hasSize(3);
- }
-
- @Test
- public void getDisplayableCards_threeEligibleCardsTwoLarge_shouldShowTwoCards() {
- final List threeCards = getContextualCardList().stream().limit(3)
- .collect(Collectors.toList());
- doReturn(threeCards).when(mContextualCardLoader).filterEligibleCards(anyList());
-
- final List result = mContextualCardLoader.getDisplayableCards(
- threeCards);
-
- assertThat(result).hasSize(2);
- }
-
- @Test
- public void loadInBackground_legacyMode_shouldReturnNothing() {
- assertThat(mContext.getResources().getBoolean(R.bool.config_use_legacy_suggestion))
- .isTrue();
-
- assertThat(mContextualCardLoader.loadInBackground()).isEmpty();
- }
-
@Test
public void getDisplayableCards_refreshCardUri_shouldLogContextualCardDisplay() {
mContextualCardLoader.mNotifyUri = CardContentProvider.REFRESH_CARD_URI;
@@ -167,32 +138,4 @@ public class ContextualCardLoaderTest {
.build());
return cards;
}
-
- private List getContextualCardListWithNoLargeCard() {
- final List cards = new ArrayList<>();
- cards.add(new ContextualCard.Builder()
- .setName("test_rotate")
- .setCardType(ContextualCard.CardType.SLICE)
- .setSliceUri(
- Uri.parse("content://com.android.settings.test.slices/action/auto_rotate"))
- .build());
- cards.add(new ContextualCard.Builder()
- .setName("test_flashlight")
- .setCardType(ContextualCard.CardType.SLICE)
- .setSliceUri(
- Uri.parse("content://com.android.settings.test.slices/action/flashlight"))
- .build());
- cards.add(new ContextualCard.Builder()
- .setName("test_bt")
- .setCardType(ContextualCard.CardType.SLICE)
- .setSliceUri(Uri.parse("content://android.settings.test.slices/action/bluetooth"))
- .build());
- cards.add(new ContextualCard.Builder()
- .setName("test_gesture")
- .setCardType(ContextualCard.CardType.SLICE)
- .setSliceUri(Uri.parse(
- "content://com.android.settings.test.slices/action/gesture_pick_up"))
- .build());
- return cards;
- }
}
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSliceTest.java
index 60a6b42d427..335e99f0742 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSliceTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSliceTest.java
@@ -30,6 +30,7 @@ import static org.robolectric.Shadows.shadowOf;
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
+import android.app.role.RoleManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
@@ -345,7 +346,7 @@ public class NotificationChannelSliceTest {
doReturn(buildNotificationChannelGroups(channels)).when(mNotificationBackend).getGroups(
any(String.class), any(int.class));
doReturn(appRow).when(mNotificationBackend).loadAppRow(any(Context.class),
- any(PackageManager.class), any(PackageInfo.class));
+ any(PackageManager.class), any(RoleManager.class), any(PackageInfo.class));
doReturn(channelCount).when(mNotificationBackend).getChannelCount(
any(String.class), any(int.class));
}
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRowTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRowTest.java
index d722af67a1d..c6222f1d23a 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRowTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRowTest.java
@@ -21,6 +21,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
+import android.app.role.RoleManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
@@ -65,7 +66,7 @@ public class NotificationMultiChannelAppRowTest {
mNotificationMultiChannelAppRow.call();
verify(mNotificationBackend).loadAppRow(any(Context.class), any(PackageManager.class),
- any(PackageInfo.class));
+ any(RoleManager.class), any(PackageInfo.class));
}
@Test
@@ -76,6 +77,6 @@ public class NotificationMultiChannelAppRowTest {
mNotificationMultiChannelAppRow.call();
verify(mNotificationBackend, never()).loadAppRow(any(Context.class),
- any(PackageManager.class), any(PackageInfo.class));
+ any(PackageManager.class), any(RoleManager.class), any(PackageInfo.class));
}
}
diff --git a/tests/robotests/src/com/android/settings/notification/AllowSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/AllowSoundPreferenceControllerTest.java
index 9d2754139fe..f747842d91d 100644
--- a/tests/robotests/src/com/android/settings/notification/AllowSoundPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/AllowSoundPreferenceControllerTest.java
@@ -139,12 +139,11 @@ public class AllowSoundPreferenceControllerTest {
}
@Test
- public void testUpdateState_notBlockable() {
- String lockedId = "locked";
+ public void testUpdateState_notBlockable_oem() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.getId()).thenReturn("");
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
Preference pref = new RestrictedSwitchPreference(mContext);
diff --git a/tests/robotests/src/com/android/settings/notification/BadgePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BadgePreferenceControllerTest.java
index 9ea201a531f..6de55652c77 100644
--- a/tests/robotests/src/com/android/settings/notification/BadgePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BadgePreferenceControllerTest.java
@@ -188,11 +188,10 @@ public class BadgePreferenceControllerTest {
@Test
public void testUpdateState_channelNotBlockable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.getId()).thenReturn("");
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
Preference pref = new RestrictedSwitchPreference(mContext);
@@ -204,7 +203,6 @@ public class BadgePreferenceControllerTest {
@Test
public void testUpdateState_channel() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = "a";
NotificationChannel channel = mock(NotificationChannel.class);
when(channel.canShowBadge()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
diff --git a/tests/robotests/src/com/android/settings/notification/BlockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BlockPreferenceControllerTest.java
index bdbf40a35ac..41655fab9cf 100644
--- a/tests/robotests/src/com/android/settings/notification/BlockPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BlockPreferenceControllerTest.java
@@ -101,23 +101,23 @@ public class BlockPreferenceControllerTest {
}
@Test
- public void testIsAvailable_notIfChannelNotBlockable() {
+ public void testIsAvailable_channelNotBlockable() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.systemApp = true;
NotificationChannel channel = mock(NotificationChannel.class);
when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null);
- assertFalse(mController.isAvailable());
+ assertTrue(mController.isAvailable());
}
@Test
- public void testIsAvailable_notIfChannelNonDefault() {
+ public void testIsAvailable_channelNonDefault() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.systemApp = true;
NotificationChannel channel = mock(NotificationChannel.class);
when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null);
- assertFalse(mController.isAvailable());
+ assertTrue(mController.isAvailable());
}
@Test
@@ -131,19 +131,19 @@ public class BlockPreferenceControllerTest {
}
@Test
- public void testIsAvailable_notIfGroupNotBlockable() {
+ public void testIsAvailable_GroupNotBlockable() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.systemApp = true;
mController.onResume(appRow, null, mock(NotificationChannelGroup.class), null);
- assertFalse(mController.isAvailable());
+ assertTrue(mController.isAvailable());
}
@Test
- public void testIsAvailable_notIfAppNotBlockable() {
+ public void testIsAvailable_AppNotBlockable() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.systemApp = true;
mController.onResume(appRow, null, null, null);
- assertFalse(mController.isAvailable());
+ assertTrue(mController.isAvailable());
}
@Test
@@ -160,13 +160,99 @@ public class BlockPreferenceControllerTest {
public void testIsAvailable_nonSystemApp() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.systemApp = false;
- appRow.lockedChannelId = "not this";
NotificationChannel channel = mock(NotificationChannel.class);
when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null);
assertTrue(mController.isAvailable());
}
+ @Test
+ public void testIsEnabled_lockedApp() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.lockedImportance = true;
+ appRow.systemApp = true;
+ mController.onResume(appRow, null, null, null);
+ mController.updateState(mPreference);
+ assertFalse(mSwitch.isEnabled());
+ }
+
+ @Test
+ public void testIsEnabled_GroupNotBlockable() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ mController.onResume(appRow, null, mock(NotificationChannelGroup.class), null);
+ mController.updateState(mPreference);
+ assertFalse(mSwitch.isEnabled());
+ }
+
+ @Test
+ public void testIsEnabled_systemAppNotBlockable() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ mController.onResume(appRow, null, null, null);
+ mController.updateState(mPreference);
+ assertFalse(mSwitch.isEnabled());
+ }
+
+ @Test
+ public void testIsEnabled_systemAppBlockable() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_DEFAULT);
+ channel.setBlockableSystem(true);
+ mController.onResume(appRow, channel, null, null);
+ mController.updateState(mPreference);
+ assertTrue(mSwitch.isEnabled());
+ }
+
+ @Test
+ public void testIsEnabled_lockedChannel() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
+ mController.onResume(appRow, channel, null, null);
+
+ mController.updateState(mPreference);
+
+ assertFalse(mSwitch.isEnabled());
+ }
+
+ @Test
+ public void testIsEnabled_defaultAppChannel() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.isImportanceLockedByCriticalDeviceFunction()).thenReturn(true);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
+ mController.onResume(appRow, channel, null, null);
+
+ mController.updateState(mPreference);
+
+ assertFalse(mSwitch.isEnabled());
+ }
+
+ @Test
+ public void testIsEnabled_channel() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
+ mController.onResume(appRow, channel, null, null);
+
+ mController.updateState(mPreference);
+
+ assertTrue(mSwitch.isEnabled());
+ }
+
+ @Test
+ public void testIsEnabled_app() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ mController.onResume(appRow, null, null, null);
+
+ mController.updateState(mPreference);
+
+ assertTrue(mSwitch.isEnabled());
+ }
+
@Test
public void testUpdateState_app() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
diff --git a/tests/robotests/src/com/android/settings/notification/BubblePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BubblePreferenceControllerTest.java
index 0d0b4852b58..ea66964b6f5 100644
--- a/tests/robotests/src/com/android/settings/notification/BubblePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BubblePreferenceControllerTest.java
@@ -203,11 +203,9 @@ public class BubblePreferenceControllerTest {
@Test
public void testUpdateState_channelNotBlockable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.isImportanceLockedByCriticalDeviceFunction()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
Preference pref = new RestrictedSwitchPreference(mContext);
@@ -219,7 +217,6 @@ public class BubblePreferenceControllerTest {
@Test
public void testUpdateState_channel() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = "a";
NotificationChannel channel = mock(NotificationChannel.class);
when(channel.canBubble()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
diff --git a/tests/robotests/src/com/android/settings/notification/DndPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/DndPreferenceControllerTest.java
index 929c14d7db3..f6636301ece 100644
--- a/tests/robotests/src/com/android/settings/notification/DndPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/DndPreferenceControllerTest.java
@@ -111,11 +111,9 @@ public class DndPreferenceControllerTest {
@Test
public void testUpdateState_notBlockable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
Preference pref = new RestrictedSwitchPreference(RuntimeEnvironment.application);
diff --git a/tests/robotests/src/com/android/settings/notification/HighImportancePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/HighImportancePreferenceControllerTest.java
index 6e6dad4c839..a89a826199c 100644
--- a/tests/robotests/src/com/android/settings/notification/HighImportancePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/HighImportancePreferenceControllerTest.java
@@ -142,11 +142,9 @@ public class HighImportancePreferenceControllerTest {
@Test
public void testUpdateState_notConfigurable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null);
@@ -156,6 +154,36 @@ public class HighImportancePreferenceControllerTest {
assertFalse(pref.isEnabled());
}
+ @Test
+ public void testUpdateState_systemButConfigurable() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.isImportanceLockedByOEM()).thenReturn(false);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
+ mController.onResume(appRow, channel, null, null);
+
+ Preference pref = new RestrictedSwitchPreference(mContext, null);
+ mController.updateState(pref);
+
+ assertTrue(pref.isEnabled());
+ }
+
+ @Test
+ public void testUpdateState_defaultApp() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.isImportanceLockedByCriticalDeviceFunction()).thenReturn(true);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
+ mController.onResume(appRow, channel, null, null);
+
+ Preference pref = new RestrictedSwitchPreference(mContext, null);
+ mController.updateState(pref);
+
+ assertTrue(pref.isEnabled());
+ }
+
@Test
public void testUpdateState_high() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
diff --git a/tests/robotests/src/com/android/settings/notification/ImportancePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ImportancePreferenceControllerTest.java
index c9f62e98c3b..999631e6629 100644
--- a/tests/robotests/src/com/android/settings/notification/ImportancePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ImportancePreferenceControllerTest.java
@@ -159,11 +159,9 @@ public class ImportancePreferenceControllerTest {
@Test
public void testUpdateState_notConfigurable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null);
@@ -173,6 +171,36 @@ public class ImportancePreferenceControllerTest {
assertFalse(pref.isEnabled());
}
+ @Test
+ public void testUpdateState_systemButConfigurable() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.isImportanceLockedByOEM()).thenReturn(false);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
+ mController.onResume(appRow, channel, null, null);
+
+ Preference pref = new ImportancePreference(mContext, null);
+ mController.updateState(pref);
+
+ assertTrue(pref.isEnabled());
+ }
+
+ @Test
+ public void testUpdateState_defaultApp() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.isImportanceLockedByCriticalDeviceFunction()).thenReturn(true);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH);
+ mController.onResume(appRow, channel, null, null);
+
+ Preference pref = new ImportancePreference(mContext, null);
+ mController.updateState(pref);
+
+ assertTrue(pref.isEnabled());
+ }
+
@Test
public void testUpdateState() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
diff --git a/tests/robotests/src/com/android/settings/notification/LightsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/LightsPreferenceControllerTest.java
index 3724ddb9c43..ac9cdf1644d 100644
--- a/tests/robotests/src/com/android/settings/notification/LightsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/LightsPreferenceControllerTest.java
@@ -159,11 +159,9 @@ public class LightsPreferenceControllerTest {
@Test
public void testUpdateState_notBlockable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
Preference pref = new RestrictedSwitchPreference(mContext);
diff --git a/tests/robotests/src/com/android/settings/notification/MinImportancePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/MinImportancePreferenceControllerTest.java
index 28058a409ef..b8ef7d12d95 100644
--- a/tests/robotests/src/com/android/settings/notification/MinImportancePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/MinImportancePreferenceControllerTest.java
@@ -142,11 +142,9 @@ public class MinImportancePreferenceControllerTest {
@Test
public void testUpdateState_notConfigurable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
when(channel.getImportance()).thenReturn(IMPORTANCE_LOW);
mController.onResume(appRow, channel, null, null);
@@ -156,6 +154,36 @@ public class MinImportancePreferenceControllerTest {
assertFalse(pref.isEnabled());
}
+ @Test
+ public void testUpdateState_systemButConfigurable() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.isImportanceLockedByOEM()).thenReturn(false);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_LOW);
+ mController.onResume(appRow, channel, null, null);
+
+ Preference pref = new RestrictedSwitchPreference(mContext, null);
+ mController.updateState(pref);
+
+ assertTrue(pref.isEnabled());
+ }
+
+ @Test
+ public void testUpdateState_defaultApp() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.systemApp = true;
+ NotificationChannel channel = mock(NotificationChannel.class);
+ when(channel.isImportanceLockedByCriticalDeviceFunction()).thenReturn(true);
+ when(channel.getImportance()).thenReturn(IMPORTANCE_LOW);
+ mController.onResume(appRow, channel, null, null);
+
+ Preference pref = new RestrictedSwitchPreference(mContext, null);
+ mController.updateState(pref);
+
+ assertTrue(pref.isEnabled());
+ }
+
@Test
public void testUpdateState_min() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
index 2c2e3791ab8..cb5060914b8 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
@@ -18,22 +18,28 @@ package com.android.settings.notification;
import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import android.app.role.RoleManager;
import android.app.usage.UsageEvents;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
import android.os.Parcel;
import com.android.settings.notification.NotificationBackend.AppRow;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
import java.util.List;
-import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class NotificationBackendTest {
@@ -50,81 +56,40 @@ public class NotificationBackendTest {
// This package has a package lock but no locked channels
assertTrue(appRow.lockedImportance);
- assertNull(appRow.lockedChannelId);
}
@Test
- public void testMarkAppRow_unblockableChannelOrPkg() {
- String channelBlockName = "foo.bar.pkgWithChannel";
- String pkgBlockName = "foo.bar.pkgBlock";
- String[] nonBlockablePkgs = new String[2];
- nonBlockablePkgs[0] = pkgBlockName;
- nonBlockablePkgs[1] = channelBlockName + ":SpecificChannel";
+ 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);
- // This package has a channel level lock but no full package lock
- AppRow channelBlockApp = new AppRow();
- channelBlockApp.pkg = channelBlockName;
- NotificationBackend.markAppRowWithBlockables(nonBlockablePkgs, channelBlockApp,
- channelBlockName);
- assertFalse(channelBlockApp.lockedImportance);
- assertEquals("SpecificChannel", channelBlockApp.lockedChannelId);
+ AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
+ mock(PackageManager.class), rm, pi);
- // This other package has the reverse
- AppRow pkgBlock = new AppRow();
- pkgBlock.pkg = pkgBlockName;
- NotificationBackend.markAppRowWithBlockables(nonBlockablePkgs, pkgBlock, pkgBlockName);
- assertTrue(pkgBlock.lockedImportance);
- assertNull(pkgBlock.lockedChannelId);
-
- // This third package has no locks at all
- AppRow otherAppRow = new AppRow();
- otherAppRow.pkg ="foo.bar.nothingBlocked";
- NotificationBackend.markAppRowWithBlockables(nonBlockablePkgs, otherAppRow,
- "foo.bar.nothingBlocked");
- assertFalse(otherAppRow.lockedImportance);
- assertNull(otherAppRow.lockedChannelId);
+ assertTrue(appRow.systemApp);
}
@Test
- public void testMarkAppRow_unblockableChannelAndPkg() {
- AppRow appRow = new AppRow();
- String packageName = "foo.bar.unblockable";
- appRow.pkg = packageName;
- String[] nonBlockablePkgs = new String[2];
- nonBlockablePkgs[0] = "foo.bar.unblockable";
- nonBlockablePkgs[1] = "foo.bar.unblockable:SpecificChannel";
- NotificationBackend.markAppRowWithBlockables(nonBlockablePkgs, appRow, packageName);
+ 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);
- // This package has both a channel lock and a package lock
- assertTrue(appRow.lockedImportance);
- assertEquals("SpecificChannel", appRow.lockedChannelId);
- }
+ AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
+ mock(PackageManager.class), rm, pi);
- @Test
- public void testMarkAppRow_channelNameWithColons() {
- AppRow appRow = new AppRow();
- String packageName = "foo.bar.unblockable";
- String channelName = "SpecificChannel:1234:abc:defg";
- appRow.pkg = packageName;
- String[] nonBlockablePkgs = new String[1];
- nonBlockablePkgs[0] = packageName + ":" + channelName;
- NotificationBackend.markAppRowWithBlockables(nonBlockablePkgs, appRow, packageName);
-
- assertEquals(channelName, appRow.lockedChannelId);
- }
-
- @Test
- public void testMarkAppRow_blocklistWithNullEntries() {
- AppRow appRow = new AppRow();
- String packageName = "foo.bar.unblockable";
- appRow.pkg = packageName;
- String[] nonBlockablePkgs = new String[6]; // extra long list with some entries left null
- nonBlockablePkgs[2] = "foo.bar.unblockable";
- nonBlockablePkgs[4] = "foo.bar.unblockable:SpecificChannel";
- NotificationBackend.markAppRowWithBlockables(nonBlockablePkgs, appRow, packageName);
-
- assertTrue(appRow.lockedImportance);
- assertEquals("SpecificChannel", appRow.lockedChannelId);
+ assertFalse(appRow.systemApp);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/NotificationPreferenceControllerTest.java
index a72597b4ba7..cde5b900cf1 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationPreferenceControllerTest.java
@@ -203,36 +203,29 @@ public class NotificationPreferenceControllerTest {
}
@Test
- public void testIsBlockable_channelLevelWhitelist() {
- String sameId = "bananas";
+ public void testIsBlockable_oemWhitelist() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = sameId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(sameId);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
when(channel.getImportance()).thenReturn(IMPORTANCE_LOW);
mController.onResume(appRow, channel, null, null);
assertFalse(mController.isChannelBlockable());
- when(channel.getId()).thenReturn("something new");
+ when(channel.isImportanceLockedByOEM()).thenReturn(false);
mController.onResume(appRow, channel, null, null);
assertTrue(mController.isChannelBlockable());
}
@Test
- public void testIsBlockable_appLevelWhitelist() {
+ public void testIsBlockable_defaultApp() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = "something";
- appRow.lockedImportance = true;
NotificationChannel channel = mock(NotificationChannel.class);
when(channel.getImportance()).thenReturn(IMPORTANCE_LOW);
+ when(channel.isImportanceLockedByCriticalDeviceFunction()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
assertFalse(mController.isChannelBlockable());
-
- appRow.lockedImportance = false;
- mController.onResume(appRow, mock(NotificationChannel.class), null, null);
- assertTrue(mController.isChannelBlockable());
}
@Test
@@ -281,34 +274,6 @@ public class NotificationPreferenceControllerTest {
assertTrue(mController.isChannelBlockable());
}
- @Test
- public void testIsChannelBlockable_notConfigurable() {
- String sameId = "apples";
- NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.systemApp = false;
- appRow.lockedChannelId = sameId;
- NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(sameId);
- when(channel.getImportance()).thenReturn(IMPORTANCE_DEFAULT);
-
- mController.onResume(appRow, channel, null, null);
- assertFalse(mController.isChannelBlockable());
- }
-
- @Test
- public void testIsChannelBlockable_notConfigurableButBlocked() {
- String sameId = "apples";
- NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.systemApp = false;
- appRow.lockedChannelId = sameId;
- NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(sameId);
- when(channel.getImportance()).thenReturn(IMPORTANCE_NONE);
-
- mController.onResume(appRow, channel, null, null);
- assertTrue(mController.isChannelBlockable());
- }
-
@Test
public void testIsChannelGroupBlockable_nonSystemBlockable() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
diff --git a/tests/robotests/src/com/android/settings/notification/SoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/SoundPreferenceControllerTest.java
index 1d9836e2af1..f09f63b415a 100644
--- a/tests/robotests/src/com/android/settings/notification/SoundPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/SoundPreferenceControllerTest.java
@@ -162,11 +162,9 @@ public class SoundPreferenceControllerTest {
@Test
public void testUpdateState_notBlockable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
diff --git a/tests/robotests/src/com/android/settings/notification/VibrationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/VibrationPreferenceControllerTest.java
index adc10f46180..786b713b272 100644
--- a/tests/robotests/src/com/android/settings/notification/VibrationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/VibrationPreferenceControllerTest.java
@@ -141,11 +141,9 @@ public class VibrationPreferenceControllerTest {
@Test
public void testUpdateState_notBlockable() {
- String lockedId = "locked";
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.lockedChannelId = lockedId;
NotificationChannel channel = mock(NotificationChannel.class);
- when(channel.getId()).thenReturn(lockedId);
+ when(channel.isImportanceLockedByOEM()).thenReturn(true);
mController.onResume(appRow, channel, null, null);
Preference pref = new RestrictedSwitchPreference(RuntimeEnvironment.application);
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
index 41d1bbe4f38..15a07802be2 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
@@ -27,6 +27,7 @@ import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowConnectivityManager;
import com.android.settings.testutils.shadow.ShadowWifiManager;
+import com.android.settings.wifi.dpp.WifiDppEnrolleeActivity;
import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -37,6 +38,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.android.controller.ActivityController;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
@@ -111,4 +113,23 @@ public class WifiDialogActivityTest {
assertThat(dialog.getContext().getThemeResId())
.isEqualTo(R.style.SuwAlertDialogThemeCompat_Light);
}
+
+ @Test
+ public void onScan_whenLaunchFromDeferredSetup_shouldApplyLightTheme() {
+ ActivityController controller = Robolectric.buildActivity(
+ WifiDppEnrolleeActivity.class,
+ new Intent()
+ .setAction(WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER)
+ .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true)
+ .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)
+ );
+ controller.create();
+
+ Intent intent = controller.getIntent();
+ assertThat(intent.getBooleanExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, false)).isTrue();
+ assertThat(intent.getBooleanExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, false)).isTrue();
+
+ assertThat(controller.get().getThemeResId()).
+ isEqualTo(R.style.LightTheme_SettingsBase_SetupWizard);
+ }
}