Merge "Delete Settings code related to super-obsolete zen onboarding" into main

This commit is contained in:
Matías Hernández
2024-10-03 17:01:36 +00:00
committed by Android (Google) Code Review
9 changed files with 0 additions and 675 deletions

View File

@@ -1384,40 +1384,6 @@
android:theme="@style/Theme.Settings.NoActionBar">
</activity>
<activity
android:name=".notification.zen.ZenSuggestionActivity"
android:label="@string/zen_mode_settings_title"
android:icon="@drawable/ic_suggestion_dnd"
android:exported="true"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="com.android.settings.suggested.category.ZEN" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="com.android.settings.suggested.category.FIRST_IMPRESSION" />
</intent-filter>
<meta-data android:name="com.android.settings.dismiss"
android:value="0" />
<meta-data android:name="com.android.settings.title"
android:resource="@string/zen_suggestion_title" />
<meta-data android:name="com.android.settings.summary"
android:resource="@string/zen_suggestion_summary" />
</activity>
<activity
android:name=".notification.zen.ZenOnboardingActivity"
android:label="@string/zen_onboarding_dnd_visual_disturbances_header"
android:icon="@drawable/ic_notifications"
android:theme="@*android:style/Theme.DeviceDefault.Settings.Dialog.NoActionBar"
android:exported="true">
<intent-filter android:priority="1">
<action android:name="android.settings.ZEN_MODE_ONBOARDING" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="Settings$ZenModeAutomationSettingsActivity"
android:label="@string/zen_mode_automation_settings_title"

View File

@@ -1,138 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2018 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/zen_onboarding_choices"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:paddingTop="18dp">
<TextView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zen_onboarding_dnd_visual_disturbances_header"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle" />
<LinearLayout
android:id="@+id/zen_onboarding_new_setting"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/header"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/zen_onboarding_new_setting_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="8dp"
android:minHeight="48dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/zen_onboarding_new_setting_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/zen_onboarding_new_setting_title"
android:textAppearance="?android:attr/textAppearanceListItem" />
<TextView
android:id="@+id/zen_onboarding_new_setting_summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/zen_onboarding_new_setting_summary" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/zen_onboarding_current_setting"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/zen_onboarding_new_setting"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/zen_onboarding_current_setting_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="8dp"
android:minHeight="48dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/zen_onboarding_current_setting_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/zen_onboarding_current_setting_title"
android:textAppearance="?android:attr/textAppearanceListItem" />
<TextView
android:id="@+id/zen_onboarding_current_setting_summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/zen_onboarding_current_setting_summary" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/zen_onboarding_choices"
android:layout_marginLeft="8dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="10dp">
<Button
android:id="@+id/settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zen_onboarding_settings"
android:layout_alignParentStart="true"
style="@style/TextAppearance.ZenOnboardingButton"
android:onClick="launchSettings" />
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:text="@string/zen_onboarding_ok"
style="@style/TextAppearance.ZenOnboardingButton"
android:onClick="save" />
</RelativeLayout>
</RelativeLayout>

View File

