DO NOT MERGE Update zen onboarding

- Update text
- Update buttons
- Update style

Bug: 79702414
Bug: 78447976
Bug: 79525632
Test: ZenOnboardingActivityTest
Change-Id: Ied476fc920828409993953fba32bf3dae324ea3c
This commit is contained in:
Beverly
2018-05-14 16:45:49 -04:00
parent a924a1e2ae
commit e3a66fc16d
5 changed files with 184 additions and 89 deletions

View File

@@ -17,40 +17,112 @@
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:padding="20dp">
android:layout_height="wrap_content" >
<TextView
android:id="@+id/header"
android:layout_width="wrap_content"
<RelativeLayout
android:id="@+id/zen_onboarding_choices"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/zen_onboarding_dnd_visual_disturbances_header"
android:textAppearance="@android:style/TextAppearance.Material.DialogWindowTitle" />
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:paddingTop="18dp">
<TextView
android:id="@+id/feature_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/header"
android:layout_marginTop="24dp"
android:textAppearance="?android:attr/textAppearanceListItem"
android:text="@string/zen_onboarding_dnd_visual_disturbances_description" />
<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.Material.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" />
<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" />
<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/feature_description"
android:layout_marginTop="35dp">
android:layout_below="@+id/zen_onboarding_choices"
android:layout_marginLeft="8dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="10dp">
<Button
android:id="@+id/no"
android:id="@+id/settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zen_onboarding_no_update"
android:layout_toStartOf="@+id/ok"
android:text="@string/zen_onboarding_settings"
android:layout_alignParentStart="true"
style="@style/TextAppearance.ZenOnboardingButton"
android:onClick="close" />
android:onClick="launchSettings" />
<Button
android:id="@+id/ok"

View File

@@ -7390,26 +7390,34 @@
<string name="zen_msg_event_reminder_footer">When Do Not Disturb is on, messages, reminders, and events will 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">Update</string>
<!-- Do not disturb onboarding dialog, do not accept new settings [CHAR LIMIT=30]-->
<string name="zen_onboarding_no_update">Don\'t update</string>
<!-- Do not disturb onboarding dialog, description of new settings [CHAR LIMIT=NONE]-->
<string name="zen_onboarding_dnd_visual_disturbances_description">Your phone can do more to help you focus.\n\nUpdate settings to:\n\n- Hide notifications completely\n\n- Allow calls from starred contacts and repeat callers</string>
<!-- Do not disturb onboarding dialog, header prompt for settings [CHAR LIMIT=80]-->
<string name="zen_onboarding_dnd_visual_disturbances_header">Update Do Not Disturb?</string>
<!-- obsolete -->
<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>
<!-- obsolete -->
<string name="zen_onboarding_more_options">You can further customize this in Settings.</string>
<!-- obsolete -->
<string name="zen_onboarding_screen_on_title">Block when the screen is on</string>
<!-- obsolete -->
<string name="zen_onboarding_screen_off_title">Block when the screen is off</string>
<!-- obsolete -->
<string name="zen_onboarding_screen_off_summary">Don\'t turn on the screen or wake for notifications</string>
<!-- obsolete -->
<string name="zen_onboarding_screen_on_summary">Don\'t show notifications at all, except for basic phone activity and status</string>
<!-- Do not disturb onboarding dialog, title for radio button [CHAR LIMIT=80]-->
<string name="zen_onboarding_new_setting_title">No visuals or sounds 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>
<!-- DO NOT TRANSLATE obsolete [CHAR LIMIT=NONE]-->
<string name="zen_onboarding_dnd_visual_disturbances_description" translatable="false">Your phone can do more to help you focus.\n\nUpdate settings to:\n\n- Hide notifications completely\n\n- Allow calls from starred contacts and repeat callers</string>
<!-- DO NOT TRANSLATE obsolete -->
<string name="zen_onboarding_more_options" translatable="false">You can further customize this in Settings.</string>
<!-- DO NOT TRANSLATE obsolete -->
<string name="zen_onboarding_screen_on_title" translatable="false">Block when the screen is on</string>
<!-- DO NOT TRANSLATE obsolete -->
<string name="zen_onboarding_screen_off_title" translatable="false">Block when the screen is off</string>
<!-- DO NOT TRANSLATE obsolete -->
<string name="zen_onboarding_screen_off_summary" translatable="false">Don\'t turn on the screen or wake for notifications</string>
<!-- DO NOT TRANSLATE obsolete -->
<string name="zen_onboarding_screen_on_summary" translatable="false">Don\'t show notifications at all, except for basic phone activity and status</string>
<!-- Work Sounds: Work sound settings section header. [CHAR LIMIT=50] -->
<string name="sound_work_settings">Work profile sounds</string>

View File

@@ -439,8 +439,7 @@
<item name="android:background">@drawable/btn_borderless_rect</item>
<item name="android:gravity">center</item>
<item name="android:focusable">true</item>
<item name="android:paddingStart">8dp</item>
<item name="android:paddingEnd">8dp</item>
<item name="android:padding">8dp</item>
</style>
<style name="ActionPrimaryButton" parent="android:Widget.DeviceDefault.Button.Colored"/>

