DO NOT MERGE Add DND Settings suggestion

Test: SettingsSuggestionsTest, ZenOnboardingActivityTest
Change-Id: Ie78c9cf8287ee56bc4596efe20d27f8eb432ab6c
Bug: 78445134
This commit is contained in:
Beverly
2018-05-09 15:27:45 -04:00
committed by Beverly Tai
parent 204dcfdb4c
commit d4e7eedfc9
10 changed files with 246 additions and 15 deletions

View File

@@ -22,7 +22,6 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.service.settings.suggestions.Suggestion;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
import android.util.Pair;
@@ -32,6 +31,8 @@ import com.android.settings.Settings.NightDisplaySuggestionActivity;
import com.android.settings.display.NightDisplayPreferenceController;
import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity;
import com.android.settings.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.notification.ZenOnboardingActivity;
import com.android.settings.notification.ZenSuggestionActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ScreenLockSuggestionActivity;
import com.android.settings.support.NewDeviceIntroSuggestionActivity;
@@ -88,6 +89,8 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
return NightDisplayPreferenceController.isSuggestionComplete(context);
} else if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) {
return NewDeviceIntroSuggestionActivity.isSuggestionComplete(context);
} else if (className.equals(ZenSuggestionActivity.class.getName())) {
return ZenOnboardingActivity.isSuggestionComplete(context);
}
return false;
}

View File

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

View File

@@ -19,16 +19,33 @@ package com.android.settings.notification;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
import android.provider.Settings;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.View;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
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_SUGGGESTION_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;
private NotificationManager mNm;
private MetricsLogger mMetrics;
@@ -38,6 +55,10 @@ public class ZenOnboardingActivity extends Activity {
setNotificationManager(getSystemService(NotificationManager.class));
setMetricsLogger(new MetricsLogger());
Context context = getApplicationContext();
Settings.Global.putInt(context.getContentResolver(),
Settings.Global.ZEN_SETTINGS_SUGGESTION_VIEWED, 1);
setupUI();
}
@@ -60,20 +81,79 @@ public class ZenOnboardingActivity extends Activity {
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 save(View button) {
mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
Policy policy = mNm.getNotificationPolicy();
NotificationManager.Policy policy = mNm.getNotificationPolicy();
Policy newPolicy = new NotificationManager.Policy(
NotificationManager.Policy newPolicy = new NotificationManager.Policy(
Policy.PRIORITY_CATEGORY_REPEAT_CALLERS | policy.priorityCategories,
Policy.PRIORITY_SENDERS_STARRED,
policy.priorityMessageSenders,
Policy.getAllSuppressedVisualEffects());
NotificationManager.Policy.getAllSuppressedVisualEffects());
mNm.setNotificationPolicy(newPolicy);
Settings.Global.putInt(getApplicationContext().getContentResolver(),
Settings.Global.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
return Settings.Global.getInt(context.getContentResolver(),
Settings.Global.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.Global.getInt(context.getContentResolver(),
Settings.Global.SHOW_ZEN_SETTINGS_SUGGESTION, 0) != 0;
}
private static boolean withinShowTimeThreshold(Context context) {
final SuggestionFeatureProvider featureProvider = FeatureFactory.getFactory(context)
.getSuggestionFeatureProvider(context);
final SharedPreferences prefs = featureProvider.getSharedPrefs(context);
final long currentTimeMs = System.currentTimeMillis();
final long firstDisplayTimeMs;
if (!prefs.contains(PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME)) {
firstDisplayTimeMs = currentTimeMs;
prefs.edit().putLong(PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME, currentTimeMs).commit();
} else {
firstDisplayTimeMs = prefs.getLong(PREF_KEY_SUGGGESTION_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);
return stillShow;
}
}

View File

@@ -0,0 +1,24 @@
package com.android.settings.notification;
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);
startActivity(settingsIntent);
// start up onboarding activity
Intent onboardingActivity = new Intent(Settings.ZEN_MODE_ONBOARDING);
startActivity(onboardingActivity);
finish();
}
}