@@ -8451,28 +8451,6 @@
<!-- Do not disturb custom settings duration header [CHAR LIMIT=40]-->
<string name="zen_custom_settings_duration_header">Duration</string>
<!-- Do not disturb settings, messages, events and reminders title [CHAR LIMIT=100]-->
<string name="zen_msg_event_reminder_title">Messages, events &amp; reminders</string>
<!-- Do not disturb settings, messages, events and reminders footer [CHAR LIMIT=NONE]-->
<string name="zen_msg_event_reminder_footer">When Do Not Disturb is on, messages, reminders, and events will be muted, except for the items you allow above. You can adjust messages settings to allow your friends, family, or other contacts to reach you.</string>
<!-- Do not disturb onboarding dialog, accept new settings [CHAR LIMIT=30]-->
<string name="zen_onboarding_ok">Done</string>
<!-- Do not disturb onboarding dialog, on click user goes to dnd settings page [CHAR LIMIT=30]-->
<string name="zen_onboarding_settings">Settings</string>
<!-- Do not disturb onboarding dialog, title for radio button [CHAR LIMIT=80]-->
<string name="zen_onboarding_new_setting_title">No visuals or sound from notifications</string>
<!-- Do not disturb onboarding dialog, title for radio button [CHAR LIMIT=80]-->
<string name="zen_onboarding_current_setting_title">No sound from notifications</string>
<!-- Do not disturb onboarding dialog, secondary text for radio button [CHAR LIMIT=NONE]-->
<string name="zen_onboarding_new_setting_summary">You won\u2019t see or hear notifications. Calls from starred contacts and repeat callers are allowed.</string>
<!-- Do not disturb onboarding dialog, secondary text for radio button [CHAR LIMIT=NONE]-->
<string name="zen_onboarding_current_setting_summary">(Current setting)</string>
<!-- Do not disturb onboarding dialog, header prompt for settings [CHAR LIMIT=80]-->
<string name="zen_onboarding_dnd_visual_disturbances_header">Change Do Not Disturb notification settings?</string>
<!-- Work Sounds: Work sound settings section header. [CHAR LIMIT=50] -->
<string name="sound_work_settings">Work profile sounds</string>

View File

@@ -30,8 +30,6 @@ import com.android.settings.biometrics.fingerprint.FingerprintEnrollSuggestionAc
import com.android.settings.biometrics.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.display.NightDisplayPreferenceController;
import com.android.settings.flags.Flags;
import com.android.settings.notification.zen.ZenOnboardingActivity;
import com.android.settings.notification.zen.ZenSuggestionActivity;
import com.android.settings.password.ScreenLockSuggestionActivity;
import com.android.settings.wallpaper.StyleSuggestionActivity;
import com.android.settings.wallpaper.WallpaperSuggestionActivity;
@@ -72,8 +70,6 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
return WifiCallingSuggestionActivity.isSuggestionComplete(context);
} else if (className.equals(NightDisplaySuggestionActivity.class.getName())) {
return NightDisplayPreferenceController.isSuggestionComplete(context);
} else if (className.equals(ZenSuggestionActivity.class.getName())) {
return ZenOnboardingActivity.isSuggestionComplete(context);
}
return false;
}

View File

