Snap for 7899729 from 6c43335181 to tm-release

Change-Id: I6eaeb6eb76cae6230d2ea5d7d3b296a85c49bbde
This commit is contained in:
Android Build Coastguard Worker
2021-11-10 02:08:39 +00:00
10 changed files with 275 additions and 71 deletions

View File

@@ -376,6 +376,17 @@
android:value="true" />
</activity>
<activity android:name=".Settings$AdaptiveBrightnessActivity"
android:label="@string/auto_brightness_title"
android:exported="true">
<intent-filter>
<action android:name="android.settings.ADAPTIVE_BRIGHTNESS_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.display.AutoBrightnessSettings"/>
</activity>
<activity
android:name="Settings$ConfigureWifiSettingsActivity"
android:label="@string/wifi_configure_settings_preference_title"

View File

@@ -0,0 +1,167 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2021 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.
-->
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textDirection="locale"
android:scrollbarStyle="outsideOverlay"
android:gravity="top">
<LinearLayout
android:theme="@style/Theme.AlertDialog"
style="@style/AccessibilityDialog">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:paddingLeft="24dp"
android:paddingRight="24dp">
<ImageView
android:id="@+id/app_icon"
style="@style/AccessibilityDialogServiceIcon" />
<TextView
android:id="@+id/title"
style="@style/AccessibilityDialogTitle" />
<TextView
android:id="@+id/prompt"
android:text="@string/nls_warning_prompt"
style="@style/AccessibilityDialogDescription" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="24dp" >
<ImageView
android:id="@+id/read_icon"
android:src="@drawable/ic_visibility_18dp"
android:layout_width="24dp"
android:layout_height="24dp"
style="@style/AccessibilityDialogIcon" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/read_title"
android:text="@string/nls_feature_read_title"
style="@style/AccessibilityDialogPermissionTitle" />
<TextView
android:id="@+id/read_description"
android:text="@string/nls_feature_read_summary"
style="@style/AccessibilityDialogPermissionDescription" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="24dp" >
<ImageView
android:id="@+id/reply_icon"
android:src="@drawable/ic_promote_conversation"
android:layout_width="24dp"
android:layout_height="24dp"
style="@style/AccessibilityDialogIcon" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/reply_title"
android:text="@string/nls_feature_reply_title"
style="@style/AccessibilityDialogPermissionTitle" />
<TextView
android:id="@+id/reply_description"
android:text="@string/nls_feature_reply_summary"
style="@style/AccessibilityDialogPermissionDescription" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="24dp" >
<ImageView
android:id="@+id/settings_icon"
android:src="@drawable/ic_do_not_disturb_on_24dp"
android:layout_width="24dp"
android:layout_height="24dp"
style="@style/AccessibilityDialogIcon" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/settings_title"
android:text="@string/nls_feature_settings_title"
style="@style/AccessibilityDialogPermissionTitle" />
<TextView
android:id="@+id/settings_description"
android:text="@string/nls_feature_settings_summary"
style="@style/AccessibilityDialogPermissionDescription" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!-- Buttons on bottom of dialog -->
<LinearLayout
style="@style/AccessibilityDialogButtonList">
<Space
style="@style/AccessibilityDialogButtonBarSpace"/>
<Button
android:id="@+id/allow_button"
android:text="@string/accessibility_dialog_button_allow"
style="@style/AccessibilityDialogButton" />
<Button
android:id="@+id/deny_button"
android:text="@string/accessibility_dialog_button_deny"
style="@style/AccessibilityDialogButton" />
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@@ -9392,10 +9392,17 @@
listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
<string name="notification_listener_security_warning_summary">
<xliff:g id="notification_listener_name">%1$s</xliff:g> will be able to read all notifications,
including personal information such as contact names and the text of messages you receive.
including personal information such as contact names, photos, and the text of messages you receive.
This app will also be able to snooze or dismiss notifications or take action on buttons in notifications, including answering phone calls.
\n\nThis will also give the app the ability to turn Do Not Disturb on or off and change related settings.
</string>
<string name="nls_warning_prompt"><xliff:g id="notification_listener_name">%1$s</xliff:g> will be able to:</string>
<string name="nls_feature_read_title">Read your notifications</string>
<string name="nls_feature_read_summary">It can read your notifications, including personal information such as contacts, messages, and photos.</string>
<string name="nls_feature_reply_title">Reply to messages</string>
<string name="nls_feature_reply_summary">It can reply to messages and take action on buttons in notifications, including snoozing or dismissing notifications and answering calls.</string>
<string name="nls_feature_settings_title">Change settings</string>
<string name="nls_feature_settings_summary">It can turn Do Not Disturb on or off and change related settings.</string>
<string name="notification_listener_disable_warning_summary">
If you turn off notification access for <xliff:g id="notification_listener_name">%1$s</xliff:g>, Do Not Disturb access may also be turned off.
</string>