View File

@@ -20,12 +20,14 @@ import android.app.Activity;
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
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 com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
@@ -39,13 +41,16 @@ public class ZenOnboardingActivity extends Activity {
private static final String TAG = "ZenOnboardingActivity";
@VisibleForTesting
static final String PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME =
static final String PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME =
"pref_zen_suggestion_first_display_time_ms";
@VisibleForTesting
static final String PREF_KEY_SUGGESTION_VIEWED = "pref_zen_suggestion_viewed";
@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;
@@ -66,6 +71,34 @@ public class ZenOnboardingActivity extends Activity {
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(MetricsEvent.SETTINGS_ZEN_ONBOARDING);
}
@@ -79,25 +112,27 @@ public class ZenOnboardingActivity extends Activity {
mMetrics = ml;
}
public void close(View button) {
mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
Settings.Global.putInt(getApplicationContext().getContentResolver(),
Settings.Global.ZEN_SETTINGS_UPDATED, 1);
finishAndRemoveTask();
public void launchSettings(View button) {
mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_SETTINGS);
Intent settings = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS);
settings.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(settings);
}
public void save(View button) {
mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
NotificationManager.Policy policy = mNm.getNotificationPolicy();
NotificationManager.Policy newPolicy = new NotificationManager.Policy(
Policy.PRIORITY_CATEGORY_REPEAT_CALLERS | policy.priorityCategories,
Policy.PRIORITY_SENDERS_STARRED,
policy.priorityMessageSenders,
NotificationManager.Policy.getAllSuppressedVisualEffects());
mNm.setNotificationPolicy(newPolicy);
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());
mNm.setNotificationPolicy(newPolicy);
mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
} else {
mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
}
Settings.Global.putInt(getApplicationContext().getContentResolver(),
Settings.Global.ZEN_SETTINGS_UPDATED, 1);
@@ -143,11 +178,11 @@ public class ZenOnboardingActivity extends Activity {
final long currentTimeMs = System.currentTimeMillis();
final long firstDisplayTimeMs;
if (!prefs.contains(PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME)) {
if (!prefs.contains(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME)) {
firstDisplayTimeMs = currentTimeMs;
prefs.edit().putLong(PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME, currentTimeMs).commit();
prefs.edit().putLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME, currentTimeMs).commit();
} else {
firstDisplayTimeMs = prefs.getLong(PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME, -1);
firstDisplayTimeMs = prefs.getLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME, -1);
}
final long showTimeMs = firstDisplayTimeMs + ALWAYS_SHOW_THRESHOLD;

View File

@@ -18,21 +18,11 @@ package com.android.settings.notification;
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.PRIORITY_SENDERS_ANY;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_AMBIENT;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_FULL_SCREEN_INTENT;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_OFF;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_ON;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_STATUS_BAR;
import static com.android.settings.notification.ZenOnboardingActivity.ALWAYS_SHOW_THRESHOLD;
import static com.android.settings.notification.ZenOnboardingActivity.PREF_KEY_SUGGESTION_VIEWED;
import static com.android.settings.notification.ZenOnboardingActivity
.PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME;
.PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME;
import static com.android.settings.notification.ZenOnboardingActivity.isSuggestionComplete;
import static com.google.common.truth.Truth.assertThat;
@@ -99,10 +89,11 @@ public class ZenOnboardingActivityTest {
}
@Test
public void save() {
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);
@@ -120,24 +111,14 @@ public class ZenOnboardingActivityTest {
}
@Test
public void close() {
Policy policy = new Policy(
PRIORITY_CATEGORY_ALARMS, PRIORITY_SENDERS_ANY, 0,
SUPPRESSED_EFFECT_SCREEN_ON
| SUPPRESSED_EFFECT_SCREEN_OFF
| SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
| SUPPRESSED_EFFECT_LIGHTS
| SUPPRESSED_EFFECT_PEEK
| SUPPRESSED_EFFECT_STATUS_BAR
| SUPPRESSED_EFFECT_BADGE
| SUPPRESSED_EFFECT_AMBIENT
| SUPPRESSED_EFFECT_NOTIFICATION_LIST);
public void keepCurrentSetting() {
Policy policy = new Policy(PRIORITY_CATEGORY_ALARMS, 0, 0, SUPPRESSED_EFFECT_SCREEN_ON);
when(mNm.getNotificationPolicy()).thenReturn(policy);
mActivity.close(null);
mActivity.mKeepCurrentSetting.performClick();
mActivity.save(null);
verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
verify(mNm, never()).setNotificationPolicy(any());
}
@@ -192,7 +173,7 @@ public class ZenOnboardingActivityTest {
firstTime -= ALWAYS_SHOW_THRESHOLD * 2;
}
getSharedPreferences().edit().putLong(PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME,
getSharedPreferences().edit().putLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME,
firstTime).commit();
}