@@ -172,9 +172,6 @@ public class ZenModeBackend {
}
protected void saveVisualEffectsPolicy(int category, boolean suppress) {
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.ZEN_SETTINGS_UPDATED, 1);
int suppressedEffects = getNewSuppressedEffects(suppress, category);
savePolicy(mPolicy.priorityCategories, mPolicy.priorityCallSenders,
mPolicy.priorityMessageSenders, suppressedEffects,

View File

@@ -1,208 +0,0 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.notification.zen;
import android.app.Activity;
import android.app.Flags;
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.provider.Settings;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.View;
import android.widget.RadioButton;
import androidx.annotation.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.settings.R;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
public class ZenOnboardingActivity extends Activity {
private static final String TAG = "ZenOnboardingActivity";
@VisibleForTesting
static final String PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME =
"pref_zen_suggestion_first_display_time_ms";
@VisibleForTesting
static final long ALWAYS_SHOW_THRESHOLD = DateUtils.DAY_IN_MILLIS * 14;
View mNewSetting;
View mKeepCurrentSetting;
RadioButton mNewSettingButton;
RadioButton mKeepCurrentSettingButton;
private NotificationManager mNm;
private MetricsLogger mMetrics;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setNotificationManager(getSystemService(NotificationManager.class));
setMetricsLogger(new MetricsLogger());
Context context = getApplicationContext();
Settings.Secure.putInt(context.getContentResolver(),
Settings.Secure.ZEN_SETTINGS_SUGGESTION_VIEWED, 1);
setupUI();
}
@VisibleForTesting
protected void setupUI() {
setContentView(R.layout.zen_onboarding);
mNewSetting = findViewById(R.id.zen_onboarding_new_setting);
mKeepCurrentSetting = findViewById(R.id.zen_onboarding_current_setting);
mNewSettingButton = findViewById(R.id.zen_onboarding_new_setting_button);
mKeepCurrentSettingButton = findViewById(R.id.zen_onboarding_current_setting_button);
View.OnClickListener newSettingClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
mKeepCurrentSettingButton.setChecked(false);
mNewSettingButton.setChecked(true);
}
};
View.OnClickListener currentSettingClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
mKeepCurrentSettingButton.setChecked(true);
mNewSettingButton.setChecked(false);
}
};
mNewSetting.setOnClickListener(newSettingClickListener);
mNewSettingButton.setOnClickListener(newSettingClickListener);
mKeepCurrentSetting.setOnClickListener(currentSettingClickListener);
mKeepCurrentSettingButton.setOnClickListener(currentSettingClickListener);
mKeepCurrentSettingButton.setChecked(true);
mMetrics.visible(SettingsEnums.SETTINGS_ZEN_ONBOARDING);
}
@VisibleForTesting
protected void setNotificationManager(NotificationManager nm) {
mNm = nm;
}
@VisibleForTesting
protected void setMetricsLogger(MetricsLogger ml) {
mMetrics = ml;
}
public void launchSettings(View button) {
mMetrics.action(SettingsEnums.ACTION_ZEN_ONBOARDING_SETTINGS);
Intent settings = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS)
.setPackage(getPackageName());
settings.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(settings);
}
public void save(View button) {
NotificationManager.Policy policy = mNm.getNotificationPolicy();
if (mNewSettingButton.isChecked()) {
NotificationManager.Policy newPolicy = new NotificationManager.Policy(
Policy.PRIORITY_CATEGORY_REPEAT_CALLERS | policy.priorityCategories,
Policy.PRIORITY_SENDERS_STARRED,
policy.priorityMessageSenders,
NotificationManager.Policy.getAllSuppressedVisualEffects());
if (Flags.modesApi()) {
mNm.setNotificationPolicy(newPolicy, /* fromUser= */ true);
} else {
mNm.setNotificationPolicy(newPolicy);
}
mMetrics.action(SettingsEnums.ACTION_ZEN_ONBOARDING_OK);
} else {
mMetrics.action(SettingsEnums.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
}
Settings.Secure.putInt(getApplicationContext().getContentResolver(),
Settings.Secure.ZEN_SETTINGS_UPDATED, 1);
finishAndRemoveTask();
}
public static boolean isSuggestionComplete(Context context) {
if (wasZenUpdated(context)) {
return true;
}
if (showSuggestion(context) || withinShowTimeThreshold(context)) {
return false;
}
return true;
}
private static boolean wasZenUpdated(Context context) {
// ZEN_SETTINGS_UPDATED is true for:
// - fresh P+ device
// - if zen visual effects values were changed by the user in Settings
NotificationManager nm = context.getSystemService(NotificationManager.class);
if (NotificationManager.Policy.areAllVisualEffectsSuppressed(
nm.getNotificationPolicy().suppressedVisualEffects)) {
Settings.Secure.putInt(context.getContentResolver(),
Settings.Secure.ZEN_SETTINGS_UPDATED, 1);
}
return Settings.Secure.getInt(context.getContentResolver(),
Settings.Secure.ZEN_SETTINGS_UPDATED, 0) != 0;
}
private static boolean showSuggestion(Context context) {
// SHOW_ZEN_SETTINGS_SUGGESTION is by default true, but false when:
// - user manually turns on dnd
// SHOW_ZEN_SETTINGS_SUGGESTION is also true when:
// - automatic rule has started DND and user has not seen the first use dialog
return Settings.Secure.getInt(context.getContentResolver(),
Settings.Secure.SHOW_ZEN_SETTINGS_SUGGESTION, 0) != 0;
}
private static boolean withinShowTimeThreshold(Context context) {
final SuggestionFeatureProvider featureProvider =
FeatureFactory.getFeatureFactory().getSuggestionFeatureProvider();
final SharedPreferences prefs = featureProvider.getSharedPrefs(context);
final long currentTimeMs = System.currentTimeMillis();
final long firstDisplayTimeMs;
if (!prefs.contains(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME)) {
firstDisplayTimeMs = currentTimeMs;
prefs.edit().putLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME, currentTimeMs).commit();
} else {
firstDisplayTimeMs = prefs.getLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME, -1);
}
final long showTimeMs = firstDisplayTimeMs + ALWAYS_SHOW_THRESHOLD;
final boolean stillShow = currentTimeMs < showTimeMs;
Log.d(TAG, "still show zen suggestion based on time: " + stillShow + " showTimeMs="
+ showTimeMs);
return stillShow;
}
}