View File

@@ -324,4 +324,6 @@ public class Settings extends SettingsActivity {
* Activity for AppDashboard.
*/
public static class AppDashboardActivity extends SettingsActivity {}
public static class AdaptiveBrightnessActivity extends SettingsActivity { /* empty */ }
}

View File

@@ -768,7 +768,7 @@ public class ManageApplications extends InstrumentedFragment
int i = item.getItemId();
if (i == R.id.sort_order_alpha || i == R.id.sort_order_size) {
if (mApplications != null) {
mApplications.rebuild(menuId);
mApplications.rebuild(menuId, false);
}
} else if (i == R.id.show_system || i == R.id.hide_system) {
mShowSystem = !mShowSystem;
@@ -1097,13 +1097,13 @@ public class ManageApplications extends InstrumentedFragment
// Notification filters require resorting the list
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
if (FILTER_APPS_FREQUENT == appFilter.getFilterType()) {
rebuild(R.id.sort_order_frequent_notification);
rebuild(R.id.sort_order_frequent_notification, false);
} else if (FILTER_APPS_RECENT == appFilter.getFilterType()) {
rebuild(R.id.sort_order_recent_notification);
rebuild(R.id.sort_order_recent_notification, false);
} else if (FILTER_APPS_BLOCKED == appFilter.getFilterType()) {
rebuild(R.id.sort_order_alpha);
rebuild(R.id.sort_order_alpha, true);
} else {
rebuild(R.id.sort_order_alpha);
rebuild(R.id.sort_order_alpha, true);
}
} else {
rebuild();
@@ -1121,7 +1121,7 @@ public class ManageApplications extends InstrumentedFragment
}
rebuild();
} else {
rebuild(sort);
rebuild(sort, false);
}
}
@@ -1149,8 +1149,8 @@ public class ManageApplications extends InstrumentedFragment
}
}
public void rebuild(int sort) {
if (sort == mLastSortMode) {
public void rebuild(int sort, boolean force) {
if (sort == mLastSortMode && !force) {
return;
}
mManageApplications.mSortOrder = sort;

View File

@@ -18,8 +18,15 @@ package com.android.settings.applications.specialaccess.notificationaccess;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
@@ -55,25 +62,49 @@ public class ScaryWarningDialogFragment extends InstrumentedDialogFragment {
.getString(KEY_COMPONENT));
NotificationAccessDetails parent = (NotificationAccessDetails) getTargetFragment();
final String title = getResources().getString(
R.string.notification_listener_security_warning_title, label);
final String summary = getResources().getString(
R.string.notification_listener_security_warning_summary, label);
return new AlertDialog.Builder(getContext())
.setMessage(summary)
.setTitle(title)
.setView(getDialogView(getContext(), label, parent, cn))
.setCancelable(true)
.setPositiveButton(R.string.allow,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
parent.enable(cn);
}
})
.setNegativeButton(R.string.deny,
(dialog, id) -> {
// pass
})
.create();
}
private View getDialogView(Context context, CharSequence label,
NotificationAccessDetails parent, ComponentName cn) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
View content = inflater.inflate(R.layout.enable_nls_dialog_content, null);
Drawable icon = null;
try {
icon = context.getPackageManager().getApplicationIcon(cn.getPackageName());
} catch (PackageManager.NameNotFoundException e) {
}
ImageView appIcon = content.findViewById(R.id.app_icon);
if (icon != null) {
appIcon.setImageDrawable(icon);
} else {
appIcon.setVisibility(View.GONE);
}
final String title = context.getResources().getString(
R.string.notification_listener_security_warning_title, label);
((TextView) content.findViewById(R.id.title)).setText(title);
final String prompt = context.getResources().getString(
R.string.nls_warning_prompt, label);
((TextView) content.findViewById(R.id.prompt)).setText(prompt);
Button allowButton = content.findViewById(R.id.allow_button);
allowButton.setOnClickListener((view) -> {
parent.enable(cn);
dismiss();
});
Button denyButton = content.findViewById(R.id.deny_button);
denyButton.setOnClickListener((view) -> {
dismiss();
});
return content;
}
}

View File

