diff options
47 files changed, 460 insertions, 126 deletions
diff --git a/Android.bp b/Android.bp index 9690969305bf..ee5e992935ae 100644 --- a/Android.bp +++ b/Android.bp @@ -917,7 +917,6 @@ filegroup { "core/java/com/android/internal/util/RingBufferIndices.java", "core/java/com/android/internal/util/State.java", "core/java/com/android/internal/util/StateMachine.java", - "core/java/com/android/internal/util/TrafficStatsConstants.java", "core/java/com/android/internal/util/WakeupMessage.java", "core/java/com/android/internal/util/TokenBucket.java", ], @@ -944,7 +943,6 @@ filegroup { "core/java/com/android/internal/util/MessageUtils.java", "core/java/com/android/internal/util/State.java", "core/java/com/android/internal/util/StateMachine.java", - "core/java/com/android/internal/util/TrafficStatsConstants.java", "core/java/com/android/internal/util/WakeupMessage.java", ], } diff --git a/core/api/system-current.txt b/core/api/system-current.txt index eef98fdcb5bc..54c666314f98 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -2096,6 +2096,7 @@ package android.bluetooth { field public static final int LE_FLAG_SIMULTANEOUS_CONTROLLER = 3; // 0x3 field public static final int LE_FLAG_SIMULTANEOUS_HOST = 4; // 0x4 field public static final int LE_TK_OCTETS = 16; // 0x10 + field public static final int OOB_LENGTH_OCTETS = 2; // 0x2 field public static final int RANDOMIZER_OCTETS = 16; // 0x10 } diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index afcf63b0f1e2..1765849c8314 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -331,10 +331,12 @@ public class StatusBarManager { * @hide */ @RequiresPermission(android.Manifest.permission.STATUS_BAR) - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, publicAlternatives = "Send {@link " - + "android.content.Intent#ACTION_CLOSE_SYSTEM_DIALOGS} instead.") + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, publicAlternatives = "This operation" + + " is not allowed anymore, please see {@link android.content" + + ".Intent#ACTION_CLOSE_SYSTEM_DIALOGS} for more details.") @TestApi public void collapsePanels() { + try { final IStatusBarService svc = getService(); if (svc != null) { diff --git a/core/java/android/bluetooth/OobData.java b/core/java/android/bluetooth/OobData.java index 98107461fb4c..08d694eb93e2 100644 --- a/core/java/android/bluetooth/OobData.java +++ b/core/java/android/bluetooth/OobData.java @@ -76,7 +76,7 @@ public final class OobData implements Parcelable { private static final String TAG = "OobData"; /** The {@link OobData#mClassicLength} may be. (AD 3.1.1) (CSS 1.6.2) @hide */ @SystemApi - private static final int OOB_LENGTH_OCTETS = 2; + public static final int OOB_LENGTH_OCTETS = 2; /** * The length for the {@link OobData#mDeviceAddressWithType}(6) and Address Type(1). * (AD 3.1.2) (CSS 1.6.2) @@ -590,7 +590,6 @@ public final class OobData implements Parcelable { * * @hide */ - @SystemApi private ClassicBuilder(@NonNull byte[] confirmationHash, @NonNull byte[] classicLength, @NonNull byte[] deviceAddressWithType) { Preconditions.checkNotNull(confirmationHash); diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index a19728c5c498..2c4d130788cc 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -197,6 +197,9 @@ public final class PowerManager { * application as the normal behavior. Notifications that pop up and want * the device to be on are the exception; use this flag to be like them. * </p><p> + * Android TV playback devices attempt to turn on the HDMI-connected TV via HDMI-CEC on any + * wake-up, including wake-ups triggered by wake locks. + * </p><p> * Cannot be used with {@link #PARTIAL_WAKE_LOCK}. * </p> */ @@ -1299,6 +1302,9 @@ public final class PowerManager { * device will be put to sleep. If the {@link com.android.server.display.DisplayGroup#DEFAULT * default display group} is already off then nothing will happen. * + * <p>If the device is an Android TV playback device and the current active source on the + * HDMI-connected TV, it will attempt to turn off that TV via HDMI-CEC. + * * <p> * Overrides all the wake locks that are held. * This is what happens when the power key is pressed to turn off the screen. @@ -1430,6 +1436,10 @@ public final class PowerManager { * be turned on. Additionally, if the device is asleep it will be awoken. If the {@link * android.view.Display#DEFAULT_DISPLAY default display} is already on then nothing will happen. * + * <p>If the device is an Android TV playback device, it will attempt to turn on the + * HDMI-connected TV and become the current active source via the HDMI-CEC One Touch Play + * feature. + * * <p> * This is what happens when the power key is pressed to turn on the screen. * </p><p> diff --git a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java index c2e1426bc4fe..7baa53bcd56d 100644 --- a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java +++ b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java @@ -16,6 +16,9 @@ package com.android.internal.accessibility.util; +import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL; +import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; +import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; @@ -28,6 +31,10 @@ import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__TRIPLE_TAP; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__UNKNOWN_TYPE; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__VOLUME_KEY; +import static com.android.internal.util.FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_ALL; +import static com.android.internal.util.FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_FULL_SCREEN; +import static com.android.internal.util.FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_UNKNOWN_MODE; +import static com.android.internal.util.FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_WINDOW; import android.content.ComponentName; import android.view.accessibility.AccessibilityManager; @@ -113,6 +120,19 @@ public final class AccessibilityStatsLogUtils { UNKNOWN_STATUS); } + /** + * Logs the magnification activated mode and its duration of the usage. + * Calls this when the magnification is disabled. + * + * @param mode The activated magnification mode. + * @param duration The duration in milliseconds during the magnification is activated. + */ + public static void logMagnificationUsageState(int mode, long duration) { + FrameworkStatsLog.write(FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED, + convertToLoggingMagnificationMode(mode), + duration); + } + private static int convertToLoggingShortcutType(@ShortcutType int shortcutType) { switch (shortcutType) { case ACCESSIBILITY_BUTTON: @@ -127,4 +147,18 @@ public final class AccessibilityStatsLogUtils { return enabled ? ACCESSIBILITY_SHORTCUT_REPORTED__SERVICE_STATUS__ENABLED : ACCESSIBILITY_SHORTCUT_REPORTED__SERVICE_STATUS__DISABLED; } + + private static int convertToLoggingMagnificationMode(int mode) { + switch (mode) { + case ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN: + return MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_FULL_SCREEN; + case ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW: + return MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_WINDOW; + case ACCESSIBILITY_MAGNIFICATION_MODE_ALL: + return MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_ALL; + + default: + return MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_UNKNOWN_MODE; + } + } } diff --git a/core/java/com/android/internal/util/TrafficStatsConstants.java b/core/java/com/android/internal/util/TrafficStatsConstants.java index 413be484dc32..131114cad460 100644 --- a/core/java/com/android/internal/util/TrafficStatsConstants.java +++ b/core/java/com/android/internal/util/TrafficStatsConstants.java @@ -21,24 +21,8 @@ package com.android.internal.util; * @hide */ public class TrafficStatsConstants { - // These tags are used by the network stack to do traffic for its own purposes. Traffic - // tagged with these will be counted toward the network stack and must stay inside the - // range defined by - // {@link android.net.TrafficStats#TAG_NETWORK_STACK_RANGE_START} and - // {@link android.net.TrafficStats#TAG_NETWORK_STACK_RANGE_END}. - public static final int TAG_SYSTEM_DHCP = 0xFFFFFE01; - public static final int TAG_SYSTEM_NEIGHBOR = 0xFFFFFE02; - public static final int TAG_SYSTEM_DHCP_SERVER = 0xFFFFFE03; public static final int TAG_SYSTEM_NTP = 0xFFFFFF41; public static final int TAG_SYSTEM_GPS = 0xFFFFFF44; public static final int TAG_SYSTEM_PAC = 0xFFFFFF45; - - // These tags are used by the network stack to do traffic on behalf of apps. Traffic - // tagged with these will be counted toward the app on behalf of which the network - // stack is doing this traffic. These values must stay inside the range defined by - // {@link android.net.TrafficStats#TAG_NETWORK_STACK_IMPERSONATION_RANGE_START} and - // {@link android.net.TrafficStats#TAG_NETWORK_STACK_IMPERSONATION_RANGE_END}. - public static final int TAG_SYSTEM_PROBE = 0xFFFFFF81; - public static final int TAG_SYSTEM_DNS = 0xFFFFFF82; } diff --git a/location/java/android/location/CorrelationVector.java b/location/java/android/location/CorrelationVector.java index 4b6e6882b50a..718977ff4296 100644 --- a/location/java/android/location/CorrelationVector.java +++ b/location/java/android/location/CorrelationVector.java @@ -77,6 +77,9 @@ public final class CorrelationVector implements Parcelable { * be encoded as signed 16 bit integer where 1 is represented by 32767 and -1 is represented * by -32768. * + * <p>The values are quantized using a 16bit integer to save on the data size since the array + * contains real data and it might grow. + * */ @NonNull public int[] getMagnitude() { diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java index 9566e1c7aa01..02fa0401e586 100644 --- a/media/java/android/media/MediaRouter2.java +++ b/media/java/android/media/MediaRouter2.java @@ -259,7 +259,8 @@ public final class MediaRouter2 { mClientPackageName = clientPackageName; mManagerCallback = new ManagerCallback(); mHandler = new Handler(Looper.getMainLooper()); - mSystemController = new SystemRoutingController(sManager.getSystemRoutingSession()); + mSystemController = new SystemRoutingController( + ensureClientPackageNameForSystemSession(sManager.getSystemRoutingSession())); mDiscoveryPreference = new RouteDiscoveryPreference.Builder( sManager.getPreferredFeatures(clientPackageName), true).build(); updateAllRoutesFromManager(); @@ -691,7 +692,8 @@ public final class MediaRouter2 { for (RoutingSessionInfo session : sessions) { RoutingController controller; if (session.isSystemSession()) { - mSystemController.setRoutingSessionInfo(session); + mSystemController.setRoutingSessionInfo( + ensureClientPackageNameForSystemSession(session)); controller = mSystemController; } else { controller = new RoutingController(session); @@ -1019,6 +1021,23 @@ public final class MediaRouter2 { sManager.registerCallback(Runnable::run, mManagerCallback); } + /** + * Returns a {@link RoutingSessionInfo} which has the client package name. + * The client package name is set only when the given sessionInfo doesn't have it. + * Should only used for system media routers. + */ + private RoutingSessionInfo ensureClientPackageNameForSystemSession( + @NonNull RoutingSessionInfo sessionInfo) { + if (!sessionInfo.isSystemSession() + || !TextUtils.isEmpty(sessionInfo.getClientPackageName())) { + return sessionInfo; + } + + return new RoutingSessionInfo.Builder(sessionInfo) + .setClientPackageName(mClientPackageName) + .build(); + } + private List<MediaRoute2Info> filterRoutes(List<MediaRoute2Info> routes, RouteDiscoveryPreference discoveryRequest) { return routes.stream() @@ -1942,7 +1961,8 @@ public final class MediaRouter2 { RoutingController oldController; if (oldSession.isSystemSession()) { - mSystemController.setRoutingSessionInfo(oldSession); + mSystemController.setRoutingSessionInfo( + ensureClientPackageNameForSystemSession(oldSession)); oldController = mSystemController; } else { oldController = new RoutingController(oldSession); @@ -1950,7 +1970,8 @@ public final class MediaRouter2 { RoutingController newController; if (newSession.isSystemSession()) { - mSystemController.setRoutingSessionInfo(newSession); + mSystemController.setRoutingSessionInfo( + ensureClientPackageNameForSystemSession(newSession)); newController = mSystemController; } else { newController = new RoutingController(newSession); @@ -1978,7 +1999,8 @@ public final class MediaRouter2 { RoutingController controller; if (session.isSystemSession()) { - mSystemController.setRoutingSessionInfo(session); + mSystemController.setRoutingSessionInfo( + ensureClientPackageNameForSystemSession(session)); controller = mSystemController; } else { controller = new RoutingController(session); diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java index 6fab9e4641b6..5afe0b5d64bc 100644 --- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java +++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java @@ -50,7 +50,7 @@ import android.widget.ProgressBar; import android.widget.TextView; import com.android.internal.util.ArrayUtils; -import com.android.internal.util.TrafficStatsConstants; +import com.android.net.module.util.NetworkStackConstants; import java.io.IOException; import java.lang.reflect.Field; @@ -239,7 +239,7 @@ public class CaptivePortalLoginActivity extends Activity { HttpURLConnection urlConnection = null; int httpResponseCode = 500; int oldTag = TrafficStats.getAndSetThreadStatsTag( - TrafficStatsConstants.TAG_SYSTEM_PROBE); + NetworkStackConstants.TAG_SYSTEM_PROBE); try { urlConnection = (HttpURLConnection) mNetwork.openConnection( new URL(mCm.getCaptivePortalServerUrl())); diff --git a/packages/Connectivity/framework/api/module-lib-current.txt b/packages/Connectivity/framework/api/module-lib-current.txt index a04571496cce..b9bcddba5d0a 100644 --- a/packages/Connectivity/framework/api/module-lib-current.txt +++ b/packages/Connectivity/framework/api/module-lib-current.txt @@ -8,7 +8,7 @@ package android.net { public class ConnectivityManager { method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public java.util.List<android.net.NetworkStateSnapshot> getAllNetworkStateSnapshot(); method @NonNull public static android.util.Range<java.lang.Integer> getIpSecNetIdRange(); - method @NonNull public static String getPrivateDnsMode(@NonNull android.content.ContentResolver); + method @NonNull public static String getPrivateDnsMode(@NonNull android.content.Context); method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerSystemDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void requestBackgroundNetwork(@NonNull android.net.NetworkRequest, @NonNull android.os.Handler, @NonNull android.net.ConnectivityManager.NetworkCallback); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_TEST_NETWORKS, android.Manifest.permission.NETWORK_STACK}) public void simulateDataStall(int, long, @NonNull android.net.Network, @NonNull android.os.PersistableBundle); diff --git a/packages/Connectivity/framework/src/android/net/ConnectivityManager.java b/packages/Connectivity/framework/src/android/net/ConnectivityManager.java index 66c45ed6fcd7..6d6a5547930c 100644 --- a/packages/Connectivity/framework/src/android/net/ConnectivityManager.java +++ b/packages/Connectivity/framework/src/android/net/ConnectivityManager.java @@ -5140,7 +5140,8 @@ public class ConnectivityManager { /** * Get private DNS mode from settings. * - * @param cr The ContentResolver to query private DNS mode from settings. + * @param context The Context to get its ContentResolver to query the private DNS mode from + * settings. * @return A string of private DNS mode as one of the PRIVATE_DNS_MODE_* constants. * * @hide @@ -5148,7 +5149,8 @@ public class ConnectivityManager { @SystemApi(client = MODULE_LIBRARIES) @NonNull @PrivateDnsMode - public static String getPrivateDnsMode(@NonNull ContentResolver cr) { + public static String getPrivateDnsMode(@NonNull Context context) { + final ContentResolver cr = context.getContentResolver(); String mode = Settings.Global.getString(cr, PRIVATE_DNS_MODE); if (TextUtils.isEmpty(mode)) mode = Settings.Global.getString(cr, PRIVATE_DNS_DEFAULT_MODE); // If both PRIVATE_DNS_MODE and PRIVATE_DNS_DEFAULT_MODE are not set, choose diff --git a/packages/SettingsLib/Android.bp b/packages/SettingsLib/Android.bp index f2a0e1cb83bd..68ce7d963242 100644 --- a/packages/SettingsLib/Android.bp +++ b/packages/SettingsLib/Android.bp @@ -17,8 +17,8 @@ android_library { // TODO(b/149540986): revert this change. static_libs: [ - // All other dependent components should be put in - // "SettingsLibDependenciesWithoutWifiTracker". + // All other dependent components should be put in + // "SettingsLibDependenciesWithoutWifiTracker". "WifiTrackerLib", ], @@ -27,7 +27,10 @@ android_library { resource_dirs: ["res"], - srcs: ["src/**/*.java", "src/**/*.kt"], + srcs: [ + "src/**/*.java", + "src/**/*.kt", + ], min_sdk_version: "21", @@ -67,6 +70,7 @@ java_defaults { "SettingsLibFooterPreference", "SettingsLibUsageProgressBarPreference", "SettingsLibCollapsingToolbarBaseActivity", + "SettingsLibTwoTargetPreference", ], } diff --git a/packages/SettingsLib/TwoTargetPreference/Android.bp b/packages/SettingsLib/TwoTargetPreference/Android.bp new file mode 100644 index 000000000000..f2e79b9ab53b --- /dev/null +++ b/packages/SettingsLib/TwoTargetPreference/Android.bp @@ -0,0 +1,13 @@ +android_library { + name: "SettingsLibTwoTargetPreference", + + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + + static_libs: [ + "androidx.annotation_annotation", + "androidx.preference_preference", + ], + sdk_version: "system_current", + min_sdk_version: "21", +} diff --git a/packages/SettingsLib/TwoTargetPreference/AndroidManifest.xml b/packages/SettingsLib/TwoTargetPreference/AndroidManifest.xml new file mode 100644 index 000000000000..120b0859a70a --- /dev/null +++ b/packages/SettingsLib/TwoTargetPreference/AndroidManifest.xml @@ -0,0 +1,23 @@ +<?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. + --> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.settingslib.widget"> + + <uses-sdk android:minSdkVersion="21" /> + +</manifest> diff --git a/packages/SettingsLib/res/layout/preference_two_target.xml b/packages/SettingsLib/TwoTargetPreference/res/layout/preference_two_target.xml index ff6a22d5523c..21fcedcc01b6 100644 --- a/packages/SettingsLib/res/layout/preference_two_target.xml +++ b/packages/SettingsLib/TwoTargetPreference/res/layout/preference_two_target.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - Copyright (C) 2017 The Android Open Source Project + 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. diff --git a/packages/SettingsLib/res/layout/preference_two_target_divider.xml b/packages/SettingsLib/TwoTargetPreference/res/layout/preference_two_target_divider.xml index b81dd83d2586..bd477f8068ff 100644 --- a/packages/SettingsLib/res/layout/preference_two_target_divider.xml +++ b/packages/SettingsLib/TwoTargetPreference/res/layout/preference_two_target_divider.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - Copyright (C) 2017 The Android Open Source Project + 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. diff --git a/packages/SettingsLib/TwoTargetPreference/res/values/dimens.xml b/packages/SettingsLib/TwoTargetPreference/res/values/dimens.xml new file mode 100644 index 000000000000..32a865905267 --- /dev/null +++ b/packages/SettingsLib/TwoTargetPreference/res/values/dimens.xml @@ -0,0 +1,21 @@ +<?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 + --> +<resources> + + <dimen name="two_target_pref_small_icon_size">24dp</dimen> + <dimen name="two_target_pref_medium_icon_size">32dp</dimen> +</resources> diff --git a/packages/SettingsLib/src/com/android/settingslib/TwoTargetPreference.java b/packages/SettingsLib/TwoTargetPreference/src/com/android/settingslib/widget/TwoTargetPreference.java index 02895a479352..9130662021d5 100644 --- a/packages/SettingsLib/src/com/android/settingslib/TwoTargetPreference.java +++ b/packages/SettingsLib/TwoTargetPreference/src/com/android/settingslib/widget/TwoTargetPreference.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * 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. @@ -14,21 +14,24 @@ * limitations under the License. */ -package com.android.settingslib; +package com.android.settingslib.widget; -import android.annotation.IntDef; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; +import androidx.annotation.IntDef; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +/** + * The Base preference with two target areas divided by a vertical divider + */ public class TwoTargetPreference extends Preference { @IntDef({ICON_SIZE_DEFAULT, ICON_SIZE_MEDIUM, ICON_SIZE_SMALL}) diff --git a/packages/SettingsLib/res/values/dimens.xml b/packages/SettingsLib/res/values/dimens.xml index ef4b97f7743f..9d5b23166190 100644 --- a/packages/SettingsLib/res/values/dimens.xml +++ b/packages/SettingsLib/res/values/dimens.xml @@ -32,9 +32,6 @@ <dimen name="user_spinner_padding_sides">20dp</dimen> <dimen name="user_spinner_item_height">56dp</dimen> - <dimen name="two_target_pref_small_icon_size">24dp</dimen> - <dimen name="two_target_pref_medium_icon_size">32dp</dimen> - <!-- Lock icon for preferences locked by admin --> <dimen name="restricted_icon_padding">4dp</dimen> diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java index ad7e995412aa..fc8b5879c5fa 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java @@ -27,6 +27,8 @@ import androidx.core.content.res.TypedArrayUtils; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.TwoTargetPreference; + /** * Preference class that supports being disabled by a user restriction * set by a device admin. diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TwoTargetPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/TwoTargetPreferenceTest.java index 3f0ba13ce50a..aaec909aa335 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TwoTargetPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/TwoTargetPreferenceTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * 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. @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.android.settingslib; +package com.android.settingslib.widget; -import static com.android.settingslib.TwoTargetPreference.ICON_SIZE_DEFAULT; -import static com.android.settingslib.TwoTargetPreference.ICON_SIZE_MEDIUM; -import static com.android.settingslib.TwoTargetPreference.ICON_SIZE_SMALL; +import static com.android.settingslib.widget.TwoTargetPreference.ICON_SIZE_DEFAULT; +import static com.android.settingslib.widget.TwoTargetPreference.ICON_SIZE_MEDIUM; +import static com.android.settingslib.widget.TwoTargetPreference.ICON_SIZE_SMALL; import static com.google.common.truth.Truth.assertThat; @@ -32,6 +32,8 @@ import android.widget.LinearLayout; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java index 5cc0e65b2a61..97803c1cf2fd 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java @@ -71,7 +71,7 @@ public class KeyguardService extends Service { * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY */ private static boolean sEnableRemoteKeyguardAnimation = - SystemProperties.getBoolean(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, true); + SystemProperties.getBoolean(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, false); private final KeyguardViewMediator mKeyguardViewMediator; private final KeyguardLifecyclesDispatcher mKeyguardLifecyclesDispatcher; diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt index 55c55b97db51..41c9daedf2d4 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt @@ -476,7 +476,6 @@ class MediaDataManager( Notification.EXTRA_COMPACT_ACTIONS)?.toMutableList() ?: mutableListOf<Int>() // TODO: b/153736623 look into creating actions when this isn't a media style notification - val packageContext: Context = sbn.getPackageContext(context) if (actions != null) { for ((index, action) in actions.withIndex()) { if (action.getIcon() == null) { @@ -499,7 +498,7 @@ class MediaDataManager( null } val mediaActionIcon = if (action.getIcon()?.getType() == Icon.TYPE_RESOURCE) { - Icon.createWithResource(packageContext, action.getIcon()!!.getResId()) + Icon.createWithResource(sbn.packageName, action.getIcon()!!.getResId()) } else { action.getIcon() }.setTint(themeText) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java index 6ba52156c374..5219ecd1d83c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java @@ -16,16 +16,23 @@ package com.android.systemui.statusbar; +import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_TRANSITION_FROM_AOD; +import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_TRANSITION_TO_AOD; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.text.format.DateFormat; import android.util.FloatProperty; import android.util.Log; +import android.view.View; import android.view.animation.Interpolator; import androidx.annotation.NonNull; import com.android.internal.annotations.GuardedBy; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.UiEventLogger; import com.android.systemui.DejankUtils; import com.android.systemui.Dumpable; @@ -81,6 +88,8 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll // Record the HISTORY_SIZE most recent states private int mHistoryIndex = 0; private HistoricalState[] mHistoricalRecords = new HistoricalState[HISTORY_SIZE]; + // This is used by InteractionJankMonitor to get callback from HWUI. + private View mView; /** * If any of the system bars is hidden. @@ -236,6 +245,11 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll @Override public void setDozeAmount(float dozeAmount, boolean animated) { + setAndInstrumentDozeAmount(null, dozeAmount, animated); + } + + @Override + public void setAndInstrumentDozeAmount(View view, float dozeAmount, boolean animated) { if (mDarkAnimator != null && mDarkAnimator.isRunning()) { if (animated && mDozeAmountTarget == dozeAmount) { return; @@ -244,6 +258,11 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll } } + // We don't need a new attached view if we already have one. + if ((mView == null || !mView.isAttachedToWindow()) + && (view != null && view.isAttachedToWindow())) { + mView = view; + } mDozeAmountTarget = dozeAmount; if (animated) { startDozeAnimation(); @@ -261,6 +280,22 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll mDarkAnimator = ObjectAnimator.ofFloat(this, SET_DARK_AMOUNT_PROPERTY, mDozeAmountTarget); mDarkAnimator.setInterpolator(Interpolators.LINEAR); mDarkAnimator.setDuration(StackStateAnimator.ANIMATION_DURATION_WAKEUP); + mDarkAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationCancel(Animator animation) { + cancelInteractionJankMonitor(); + } + + @Override + public void onAnimationEnd(Animator animation) { + endInteractionJankMonitor(); + } + + @Override + public void onAnimationStart(Animator animation) { + beginInteractionJankMonitor(); + } + }); mDarkAnimator.start(); } @@ -277,6 +312,24 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll } } + private void beginInteractionJankMonitor() { + if (mView != null && mView.isAttachedToWindow()) { + InteractionJankMonitor.getInstance().begin(mView, getCujType()); + } + } + + private void endInteractionJankMonitor() { + InteractionJankMonitor.getInstance().end(getCujType()); + } + + private void cancelInteractionJankMonitor() { + InteractionJankMonitor.getInstance().cancel(getCujType()); + } + + private int getCujType() { + return mIsDozing ? CUJ_LOCKSCREEN_TRANSITION_TO_AOD : CUJ_LOCKSCREEN_TRANSITION_FROM_AOD; + } + @Override public boolean goingToFullShade() { return mState == StatusBarState.SHADE && mLeaveOpenOnKeyguardHide; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java index a2e07b289e9d..b6d6ed53b681 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java @@ -19,6 +19,7 @@ package com.android.systemui.statusbar; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.annotation.IntDef; +import android.view.View; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.StatusBar; @@ -75,6 +76,15 @@ public interface SysuiStatusBarStateController extends StatusBarStateController */ void setDozeAmount(float dozeAmount, boolean animated); + /** + * Changes the current doze amount, also starts the + * {@link com.android.internal.jank.InteractionJankMonitor InteractionJankMonitor} as possible. + * + * @param view An attached view, which will be used by InteractionJankMonitor. + * @param dozeAmount New doze/dark amount. + * @param animated If change should be animated or not. This will cancel current animations. + */ + void setAndInstrumentDozeAmount(View view, float dozeAmount, boolean animated); /** * Update the expanded state from {@link StatusBar}'s perspective diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java index fdd8f347c248..58b87cd2f492 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java @@ -27,8 +27,10 @@ import android.app.Notification; import android.content.Context; import android.content.ContextWrapper; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.os.AsyncTask; import android.os.CancellationSignal; +import android.os.UserHandle; import android.service.notification.StatusBarNotification; import android.util.Log; import android.view.View; @@ -768,10 +770,26 @@ public class NotificationContentInflater implements NotificationRowContentBinder return mReInflateFlags; } + void updateApplicationInfo(StatusBarNotification sbn) { + String packageName = sbn.getPackageName(); + int userId = UserHandle.getUserId(sbn.getUid()); + final ApplicationInfo appInfo; + try { + // This method has an internal cache, so we don't need to add our own caching here. + appInfo = mContext.getPackageManager().getApplicationInfoAsUser(packageName, + PackageManager.MATCH_UNINSTALLED_PACKAGES, userId); + } catch (PackageManager.NameNotFoundException e) { + return; + } + Notification.addFieldsFromContext(appInfo, sbn.getNotification()); + } + @Override protected InflationProgress doInBackground(Void... params) { try { final StatusBarNotification sbn = mEntry.getSbn(); + // Ensure the ApplicationInfo is updated before a builder is recovered. + updateApplicationInfo(sbn); final Notification.Builder recoveredBuilder = Notification.Builder.recoverBuilder(mContext, sbn.getNotification()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index acb3e5783525..cd712044a60e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -3127,7 +3127,7 @@ public class NotificationPanelViewController extends PanelViewController { } final float dozeAmount = dozing ? 1 : 0; - mStatusBarStateController.setDozeAmount(dozeAmount, animate); + mStatusBarStateController.setAndInstrumentDozeAmount(mView, dozeAmount, animate); } public void setPulsing(boolean pulsing) { diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java index c7f0efa18568..3d07da5fbb30 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java @@ -118,6 +118,7 @@ public class FullScreenMagnificationController { private static final int INVALID_ID = -1; private int mIdOfLastServiceToMagnify = INVALID_ID; + private boolean mMagnificationActivated = false; DisplayMagnification(int displayId) { mDisplayId = displayId; @@ -322,6 +323,13 @@ public class FullScreenMagnificationController { mSpecAnimationBridge, spec, animationCallback); mControllerCtx.getHandler().sendMessage(m); } + + final boolean lastMagnificationActivated = mMagnificationActivated; + mMagnificationActivated = spec.scale > 1.0f; + if (mMagnificationActivated != lastMagnificationActivated) { + mMagnificationRequestObserver.onFullScreenMagnificationActivationState( + mMagnificationActivated); + } } /** @@ -1506,5 +1514,14 @@ public class FullScreenMagnificationController { * @param serviceId the ID of the service requesting the change */ void onRequestMagnificationSpec(int displayId, int serviceId); + + /** + * Called when the state of the magnification activation is changed. + * It is for the logging data of the magnification activation state. + * + * @param activated {@code true} if the magnification is activated, otherwise {@code false}. + */ + @GuardedBy("mLock") + void onFullScreenMagnificationActivationState(boolean activated); } } diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java index 2a65b6423158..17a7d393f369 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java @@ -16,6 +16,7 @@ package com.android.server.accessibility.magnification; +import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; @@ -25,11 +26,13 @@ import android.content.Context; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.Region; +import android.os.SystemClock; import android.provider.Settings; import android.util.Slog; import android.util.SparseArray; import android.view.accessibility.MagnificationAnimationCallback; +import com.android.internal.accessibility.util.AccessibilityStatsLogUtils; import com.android.internal.annotations.VisibleForTesting; import com.android.server.accessibility.AccessibilityManagerService; @@ -51,7 +54,8 @@ import com.android.server.accessibility.AccessibilityManagerService; * </ol> */ public class MagnificationController implements WindowMagnificationManager.Callback, - MagnificationGestureHandler.Callback { + MagnificationGestureHandler.Callback, + FullScreenMagnificationController.MagnificationRequestObserver { private static final boolean DEBUG = false; private static final String TAG = "MagnificationController"; @@ -66,6 +70,9 @@ public class MagnificationController implements WindowMagnificationManager.Callb private WindowMagnificationManager mWindowMagnificationMgr; private int mMagnificationCapabilities = ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; + private long mWindowModeEnabledTime = 0; + private long mFullScreenModeEnabledTime = 0; + /** * A callback to inform the magnification transition result. */ @@ -187,7 +194,8 @@ public class MagnificationController implements WindowMagnificationManager.Callb setDisableMagnificationCallbackLocked(displayId, animationEndCallback); } - void onRequestMagnificationSpec(int displayId, int serviceId) { + @Override + public void onRequestMagnificationSpec(int displayId, int serviceId) { synchronized (mLock) { if (serviceId == AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID) { return; @@ -200,6 +208,39 @@ public class MagnificationController implements WindowMagnificationManager.Callb } } + // TODO : supporting multi-display (b/182227245). + @Override + public void onWindowMagnificationActivationState(boolean activated) { + if (activated) { + mWindowModeEnabledTime = SystemClock.uptimeMillis(); + } else { + logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, + SystemClock.uptimeMillis() - mWindowModeEnabledTime); + } + } + + @Override + public void onFullScreenMagnificationActivationState(boolean activated) { + if (activated) { + mFullScreenModeEnabledTime = SystemClock.uptimeMillis(); + } else { + logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, + SystemClock.uptimeMillis() - mFullScreenModeEnabledTime); + } + } + + /** + * Wrapper method of logging the magnification activated mode and its duration of the usage + * when the magnification is disabled. + * + * @param mode The activated magnification mode. + * @param duration The duration in milliseconds during the magnification is activated. + */ + @VisibleForTesting + public void logMagnificationUsageState(int mode, long duration) { + AccessibilityStatsLogUtils.logMagnificationUsageState(mode, duration); + } + /** * Updates the active user ID of {@link FullScreenMagnificationController} and {@link * WindowMagnificationManager}. @@ -260,7 +301,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb synchronized (mLock) { if (mFullScreenMagnificationController == null) { mFullScreenMagnificationController = new FullScreenMagnificationController(mContext, - mAms, mLock, this::onRequestMagnificationSpec); + mAms, mLock, this); mFullScreenMagnificationController.setUserId(mAms.getCurrentUserIdLocked()); } } @@ -340,7 +381,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb mTransitionCallBack = transitionCallBack; mDisplayId = displayId; mTargetMode = targetMode; - mCurrentMode = mTargetMode ^ Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL; + mCurrentMode = mTargetMode ^ ACCESSIBILITY_MAGNIFICATION_MODE_ALL; mCurrentScale = scale; mCurrentCenter.set(currentCenter); } diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java index 40668d8df568..ded601e70ff1 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java @@ -93,6 +93,13 @@ public class WindowMagnificationManager implements * @param scale the target scale, or {@link Float#NaN} to leave unchanged */ void onPerformScaleAction(int displayId, float scale); + + /** + * Called when the state of the magnification activation is changed. + * + * @param activated {@code true} if the magnification is activated, otherwise {@code false}. + */ + void onWindowMagnificationActivationState(boolean activated); } private final Callback mCallback; @@ -264,6 +271,7 @@ public class WindowMagnificationManager implements */ void enableWindowMagnification(int displayId, float scale, float centerX, float centerY, @Nullable MagnificationAnimationCallback animationCallback) { + final boolean enabled; synchronized (mLock) { if (mConnectionWrapper == null) { return; @@ -272,9 +280,13 @@ public class WindowMagnificationManager implements if (magnifier == null) { magnifier = createWindowMagnifier(displayId); } - magnifier.enableWindowMagnificationInternal(scale, centerX, centerY, + enabled = magnifier.enableWindowMagnificationInternal(scale, centerX, centerY, animationCallback); } + + if (enabled) { + mCallback.onWindowMagnificationActivationState(true); + } } /** @@ -296,16 +308,21 @@ public class WindowMagnificationManager implements */ void disableWindowMagnification(int displayId, boolean clear, MagnificationAnimationCallback animationCallback) { + final boolean disabled; synchronized (mLock) { WindowMagnifier magnifier = mWindowMagnifiers.get(displayId); if (magnifier == null || mConnectionWrapper == null) { return; } - magnifier.disableWindowMagnificationInternal(animationCallback); + disabled = magnifier.disableWindowMagnificationInternal(animationCallback); if (clear) { mWindowMagnifiers.delete(displayId); } } + + if (disabled) { + mCallback.onWindowMagnificationActivationState(false); + } } /** @@ -560,26 +577,35 @@ public class WindowMagnificationManager implements } @GuardedBy("mLock") - void enableWindowMagnificationInternal(float scale, float centerX, float centerY, + boolean enableWindowMagnificationInternal(float scale, float centerX, float centerY, @Nullable MagnificationAnimationCallback animationCallback) { if (mEnabled) { - return; + return false; } final float normScale = MathUtils.constrain(scale, MIN_SCALE, MAX_SCALE); if (mWindowMagnificationManager.enableWindowMagnificationInternal(mDisplayId, normScale, centerX, centerY, animationCallback)) { mScale = normScale; mEnabled = true; + + return true; } + return false; } @GuardedBy("mLock") - void disableWindowMagnificationInternal( + boolean disableWindowMagnificationInternal( @Nullable MagnificationAnimationCallback animationResultCallback) { - if (mEnabled && mWindowMagnificationManager.disableWindowMagnificationInternal( + if (!mEnabled) { + return false; + } + if (mWindowMagnificationManager.disableWindowMagnificationInternal( mDisplayId, animationResultCallback)) { mEnabled = false; + + return true; } + return false; } @GuardedBy("mLock") diff --git a/services/core/java/com/android/server/connectivity/DnsManager.java b/services/core/java/com/android/server/connectivity/DnsManager.java index 7a5abf807fbb..702434ba07b7 100644 --- a/services/core/java/com/android/server/connectivity/DnsManager.java +++ b/services/core/java/com/android/server/connectivity/DnsManager.java @@ -127,13 +127,17 @@ public class DnsManager { private static final int DNS_RESOLVER_DEFAULT_MIN_SAMPLES = 8; private static final int DNS_RESOLVER_DEFAULT_MAX_SAMPLES = 64; - public static PrivateDnsConfig getPrivateDnsConfig(ContentResolver cr) { - final String mode = ConnectivityManager.getPrivateDnsMode(cr); + /** + * Get PrivateDnsConfig. + */ + public static PrivateDnsConfig getPrivateDnsConfig(Context context) { + final String mode = ConnectivityManager.getPrivateDnsMode(context); final boolean useTls = !TextUtils.isEmpty(mode) && !PRIVATE_DNS_MODE_OFF.equals(mode); if (PRIVATE_DNS_MODE_PROVIDER_HOSTNAME.equals(mode)) { - final String specifier = getStringSetting(cr, PRIVATE_DNS_SPECIFIER); + final String specifier = getStringSetting(context.getContentResolver(), + PRIVATE_DNS_SPECIFIER); return new PrivateDnsConfig(specifier, null); } @@ -268,7 +272,7 @@ public class DnsManager { } public PrivateDnsConfig getPrivateDnsConfig() { - return getPrivateDnsConfig(mContentResolver); + return getPrivateDnsConfig(mContext); } public void removeNetwork(Network network) { diff --git a/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java b/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java index 5e6b9f39b40a..2e51be39bfae 100644 --- a/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java +++ b/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java @@ -36,7 +36,7 @@ import android.text.TextUtils; import android.util.Pair; import com.android.internal.util.IndentingPrintWriter; -import com.android.internal.util.TrafficStatsConstants; +import com.android.net.module.util.NetworkStackConstants; import libcore.io.IoUtils; @@ -446,7 +446,7 @@ public class NetworkDiagnostics { int sockType, int protocol, long writeTimeout, long readTimeout, int dstPort) throws ErrnoException, IOException { final int oldTag = TrafficStats.getAndSetThreadStatsTag( - TrafficStatsConstants.TAG_SYSTEM_PROBE); + NetworkStackConstants.TAG_SYSTEM_PROBE); try { mFileDescriptor = Os.socket(mAddressFamily, sockType, protocol); } finally { @@ -745,7 +745,7 @@ public class NetworkDiagnostics { if (ensureMeasurementNecessary()) return; // No need to restore the tag, since this thread is only used for this measurement. - TrafficStats.getAndSetThreadStatsTag(TrafficStatsConstants.TAG_SYSTEM_PROBE); + TrafficStats.getAndSetThreadStatsTag(NetworkStackConstants.TAG_SYSTEM_PROBE); try (SSLSocket sslSocket = setupSSLSocket()) { sendDoTProbe(sslSocket); diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index c6cece3d2b23..59d40cf36e9d 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -2707,7 +2707,8 @@ class ActivityStarter { launchFlags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT; break; case ActivityInfo.DOCUMENT_LAUNCH_NEVER: - launchFlags &= ~FLAG_ACTIVITY_MULTIPLE_TASK; + launchFlags &= + ~(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | FLAG_ACTIVITY_MULTIPLE_TASK); break; } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 083026920e91..d2c9e29f9d37 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -431,7 +431,7 @@ public class WindowManagerService extends IWindowManager.Stub * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY */ public static boolean sEnableRemoteKeyguardAnimation = - SystemProperties.getBoolean(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, true); + SystemProperties.getBoolean(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, false); private static final String DISABLE_TRIPLE_BUFFERING_PROPERTY = "ro.sf.disable_triple_buffer"; diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 133578a60ec4..70756787c561 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -15456,8 +15456,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { final CallerIdentity caller = getCallerIdentity(who); Preconditions.checkCallAuthorization(isDeviceOwner(caller)); - final String currentMode = - ConnectivityManager.getPrivateDnsMode(mContext.getContentResolver()); + final String currentMode = ConnectivityManager.getPrivateDnsMode(mContext); switch (currentMode) { case ConnectivityManager.PRIVATE_DNS_MODE_OFF: return PRIVATE_DNS_MODE_OFF; diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java index 44b9f44fc843..872b95548655 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java @@ -1114,6 +1114,30 @@ public class FullScreenMagnificationControllerTest { argThat(closeTo(newEndSpec))); } + @Test + public void testSetScale_toMagnifying_shouldNotifyActivatedState() { + setScaleToMagnifying(); + + verify(mRequestObserver).onFullScreenMagnificationActivationState(eq(true)); + } + + @Test + public void testReset_afterMagnifying_shouldNotifyDeactivatedState() { + setScaleToMagnifying(); + + mFullScreenMagnificationController.reset(DISPLAY_0, mAnimationCallback); + verify(mRequestObserver).onFullScreenMagnificationActivationState(eq(false)); + } + + private void setScaleToMagnifying() { + register(DISPLAY_0); + float scale = 2.0f; + PointF pivotPoint = INITIAL_BOUNDS_LOWER_RIGHT_2X_CENTER; + + mFullScreenMagnificationController.setScale(DISPLAY_0, scale, pivotPoint.x, pivotPoint.y, + false, SERVICE_ID_1); + } + private void initMockWindowManager() { for (int i = 0; i < DISPLAY_COUNT; i++) { when(mMockWindowManager.setMagnificationCallbacks(eq(i), any())).thenReturn(true); diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java index 0c3640c4eeb0..84c76b77018d 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java @@ -16,6 +16,9 @@ package com.android.server.accessibility.magnification; +import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; +import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; + import static com.android.server.accessibility.AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID; import static org.junit.Assert.assertEquals; @@ -24,6 +27,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doAnswer; @@ -283,6 +287,27 @@ public class MagnificationControllerTest { } @Test + public void onWindowMagnificationActivationState_windowActivated_logWindowDuration() { + mMagnificationController.onWindowMagnificationActivationState(true); + + mMagnificationController.onWindowMagnificationActivationState(false); + + verify(mMagnificationController).logMagnificationUsageState( + eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW), anyLong()); + } + + @Test + public void + onFullScreenMagnificationActivationState_fullScreenActivated_logFullScreenDuration() { + mMagnificationController.onFullScreenMagnificationActivationState(true); + + mMagnificationController.onFullScreenMagnificationActivationState(false); + + verify(mMagnificationController).logMagnificationUsageState( + eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN), anyLong()); + } + + @Test public void onTouchInteractionStart_fullScreenAndCapabilitiesAll_showMagnificationButton() throws RemoteException { setMagnificationEnabled(MODE_FULLSCREEN); diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java index f26c86c69587..955217c7d93f 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java @@ -392,6 +392,23 @@ public class WindowMagnificationManagerTest { assertFalse(mWindowMagnificationManager.isWindowMagnifierEnabled(TEST_DISPLAY)); } + @Test + public void onWindowMagnificationActivationState_magnifierEnabled_notifyActivatedState() { + mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); + mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, NaN, NaN); + + verify(mMockCallback).onWindowMagnificationActivationState(eq(true)); + } + + @Test + public void onWindowMagnificationActivationState_magnifierDisabled_notifyDeactivatedState() { + mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); + mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, NaN, NaN); + mWindowMagnificationManager.disableWindowMagnification(TEST_DISPLAY, true); + + verify(mMockCallback).onWindowMagnificationActivationState(eq(false)); + } + private MotionEvent generatePointersDownEvent(PointF[] pointersLocation) { final int len = pointersLocation.length; diff --git a/services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java b/services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java index c1b6101b5e58..bf621b1f56cb 100644 --- a/services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java @@ -30,11 +30,13 @@ import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest; import android.os.Handler; +import android.platform.test.annotations.Presubmit; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -43,6 +45,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; @SmallTest +@Presubmit @RunWith(AndroidJUnit4.class) public class AutomaticBrightnessControllerTest { private static final float BRIGHTNESS_MIN_FLOAT = 0.0f; @@ -55,9 +58,11 @@ public class AutomaticBrightnessControllerTest { private static final boolean RESET_AMBIENT_LUX_AFTER_WARMUP_CONFIG = false; private static final int DISPLAY_ID = 0; private static final int LAYER_STACK = 0; + private static final int LIGHT_SENSOR_WARMUP_TIME = 0; private Context mContext; private LogicalDisplay mLogicalDisplay; + private AutomaticBrightnessController mController; @Mock SensorManager mSensorManager; @Mock BrightnessMappingStrategy mBrightnessMappingStrategy; @@ -67,7 +72,6 @@ public class AutomaticBrightnessControllerTest { @Mock DisplayDevice mDisplayDevice; @Mock HighBrightnessModeController mHbmController; - private static final int LIGHT_SENSOR_WARMUP_TIME = 0; @Before public void setUp() { // Share classloader to allow package private access. @@ -78,6 +82,15 @@ public class AutomaticBrightnessControllerTest { mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice); } + @After + public void tearDown() { + if (mController != null) { + // Stop the update Brightness loop. + mController.stop(); + mController = null; + } + } + private AutomaticBrightnessController setupController(Sensor lightSensor) { AutomaticBrightnessController controller = new AutomaticBrightnessController( new AutomaticBrightnessController.Injector() { @@ -94,7 +107,9 @@ public class AutomaticBrightnessControllerTest { mAmbientBrightnessThresholds, mScreenBrightnessThresholds, mLogicalDisplay, mContext, mHbmController ); - controller.setLoggingEnabled(true); + + when(mHbmController.getCurrentBrightnessMax()).thenReturn(BRIGHTNESS_MAX_FLOAT); + when(mHbmController.getCurrentBrightnessMin()).thenReturn(BRIGHTNESS_MIN_FLOAT); // Configure the brightness controller and grab an instance of the sensor listener, // through which we can deliver fake (for test) sensor values. @@ -108,7 +123,7 @@ public class AutomaticBrightnessControllerTest { @Test public void testNoHysteresisAtMinBrightness() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); - AutomaticBrightnessController controller = setupController(lightSensor); + mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); @@ -135,7 +150,7 @@ public class AutomaticBrightnessControllerTest { // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux1)); - assertEquals(normalizedBrightness1, controller.getAutomaticScreenBrightness(), 0.001f); + assertEquals(normalizedBrightness1, mController.getAutomaticScreenBrightness(), 0.001f); // Set up system to return 0.0f (minimum possible brightness) as a brightness value float lux2 = 10.0f; @@ -149,13 +164,13 @@ public class AutomaticBrightnessControllerTest { // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux2)); - assertEquals(normalizedBrightness2, controller.getAutomaticScreenBrightness(), 0.001f); + assertEquals(normalizedBrightness2, mController.getAutomaticScreenBrightness(), 0.001f); } @Test public void testNoHysteresisAtMaxBrightness() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); - AutomaticBrightnessController controller = setupController(lightSensor); + mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); @@ -181,7 +196,7 @@ public class AutomaticBrightnessControllerTest { // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux1)); - assertEquals(normalizedBrightness1, controller.getAutomaticScreenBrightness(), 0.001f); + assertEquals(normalizedBrightness1, mController.getAutomaticScreenBrightness(), 0.001f); // Set up system to return 1.0f as a brightness value (brightness_max) @@ -196,13 +211,13 @@ public class AutomaticBrightnessControllerTest { // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux2)); - assertEquals(normalizedBrightness2, controller.getAutomaticScreenBrightness(), 0.001f); + assertEquals(normalizedBrightness2, mController.getAutomaticScreenBrightness(), 0.001f); } @Test public void testUserAddUserDataPoint() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); - AutomaticBrightnessController controller = setupController(lightSensor); + mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); @@ -214,7 +229,7 @@ public class AutomaticBrightnessControllerTest { listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 1000)); // User sets brightness to 100 - controller.configure(true /* enable */, null /* configuration */, + mController.configure(true /* enable */, null /* configuration */, 0.5f /* brightness */, true /* userChangedBrightness */, 0 /* adjustment */, false /* userChanged */, DisplayPowerRequest.POLICY_BRIGHT); diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdTest.kt index 417a5c5cc0dd..a9888b1876b7 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdTest.kt @@ -16,7 +16,6 @@ package com.android.server.wm.flicker.launch -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory import com.android.server.wm.flicker.FlickerTestParameter @@ -62,11 +61,7 @@ class OpenAppColdTest(testSpec: FlickerTestParameter) : OpenAppTransition(testSp @JvmStatic fun getParams(): Collection<FlickerTestParameter> { return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - supportedNavigationModes = listOf( - WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY - ) - ) + .getConfigNonRotationTests() } } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt index 5d015d90d5de..2e59dac30f44 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt @@ -17,7 +17,6 @@ package com.android.server.wm.flicker.launch import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory @@ -135,12 +134,7 @@ class OpenAppFromOverviewTest(testSpec: FlickerTestParameter) : OpenAppTransitio @JvmStatic fun getParams(): Collection<FlickerTestParameter> { return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - repetitions = 5, - supportedNavigationModes = listOf( - WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY - ) - ) + .getConfigNonRotationTests(repetitions = 5) } } }
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppWarmTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppWarmTest.kt index bdae810c10c7..dee7e5945b1c 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppWarmTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppWarmTest.kt @@ -16,7 +16,6 @@ package com.android.server.wm.flicker.launch -import android.view.WindowManagerPolicyConstants import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory @@ -74,11 +73,7 @@ class OpenAppWarmTest(testSpec: FlickerTestParameter) : OpenAppTransition(testSp @JvmStatic fun getParams(): Collection<FlickerTestParameter> { return FlickerTestParameterFactory.getInstance() - .getConfigNonRotationTests( - supportedNavigationModes = listOf( - WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY - ) - ) + .getConfigNonRotationTests() } } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt index 80b223792735..6985b360c9cc 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt @@ -17,7 +17,6 @@ package com.android.server.wm.flicker.rotation import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory import com.android.server.wm.flicker.FlickerTestParameter @@ -71,12 +70,7 @@ class ChangeAppRotationTest( @JvmStatic fun getParams(): Collection<FlickerTestParameter> { return FlickerTestParameterFactory.getInstance() - .getConfigRotationTests( - repetitions = 5, - supportedNavigationModes = listOf( - WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY - ) - ) + .getConfigRotationTests(repetitions = 5) } } }
\ No newline at end of file diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/RotationTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/RotationTransition.kt index 24417f4a5d3e..e914f64bb6ca 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/RotationTransition.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/RotationTransition.kt @@ -28,12 +28,10 @@ import com.android.server.wm.flicker.focusDoesNotChange import com.android.server.wm.flicker.helpers.StandardAppHelper import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.helpers.setRotation -import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible import com.android.server.wm.flicker.navBarLayerRotatesAndScales import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible import com.android.server.wm.flicker.noUncoveredRegions -import com.android.server.wm.flicker.repetitions import com.android.server.wm.flicker.startRotation import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible import com.android.server.wm.flicker.statusBarLayerRotatesScales @@ -48,12 +46,7 @@ abstract class RotationTransition(protected val testSpec: FlickerTestParameter) protected val endingPos get() = WindowUtils.getDisplayBounds(testSpec.config.endRotation) protected open val transition: FlickerBuilder.(Map<String, Any?>) -> Unit = { - withTestName { testSpec.name } - repeat { testSpec.config.repetitions } setup { - test { - device.wakeUpAndGoToHomeScreen() - } eachRun { this.setRotation(testSpec.config.startRotation) } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt index dd7103cb28ea..45d3006b9481 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt @@ -17,7 +17,6 @@ package com.android.server.wm.flicker.rotation import android.platform.test.annotations.Presubmit -import android.view.WindowManagerPolicyConstants import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory @@ -104,12 +103,7 @@ class SeamlessAppRotationTest( @JvmStatic private fun getConfigurations(): List<FlickerTestParameter> { - return testFactory.getConfigRotationTests( - repetitions = 2, - supportedNavigationModes = listOf( - WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY - ) - ).flatMap { + return testFactory.getConfigRotationTests(repetitions = 2).flatMap { val defaultRun = it.createConfig(starveUiThread = false) val busyUiRun = it.createConfig(starveUiThread = true) listOf( diff --git a/tests/net/java/com/android/server/connectivity/DnsManagerTest.java b/tests/net/java/com/android/server/connectivity/DnsManagerTest.java index 5760211d9a27..b7ece8f4c4c9 100644 --- a/tests/net/java/com/android/server/connectivity/DnsManagerTest.java +++ b/tests/net/java/com/android/server/connectivity/DnsManagerTest.java @@ -312,14 +312,14 @@ public class DnsManagerTest { @Test public void testOverrideDefaultMode() throws Exception { // Hard-coded default is opportunistic mode. - final PrivateDnsConfig cfgAuto = DnsManager.getPrivateDnsConfig(mContentResolver); + final PrivateDnsConfig cfgAuto = DnsManager.getPrivateDnsConfig(mCtx); assertTrue(cfgAuto.useTls); assertEquals("", cfgAuto.hostname); assertEquals(new InetAddress[0], cfgAuto.ips); // Pretend a gservices push sets the default to "off". Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, "off"); - final PrivateDnsConfig cfgOff = DnsManager.getPrivateDnsConfig(mContentResolver); + final PrivateDnsConfig cfgOff = DnsManager.getPrivateDnsConfig(mCtx); assertFalse(cfgOff.useTls); assertEquals("", cfgOff.hostname); assertEquals(new InetAddress[0], cfgOff.ips); @@ -328,7 +328,7 @@ public class DnsManagerTest { Settings.Global.putString( mContentResolver, PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME); Settings.Global.putString(mContentResolver, PRIVATE_DNS_SPECIFIER, "strictmode.com"); - final PrivateDnsConfig cfgStrict = DnsManager.getPrivateDnsConfig(mContentResolver); + final PrivateDnsConfig cfgStrict = DnsManager.getPrivateDnsConfig(mCtx); assertTrue(cfgStrict.useTls); assertEquals("strictmode.com", cfgStrict.hostname); assertEquals(new InetAddress[0], cfgStrict.ips); |