diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-08-19 02:39:13 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-08-19 02:39:13 +0000 |
commit | 4f61f588b30ce4e0857ba0448afdea5946db521f (patch) | |
tree | 0597f95427ec6a97b3b73deff1e34a80955070ee | |
parent | fc4f37d46c9265cc0c0cc7cb523f504280400309 (diff) | |
parent | 90e437d59671354bacb1839eec497c16a7bb15f7 (diff) | |
download | base-4f61f588b30ce4e0857ba0448afdea5946db521f.tar.gz |
Merge cherrypicks of [15619363, 15619364, 15619365, 15619399, 15619400, 15619401, 15619366, 15619367, 15619368, 15619369, 15619424, 15619425, 15619426, 15619427, 15619428, 15619402, 15619403, 15619404, 15619370, 15619371, 15619372, 15619373, 15618427, 15619429, 15619405, 15619406, 15619407, 15619408, 15619374, 15619375, 15619409] into sc-d1-release
Change-Id: I3f325119268052e46c64712ef8ed6b17d4c884f6
28 files changed, 204 insertions, 325 deletions
diff --git a/core/java/android/view/translation/UiTranslationController.java b/core/java/android/view/translation/UiTranslationController.java index a8335918cc84..442d099f0678 100644 --- a/core/java/android/view/translation/UiTranslationController.java +++ b/core/java/android/view/translation/UiTranslationController.java @@ -356,7 +356,11 @@ public class UiTranslationController { } for (int i = 0; i < translatedResult.size(); i++) { final AutofillId autofillId = new AutofillId(translatedResult.keyAt(i)); - final View view = mViews.get(autofillId).get(); + final WeakReference<View> viewRef = mViews.get(autofillId); + if (viewRef == null) { + continue; + } + final View view = viewRef.get(); if (view == null) { Log.w(TAG, "onTranslationCompleted: the view for autofill id " + autofillId + " may be gone."); @@ -416,7 +420,11 @@ public class UiTranslationController { Log.w(TAG, "No AutofillId is set in ViewTranslationResponse"); continue; } - final View view = mViews.get(autofillId).get(); + final WeakReference<View> viewRef = mViews.get(autofillId); + if (viewRef == null) { + continue; + } + final View view = viewRef.get(); if (view == null) { Log.w(TAG, "onTranslationCompleted: the view for autofill id " + autofillId + " may be gone."); diff --git a/packages/SettingsLib/ActionBarShadow/Android.bp b/packages/SettingsLib/ActionBarShadow/Android.bp index 800ab671cedb..4a07d49fcde5 100644 --- a/packages/SettingsLib/ActionBarShadow/Android.bp +++ b/packages/SettingsLib/ActionBarShadow/Android.bp @@ -19,5 +19,5 @@ android_library { ], sdk_version: "system_current", - min_sdk_version: "21", + min_sdk_version: "28", } diff --git a/packages/SettingsLib/ActionBarShadow/lint-baseline.xml b/packages/SettingsLib/ActionBarShadow/lint-baseline.xml deleted file mode 100644 index 4d5de5f46894..000000000000 --- a/packages/SettingsLib/ActionBarShadow/lint-baseline.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0"> - - <issue - id="NewApi" - message="Call requires API level 23 (current min is 21): `android.view.View#setOnScrollChangeListener`" - errorLine1=" mScrollView.setOnScrollChangeListener(mScrollChangeWatcher);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionBarShadow/src/com/android/settingslib/widget/ActionBarShadowController.java" - line="81" - column="25"/> - </issue> - - <issue - id="NewApi" - message="Call requires API level 23 (current min is 21): `android.view.View#setOnScrollChangeListener`" - errorLine1=" mScrollView.setOnScrollChangeListener(null);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionBarShadow/src/com/android/settingslib/widget/ActionBarShadowController.java" - line="88" - column="21"/> - </issue> - - <issue - id="NewApi" - message="Class requires API level 23 (current min is 21): `android.view.View.OnScrollChangeListener`" - errorLine1=" final class ScrollChangeWatcher implements View.OnScrollChangeListener {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionBarShadow/src/com/android/settingslib/widget/ActionBarShadowController.java" - line="95" - column="48"/> - </issue> - -</issues> diff --git a/packages/SettingsLib/ActionButtonsPreference/lint-baseline.xml b/packages/SettingsLib/ActionButtonsPreference/lint-baseline.xml deleted file mode 100644 index 95b7e3b8033d..000000000000 --- a/packages/SettingsLib/ActionButtonsPreference/lint-baseline.xml +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0"> - - <issue - id="NewApi" - message="`android:Widget.DeviceDefault.Button.Borderless.Colored` requires API level 28 (current min is 21)" - errorLine1=" <style name="SettingsActionButton" parent="android:Widget.DeviceDefault.Button.Borderless.Colored">" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/values/styles.xml" - line="19" - column="40"/> - </issue> - - <issue - id="NewApi" - message="`android:drawableTint` requires API level 23 (current min is 21)" - errorLine1=" <item name="android:drawableTint">@*android:color/btn_colored_borderless_text_material</item>" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/values/styles.xml" - line="21" - column="15"/> - </issue> - - <issue - id="NewApi" - message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 21)" - errorLine1=" android:topLeftRadius="?android:attr/dialogCornerRadius"" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_left_bk.xml" - line="23" - column="9"/> - </issue> - - <issue - id="NewApi" - message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 21)" - errorLine1=" android:bottomLeftRadius="?android:attr/dialogCornerRadius"" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_left_bk.xml" - line="25" - column="9"/> - </issue> - - <issue - id="NewApi" - message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 21)" - errorLine1=" android:topRightRadius="?android:attr/dialogCornerRadius"" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_right_bk.xml" - line="24" - column="9"/> - </issue> - - <issue - id="NewApi" - message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 21)" - errorLine1=" android:bottomRightRadius="?android:attr/dialogCornerRadius"" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_right_bk.xml" - line="26" - column="9"/> - </issue> - - <issue - id="NewApi" - message="`?android:attr/dialogCornerRadius` requires API level 28 (current min is 21)" - errorLine1=" android:bottomRightRadius="?android:attr/dialogCornerRadius"" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ActionButtonsPreference/res/drawable/rounded_bk.xml" - line="23" - column="9"/> - </issue> - -</issues> diff --git a/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_left_bk.xml b/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_left_bk.xml index 16a85d694bf8..8a25726ecd17 100644 --- a/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_left_bk.xml +++ b/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_left_bk.xml @@ -17,6 +17,8 @@ <shape xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" + xmlns:tools="http://schemas.android.com/tools" + tools:targetApi="28" android:shape="rectangle"> <solid android:color="?androidprv:attr/colorSurface" /> <corners diff --git a/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_right_bk.xml b/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_right_bk.xml index 1b9f68fac850..7e626e50255a 100644 --- a/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_right_bk.xml +++ b/packages/SettingsLib/ActionButtonsPreference/res/drawable/half_rounded_right_bk.xml @@ -1,22 +1,24 @@ <?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. + 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. --> <shape xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" + xmlns:tools="http://schemas.android.com/tools" + tools:targetApi="28" android:shape="rectangle"> <solid android:color="?androidprv:attr/colorSurface" /> <corners diff --git a/packages/SettingsLib/ActionButtonsPreference/res/drawable/rounded_bk.xml b/packages/SettingsLib/ActionButtonsPreference/res/drawable/rounded_bk.xml index a884ef11e835..9f4980beb76f 100644 --- a/packages/SettingsLib/ActionButtonsPreference/res/drawable/rounded_bk.xml +++ b/packages/SettingsLib/ActionButtonsPreference/res/drawable/rounded_bk.xml @@ -1,22 +1,24 @@ <?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. + 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. --> <shape xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" + xmlns:tools="http://schemas.android.com/tools" + tools:targetApi="28" android:shape="rectangle"> <solid android:color="?androidprv:attr/colorSurface" /> <corners diff --git a/packages/SettingsLib/ActionButtonsPreference/res/values/styles.xml b/packages/SettingsLib/ActionButtonsPreference/res/values/styles.xml index 42c7d76a80e9..8a449cfbb7c8 100644 --- a/packages/SettingsLib/ActionButtonsPreference/res/values/styles.xml +++ b/packages/SettingsLib/ActionButtonsPreference/res/values/styles.xml @@ -15,7 +15,9 @@ limitations under the License. --> -<resources> +<resources + xmlns:tools="http://schemas.android.com/tools" + tools:targetApi="28"> <style name="SettingsLibActionButton" parent="android:Widget.DeviceDefault.Button.Borderless.Colored"> <item name="android:drawablePadding">4dp</item> <item name="android:drawableTint">@*android:color/btn_colored_borderless_text_material</item> diff --git a/packages/SettingsLib/BarChartPreference/Android.bp b/packages/SettingsLib/BarChartPreference/Android.bp index ae2606661697..4f6537334770 100644 --- a/packages/SettingsLib/BarChartPreference/Android.bp +++ b/packages/SettingsLib/BarChartPreference/Android.bp @@ -14,7 +14,7 @@ android_library { resource_dirs: ["res"], static_libs: [ - "androidx.preference_preference", + "androidx.preference_preference", ], sdk_version: "system_current", diff --git a/packages/SettingsLib/BarChartPreference/lint-baseline.xml b/packages/SettingsLib/BarChartPreference/lint-baseline.xml deleted file mode 100644 index f1043bb62fe1..000000000000 --- a/packages/SettingsLib/BarChartPreference/lint-baseline.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0"> - - <issue - id="NewApi" - message="`@android:style/Widget.DeviceDefault.Button.Borderless.Colored` requires API level 28 (current min is 21)" - errorLine1=" parent="@android:style/Widget.DeviceDefault.Button.Borderless.Colored">" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/BarChartPreference/res/values/styles.xml" - line="35" - column="12"/> - </issue> - -</issues> diff --git a/packages/SettingsLib/BarChartPreference/res/values/styles.xml b/packages/SettingsLib/BarChartPreference/res/values/styles.xml index d1f562b38760..1c4420717188 100644 --- a/packages/SettingsLib/BarChartPreference/res/values/styles.xml +++ b/packages/SettingsLib/BarChartPreference/res/values/styles.xml @@ -15,7 +15,9 @@ limitations under the License. --> -<resources> +<resources + xmlns:tools="http://schemas.android.com/tools" + tools:targetApi="28"> <style name="SettingsBarChart"> <item name="android:layout_marginStart">10dp</item> diff --git a/packages/SettingsLib/HelpUtils/lint-baseline.xml b/packages/SettingsLib/HelpUtils/lint-baseline.xml deleted file mode 100644 index 940f027295a7..000000000000 --- a/packages/SettingsLib/HelpUtils/lint-baseline.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0"> - - <issue - id="NewApi" - message="Call requires API level 28 (current min is 21): `android.content.pm.PackageInfo#getLongVersionCode`" - errorLine1=" sCachedVersionCode = Long.toString(info.getLongVersionCode());" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java" - line="239" - column="57"/> - </issue> - -</issues> diff --git a/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java b/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java index 541a2468db45..70c8658a7f55 100644 --- a/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java +++ b/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java @@ -25,6 +25,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.net.Uri; +import android.os.Build; import android.provider.Settings.Global; import android.text.TextUtils; import android.util.Log; @@ -32,6 +33,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; +import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; import com.android.settingslib.widget.R; @@ -73,6 +75,15 @@ public class HelpUtils { private HelpUtils() { } + /** + * Prepares the help menu item by doing the following. + * - If the helpUrlString is empty or null, the help menu item is made invisible. + * - Otherwise, this makes the help menu item visible and sets the intent for the help menu + * item to view the URL. + * + * @return returns whether the help menu item has been made visible. + */ + @RequiresApi(Build.VERSION_CODES.P) public static boolean prepareHelpMenuItem(Activity activity, Menu menu, String helpUri, String backupContext) { // menu contains help item, skip it @@ -84,6 +95,15 @@ public class HelpUtils { return prepareHelpMenuItem(activity, helpItem, helpUri, backupContext); } + /** + * Prepares the help menu item by doing the following. + * - If the helpUrlString is empty or null, the help menu item is made invisible. + * - Otherwise, this makes the help menu item visible and sets the intent for the help menu + * item to view the URL. + * + * @return returns whether the help menu item has been made visible. + */ + @RequiresApi(Build.VERSION_CODES.P) public static boolean prepareHelpMenuItem(Activity activity, Menu menu, int helpUriResource, String backupContext) { // menu contains help item, skip it @@ -105,6 +125,7 @@ public class HelpUtils { * @return returns whether the help menu item has been made visible. */ @VisibleForTesting + @RequiresApi(Build.VERSION_CODES.P) static boolean prepareHelpMenuItem(final Activity activity, MenuItem helpMenuItem, String helpUriString, String backupContext) { if (Global.getInt(activity.getContentResolver(), Global.DEVICE_PROVISIONED, 0) == 0) { @@ -152,6 +173,10 @@ public class HelpUtils { } } + /** + * Get the help intent from helpUriString. + */ + @RequiresApi(Build.VERSION_CODES.P) public static Intent getHelpIntent(Context context, String helpUriString, String backupContext) { if (Global.getInt(context.getContentResolver(), Global.DEVICE_PROVISIONED, 0) == 0) { @@ -223,7 +248,8 @@ public class HelpUtils { * * @return the uri with added query parameters */ - private static Uri uriWithAddedParameters(Context context, Uri baseUri) { + @RequiresApi(Build.VERSION_CODES.P) + public static Uri uriWithAddedParameters(Context context, Uri baseUri) { Uri.Builder builder = baseUri.buildUpon(); // Add in the preferred language diff --git a/packages/SettingsLib/ProgressBar/lint-baseline.xml b/packages/SettingsLib/ProgressBar/lint-baseline.xml deleted file mode 100644 index 03d0f3f43986..000000000000 --- a/packages/SettingsLib/ProgressBar/lint-baseline.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0"> - - <issue - id="NewApi" - message="`?android:attr/colorSecondary` requires API level 25 (current min is 21)" - errorLine1=" android:background="?android:attr/colorSecondary" />" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/ProgressBar/res/layout/progress_header.xml" - line="27" - column="9"/> - </issue> - -</issues> diff --git a/packages/SettingsLib/ProgressBar/res/layout/progress_header.xml b/packages/SettingsLib/ProgressBar/res/layout/progress_header.xml index 268858bebf0c..52ff42cbfaad 100644 --- a/packages/SettingsLib/ProgressBar/res/layout/progress_header.xml +++ b/packages/SettingsLib/ProgressBar/res/layout/progress_header.xml @@ -17,6 +17,8 @@ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + tools:targetApi="25" android:layout_width="match_parent" android:layout_height="3dp"> <View diff --git a/packages/SettingsLib/RestrictedLockUtils/lint-baseline.xml b/packages/SettingsLib/RestrictedLockUtils/lint-baseline.xml deleted file mode 100644 index 173c7353ae8c..000000000000 --- a/packages/SettingsLib/RestrictedLockUtils/lint-baseline.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0"> - - <issue - id="NewApi" - message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`" - errorLine1=" ComponentName adminComponent = userContext.getSystemService(" - errorLine2=" ~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java" - line="59" - column="52"/> - </issue> - - <issue - id="NewApi" - message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`" - errorLine1=" UserManager um = context.getSystemService(UserManager.class);" - errorLine2=" ~~~~~~~~~~~~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java" - line="101" - column="34"/> - </issue> - -</issues> diff --git a/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java b/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java index a77e34b4af1e..80f02b4ac0ee 100644 --- a/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java +++ b/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java @@ -21,11 +21,13 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.os.Build; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import java.util.Objects; @@ -34,10 +36,18 @@ import java.util.Objects; * support message dialog. */ public class RestrictedLockUtils { + /** + * Get EnforcedAdmin from DevicePolicyManager + */ + @RequiresApi(Build.VERSION_CODES.M) public static EnforcedAdmin getProfileOrDeviceOwner(Context context, UserHandle user) { return getProfileOrDeviceOwner(context, null, user); } + /** + * Get EnforcedAdmin from DevicePolicyManager + */ + @RequiresApi(Build.VERSION_CODES.M) public static EnforcedAdmin getProfileOrDeviceOwner( Context context, String enforcedRestriction, UserHandle user) { if (user == null) { @@ -73,6 +83,7 @@ public class RestrictedLockUtils { /** * Send the intent to trigger the {@code android.settings.ShowAdminSupportDetailsDialog}. */ + @RequiresApi(Build.VERSION_CODES.M) public static void sendShowAdminSupportDetailsIntent(Context context, EnforcedAdmin admin) { final Intent intent = getShowAdminSupportDetailsIntent(context, admin); int targetUserId = UserHandle.myUserId(); @@ -97,6 +108,10 @@ public class RestrictedLockUtils { return intent; } + /** + * Check if current user is profile or not + */ + @RequiresApi(Build.VERSION_CODES.M) public static boolean isCurrentUserOrProfile(Context context, int userId) { UserManager um = context.getSystemService(UserManager.class); return um.getUserProfiles().contains(UserHandle.of(userId)); diff --git a/packages/SettingsLib/SettingsSpinner/lint-baseline.xml b/packages/SettingsLib/SettingsSpinner/lint-baseline.xml deleted file mode 100644 index ae1ed38e9288..000000000000 --- a/packages/SettingsLib/SettingsSpinner/lint-baseline.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0"> - - <issue - id="NewApi" - message="Call requires API level 23 (current min is 21): `new android.widget.Spinner`" - errorLine1=" super(context, attrs, defStyleAttr, defStyleRes, mode, null);" - errorLine2=" ~~~~~"> - <location - file="frameworks/base/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/settingsspinner/SettingsSpinner.java" - line="122" - column="9"/> - </issue> - -</issues> diff --git a/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/settingsspinner/SettingsSpinner.java b/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/settingsspinner/SettingsSpinner.java index 0be80a9fd466..14286fa76d8a 100644 --- a/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/settingsspinner/SettingsSpinner.java +++ b/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/settingsspinner/SettingsSpinner.java @@ -17,9 +17,12 @@ package com.android.settingslib.widget.settingsspinner; import android.content.Context; +import android.os.Build; import android.util.AttributeSet; import android.widget.Spinner; +import androidx.annotation.RequiresApi; + import com.android.settingslib.widget.R; /** @@ -117,6 +120,7 @@ public class SettingsSpinner extends Spinner { * @see Spinner#MODE_DIALOG * @see Spinner#MODE_DROPDOWN */ + @RequiresApi(Build.VERSION_CODES.M) public SettingsSpinner(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, int mode) { super(context, attrs, defStyleAttr, defStyleRes, mode, null); diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java index a641ad4b338b..c4508e043c7d 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java @@ -97,7 +97,7 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks int backgroundAlpha = (int) (ScrimController.BUSY_SCRIM_ALPHA * 255); background.setAlpha(backgroundAlpha); mBlurUtils.applyBlur(d.getWindow().getDecorView().getViewRootImpl(), - mBlurUtils.blurRadiusOfRatio(1), backgroundAlpha == 255); + (int) mBlurUtils.blurRadiusOfRatio(1), backgroundAlpha == 255); } else { float backgroundAlpha = mContext.getResources().getFloat( com.android.systemui.R.dimen.shutdown_scrim_behind_alpha); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index dce19cf86b35..cfbe3b29783a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt @@ -54,22 +54,22 @@ open class BlurUtils @Inject constructor( /** * Translates a ratio from 0 to 1 to a blur radius in pixels. */ - fun blurRadiusOfRatio(ratio: Float): Int { + fun blurRadiusOfRatio(ratio: Float): Float { if (ratio == 0f) { - return 0 + return 0f } - return MathUtils.lerp(minBlurRadius.toFloat(), maxBlurRadius.toFloat(), ratio).toInt() + return MathUtils.lerp(minBlurRadius.toFloat(), maxBlurRadius.toFloat(), ratio) } /** * Translates a blur radius in pixels to a ratio between 0 to 1. */ - fun ratioOfBlurRadius(blur: Int): Float { - if (blur == 0) { + fun ratioOfBlurRadius(blur: Float): Float { + if (blur == 0f) { return 0f } return MathUtils.map(minBlurRadius.toFloat(), maxBlurRadius.toFloat(), - 0f /* maxStart */, 1f /* maxStop */, blur.toFloat()) + 0f /* maxStart */, 1f /* maxStop */, blur) } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt index 002c9c7d2544..b8334272c157 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt @@ -68,7 +68,7 @@ class NotificationShadeDepthController @Inject constructor( private const val VELOCITY_SCALE = 100f private const val MAX_VELOCITY = 3000f private const val MIN_VELOCITY = -MAX_VELOCITY - private const val INTERACTION_BLUR_FRACTION = 0.4f + private const val INTERACTION_BLUR_FRACTION = 0.8f private const val ANIMATION_BLUR_FRACTION = 1f - INTERACTION_BLUR_FRACTION private const val TAG = "DepthController" } @@ -92,8 +92,6 @@ class NotificationShadeDepthController @Inject constructor( // Only for dumpsys private var lastAppliedBlur = 0 - @VisibleForTesting - var shadeSpring = DepthAnimation() var shadeAnimation = DepthAnimation() @VisibleForTesting @@ -101,12 +99,16 @@ class NotificationShadeDepthController @Inject constructor( var brightnessMirrorVisible: Boolean = false set(value) { field = value - brightnessMirrorSpring.animateTo(if (value) blurUtils.blurRadiusOfRatio(1f) + brightnessMirrorSpring.animateTo(if (value) blurUtils.blurRadiusOfRatio(1f).toInt() else 0) } var qsPanelExpansion = 0f set(value) { + if (value.isNaN()) { + Log.w(TAG, "Invalid qs expansion") + return + } if (field == value) return field = value scheduleUpdate() @@ -134,15 +136,13 @@ class NotificationShadeDepthController @Inject constructor( field = value scheduleUpdate() - if (shadeSpring.radius == 0 && shadeAnimation.radius == 0) { + if (shadeExpansion == 0f && shadeAnimation.radius == 0f) { return } // Do not remove blurs when we're re-enabling them if (!value) { return } - shadeSpring.animateTo(0) - shadeSpring.finishIfRunning() shadeAnimation.animateTo(0) shadeAnimation.finishIfRunning() @@ -161,7 +161,7 @@ class NotificationShadeDepthController @Inject constructor( /** * Blur radius of the wake-up animation on this frame. */ - private var wakeAndUnlockBlurRadius = 0 + private var wakeAndUnlockBlurRadius = 0f set(value) { if (field == value) return field = value @@ -174,26 +174,30 @@ class NotificationShadeDepthController @Inject constructor( @VisibleForTesting val updateBlurCallback = Choreographer.FrameCallback { updateScheduled = false - val normalizedBlurRadius = MathUtils.constrain(shadeAnimation.radius, - blurUtils.minBlurRadius, blurUtils.maxBlurRadius) - var combinedBlur = (shadeSpring.radius * INTERACTION_BLUR_FRACTION + - normalizedBlurRadius * ANIMATION_BLUR_FRACTION).toInt() + val animationRadius = MathUtils.constrain(shadeAnimation.radius, + blurUtils.minBlurRadius.toFloat(), blurUtils.maxBlurRadius.toFloat()) + val expansionRadius = blurUtils.blurRadiusOfRatio( + Interpolators.getNotificationScrimAlpha( + if (shouldApplyShadeBlur()) shadeExpansion else 0f, false)) + var combinedBlur = (expansionRadius * INTERACTION_BLUR_FRACTION + + animationRadius * ANIMATION_BLUR_FRACTION) val qsExpandedRatio = qsPanelExpansion * shadeExpansion combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsExpandedRatio)) combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(transitionToFullShadeProgress)) - var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius).toFloat() + var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius) if (blursDisabledForAppLaunch) { shadeRadius = 0f } + var zoomOut = MathUtils.saturate(blurUtils.ratioOfBlurRadius(shadeRadius)) var blur = shadeRadius.toInt() // Make blur be 0 if it is necessary to stop blur effect. if (scrimsVisible) { blur = 0 + zoomOut = 0f } - val zoomOut = blurUtils.ratioOfBlurRadius(blur) if (!blurUtils.supportsBlursOnWindows()) { blur = 0 @@ -266,12 +270,11 @@ class NotificationShadeDepthController @Inject constructor( override fun onStateChanged(newState: Int) { updateShadeAnimationBlur( shadeExpansion, prevTracking, prevShadeVelocity, prevShadeDirection) - updateShadeBlur() + scheduleUpdate() } override fun onDozingChanged(isDozing: Boolean) { if (isDozing) { - shadeSpring.finishIfRunning() shadeAnimation.finishIfRunning() brightnessMirrorSpring.finishIfRunning() } @@ -336,7 +339,7 @@ class NotificationShadeDepthController @Inject constructor( prevTracking = tracking prevTimestamp = timestamp - updateShadeBlur() + scheduleUpdate() } private fun updateShadeAnimationBlur( @@ -399,15 +402,7 @@ class NotificationShadeDepthController @Inject constructor( } shadeAnimation.setStartVelocity(velocity) - shadeAnimation.animateTo(blurUtils.blurRadiusOfRatio(targetBlurNormalized)) - } - - private fun updateShadeBlur() { - var newBlur = 0 - if (shouldApplyShadeBlur()) { - newBlur = blurUtils.blurRadiusOfRatio(shadeExpansion) - } - shadeSpring.animateTo(newBlur) + shadeAnimation.animateTo(blurUtils.blurRadiusOfRatio(targetBlurNormalized).toInt()) } private fun scheduleUpdate(viewToBlur: View? = null) { @@ -433,7 +428,8 @@ class NotificationShadeDepthController @Inject constructor( IndentingPrintWriter(pw, " ").let { it.println("StatusBarWindowBlurController:") it.increaseIndent() - it.println("shadeRadius: ${shadeSpring.radius}") + it.println("shadeExpansion: $shadeExpansion") + it.println("shouldApplyShaeBlur: ${shouldApplyShadeBlur()}") it.println("shadeAnimation: ${shadeAnimation.radius}") it.println("brightnessMirrorRadius: ${brightnessMirrorSpring.radius}") it.println("wakeAndUnlockBlur: $wakeAndUnlockBlurRadius") @@ -452,7 +448,7 @@ class NotificationShadeDepthController @Inject constructor( /** * Blur radius visible on the UI, in pixels. */ - var radius = 0 + var radius = 0f /** * Depth ratio of the current blur radius. @@ -473,12 +469,12 @@ class NotificationShadeDepthController @Inject constructor( private var springAnimation = SpringAnimation(this, object : FloatPropertyCompat<DepthAnimation>("blurRadius") { override fun setValue(rect: DepthAnimation?, value: Float) { - radius = value.toInt() + radius = value scheduleUpdate(view) } override fun getValue(rect: DepthAnimation?): Float { - return radius.toFloat() + return radius } }) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt index 29cfb07a14f9..1037e576f263 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt @@ -497,7 +497,12 @@ class PrivacyDotViewController @Inject constructor( } if (state.designatedCorner != currentViewState.designatedCorner) { + currentViewState.designatedCorner?.contentDescription = null + state.designatedCorner?.contentDescription = state.contentDescription + updateDesignatedCorner(state.designatedCorner, state.shouldShowDot()) + } else if (state.contentDescription != currentViewState.contentDescription) { + state.designatedCorner?.contentDescription = state.contentDescription } val shouldShow = state.shouldShowDot() @@ -514,9 +519,13 @@ class PrivacyDotViewController @Inject constructor( private val systemStatusAnimationCallback: SystemStatusAnimationCallback = object : SystemStatusAnimationCallback { - override fun onSystemStatusAnimationTransitionToPersistentDot(): Animator? { + override fun onSystemStatusAnimationTransitionToPersistentDot( + contentDescr: String? + ): Animator? { synchronized(lock) { - nextViewState = nextViewState.copy(systemPrivacyEventIsActive = true) + nextViewState = nextViewState.copy( + systemPrivacyEventIsActive = true, + contentDescription = contentDescr) } return null @@ -620,7 +629,9 @@ private data class ViewState( val rotation: Int = 0, val height: Int = 0, val cornerIndex: Int = -1, - val designatedCorner: View? = null + val designatedCorner: View? = null, + + val contentDescription: String? = null ) { fun shouldShowDot(): Boolean { return systemPrivacyEventIsActive && !shadeExpanded && !qsExpanded diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt index 539020d52db5..d4d84c138b20 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt @@ -34,6 +34,7 @@ interface StatusEvent { // Whether or not to show an animation for this event val showAnimation: Boolean val viewCreator: (context: Context) -> View + var contentDescription: String? // Update this event with values from another event. fun updateFromEvent(other: StatusEvent?) { @@ -50,6 +51,7 @@ class BatteryEvent : StatusEvent { override val priority = 50 override val forceVisible = false override val showAnimation = true + override var contentDescription: String? = "" override val viewCreator: (context: Context) -> View = { context -> val iv = ImageView(context) @@ -62,7 +64,9 @@ class BatteryEvent : StatusEvent { return javaClass.simpleName } } + class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent { + override var contentDescription: String? = null override val priority = 100 override val forceVisible = true var privacyItems: List<PrivacyItem> = listOf() @@ -72,6 +76,7 @@ class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent { val v = LayoutInflater.from(context) .inflate(R.layout.ongoing_privacy_chip, null) as OngoingPrivacyChip v.privacyList = privacyItems + v.contentDescription = contentDescription privacyChip = v v } @@ -81,7 +86,9 @@ class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent { } override fun shouldUpdateFromEvent(other: StatusEvent?): Boolean { - return other is PrivacyEvent && other.privacyItems != privacyItems + return other is PrivacyEvent && + (other.privacyItems != privacyItems || + other.contentDescription != contentDescription) } override fun updateFromEvent(other: StatusEvent?) { @@ -90,6 +97,9 @@ class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent { } privacyItems = other.privacyItems + contentDescription = other.contentDescription + + privacyChip?.contentDescription = other.contentDescription privacyChip?.privacyList = other.privacyItems } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt index b861c1db9b8b..7291b5a8be3b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt @@ -34,8 +34,7 @@ import com.android.systemui.statusbar.phone.StatusBarWindowView import javax.inject.Inject /** - * //TODO: this _probably_ doesn't control a window anymore - * Controls the window for system event animations. + * Controls the view for system event animations. */ class SystemEventChipAnimationController @Inject constructor( private val context: Context, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt index ba50659f5567..04f7492e8562 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt @@ -16,9 +16,12 @@ package com.android.systemui.statusbar.events +import android.content.Context import android.provider.DeviceConfig import android.provider.DeviceConfig.NAMESPACE_PRIVACY +import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.privacy.PrivacyChipBuilder import com.android.systemui.privacy.PrivacyItem import com.android.systemui.privacy.PrivacyItemController import com.android.systemui.statusbar.policy.BatteryController @@ -33,7 +36,8 @@ import javax.inject.Inject class SystemEventCoordinator @Inject constructor( private val systemClock: SystemClock, private val batteryController: BatteryController, - private val privacyController: PrivacyItemController + private val privacyController: PrivacyItemController, + private val context: Context ) { private lateinit var scheduler: SystemStatusAnimationScheduler @@ -66,6 +70,11 @@ class SystemEventCoordinator @Inject constructor( fun notifyPrivacyItemsChanged(showAnimation: Boolean = true) { val event = PrivacyEvent(showAnimation) event.privacyItems = privacyStateListener.currentPrivacyItems + event.contentDescription = { + val items = PrivacyChipBuilder(context, event.privacyItems).joinTypes() + context.getString( + R.string.ongoing_privacy_chip_content_multiple_apps, items) + }() scheduler.onStatusEvent(event) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt index f30010cf4d1c..f1610d866f34 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt @@ -100,17 +100,20 @@ class SystemStatusAnimationScheduler @Inject constructor( // Don't deal with threading for now (no need let's be honest) Assert.isMainThread() - if (event.priority > scheduledEvent?.priority ?: -1 || - scheduledEvent?.shouldUpdateFromEvent(event) == true) { + if ((event.priority > scheduledEvent?.priority ?: -1) && + animationState != ANIMATING_OUT && + (animationState != SHOWING_PERSISTENT_DOT && event.forceVisible)) { + // events can only be scheduled if a higher priority or no other event is in progress if (DEBUG) { Log.d(TAG, "scheduling event $event") } - if (event.showAnimation) { - scheduleEvent(event) - } else if (event.forceVisible) { - hasPersistentDot = true - notifyTransitionToPersistentDot() + + scheduleEvent(event) + } else if (scheduledEvent?.shouldUpdateFromEvent(event) == true) { + if (DEBUG) { + Log.d(TAG, "updating current event from: $event") } + scheduledEvent?.updateFromEvent(event) } else { if (DEBUG) { Log.d(TAG, "ignoring event $event") @@ -142,22 +145,16 @@ class SystemStatusAnimationScheduler @Inject constructor( * Clear the scheduled event (if any) and schedule a new one */ private fun scheduleEvent(event: StatusEvent) { - if (animationState == ANIMATING_OUT || - (animationState == SHOWING_PERSISTENT_DOT && event.forceVisible)) { - // do not schedule an event or change the current one - return - } + scheduledEvent = event - // If we are showing the chip, possibly update the current event, rather than replacing - if (scheduledEvent?.shouldUpdateFromEvent(event) == true) { - scheduledEvent?.updateFromEvent(event) - return - } else { - scheduledEvent = event + if (event.forceVisible) { + hasPersistentDot = true } - if (scheduledEvent!!.forceVisible) { - hasPersistentDot = true + // If animations are turned off, we'll transition directly to the dot + if (!event.showAnimation && event.forceVisible) { + notifyTransitionToPersistentDot() + return } // Schedule the animation to start after a debounce period @@ -218,7 +215,7 @@ class SystemStatusAnimationScheduler @Inject constructor( private fun notifyTransitionToPersistentDot(): Animator? { val anims: List<Animator> = listeners.mapNotNull { - it.onSystemStatusAnimationTransitionToPersistentDot() + it.onSystemStatusAnimationTransitionToPersistentDot(scheduledEvent?.contentDescription) } if (anims.isNotEmpty()) { val aSet = AnimatorSet() @@ -346,7 +343,10 @@ interface SystemStatusAnimationCallback { @JvmDefault fun onSystemChromeAnimationEnd() {} // Best method name, change my mind - @JvmDefault fun onSystemStatusAnimationTransitionToPersistentDot(): Animator? { return null } + @JvmDefault + fun onSystemStatusAnimationTransitionToPersistentDot(contentDescription: String?): Animator? { + return null + } @JvmDefault fun onHidePersistentDot(): Animator? { return null } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt index 7c045c1f2894..a7b14460f925 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt @@ -69,7 +69,6 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Mock private lateinit var root: View @Mock private lateinit var viewRootImpl: ViewRootImpl @Mock private lateinit var windowToken: IBinder - @Mock private lateinit var shadeSpring: NotificationShadeDepthController.DepthAnimation @Mock private lateinit var shadeAnimation: NotificationShadeDepthController.DepthAnimation @Mock private lateinit var brightnessSpring: NotificationShadeDepthController.DepthAnimation @Mock private lateinit var listener: NotificationShadeDepthController.DepthListener @@ -89,10 +88,10 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { `when`(root.isAttachedToWindow).thenReturn(true) `when`(statusBarStateController.state).then { statusBarState } `when`(blurUtils.blurRadiusOfRatio(anyFloat())).then { answer -> - (answer.arguments[0] as Float * maxBlur).toInt() + answer.arguments[0] as Float * maxBlur.toFloat() } - `when`(blurUtils.ratioOfBlurRadius(anyInt())).then { answer -> - answer.arguments[0] as Int / maxBlur.toFloat() + `when`(blurUtils.ratioOfBlurRadius(anyFloat())).then { answer -> + answer.arguments[0] as Float / maxBlur.toFloat() } `when`(blurUtils.supportsBlursOnWindows()).thenReturn(true) `when`(blurUtils.maxBlurRadius).thenReturn(maxBlur) @@ -102,7 +101,6 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { statusBarStateController, blurUtils, biometricUnlockController, keyguardStateController, choreographer, wallpaperManager, notificationShadeWindowController, dozeParameters, dumpManager) - notificationShadeDepthController.shadeSpring = shadeSpring notificationShadeDepthController.shadeAnimation = shadeAnimation notificationShadeDepthController.brightnessMirrorSpring = brightnessSpring notificationShadeDepthController.root = root @@ -123,7 +121,6 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { fun onPanelExpansionChanged_apliesBlur_ifShade() { notificationShadeDepthController.onPanelExpansionChanged(1f /* expansion */, false /* tracking */) - verify(shadeSpring).animateTo(eq(maxBlur), any()) verify(shadeAnimation).animateTo(eq(maxBlur), any()) } @@ -172,12 +169,10 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Test fun onStateChanged_reevalutesBlurs_ifSameRadiusAndNewState() { onPanelExpansionChanged_apliesBlur_ifShade() - clearInvocations(shadeSpring) - clearInvocations(shadeAnimation) + clearInvocations(choreographer) statusBarState = StatusBarState.KEYGUARD statusBarStateListener.onStateChanged(statusBarState) - verify(shadeSpring).animateTo(eq(0), any()) verify(shadeAnimation).animateTo(eq(0), any()) } @@ -186,7 +181,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { notificationShadeDepthController.qsPanelExpansion = 1f notificationShadeDepthController.onPanelExpansionChanged(0.5f, tracking = false) notificationShadeDepthController.updateBlurCallback.doFrame(0) - verify(blurUtils).applyBlur(any(), eq(maxBlur / 2), eq(false)) + verify(blurUtils).applyBlur(any(), anyInt(), eq(false)) } @Test @@ -207,10 +202,10 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { fun setFullShadeTransition_appliesBlur_onlyIfSupported() { reset(blurUtils) `when`(blurUtils.blurRadiusOfRatio(anyFloat())).then { answer -> - (answer.arguments[0] as Float * maxBlur).toInt() + answer.arguments[0] as Float * maxBlur } - `when`(blurUtils.ratioOfBlurRadius(anyInt())).then { answer -> - answer.arguments[0] as Int / maxBlur.toFloat() + `when`(blurUtils.ratioOfBlurRadius(anyFloat())).then { answer -> + answer.arguments[0] as Float / maxBlur.toFloat() } `when`(blurUtils.maxBlurRadius).thenReturn(maxBlur) `when`(blurUtils.maxBlurRadius).thenReturn(maxBlur) @@ -239,16 +234,16 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Test fun updateBlurCallback_setsBlur_whenExpanded() { - `when`(shadeSpring.radius).thenReturn(maxBlur) - `when`(shadeAnimation.radius).thenReturn(maxBlur) + notificationShadeDepthController.onPanelExpansionChanged(1f, false) + `when`(shadeAnimation.radius).thenReturn(maxBlur.toFloat()) notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) } @Test fun updateBlurCallback_ignoreShadeBlurUntilHidden_overridesZoom() { - `when`(shadeSpring.radius).thenReturn(maxBlur) - `when`(shadeAnimation.radius).thenReturn(maxBlur) + notificationShadeDepthController.onPanelExpansionChanged(1f, false) + `when`(shadeAnimation.radius).thenReturn(maxBlur.toFloat()) notificationShadeDepthController.blursDisabledForAppLaunch = true notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(blurUtils).applyBlur(any(), eq(0), eq(false)) @@ -293,8 +288,8 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { // Brightness mirror is fully visible `when`(brightnessSpring.ratio).thenReturn(1f) // And shade is blurred - `when`(shadeSpring.radius).thenReturn(maxBlur) - `when`(shadeAnimation.radius).thenReturn(maxBlur) + notificationShadeDepthController.onPanelExpansionChanged(1f, false) + `when`(shadeAnimation.radius).thenReturn(maxBlur.toFloat()) notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(notificationShadeWindowController).setBackgroundBlurRadius(eq(0)) @@ -304,10 +299,8 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Test fun ignoreShadeBlurUntilHidden_whennNull_ignoresIfShadeHasNoBlur() { - `when`(shadeSpring.radius).thenReturn(0) - `when`(shadeAnimation.radius).thenReturn(0) + `when`(shadeAnimation.radius).thenReturn(0f) notificationShadeDepthController.blursDisabledForAppLaunch = true - verify(shadeSpring, never()).animateTo(anyInt(), any()) verify(shadeAnimation, never()).animateTo(anyInt(), any()) } }
\ No newline at end of file |