@@ -84,6 +84,7 @@ import com.android.settings.deviceinfo.StorageDashboardFragment;
import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionSettings;
import com.android.settings.deviceinfo.legal.ModuleLicensesDashboard;
import com.android.settings.display.AutoBrightnessSettings;
import com.android.settings.display.NightDisplaySettings;
import com.android.settings.display.SmartAutoRotatePreferenceFragment;
import com.android.settings.display.darkmode.DarkModeSettingsFragment;
@@ -319,7 +320,8 @@ public class SettingsGateway {
MediaControlsSettings.class.getName(),
NetworkProviderSettings.class.getName(),
AlarmsAndRemindersDetails.class.getName(),
MediaManagementAppsDetails.class.getName()
MediaManagementAppsDetails.class.getName(),
AutoBrightnessSettings.class.getName()
};
public static final String[] SETTINGS_FOR_RESTRICTED = {
@@ -350,6 +352,8 @@ public class SettingsGateway {
Settings.ConfigureNotificationSettingsActivity.class.getName(),
Settings.ManageApplicationsActivity.class.getName(),
Settings.PaymentSettingsActivity.class.getName(),
// Home page > Display
Settings.AdaptiveBrightnessActivity.class.getName(),
// Home page > Security & screen lock
Settings.LocationSettingsActivity.class.getName(),
// Home page > System

View File

@@ -29,7 +29,6 @@ import android.os.Handler;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.View;
import android.util.Pair;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -184,35 +183,18 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
}
private void logPowerSaver() {
int currentSaverPercentage = getSaverPercentage();
String currentSaverScheduleKey = mRadioButtonController.getDefaultKey();
final int currentSaverPercentage = getSaverPercentage();
final String currentSaverScheduleKey = mRadioButtonController.getDefaultKey();
if (mSaverScheduleKey.equals(currentSaverScheduleKey)
&& mSaverPercentage == currentSaverPercentage) {
return;
}
int scheduleType = -1;
int schedulePercentage = -1;
switch (currentSaverScheduleKey) {
case BatterySaverScheduleRadioButtonsController.KEY_NO_SCHEDULE:
scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE;
break;
case BatterySaverScheduleRadioButtonsController.KEY_ROUTINE:
scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE;
break;
case BatterySaverScheduleRadioButtonsController.KEY_PERCENTAGE:
scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE;
schedulePercentage = currentSaverPercentage;
break;
// Unknown schedule type.
default:
return;
}
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
scheduleType),
Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
schedulePercentage));
.action(SettingsEnums.FUELGAUGE_BATTERY_SAVER,
SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
currentSaverScheduleKey,
currentSaverPercentage);
}
private int getSaverPercentage() {

View File

@@ -455,10 +455,13 @@ public class ManageApplicationsTest {
ManageApplications.ApplicationsAdapter adapter = new ManageApplications.ApplicationsAdapter(
mState, mFragment, mock(AppFilterItem.class), mock(Bundle.class));
adapter.rebuild(mSortRecent.getItemId());
adapter.rebuild(mSortRecent.getItemId(), false);
assertThat(mFragment.mSortOrder).isEqualTo(mSortRecent.getItemId());
adapter.rebuild(mSortFrequent.getItemId());
adapter.rebuild(mSortFrequent.getItemId(), false);
assertThat(mFragment.mSortOrder).isEqualTo(mSortFrequent.getItemId());
adapter.rebuild(mSortFrequent.getItemId(), true);
assertThat(mFragment.mSortOrder).isEqualTo(mSortFrequent.getItemId());
}

View File

@@ -43,22 +43,22 @@ public final class BatterySaverScheduleSettingsTest {
@Test
public void onPause_withNoScheduleType_logExpectedData() {
setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, 0);
int expectedPercentage = 0;
setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, expectedPercentage);
mBatterySaverScheduleSettings.onPause();
verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE,
/* schedulePercentage= */ -1);
verifySchedule("key_battery_saver_no_schedule", expectedPercentage);
}
@Test
public void onPause_withRoutineScheduleType_logExpectedData() {
setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, 0);
int expectedPercentage = 0;
setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, expectedPercentage);
mBatterySaverScheduleSettings.onPause();
verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE,
/* schedulePercentage= */ -1);
verifySchedule("key_battery_saver_routine", expectedPercentage);
}
@Test
@@ -68,8 +68,7 @@ public final class BatterySaverScheduleSettingsTest {
mBatterySaverScheduleSettings.onPause();
verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE,
expectedPercentage);
verifySchedule("key_battery_saver_percentage", expectedPercentage);
}
@Test
@@ -90,8 +89,7 @@ public final class BatterySaverScheduleSettingsTest {
mBatterySaverScheduleSettings.onPause();
verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE,
expectedPercentage);
verifySchedule("key_battery_saver_percentage", expectedPercentage);
}
private void setSchedule(int scheduleType, int schedulePercentage) {
@@ -101,13 +99,12 @@ public final class BatterySaverScheduleSettingsTest {
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, schedulePercentage);
}
private void verifySchedule(int scheduleType, int schedulePercentage) {
private void verifySchedule(String scheduleTypeKey, int schedulePercentage) {
waitAWhile();
verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
scheduleType),
Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
schedulePercentage));
verify(mMetricsFeatureProvider).action(SettingsEnums.FUELGAUGE_BATTERY_SAVER,
SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
scheduleTypeKey, schedulePercentage);
}
private void waitAWhile() {