View File

@@ -1,26 +0,0 @@
package com.android.settings.notification.zen;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
public class ZenSuggestionActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// start up zen settings activity
Intent settingsIntent = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS)
.setPackage(getPackageName());
startActivity(settingsIntent);
// start up onboarding activity
Intent onboardingActivity = new Intent(Settings.ZEN_MODE_ONBOARDING)
.setPackage(getPackageName());
startActivity(onboardingActivity);
finish();
}
}

View File

@@ -1,231 +0,0 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.settings.notification.zen;
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS;
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_ON;
import static com.android.settings.notification.zen.ZenOnboardingActivity.ALWAYS_SHOW_THRESHOLD;
import static com.android.settings.notification.zen.ZenOnboardingActivity.PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME;
import static com.android.settings.notification.zen.ZenOnboardingActivity.isSuggestionComplete;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Flags;
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
import android.content.Context;
import android.content.SharedPreferences;
import android.provider.Settings;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowApplication;
@RunWith(RobolectricTestRunner.class)
public class ZenOnboardingActivityTest {
@Mock
private MetricsLogger mMetricsLogger;
@Mock
private NotificationManager mNm;
private ZenOnboardingActivity mActivity;
private Context mContext;
private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
ShadowApplication shadowApplication = ShadowApplication.getInstance();
shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm);
mActivity = Robolectric.buildActivity(ZenOnboardingActivity.class)
.create()
.get();
mActivity.setNotificationManager(mNm);
mActivity.setMetricsLogger(mMetricsLogger);
mActivity.setupUI();
mContext = RuntimeEnvironment.application;
mFeatureFactory = FakeFeatureFactory.setupForTest();
when(mFeatureFactory.suggestionsFeatureProvider.getSharedPrefs(any(Context.class)))
.thenReturn(getSharedPreferences());
}
@Test
public void loadUiRecordsEvent() {
verify(mMetricsLogger).visible(MetricsEvent.SETTINGS_ZEN_ONBOARDING);
}
@Test
public void saveNewSetting() {
Policy policy = new Policy(PRIORITY_CATEGORY_ALARMS, 0, 0, SUPPRESSED_EFFECT_SCREEN_ON);
when(mNm.getNotificationPolicy()).thenReturn(policy);
mActivity.mNewSetting.performClick();
mActivity.save(null);
verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
ArgumentCaptor<Policy> captor = ArgumentCaptor.forClass(Policy.class);
if (android.app.Flags.modesApi()) {
verify(mNm).setNotificationPolicy(captor.capture(), eq(true));
} else {
verify(mNm).setNotificationPolicy(captor.capture());
}
Policy actual = captor.getValue();
assertThat(actual.priorityCategories).isEqualTo(PRIORITY_CATEGORY_ALARMS
| PRIORITY_CATEGORY_REPEAT_CALLERS);
assertThat(actual.priorityCallSenders).isEqualTo(Policy.PRIORITY_SENDERS_STARRED);
assertThat(actual.priorityMessageSenders).isEqualTo(Policy.PRIORITY_SENDERS_ANY);
assertThat(actual.suppressedVisualEffects).isEqualTo(
Policy.getAllSuppressedVisualEffects());
}
@Test
public void keepCurrentSetting() {
Policy policy = new Policy(PRIORITY_CATEGORY_ALARMS, 0, 0, SUPPRESSED_EFFECT_SCREEN_ON);
when(mNm.getNotificationPolicy()).thenReturn(policy);
mActivity.mKeepCurrentSetting.performClick();
mActivity.save(null);
verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
if (Flags.modesApi()) {
verify(mNm, never()).setNotificationPolicy(any(), anyBoolean());
} else {
verify(mNm, never()).setNotificationPolicy(any());
}
}
@Test
public void isSuggestionComplete_zenUpdated() {
Policy policy = new Policy(0, 0, 0, 0);
when(mNm.getNotificationPolicy()).thenReturn(policy);
setZenUpdated(true);
setShowSettingsSuggestion(false);
setWithinTimeThreshold(true);
assertThat(isSuggestionComplete(mContext)).isTrue();
}
@Test
public void isSuggestionComplete_withinTimeThreshold() {
Policy policy = new Policy(0, 0, 0, 0);
when(mNm.getNotificationPolicy()).thenReturn(policy);
setZenUpdated(false);
setShowSettingsSuggestion(false);
setWithinTimeThreshold(true);
assertThat(isSuggestionComplete(mContext)).isFalse();
}
@Test
public void isSuggestionComplete_showSettingsSuggestionTrue() {
Policy policy = new Policy(0, 0, 0, 0);
when(mNm.getNotificationPolicy()).thenReturn(policy);
setZenUpdated(false);
setShowSettingsSuggestion(true);
setWithinTimeThreshold(false);
assertThat(isSuggestionComplete(mContext)).isFalse();
}
@Test
public void isSuggestionComplete_showSettingsSuggestionFalse_notWithinTimeThreshold() {
Policy policy = new Policy(0, 0, 0, 0);
when(mNm.getNotificationPolicy()).thenReturn(policy);
setZenUpdated(false);
setShowSettingsSuggestion(false);
setWithinTimeThreshold(false);
assertThat(isSuggestionComplete(mContext)).isTrue();
}
@Test
public void isSuggestionComplete_visualEffectsUpdated() {
// all values suppressed
Policy policy = new Policy(0, 0, 0, 511);
when(mNm.getNotificationPolicy()).thenReturn(policy);
setZenUpdated(false);
setShowSettingsSuggestion(true);
setWithinTimeThreshold(true);
assertThat(isSuggestionComplete(mContext)).isTrue();
assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.ZEN_SETTINGS_UPDATED, -1)).isEqualTo(1);
}
private void setZenUpdated(boolean updated) {
int zenUpdated = updated ? 1 : 0;
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.ZEN_SETTINGS_UPDATED, zenUpdated);
}
private void setWithinTimeThreshold(boolean withinTime) {
long firstTime = System.currentTimeMillis();
if (withinTime) {
firstTime -= ALWAYS_SHOW_THRESHOLD / 2;
} else {
firstTime -= ALWAYS_SHOW_THRESHOLD * 2;
}
getSharedPreferences().edit().putLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME,
firstTime).commit();
}
private void setShowSettingsSuggestion(boolean show) {
int showZenSuggestion = 0;
if (show) {
showZenSuggestion = 1;
}
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.SHOW_ZEN_SETTINGS_SUGGESTION, showZenSuggestion);
}
private SharedPreferences getSharedPreferences() {
return mContext.getSharedPreferences("test_zen_sugg", Context.MODE_PRIVATE);
}
}

View File

@@ -29,7 +29,6 @@ import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollSuggestionActivity;
import com.android.settings.biometrics.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.notification.zen.ZenSuggestionActivity;
import com.android.settings.wallpaper.WallpaperSuggestionActivity;
import com.android.settings.wifi.calling.WifiCallingSuggestionActivity;
@@ -81,14 +80,6 @@ public class SettingsSuggestionsTest {
R.string.night_display_suggestion_summary);
}
@Test
public void zenSuggestion_isValid() {
assertSuggestionEquals(
ZenSuggestionActivity.class.getName(),
R.string.zen_suggestion_title,
R.string.zen_suggestion_summary);
}
private void assertSuggestionEquals(String activityName, @StringRes int titleRes,
@StringRes int summaryRes) {