Snap for 12451942 from 6471850a00 to 25Q1-release
Change-Id: Ib201b334e9c723f74e5b8eb3c1e8bfc4d8e0b4a2
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
@@ -2291,6 +2291,10 @@
|
||||
<string name="wifi_dpp_failure_enrollee_rejected_configuration">Contact the device manufacturer</string>
|
||||
<!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE] -->
|
||||
<string name="wifi_dpp_check_connection_try_again">Check connection and try again</string>
|
||||
<!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE] -->
|
||||
<string name="wifi_dpp_check_connection_no_matched_ssid">This Wi\u2011Fi network isn\u2019t available right now</string>
|
||||
<!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE] -->
|
||||
<string name="wifi_dpp_check_connection_no_matched_security">There\u2019s a problem with this QR code. Try connecting another way.</string>
|
||||
<!-- Title for the fragment choose network [CHAR LIMIT=50] -->
|
||||
<string name="wifi_dpp_choose_network">Choose network</string>
|
||||
<!-- Hint for the user to center another device's QR code in the below camera window [CHAR LIMIT=NONE] -->
|
||||
@@ -8447,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 & 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>
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ public class AppDataUsagePreference extends AppPreference {
|
||||
public AppDataUsagePreference(Context context, AppItem item, int percent,
|
||||
UidDetailProvider provider) {
|
||||
super(context);
|
||||
setLayoutResource(R.layout.preference_process_stats);
|
||||
setKey("app_data_usage_" + item.key);
|
||||
mItem = item;
|
||||
mPercent = percent;
|
||||
|
||||
@@ -38,7 +38,8 @@ public class ZenModeNotifVisFragment extends ZenModeFragmentBase {
|
||||
prefControllers.add(new ZenModeNotifVisPreferenceController(context,
|
||||
"zen_effect_light", ZenPolicy.VISUAL_EFFECT_LIGHTS, null, mBackend));
|
||||
prefControllers.add(new ZenModeNotifVisPreferenceController(context,
|
||||
"zen_effect_peek", ZenPolicy.VISUAL_EFFECT_PEEK, null, mBackend));
|
||||
"zen_effect_peek", ZenPolicy.VISUAL_EFFECT_PEEK,
|
||||
new int[] {ZenPolicy.VISUAL_EFFECT_NOTIFICATION_LIST}, mBackend));
|
||||
prefControllers.add(new ZenModeNotifVisPreferenceController(context,
|
||||
"zen_effect_status", ZenPolicy.VISUAL_EFFECT_STATUS_BAR,
|
||||
new int[] {ZenPolicy.VISUAL_EFFECT_NOTIFICATION_LIST}, mBackend));
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.settings.search;
|
||||
|
||||
import android.app.Flags;
|
||||
import android.util.ArrayMap;
|
||||
|
||||
import com.android.settings.backup.UserBackupSettingsActivity;
|
||||
@@ -55,8 +56,10 @@ public class CustomSiteMapRegistry {
|
||||
ConnectedDeviceDashboardFragment.class.getName());
|
||||
CUSTOM_SITE_MAP.put(UserBackupSettingsActivity.class.getName(),
|
||||
SystemDashboardFragment.class.getName());
|
||||
CUSTOM_SITE_MAP.put(ZenModeBlockedEffectsSettings.class.getName(),
|
||||
ZenModeRestrictNotificationsSettings.class.getName());
|
||||
if (!Flags.modesUi()) {
|
||||
CUSTOM_SITE_MAP.put(ZenModeBlockedEffectsSettings.class.getName(),
|
||||
ZenModeRestrictNotificationsSettings.class.getName());
|
||||
}
|
||||
CUSTOM_SITE_MAP.put(GestureNavigationSettingsFragment.class.getName(),
|
||||
SystemNavigationGestureSettings.class.getName());
|
||||
}
|
||||
|
||||
@@ -1834,6 +1834,24 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
MultiUserSwitchBarController.class.getName();
|
||||
|
||||
rawData.add(allowMultipleUsersResult);
|
||||
|
||||
SearchIndexableRaw addUserData = new SearchIndexableRaw(context);
|
||||
addUserData.key = KEY_ADD_USER;
|
||||
|
||||
// Dynamically set the title of addUser preference
|
||||
final UserCapabilities userCaps = UserCapabilities.create(context);
|
||||
if (!userCaps.mCanAddRestrictedProfile) {
|
||||
addUserData.title = context.getString(
|
||||
com.android.settingslib.R.string.user_add_user);
|
||||
} else {
|
||||
addUserData.title = context.getString(
|
||||
R.string.user_add_user_or_profile_menu);
|
||||
}
|
||||
addUserData.screenTitle = context.getString(R.string.user_settings_title);
|
||||
addUserData.iconResId = R.drawable.ic_add_40dp;
|
||||
|
||||
rawData.add(addUserData);
|
||||
|
||||
return rawData;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.settings.wifi.dpp;
|
||||
|
||||
import static android.content.res.Resources.ID_NULL;
|
||||
import static android.net.wifi.WifiInfo.sanitizeSsid;
|
||||
|
||||
import android.app.Activity;
|
||||
@@ -101,6 +102,8 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
|
||||
// Interval between initiating WifiPickerTracker scans.
|
||||
private static final long SCAN_INTERVAL_MILLIS = 10_000;
|
||||
|
||||
private static final @StringRes int REACHABLE_WIFI_NETWORK = ID_NULL;
|
||||
|
||||
private QrCamera mCamera;
|
||||
private TextureView mTextureView;
|
||||
private QrDecorateView mDecorateView;
|
||||
@@ -201,8 +204,9 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
|
||||
wifiManager.enableNetwork(id, /* attemptConnect */ false);
|
||||
// WifiTracker only contains a hidden SSID Wi-Fi network if it's saved.
|
||||
// We can't check if a hidden SSID Wi-Fi network is reachable in advance.
|
||||
if (qrCodeWifiConfiguration.hiddenSSID
|
||||
|| isReachableWifiNetwork(qrCodeWifiConfiguration)) {
|
||||
@StringRes int wifiReachabilityStringId =
|
||||
getWifiReachabilityStringId(qrCodeWifiConfiguration);
|
||||
if (wifiReachabilityStringId == REACHABLE_WIFI_NETWORK) {
|
||||
hasHiddenOrReachableWifiNetwork = true;
|
||||
mEnrolleeWifiConfiguration = qrCodeWifiConfiguration;
|
||||
wifiManager.connect(id,
|
||||
@@ -210,8 +214,7 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
|
||||
}
|
||||
|
||||
if (!hasHiddenOrReachableWifiNetwork) {
|
||||
showErrorMessageAndRestartCamera(
|
||||
R.string.wifi_dpp_check_connection_try_again);
|
||||
showErrorMessageAndRestartCamera(wifiReachabilityStringId);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -242,7 +245,10 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
|
||||
WifiDppUtils.triggerVibrationForQrCodeRecognition(getContext());
|
||||
}
|
||||
|
||||
private boolean isReachableWifiNetwork(WifiConfiguration wifiConfiguration) {
|
||||
private @StringRes int getWifiReachabilityStringId(WifiConfiguration wifiConfiguration) {
|
||||
if (wifiConfiguration.hiddenSSID) {
|
||||
return REACHABLE_WIFI_NETWORK;
|
||||
}
|
||||
final List<WifiEntry> wifiEntries = mWifiPickerTracker.getWifiEntries();
|
||||
final WifiEntry connectedWifiEntry = mWifiPickerTracker.getConnectedWifiEntry();
|
||||
if (connectedWifiEntry != null) {
|
||||
@@ -250,24 +256,29 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
|
||||
wifiEntries.add(connectedWifiEntry);
|
||||
}
|
||||
|
||||
boolean canFindNetwork = false;
|
||||
for (WifiEntry wifiEntry : wifiEntries) {
|
||||
if (!TextUtils.equals(wifiEntry.getSsid(), sanitizeSsid(wifiConfiguration.SSID))) {
|
||||
continue;
|
||||
}
|
||||
canFindNetwork = true;
|
||||
final int security =
|
||||
WifiDppUtils.getSecurityTypeFromWifiConfiguration(wifiConfiguration);
|
||||
if (security == wifiEntry.getSecurity()) {
|
||||
return true;
|
||||
return REACHABLE_WIFI_NETWORK;
|
||||
}
|
||||
|
||||
// Default security type of PSK/SAE transition mode WifiEntry is SECURITY_PSK and
|
||||
// there is no way to know if a WifiEntry is of transition mode. Give it a chance.
|
||||
if (security == WifiEntry.SECURITY_SAE
|
||||
&& wifiEntry.getSecurity() == WifiEntry.SECURITY_PSK) {
|
||||
return true;
|
||||
return REACHABLE_WIFI_NETWORK;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
if (canFindNetwork) {
|
||||
return R.string.wifi_dpp_check_connection_no_matched_security;
|
||||
}
|
||||
return R.string.wifi_dpp_check_connection_no_matched_ssid;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
||||
@@ -91,7 +91,7 @@ public class AppDataUsagePreferenceTest {
|
||||
mPreference = new AppDataUsagePreference(RuntimeEnvironment.application, mAppItem,
|
||||
50 /* percent */, mUidDetailProvider);
|
||||
final View view = LayoutInflater.from(RuntimeEnvironment.application).inflate(
|
||||
com.android.settingslib.widget.preference.app.R.layout.preference_app, null);
|
||||
com.android.settings.R.layout.preference_process_stats, null);
|
||||
final PreferenceViewHolder preferenceViewHolder =
|
||||
PreferenceViewHolder.createInstanceForTests(view);
|
||||
final ProgressBar progressBar = (ProgressBar) preferenceViewHolder.findViewById(
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
@@ -112,6 +113,7 @@ public class UserSettingsTest {
|
||||
private static final String KEY_USER_GUEST = "user_guest";
|
||||
private static final String KEY_ALLOW_MULTIPLE_USERS = "allow_multiple_users";
|
||||
private static final String KEY_USER_SETTINGS_SCREEN = "user_settings_screen";
|
||||
private static final String KEY_ADD_USER = "user_add";
|
||||
private static final int ACTIVE_USER_ID = 0;
|
||||
private static final int INACTIVE_ADMIN_USER_ID = 1;
|
||||
private static final int INACTIVE_SECONDARY_USER_ID = 14;
|
||||
@@ -130,6 +132,8 @@ public class UserSettingsTest {
|
||||
@Mock
|
||||
private PreferenceManager mMockPreferenceManager;
|
||||
@Mock
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
@Mock
|
||||
private UserPreference mMePreference;
|
||||
@Mock
|
||||
private RestrictedPreference mAddUserPreference;
|
||||
@@ -222,7 +226,7 @@ public class UserSettingsTest {
|
||||
|
||||
@Test
|
||||
public void testGetRawDataToIndex_returnAllIndexablePreferences() {
|
||||
String[] expectedKeys = {KEY_ALLOW_MULTIPLE_USERS, KEY_USER_SETTINGS_SCREEN};
|
||||
String[] expectedKeys = {KEY_ALLOW_MULTIPLE_USERS, KEY_USER_SETTINGS_SCREEN, KEY_ADD_USER};
|
||||
List<String> keysResultList = new ArrayList<>();
|
||||
ShadowUserManager.getShadow().setSupportsMultipleUsers(true);
|
||||
List<SearchIndexableRaw> rawData =
|
||||
@@ -235,6 +239,54 @@ public class UserSettingsTest {
|
||||
assertThat(keysResultList).containsExactly(expectedKeys);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRawDataToIndex_addRestrictedProfileAllowed_addUserTitleIsCorrect() {
|
||||
ShadowUserManager.getShadow().setSupportsMultipleUsers(true);
|
||||
SettingsShadowResources.overrideResource(
|
||||
com.android.settings.R.bool.config_offer_restricted_profiles,
|
||||
Boolean.TRUE);
|
||||
when(mUserManager.hasBaseUserRestriction(UserManager.DISALLOW_ADD_USER, mContext.getUser()))
|
||||
.thenReturn(false);
|
||||
ShadowUserManager.getShadow().setUserTypeEnabled(UserManager.USER_TYPE_FULL_RESTRICTED,
|
||||
true);
|
||||
when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE))
|
||||
.thenReturn(mDevicePolicyManager);
|
||||
when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false);
|
||||
|
||||
List<SearchIndexableRaw> rawData =
|
||||
UserSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true);
|
||||
|
||||
String title = null;
|
||||
for (SearchIndexableRaw rawDataItem : rawData) {
|
||||
if (rawDataItem.key.equals(KEY_ADD_USER)) {
|
||||
title = rawDataItem.title;
|
||||
}
|
||||
}
|
||||
|
||||
assertThat(title).isEqualTo(mContext.getString(
|
||||
com.android.settings.R.string.user_add_user_or_profile_menu));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRawDataToIndex_addRestrictedProfileDisallowed_addUserTitleIsCorrect() {
|
||||
ShadowUserManager.getShadow().setSupportsMultipleUsers(true);
|
||||
SettingsShadowResources.overrideResource(
|
||||
com.android.settings.R.bool.config_offer_restricted_profiles,
|
||||
Boolean.FALSE);
|
||||
List<SearchIndexableRaw> rawData =
|
||||
UserSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true);
|
||||
|
||||
String title = null;
|
||||
for (SearchIndexableRaw rawDataItem : rawData) {
|
||||
if (rawDataItem.key.equals(KEY_ADD_USER)) {
|
||||
title = rawDataItem.title;
|
||||
}
|
||||
}
|
||||
|
||||
assertThat(title).isEqualTo(mContext.getString(
|
||||
com.android.settingslib.R.string.user_add_user));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAssignDefaultPhoto_hasDefaultUserIconSize() {
|
||||
doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
|
||||
|
||||
@@ -60,6 +60,7 @@ import com.android.settings.network.CarrierConfigCache;
|
||||
import com.android.settings.network.ims.MockWfcQueryImsState;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
@@ -396,6 +397,7 @@ public class MobileNetworkUtilsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void getCurrentCarrierNameForDisplay_withoutSubId_returnNotNull() {
|
||||
assertThat(MobileNetworkUtils.getCurrentCarrierNameForDisplay(
|
||||
mContext)).isNotNull();
|
||||
|
||||
@@ -18,6 +18,12 @@ package com.android.settings.search;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.app.Flags;
|
||||
import android.platform.test.annotations.RequiresFlagsDisabled;
|
||||
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import com.android.settings.backup.UserBackupSettingsActivity;
|
||||
@@ -35,12 +41,16 @@ import com.android.settings.security.SecuritySettings;
|
||||
import com.android.settings.security.screenlock.ScreenLockSettings;
|
||||
import com.android.settings.system.SystemDashboardFragment;
|
||||
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class CustomSiteMapRegistryTest {
|
||||
|
||||
@Rule
|
||||
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||
|
||||
@Test
|
||||
public void shouldContainScreenLockSettingsPairs() {
|
||||
assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP.get(ScreenLockSettings.class.getName()))
|
||||
@@ -75,12 +85,20 @@ public class CustomSiteMapRegistryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsDisabled(Flags.FLAG_MODES_UI)
|
||||
public void shouldContainZenModeBlockedEffectsSettingsPairs() {
|
||||
assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP.get(
|
||||
ZenModeBlockedEffectsSettings.class.getName())).isEqualTo(
|
||||
assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP).containsEntry(
|
||||
ZenModeBlockedEffectsSettings.class.getName(),
|
||||
ZenModeRestrictNotificationsSettings.class.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_MODES_UI)
|
||||
public void shouldNotContainZenModeBlockedEffectsSettingsPairs() {
|
||||
assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP)
|
||||
.doesNotContainKey(ZenModeBlockedEffectsSettings.class.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldContainGestureNavigationSettingsFragmentPairs() {
|
||||
assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP.get(
|
||||
|
||||
Reference in New Issue
Block a user