Merge "Promote stable flicker tests (ime)" into sc-dev
diff --git a/StubLibraries.bp b/StubLibraries.bp
index b6c45ed..e82a322 100644
--- a/StubLibraries.bp
+++ b/StubLibraries.bp
@@ -54,7 +54,7 @@
},
api_lint: {
enabled: true,
- new_since: ":android-non-updatable.api.public.latest",
+ new_since: ":android.api.public.latest",
},
},
dists: [
@@ -109,7 +109,7 @@
},
api_lint: {
enabled: true,
- new_since: ":android-non-updatable.api.system.latest",
+ new_since: ":android.api.system.latest",
baseline_file: "core/api/system-lint-baseline.txt",
},
},
@@ -204,7 +204,7 @@
},
api_lint: {
enabled: true,
- new_since: ":android-non-updatable.api.module-lib.latest",
+ new_since: ":android.api.module-lib.latest",
},
},
dists: [
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 2bae190..6203239 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -838,6 +838,7 @@
public final class SharedLibraryInfo implements android.os.Parcelable {
method @NonNull public java.util.List<java.lang.String> getAllCodePaths();
+ method public boolean isNative();
}
public final class ShortcutInfo implements android.os.Parcelable {
@@ -1405,6 +1406,7 @@
method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int abandonAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String);
method @Nullable public static android.media.AudioDeviceInfo getDeviceInfoFromType(int);
method @IntRange(from=0) @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public long getFadeOutDurationOnFocusLossMillis(@NonNull android.media.AudioAttributes);
+ method @NonNull public java.util.Map<java.lang.Integer,java.lang.Boolean> getSurroundFormats();
method public boolean hasRegisteredDynamicPolicy();
method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.QUERY_AUDIO_STATE}) public boolean isFullVolumeDevice();
method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int requestAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String, int, int);
diff --git a/core/java/android/content/pm/SharedLibraryInfo.java b/core/java/android/content/pm/SharedLibraryInfo.java
index 13ff602..7abb694 100644
--- a/core/java/android/content/pm/SharedLibraryInfo.java
+++ b/core/java/android/content/pm/SharedLibraryInfo.java
@@ -147,6 +147,7 @@
*
* @hide
*/
+ @TestApi
public boolean isNative() {
return mIsNative;
}
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index fc9e5e2..f9cdbd3 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -517,6 +517,25 @@
}
/**
+ * Unregisters the IAccessibilityManagerClient from the backing service
+ * @hide
+ */
+ public boolean removeClient() {
+ synchronized (mLock) {
+ IAccessibilityManager service = getServiceLocked();
+ if (service == null) {
+ return false;
+ }
+ try {
+ return service.removeClient(mClient, mUserId);
+ } catch (RemoteException re) {
+ Log.e(LOG_TAG, "AccessibilityManagerService is dead", re);
+ }
+ }
+ return false;
+ }
+
+ /**
* @hide
*/
@VisibleForTesting
diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl
index c71ea53..078ab25 100644
--- a/core/java/android/view/accessibility/IAccessibilityManager.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl
@@ -42,6 +42,8 @@
long addClient(IAccessibilityManagerClient client, int userId);
+ boolean removeClient(IAccessibilityManagerClient client, int userId);
+
List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(int userId);
@UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 5e2209e..721260e 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -4575,7 +4575,7 @@
int motionPosition = findMotionRow(y);
if (isGlowActive()) {
// Pressed during edge effect, so this is considered the same as a fling catch.
- mTouchMode = TOUCH_MODE_FLING;
+ touchMode = mTouchMode = TOUCH_MODE_FLING;
} else if (touchMode != TOUCH_MODE_FLING && motionPosition >= 0) {
// User clicked on an actual view (and was not stopping a fling).
// Remember where the motion event started
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java
index 115c266..212fdca 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java
@@ -116,6 +116,13 @@
}
@Test
+ public void testRemoveManager() throws Exception {
+ AccessibilityManager manager = createManager(WITH_A11Y_ENABLED);
+ manager.removeClient();
+ verify(mMockService).removeClient(manager.getClient(), UserHandle.USER_CURRENT);
+ }
+
+ @Test
public void testGetAccessibilityServiceList() throws Exception {
// create a list of installed accessibility services the mock service returns
List<AccessibilityServiceInfo> expectedServices = new ArrayList<>();
diff --git a/libs/WindowManager/Shell/res/drawable/bubble_dismiss_circle.xml b/libs/WindowManager/Shell/res/drawable/bubble_dismiss_circle.xml
deleted file mode 100644
index 2104be4..0000000
--- a/libs/WindowManager/Shell/res/drawable/bubble_dismiss_circle.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
- ~ Copyright (C) 2020 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.
- -->
-<!--
- The transparent circle outline that encircles the bubbles when they're in the dismiss target.
--->
-<shape
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="oval">
-
- <stroke
- android:width="1dp"
- android:color="#66FFFFFF" />
-
- <solid android:color="#B3000000" />
-</shape>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/bubble_dismiss_icon.xml b/libs/WindowManager/Shell/res/drawable/bubble_dismiss_icon.xml
deleted file mode 100644
index ff8fede..0000000
--- a/libs/WindowManager/Shell/res/drawable/bubble_dismiss_icon.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
- ~ Copyright (C) 2020 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.
- -->
-<!-- The 'X' bubble dismiss icon. This is just ic_close with a stroke. -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24.0dp"
- android:height="24.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:pathData="M19.000000,6.400000l-1.400000,-1.400000 -5.600000,5.600000 -5.600000,-5.600000 -1.400000,1.400000 5.600000,5.600000 -5.600000,5.600000 1.400000,1.400000 5.600000,-5.600000 5.600000,5.600000 1.400000,-1.400000 -5.600000,-5.600000z"
- android:fillColor="#FFFFFFFF"
- android:strokeColor="#FF000000"/>
-</vector>
diff --git a/libs/WindowManager/Shell/res/drawable/dismiss_circle_background.xml b/libs/WindowManager/Shell/res/drawable/dismiss_circle_background.xml
index 7809c83..f7fda36 100644
--- a/libs/WindowManager/Shell/res/drawable/dismiss_circle_background.xml
+++ b/libs/WindowManager/Shell/res/drawable/dismiss_circle_background.xml
@@ -20,9 +20,8 @@
android:shape="oval">
<stroke
- android:width="1dp"
- android:color="#AAFFFFFF" />
+ android:width="2dp"
+ android:color="@android:color/system_accent1_600" />
- <solid android:color="#77000000" />
-
+ <solid android:color="@android:color/system_accent1_600" />
</shape>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/pip_ic_close_white.xml b/libs/WindowManager/Shell/res/drawable/pip_ic_close_white.xml
index 6045626..62285e6 100644
--- a/libs/WindowManager/Shell/res/drawable/pip_ic_close_white.xml
+++ b/libs/WindowManager/Shell/res/drawable/pip_ic_close_white.xml
@@ -21,5 +21,5 @@
android:viewportHeight="24.0">
<path
android:pathData="M19.000000,6.400000l-1.400000,-1.400000 -5.600000,5.600000 -5.600000,-5.600000 -1.400000,1.400000 5.600000,5.600000 -5.600000,5.600000 1.400000,1.400000 5.600000,-5.600000 5.600000,5.600000 1.400000,-1.400000 -5.600000,-5.600000z"
- android:fillColor="#FFFFFFFF"/>
+ android:fillColor="@android:color/system_neutral1_50"/>
</vector>
diff --git a/libs/WindowManager/Shell/res/layout/bubble_dismiss_target.xml b/libs/WindowManager/Shell/res/layout/bubble_dismiss_target.xml
deleted file mode 100644
index f5cd727..0000000
--- a/libs/WindowManager/Shell/res/layout/bubble_dismiss_target.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
- ~ Copyright (C) 2019 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
- -->
-<!-- Bubble dismiss target consisting of an X icon and the text 'Dismiss'. -->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/floating_dismiss_gradient_height"
- android:layout_gravity="bottom|center_horizontal">
-
- <FrameLayout
- android:id="@+id/bubble_dismiss_circle"
- android:layout_width="@dimen/bubble_dismiss_encircle_size"
- android:layout_height="@dimen/bubble_dismiss_encircle_size"
- android:layout_gravity="center"
- android:background="@drawable/bubble_dismiss_circle" />
-
- <LinearLayout
- android:id="@+id/bubble_dismiss_icon_container"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:gravity="center"
- android:paddingBottom="@dimen/bubble_dismiss_target_padding_y"
- android:paddingTop="@dimen/bubble_dismiss_target_padding_y"
- android:paddingLeft="@dimen/bubble_dismiss_target_padding_x"
- android:paddingRight="@dimen/bubble_dismiss_target_padding_x"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:orientation="horizontal">
-
- <ImageView
- android:id="@+id/bubble_dismiss_close_icon"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:src="@drawable/bubble_dismiss_icon" />
- </LinearLayout>
-</FrameLayout>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml
index 3caff35..dddf2c1 100644
--- a/libs/WindowManager/Shell/res/values/dimen.xml
+++ b/libs/WindowManager/Shell/res/values/dimen.xml
@@ -15,7 +15,8 @@
limitations under the License.
-->
<resources>
- <dimen name="dismiss_circle_size">52dp</dimen>
+ <dimen name="dismiss_circle_size">96dp</dimen>
+ <dimen name="dismiss_circle_small">60dp</dimen>
<!-- The height of the gradient indicating the dismiss edge when moving a PIP. -->
<dimen name="floating_dismiss_gradient_height">250dp</dimen>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
index 7e48a7e..d821c6f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
@@ -34,10 +34,7 @@
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
-import android.graphics.ColorMatrix;
-import android.graphics.ColorMatrixColorFilter;
import android.graphics.Outline;
-import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
@@ -192,8 +189,7 @@
private final BubbleController mBubbleController;
private final BubbleData mBubbleData;
- private final ValueAnimator mDesaturateAndDarkenAnimator;
- private final Paint mDesaturateAndDarkenPaint = new Paint();
+ private final ValueAnimator mDismissBubbleAnimator;
private PhysicsAnimationLayout mBubbleContainer;
private StackAnimationController mStackAnimationController;
@@ -330,8 +326,8 @@
private boolean mIsExpansionAnimating = false;
private boolean mIsBubbleSwitchAnimating = false;
- /** The view to desaturate/darken when magneted to the dismiss target. */
- @Nullable private View mDesaturateAndDarkenTargetView;
+ /** The view to shrink and apply alpha to when magneted to the dismiss target. */
+ @Nullable private View mViewBeingDismissed;
private Rect mTempRect = new Rect();
@@ -415,8 +411,7 @@
if (mExpandedAnimationController.getDraggedOutBubble() == null) {
return;
}
-
- animateDesaturateAndDarken(
+ animateDismissBubble(
mExpandedAnimationController.getDraggedOutBubble(), true);
}
@@ -426,8 +421,7 @@
if (mExpandedAnimationController.getDraggedOutBubble() == null) {
return;
}
-
- animateDesaturateAndDarken(
+ animateDismissBubble(
mExpandedAnimationController.getDraggedOutBubble(), false);
if (wasFlungOut) {
@@ -459,14 +453,13 @@
@Override
public void onStuckToTarget(
@NonNull MagnetizedObject.MagneticTarget target) {
- animateDesaturateAndDarken(mBubbleContainer, true);
+ animateDismissBubble(mBubbleContainer, true);
}
@Override
public void onUnstuckFromTarget(@NonNull MagnetizedObject.MagneticTarget target,
float velX, float velY, boolean wasFlungOut) {
- animateDesaturateAndDarken(mBubbleContainer, false);
-
+ animateDismissBubble(mBubbleContainer, false);
if (wasFlungOut) {
mStackAnimationController.flingStackThenSpringToEdge(
mStackAnimationController.getStackPosition().x, velX, velY);
@@ -481,11 +474,10 @@
mStackAnimationController.animateStackDismissal(
mDismissView.getHeight() /* translationYBy */,
() -> {
- resetDesaturationAndDarken();
+ resetDismissAnimator();
dismissMagnetizedObject();
}
);
-
mDismissView.hide();
}
};
@@ -836,17 +828,7 @@
.setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY));
mFlyoutTransitionSpring.addEndListener(mAfterFlyoutTransitionSpring);
- mDismissView = new DismissView(context);
- addView(mDismissView);
-
- final ContentResolver contentResolver = getContext().getContentResolver();
- final int dismissRadius = Settings.Secure.getInt(
- contentResolver, "bubble_dismiss_radius", mBubbleSize * 2 /* default */);
-
- // Save the MagneticTarget instance for the newly set up view - we'll add this to the
- // MagnetizedObjects.
- mMagneticTarget = new MagnetizedObject.MagneticTarget(
- mDismissView.getCircle(), dismissRadius);
+ setUpDismissView();
setClipChildren(false);
setFocusable(true);
@@ -891,6 +873,7 @@
mRelativeStackPositionBeforeRotation = null;
}
+ setUpDismissView();
if (mIsExpanded) {
// Re-draw bubble row and pointer for new orientation.
beforeExpandedViewAnimation();
@@ -905,30 +888,23 @@
}
removeOnLayoutChangeListener(mOrientationChangedListener);
};
-
- final ColorMatrix animatedMatrix = new ColorMatrix();
- final ColorMatrix darkenMatrix = new ColorMatrix();
-
- mDesaturateAndDarkenAnimator = ValueAnimator.ofFloat(1f, 0f);
- mDesaturateAndDarkenAnimator.addUpdateListener(animation -> {
+ final float maxDismissSize = getResources().getDimensionPixelSize(
+ R.dimen.dismiss_circle_size);
+ final float minDismissSize = getResources().getDimensionPixelSize(
+ R.dimen.dismiss_circle_small);
+ final float sizePercent = minDismissSize / maxDismissSize;
+ mDismissBubbleAnimator = ValueAnimator.ofFloat(1f, 0f);
+ mDismissBubbleAnimator.addUpdateListener(animation -> {
final float animatedValue = (float) animation.getAnimatedValue();
- animatedMatrix.setSaturation(animatedValue);
-
- final float animatedDarkenValue = (1f - animatedValue) * DARKEN_PERCENT;
- darkenMatrix.setScale(
- 1f - animatedDarkenValue /* red */,
- 1f - animatedDarkenValue /* green */,
- 1f - animatedDarkenValue /* blue */,
- 1f /* alpha */);
-
- // Concat the matrices so that the animatedMatrix both desaturates and darkens.
- animatedMatrix.postConcat(darkenMatrix);
-
- // Update the paint and apply it to the bubble container.
- mDesaturateAndDarkenPaint.setColorFilter(new ColorMatrixColorFilter(animatedMatrix));
-
- if (mDesaturateAndDarkenTargetView != null) {
- mDesaturateAndDarkenTargetView.setLayerPaint(mDesaturateAndDarkenPaint);
+ if (mDismissView != null) {
+ mDismissView.setPivotX((mDismissView.getRight() - mDismissView.getLeft()) / 2f);
+ mDismissView.setPivotY((mDismissView.getBottom() - mDismissView.getTop()) / 2f);
+ final float scaleValue = Math.max(animatedValue, sizePercent);
+ mDismissView.getCircle().setScaleX(scaleValue);
+ mDismissView.getCircle().setScaleY(scaleValue);
+ }
+ if (mViewBeingDismissed != null) {
+ mViewBeingDismissed.setAlpha(Math.max(animatedValue, 0.7f));
}
});
@@ -1048,6 +1024,23 @@
}
};
+ private void setUpDismissView() {
+ if (mDismissView != null) {
+ removeView(mDismissView);
+ }
+ mDismissView = new DismissView(getContext());
+ addView(mDismissView);
+
+ final ContentResolver contentResolver = getContext().getContentResolver();
+ final int dismissRadius = Settings.Secure.getInt(
+ contentResolver, "bubble_dismiss_radius", mBubbleSize * 2 /* default */);
+
+ // Save the MagneticTarget instance for the newly set up view - we'll add this to the
+ // MagnetizedObjects.
+ mMagneticTarget = new MagnetizedObject.MagneticTarget(
+ mDismissView.getCircle(), dismissRadius);
+ }
+
// TODO: Create ManageMenuView and move setup / animations there
private void setUpManageMenu() {
if (mManageMenu != null) {
@@ -1217,6 +1210,7 @@
public void onThemeChanged() {
setUpFlyout();
setUpManageMenu();
+ setUpDismissView();
updateOverflow();
updateUserEdu();
updateExpandedViewTheme();
@@ -1256,6 +1250,7 @@
updateOverflow();
setUpManageMenu();
setUpFlyout();
+ setUpDismissView();
mBubbleSize = mPositioner.getBubbleSize();
for (Bubble b : mBubbleData.getBubbles()) {
if (b.getIconView() == null) {
@@ -2264,42 +2259,46 @@
}
}
- /** Prepares and starts the desaturate/darken animation on the bubble stack. */
- private void animateDesaturateAndDarken(View targetView, boolean desaturateAndDarken) {
- mDesaturateAndDarkenTargetView = targetView;
+ /** Prepares and starts the dismiss animation on the bubble stack. */
+ private void animateDismissBubble(View targetView, boolean applyAlpha) {
+ mViewBeingDismissed = targetView;
- if (mDesaturateAndDarkenTargetView == null) {
+ if (mViewBeingDismissed == null) {
return;
}
-
- if (desaturateAndDarken) {
- // Use the animated paint for the bubbles.
- mDesaturateAndDarkenTargetView.setLayerType(
- View.LAYER_TYPE_HARDWARE, mDesaturateAndDarkenPaint);
- mDesaturateAndDarkenAnimator.removeAllListeners();
- mDesaturateAndDarkenAnimator.start();
+ if (applyAlpha) {
+ mDismissBubbleAnimator.removeAllListeners();
+ mDismissBubbleAnimator.start();
} else {
- mDesaturateAndDarkenAnimator.removeAllListeners();
- mDesaturateAndDarkenAnimator.addListener(new AnimatorListenerAdapter() {
+ mDismissBubbleAnimator.removeAllListeners();
+ mDismissBubbleAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
- // Stop using the animated paint.
- resetDesaturationAndDarken();
+ resetDismissAnimator();
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ super.onAnimationCancel(animation);
+ resetDismissAnimator();
}
});
- mDesaturateAndDarkenAnimator.reverse();
+ mDismissBubbleAnimator.reverse();
}
}
- private void resetDesaturationAndDarken() {
+ private void resetDismissAnimator() {
+ mDismissBubbleAnimator.removeAllListeners();
+ mDismissBubbleAnimator.cancel();
- mDesaturateAndDarkenAnimator.removeAllListeners();
- mDesaturateAndDarkenAnimator.cancel();
-
- if (mDesaturateAndDarkenTargetView != null) {
- mDesaturateAndDarkenTargetView.setLayerType(View.LAYER_TYPE_NONE, null);
- mDesaturateAndDarkenTargetView = null;
+ if (mViewBeingDismissed != null) {
+ mViewBeingDismissed.setAlpha(1f);
+ mViewBeingDismissed = null;
+ }
+ if (mDismissView != null) {
+ mDismissView.getCircle().setScaleX(1f);
+ mDismissView.getCircle().setScaleY(1f);
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/DismissView.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/DismissView.kt
index 04b5ad6..0a1cd22 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/DismissView.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/DismissView.kt
@@ -67,8 +67,6 @@
fun show() {
if (isShowing) return
isShowing = true
- bringToFront()
- setZ(Short.MAX_VALUE - 1f)
setVisibility(View.VISIBLE)
(getBackground() as TransitionDrawable).startTransition(DISMISS_SCRIM_FADE_MS)
animator.cancel()
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
index 0049461..e1b198c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
@@ -379,6 +379,10 @@
}
}
+ public SurfaceControl getSurfaceControl() {
+ return mLeash;
+ }
+
private void setBoundsStateForEntry(ComponentName componentName, PictureInPictureParams params,
ActivityInfo activityInfo) {
mPipBoundsState.setBoundsStateForEntry(componentName,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java
index c26b686..1da9577 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java
@@ -26,8 +26,10 @@
import android.graphics.drawable.TransitionDrawable;
import android.view.Gravity;
import android.view.MotionEvent;
+import android.view.SurfaceControl;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.FrameLayout;
@@ -47,7 +49,7 @@
/**
* Handler of all Magnetized Object related code for PiP.
*/
-public class PipDismissTargetHandler {
+public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListener {
/* The multiplier to apply scale the target size by when applying the magnetic field radius */
private static final float MAGNETIC_FIELD_RADIUS_MULTIPLIER = 1.25f;
@@ -92,6 +94,9 @@
private int mDismissAreaHeight;
private float mMagneticFieldRadiusPercent = 1f;
+ private SurfaceControl mTaskLeash;
+ private boolean mHasDismissTargetSurface;
+
private final Context mContext;
private final PipMotionHelper mMotionHelper;
private final PipUiEventLogger mPipUiEventLogger;
@@ -167,6 +172,14 @@
mMagneticTargetAnimator = PhysicsAnimator.getInstance(mTargetView);
}
+ @Override
+ public boolean onPreDraw() {
+ mTargetViewContainer.getViewTreeObserver().removeOnPreDrawListener(this);
+ mHasDismissTargetSurface = true;
+ updateDismissTargetLayer();
+ return true;
+ }
+
/**
* Potentially start consuming future motion events if PiP is currently near the magnetized
* object.
@@ -207,12 +220,31 @@
* MAGNETIC_FIELD_RADIUS_MULTIPLIER));
}
+ public void setTaskLeash(SurfaceControl taskLeash) {
+ mTaskLeash = taskLeash;
+ }
+
+ private void updateDismissTargetLayer() {
+ if (!mHasDismissTargetSurface || mTaskLeash == null) {
+ // No dismiss target surface, can just return
+ return;
+ }
+
+ // Put the dismiss target behind the task
+ SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+ t.setRelativeLayer(mTargetViewContainer.getViewRootImpl().getSurfaceControl(),
+ mTaskLeash, -1);
+ t.apply();
+ }
+
/** Adds the magnetic target view to the WindowManager so it's ready to be animated in. */
public void createOrUpdateDismissTarget() {
if (!mTargetViewContainer.isAttachedToWindow()) {
mMagneticTargetAnimator.cancel();
mTargetViewContainer.setVisibility(View.INVISIBLE);
+ mTargetViewContainer.getViewTreeObserver().removeOnPreDrawListener(this);
+ mHasDismissTargetSurface = false;
try {
mWindowManager.addView(mTargetViewContainer, getDismissTargetLayoutParams());
@@ -259,9 +291,9 @@
createOrUpdateDismissTarget();
if (mTargetViewContainer.getVisibility() != View.VISIBLE) {
-
mTargetView.setTranslationY(mTargetViewContainer.getHeight());
mTargetViewContainer.setVisibility(View.VISIBLE);
+ mTargetViewContainer.getViewTreeObserver().addOnPreDrawListener(this);
// Cancel in case we were in the middle of animating it out.
mMagneticTargetAnimator.cancel();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java
index 15e7f07..604ebc0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java
@@ -40,6 +40,7 @@
import androidx.dynamicanimation.animation.AnimationHandler;
import androidx.dynamicanimation.animation.AnimationHandler.FrameCallbackScheduler;
+import com.android.wm.shell.R;
import com.android.wm.shell.animation.FloatProperties;
import com.android.wm.shell.animation.PhysicsAnimator;
import com.android.wm.shell.common.FloatingContentCoordinator;
@@ -71,6 +72,8 @@
/** Friction to use for PIP when it moves via physics fling animations. */
private static final float DEFAULT_FRICTION = 1.9f;
+ /** How much of the dismiss circle size to use when scaling down PIP. **/
+ private static final float DISMISS_CIRCLE_PERCENT = 0.85f;
private final Context mContext;
private final PipTaskOrganizer mPipTaskOrganizer;
@@ -296,9 +299,17 @@
boolean flung, Function0<Unit> after) {
final PointF targetCenter = target.getCenterOnScreen();
- final float desiredWidth = getBounds().width() / 2;
- final float desiredHeight = getBounds().height() / 2;
+ // PIP should fit in the circle
+ final float dismissCircleSize = mContext.getResources().getDimensionPixelSize(
+ R.dimen.dismiss_circle_size);
+ final float width = getBounds().width();
+ final float height = getBounds().height();
+ final float ratio = width / height;
+
+ // Width should be a little smaller than the circle size.
+ final float desiredWidth = dismissCircleSize * DISMISS_CIRCLE_PERCENT;
+ final float desiredHeight = desiredWidth / ratio;
final float destinationX = targetCenter.x - (desiredWidth / 2f);
final float destinationY = targetCenter.y - (desiredHeight / 2f);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
index f0ea465..b1086c5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
@@ -75,6 +75,7 @@
private final @NonNull PipBoundsState mPipBoundsState;
private final PipUiEventLogger mPipUiEventLogger;
private final PipDismissTargetHandler mPipDismissTargetHandler;
+ private final PipTaskOrganizer mPipTaskOrganizer;
private final ShellExecutor mMainExecutor;
private PipResizeGestureHandler mPipResizeGestureHandler;
@@ -173,6 +174,7 @@
mAccessibilityManager = context.getSystemService(AccessibilityManager.class);
mPipBoundsAlgorithm = pipBoundsAlgorithm;
mPipBoundsState = pipBoundsState;
+ mPipTaskOrganizer = pipTaskOrganizer;
mMenuController = menuController;
mPipUiEventLogger = pipUiEventLogger;
mFloatingContentCoordinator = floatingContentCoordinator;
@@ -799,6 +801,7 @@
mMovementWithinDismiss = touchState.getDownTouchPosition().y
>= mPipBoundsState.getMovementBounds().bottom;
mMotionHelper.setSpringingToTouch(false);
+ mPipDismissTargetHandler.setTaskLeash(mPipTaskOrganizer.getSurfaceControl());
// If the menu is still visible then just poke the menu
// so that it will timeout after the user stops touching it
@@ -847,6 +850,7 @@
@Override
public boolean onUp(PipTouchState touchState) {
mPipDismissTargetHandler.hideDismissTargetMaybe();
+ mPipDismissTargetHandler.setTaskLeash(null);
if (!touchState.isUserInteracting()) {
return false;
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index d317305..a0d93e9 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -680,6 +680,7 @@
frameInfo->set(FrameInfoIndex::FrameCompleted) = std::max(gpuCompleteTime,
frameInfo->get(FrameInfoIndex::SwapBuffersCompleted));
frameInfo->set(FrameInfoIndex::GpuCompleted) = gpuCompleteTime;
+ std::lock_guard(instance->mFrameMetricsReporterMutex);
instance->mJankTracker.finishFrame(*frameInfo, instance->mFrameMetricsReporter);
}
}
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index 4f8e4ca..6f90e81 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -170,6 +170,7 @@
if (mFrameMetricsReporter.get() != nullptr) {
mFrameMetricsReporter->removeObserver(observer);
if (!mFrameMetricsReporter->hasObservers()) {
+ std::lock_guard lock(mFrameMetricsReporterMutex);
mFrameMetricsReporter.reset(nullptr);
}
}
@@ -295,6 +296,7 @@
JankTracker mJankTracker;
FrameInfoVisualizer mProfiler;
std::unique_ptr<FrameMetricsReporter> mFrameMetricsReporter;
+ std::mutex mFrameMetricsReporterMutex;
std::set<RenderNode*> mPrefetchedLayers;
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index b7d5c7b..b7ea14e 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -7055,6 +7055,8 @@
* @return a map where the key is a surround format and
* the value indicates the surround format is enabled or not
*/
+ @TestApi
+ @NonNull
public Map<Integer, Boolean> getSurroundFormats() {
Map<Integer, Boolean> surroundFormats = new HashMap<>();
int status = AudioSystem.getSurroundFormats(surroundFormats);
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index 4c8a8fa..1a2a1ae 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -185,6 +185,7 @@
AudioRoutesInfo newAudioRoutes = null;
try {
+ mIsBluetoothA2dpOn = mAudioService.isBluetoothA2dpOn();
newAudioRoutes = mAudioService.startWatchingRoutes(mAudioRoutesObserver);
} catch (RemoteException e) {
}
diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-km/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-km/strings.xml
index cfe4d2b..5a4f074 100644
--- a/packages/SettingsLib/RestrictedLockUtils/res/values-km/strings.xml
+++ b/packages/SettingsLib/RestrictedLockUtils/res/values-km/strings.xml
@@ -18,5 +18,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="enabled_by_admin" msgid="6630472777476410137">"បើកដោយអ្នកគ្រប់គ្រង"</string>
- <string name="disabled_by_admin" msgid="4023569940620832713">"បិទដោយអ្នកគ្រប់គ្រង"</string>
+ <string name="disabled_by_admin" msgid="4023569940620832713">"បានបិទដោយអ្នកគ្រប់គ្រង"</string>
</resources>
diff --git a/packages/SettingsLib/SettingsTheme/res/values-night-v31/colors.xml b/packages/SettingsLib/SettingsTheme/res/values-night-v31/colors.xml
index df0e3e1d..426a2ba 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-night-v31/colors.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-night-v31/colors.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2020 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.
@@ -15,7 +15,7 @@
limitations under the License.
-->
-<resources xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
+<resources>
<!-- Material next thumb off color-->
<color name="settingslib_thumb_off_color">@android:color/system_neutral2_300</color>
@@ -24,4 +24,11 @@
<!-- Material next track off color-->
<color name="settingslib_track_off_color">@android:color/system_neutral1_700</color>
+
+ <!-- Dialog accent color -->
+ <color name="settingslib_dialog_accent">@android:color/system_accent1_100</color>
+ <!-- Dialog background color. -->
+ <color name="settingslib_dialog_background">@android:color/system_neutral1_800</color>
+ <!-- Dialog error color. -->
+ <color name="settingslib_dialog_colorError">#f28b82</color> <!-- Red 300 -->
</resources>
\ No newline at end of file
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v31/colors.xml b/packages/SettingsLib/SettingsTheme/res/values-v31/colors.xml
index 89e9a005..fcba6bd 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v31/colors.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v31/colors.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2020 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.
@@ -30,4 +30,11 @@
<!-- Material next track off color-->
<color name="settingslib_track_off_color">@android:color/system_neutral2_600</color>
+
+ <!-- Dialog accent color -->
+ <color name="settingslib_dialog_accent">@android:color/system_accent1_600</color>
+ <!-- Dialog background color -->
+ <color name="settingslib_dialog_background">@android:color/system_neutral1_800</color>
+ <!-- Dialog error color. -->
+ <color name="settingslib_dialog_colorError">#d93025</color> <!-- Red 600 -->
</resources>
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v31/themes.xml b/packages/SettingsLib/SettingsTheme/res/values-v31/themes.xml
index adf506d..b3378b20 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v31/themes.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v31/themes.xml
@@ -33,5 +33,20 @@
<!-- Set up edge-to-edge configuration for top app bar -->
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
+ <item name="colorControlNormal">?android:attr/colorControlNormal</item>
+ <!-- For AndroidX AlertDialog -->
+ <item name="alertDialogTheme">@style/Theme.AlertDialog.SettingsLib</item>
+ </style>
+
+ <style name="Theme.AlertDialog.SettingsLib" parent="@style/Theme.AppCompat.DayNight.Dialog.Alert">
+ <item name="colorAccent">@*android:color/accent_device_default_light</item>
+ <item name="android:colorError">@color/settingslib_dialog_colorError</item>
+ <item name="android:colorBackground">@color/settingslib_dialog_background</item>
+
+ <item name="android:windowSoftInputMode">adjustResize</item>
+ <item name="android:clipToPadding">true</item>
+ <item name="android:clipChildren">true</item>
+
+ <item name="dialogCornerRadius">@*android:dimen/config_dialogCornerRadius</item>
</style>
</resources>
\ No newline at end of file
diff --git a/packages/SettingsLib/SettingsTheme/res/values/themes.xml b/packages/SettingsLib/SettingsTheme/res/values/themes.xml
index e856aa1..6f25177 100644
--- a/packages/SettingsLib/SettingsTheme/res/values/themes.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values/themes.xml
@@ -26,5 +26,19 @@
<!-- Suppress the built-in action bar -->
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
+ <item name="colorControlNormal">?android:attr/colorControlNormal</item>
+ <!-- For AndroidX AlertDialog -->
+ <item name="alertDialogTheme">@style/Theme.AlertDialog.SettingsLib</item>
+ </style>
+
+ <style name="Theme.AlertDialog.SettingsLib" parent="@style/Theme.AppCompat.DayNight.Dialog.Alert">
+ <!-- TODO(b/189308264): fix the crash in Android R if set the attributes:
+ <item name="colorAccent">@*android:color/accent_device_default_light</item>
+ <item name="android:colorBackground">@color/settingslib_dialog_background</item>
+ <item name="dialogCornerRadius">@*android:dimen/config_dialogCornerRadius</item>
+ -->
+ <item name="android:windowSoftInputMode">adjustResize</item>
+ <item name="android:clipToPadding">true</item>
+ <item name="android:clipChildren">true</item>
</style>
</resources>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 822f8fd..6b16a29 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Wys snitgrense, kantlyne, ens."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Dwing RTL-uitlegrigting"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Dwing skermuitlegrigting na RTL vir alle locales"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Dwing 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Aktiveer 4x MSAA in OpenGL ES 2.0-programme"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Ontfout nie-reghoekige knipbedrywighede"</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 86f3993..9943bbb 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"የቅንጥብ ገደቦች፣ ጠርዞች፣ ወዘተ አሳይ"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"የቀኝ-ወደ-ግራ አቀማመጥ አቅጣጫ አስገድድ"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ለሁሉም አካባቢዎች የማያ ገጽ አቀማመጥ ከቀኝ-ወደ-ግራ እንዲሆን አስገድድ"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA አስገድድ"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"4x MSAA በ OpenGL ES 2.0 መተግበሪያዎች ውስጥ ያንቁ"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"አራት ማእዘን ያልሆኑ የቅንጥብ ክዋኔዎችን ስህተት አርም"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index f1d8396..8f146e0 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"عرض حدود وهوامش المقطع وما إلى ذلك"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"فرض اتجاه التنسيق ليكون من اليمين إلى اليسار"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"فرض اتجاه تنسيق الشاشة ليكون من اليمين إلى اليسار لجميع اللغات"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"فرض 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"تفعيل 4x MSAA في تطبيقات OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"تصحيح أخطاء عمليات القصاصات غير المستطيلة"</string>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index a539a57..de942a3 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ক্লিপ বাউণ্ড, মাৰ্জিন আদিসমূহ দেখুৱাওক"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"আৰটিএল চানেকিৰ দিশ বলেৰে সলনি কৰক"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"সকলো ভাষাৰ বাবে স্ক্ৰীণৰ চানেকিৰ দিশ RTLলৈ বলেৰে সলনি কৰক"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"বল ৪গুণ MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 এপত ৪গুণ MSAA সক্ষম কৰক"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"আয়তাকৃতিৰ নোহোৱা ক্লিপ প্ৰক্ৰিয়াসমূহ ডিবাগ কৰক"</string>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 890cfa20..aaa8753b 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -207,11 +207,11 @@
<string name="enable_adb" msgid="8072776357237289039">"USB debaq prosesi"</string>
<string name="enable_adb_summary" msgid="3711526030096574316">"USB qoşulu olan zaman debaq rejimi"</string>
<string name="clear_adb_keys" msgid="3010148733140369917">"USB debaq avtorizasiyasını ləğv edin"</string>
- <string name="enable_adb_wireless" msgid="6973226350963971018">"WiFi sazlaması"</string>
+ <string name="enable_adb_wireless" msgid="6973226350963971018">"Wi-Fi vasitəsilə sazlama"</string>
<string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Wi‑Fi qoşulduqda sazlama rejimi"</string>
<string name="adb_wireless_error" msgid="721958772149779856">"Xəta"</string>
- <string name="adb_wireless_settings" msgid="2295017847215680229">"WiFi sazlaması"</string>
- <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Əlçatan cihazları görmək və onlardan istifadə etmək üçün WiFi sazlamasını yandırın"</string>
+ <string name="adb_wireless_settings" msgid="2295017847215680229">"Wi-Fi vasitəsilə sazlama"</string>
+ <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Cihazları görmək və istifadə etmək üçün WiFi vasitəsilə sazlamanı işə salın"</string>
<string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"QR kodu ilə cihazı cütləşdirin"</string>
<string name="adb_pair_method_qrcode_summary" msgid="7130694277228970888">"QR kod skanerindən istifadə etməklə yeni cihazları birləşdirin"</string>
<string name="adb_pair_method_code_title" msgid="1122590300445142904">"Qoşulma kodu ilə cihazı əlavə edin"</string>
@@ -223,10 +223,10 @@
<string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Cihaz barmaq izi: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
<string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Bağlantı uğursuz oldu"</string>
<string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazının düzgün şəbəkəyə qoşulduğundan əmin olun"</string>
- <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Cihaz ilə cütləşdirin"</string>
+ <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Cihaza qoşulma"</string>
<string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi qoşulma kodu"</string>
- <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Cütləşdirmə uğursuz oldu"</string>
- <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Cihazın eyni şəbəkəyə qoşulduğundan əmin olun."</string>
+ <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Qoşula bilmir"</string>
+ <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Eyni şəbəkəyə qoşulduğunu dəqiqləşdirin."</string>
<string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"QR kodu skanlamaqla cihazı Wi‑Fi vasitəsilə cütləşdirin"</string>
<string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Cihaz cütləşdirilir…"</string>
<string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Cihazı cütləşdirmək alınmadı. Ya QR kodu yanlış idi, ya da cihaz eyni şəbəkəyə qoşulmayıb."</string>
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Klip sərhədləri, boşluqları və s. göstər"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL düzən istiqamətinə məcbur edin"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Ekran düzən istiqamətini RTL üzərinə bütün yerli variantlar üçün məcbur edin"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA məcbur edin"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 tətbiqlərində 4x MSAA aktiv et"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Qeyri-düzbucaqlı klip əməliyyatlarını debaq edin"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index c681453..1edd95e 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -301,9 +301,9 @@
<string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Mobilni podaci su uvek aktivni, čak i kada je Wi‑Fi aktivan (radi brze promene mreže)."</string>
<string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Koristi se hardversko ubrzanje privezivanja ako je dostupno"</string>
<string name="adb_warning_title" msgid="7708653449506485728">"Dozvoli otklanjanje USB grešaka?"</string>
- <string name="adb_warning_message" msgid="8145270656419669221">"Otklanjanje USB grešaka namenjeno je samo za svrhe programiranja. Koristite ga za kopiranje podataka sa računara na uređaj i obrnuto, instaliranje aplikacija na uređaju bez obaveštenja i čitanje podataka iz evidencije."</string>
+ <string name="adb_warning_message" msgid="8145270656419669221">"Otklanjanje USB grešaka namenjeno je samo za svrhe programiranja. Koristite ga za kopiranje podataka sa računara na uređaj i obratno, instaliranje aplikacija na uređaju bez obaveštenja i čitanje podataka iz evidencije."</string>
<string name="adbwifi_warning_title" msgid="727104571653031865">"Želite da dozvolite bežično otklanjanje grešaka?"</string>
- <string name="adbwifi_warning_message" msgid="8005936574322702388">"Bežično otklanjanje grešaka namenjeno je samo programiranju. Koristite ga za kopiranje podataka sa računara na uređaj i obrnuto, instaliranje aplikacija na uređaju bez obaveštenja i čitanje podataka iz evidencije."</string>
+ <string name="adbwifi_warning_message" msgid="8005936574322702388">"Bežično otklanjanje grešaka namenjeno je samo programiranju. Koristite ga za kopiranje podataka sa računara na uređaj i obratno, instaliranje aplikacija na uređaju bez obaveštenja i čitanje podataka iz evidencije."</string>
<string name="adb_keys_warning_message" msgid="2968555274488101220">"Želite li da opozovete pristup otklanjanju USB grešaka sa svih računara koje ste prethodno odobrili?"</string>
<string name="dev_settings_warning_title" msgid="8251234890169074553">"Želite li da omogućite programerska podešavanja?"</string>
<string name="dev_settings_warning_message" msgid="37741686486073668">"Ova podešavanja su namenjena samo za programiranje. Mogu da izazovu prestanak funkcionisanja ili neočekivano ponašanje uređaja i aplikacija na njemu."</string>
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Prikazuje granice klipa, margine itd."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Nametni smer rasporeda zdesna nalevo"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Nameće smer rasporeda ekrana zdesna nalevo za sve lokalitete"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Nametni 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Omogućava 4x MSAA u OpenGL ES 2.0 aplikacijama"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Otkloni greške isecanja oblasti nepravougaonog oblika"</string>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index bc9afc9..d20e5da 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Паказаць межы абрэзкі, палі і г. д."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Прымусовая раскладка справа налева"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Прымусовая раскладка экрана справа налева для ўсіх рэгіянальных налад"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Прымусовае выкананне 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Уключыць 4x MSAA у праграмах з OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Адладка аперацый непрамавугольнага кліпа"</string>
@@ -466,7 +468,7 @@
<string name="disabled" msgid="8017887509554714950">"Адключанае"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Дазволена"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Забаронена"</string>
- <string name="install_other_apps" msgid="3232595082023199454">"Усталёўваць невядомыя праграмы"</string>
+ <string name="install_other_apps" msgid="3232595082023199454">"Усталёўка невядомых праграм"</string>
<string name="home" msgid="973834627243661438">"Галоўная старонка налад"</string>
<string-array name="battery_labels">
<item msgid="7878690469765357158">"0 %"</item>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index c39993d..d92256d 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Показв. на границите на изрязване, полетата и др."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Принуд. оформл. от дясно наляво"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Принудително оформление на екрана от дясно наляво за всички локали"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Задаване на 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Активиране на 4x MSAA в прилож. с OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Отстр. на грешки при неправоъг. изрязване"</string>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 0cf2a60..9c8eff4 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ক্লিপ বাউন্ড, মার্জিন ইত্যাদি দেখান"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL লেআউট দিকনির্দেশ জোর দিন"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"সমস্ত স্থানের জন্য RTL এ স্ক্রিন লেআউট দিকনির্দেশে জোর দেয়"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA-এ জোর দিন"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 অ্যাপের মধ্যে 4x MSAA চালু করুন"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"অ-আয়তক্ষেত্রাকার ক্লিপ অ্যাক্টিভিটি ডিবাগ করুন"</string>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 6e8d875..46921a4 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Prikaz granica isječka, margina itd."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Prisilno postavi raspored s desna ulijevo"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Prisilno postavljanje rasporeda ekrana s desna ulijevo za sve regije"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Prinudno primijeni 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Omogućava 4x MSAA u OpenGL ES 2.0 aplikacijama"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Otkl. greške na operac. nepravoug. isjecanja"</string>
@@ -425,7 +427,7 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalija (crveno-zeleno)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalija (plavo-žuto)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Ispravka boja"</string>
- <string name="accessibility_display_daltonizer_preference_subtitle" msgid="2333641630205214702">"Podešavanje načina na koji se boje prikazuju na uređaju. To može biti korisno kada želite:<br/><br/> <ol> <li>&nbsp;preciznije prikazati boje</li> <li>&nbsp;ukloniti boje da se lakše fokusirate</li> </ol>"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="2333641630205214702">"Podesite način na koji se boje prikazuju na uređaju. To može biti korisno kada želite:<br/><br/> <ol> <li>&nbsp;preciznije prikazati boje</li> <li>&nbsp;ukloniti boje da se lakše fokusirate</li> </ol>"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"Zamjenjuje <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> – <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"Preostalo je još oko <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index a2bfb3b..557e917 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Mostra els límits de clips, els marges, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Força direcció dreta-esquerra"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Força direcció de pantalla dreta-esquerra en totes les llengües"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Força MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Activa MSAA 4x en aplicacions d\'OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Depura operacions de retall no rectangulars"</string>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index b3ec470..2a3b085 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"U výstřižku zobrazit ohraničení, okraje atd."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Vynutit rozvržení zprava doleva"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Vynutit ve všech jazycích rozvržení obrazovky zprava doleva"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Vynutit 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Povolit 4x MSAA v aplikacích OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Ladit operace s neobdélníkovými výstřižky"</string>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index c285d37..d7c5d55 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Vis grænser for klip, margener osv."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Tving læsning mod venstre"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Gennemtving højre mod venstre-layout for alle sprog"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Gennemtving 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Aktivér 4x MSAA i apps med OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Fejlret på ikke-rektangulære klippehandlinger"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index f10a064..492c6de 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Zuschnittbegrenzungen, Ränder usw. anzeigen"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Linksläufiges Layout erzwingen"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Für alle Sprachen wird das linksläufige Bildschirmlayout verwendet"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA erzwingen"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"In OpenGL ES 2.0-Apps 4x MSAA aktivieren"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Nichtrechteckige Zuschnitte debuggen"</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index a52477b..19ccac6 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Εμφάνιση ορίων κλιπ, περιθωρίων, κλπ."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Επιβολή κατ. διάταξης RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Επιβολή διάταξης οθόν. RTL για όλες τις τοπ. ρυθμ."</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Αναγκαστικά 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Ενεργοποίηση 4x MSAA σε εφαρμογές OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Εντοπισμός σφαλμάτων σε λειτουργίες μη ορθογώνιας περιοχής"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index fb361f7..2caa3f7 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -353,6 +353,7 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Show clip bounds, margins, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Force RTL layout direction"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Force screen layout direction to RTL for all locales"</string>
+ <string name="window_blurs" msgid="6831008984828425106">"Allow window-level blurs"</string>
<string name="force_msaa" msgid="4081288296137775550">"Force 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Debug non-rectangular clip operations"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 27b805f..f307e16 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -353,6 +353,7 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Show clip bounds, margins, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Force RTL layout direction"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Force screen layout direction to RTL for all locales"</string>
+ <string name="window_blurs" msgid="6831008984828425106">"Allow window-level blurs"</string>
<string name="force_msaa" msgid="4081288296137775550">"Force 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Debug non-rectangular clip operations"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index fb361f7..2caa3f7 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -353,6 +353,7 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Show clip bounds, margins, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Force RTL layout direction"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Force screen layout direction to RTL for all locales"</string>
+ <string name="window_blurs" msgid="6831008984828425106">"Allow window-level blurs"</string>
<string name="force_msaa" msgid="4081288296137775550">"Force 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Debug non-rectangular clip operations"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index fb361f7..2caa3f7 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -353,6 +353,7 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Show clip bounds, margins, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Force RTL layout direction"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Force screen layout direction to RTL for all locales"</string>
+ <string name="window_blurs" msgid="6831008984828425106">"Allow window-level blurs"</string>
<string name="force_msaa" msgid="4081288296137775550">"Force 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Debug non-rectangular clip operations"</string>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index a16dba6..2d2b036 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -353,6 +353,7 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Show clip bounds, margins, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Force RTL layout direction"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Force screen layout direction to RTL for all locales"</string>
+ <string name="window_blurs" msgid="6831008984828425106">"Allow window-level blurs"</string>
<string name="force_msaa" msgid="4081288296137775550">"Force 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Debug non-rectangular clip operations"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index e3041c2..3ee5dab 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Mostrar límites de recortes, márgenes, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forzar diseño der. a izq."</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Forzar diseño de pantalla de derecha a izquierda para todos los idiomas"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forzar MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Activar MSAA 4x en aplicaciones OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Depurar operaciones de recorte no rectangulares"</string>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 1118cd1..d63ea7b 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Muestra límites de vídeo, márgenes, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forzar dirección de diseño RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Fuerza la dirección RTL para todos los idiomas"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forzar MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Habilita MSAA 4x en aplicaciones de OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Depurar operaciones de recorte no rectangulares"</string>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 67d1bc8..ed698e2 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Kuva klipi piirid, veerised jms"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Jõusta paremalt vasakule paigutus"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Jõusta kõikides lokaatides paremalt vasakule ekraanipaigutus"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Jõusta 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Luba 4x MSAA OpenGL ES 2.0 rakendustes"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Silu mittetäisnurksed kärpimistoimingud"</string>
@@ -503,12 +505,12 @@
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Lühem aeg."</string>
<string name="cancel" msgid="5665114069455378395">"Tühista"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
- <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Äratused ja meeldetuletused"</string>
- <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"Luba äratuste ja meeldetuletuste määramine"</string>
- <string name="alarms_and_reminders_title" msgid="8819933264635406032">"Äratused ja meeldetuletused"</string>
- <string name="alarms_and_reminders_footer_title" product="default" msgid="1122213569699233612">"Lubage sellel rakendusel määrata äratusi ja ajastada muid toiminguid. Seda rakendust võidakse kasutada ajal, kui te oma telefoni ei kasuta, ja see võib akukasutust suurendada. Kui see luba on välja lülitatud, ei pruugi see rakendus korralikult toimida ja selle äratused ei tööta ajakava järgi."</string>
- <string name="alarms_and_reminders_footer_title" product="tablet" msgid="4596201244991057839">"Lubage sellel rakendusel määrata äratusi ja ajastada muid toiminguid. Seda rakendust võidakse kasutada ajal, kui te oma tahvelarvutit ei kasuta, ja see võib akukasutust suurendada. Kui see luba on välja lülitatud, ei pruugi see rakendus korralikult toimida ja selle äratused ei tööta ajakava järgi."</string>
- <string name="alarms_and_reminders_footer_title" product="device" msgid="349578867821273761">"Lubage sellel rakendusel määrata äratusi ja ajastada muid toiminguid. Seda rakendust võidakse kasutada ajal, kui te oma seadet ei kasuta, ja see võib akukasutust suurendada. Kui see luba on välja lülitatud, ei pruugi see rakendus korralikult toimida ja selle äratused ei tööta ajakava järgi."</string>
+ <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmid ja meeldetuletused"</string>
+ <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"Luba alarmide ja meeldetuletuste määramine"</string>
+ <string name="alarms_and_reminders_title" msgid="8819933264635406032">"Alarmid ja meeldetuletused"</string>
+ <string name="alarms_and_reminders_footer_title" product="default" msgid="1122213569699233612">"Lubage sellel rakendusel määrata alarme ja ajastada muid toiminguid. Seda rakendust võidakse kasutada ajal, kui te oma telefoni ei kasuta, ja see võib akukasutust suurendada. Kui see luba on välja lülitatud, ei pruugi see rakendus korralikult toimida ja selle alarmid ei tööta ajakava järgi."</string>
+ <string name="alarms_and_reminders_footer_title" product="tablet" msgid="4596201244991057839">"Lubage sellel rakendusel määrata alarme ja ajastada muid toiminguid. Seda rakendust võidakse kasutada ajal, kui te oma tahvelarvutit ei kasuta, ja see võib akukasutust suurendada. Kui see luba on välja lülitatud, ei pruugi see rakendus korralikult toimida ja selle alarmid ei tööta ajakava järgi."</string>
+ <string name="alarms_and_reminders_footer_title" product="device" msgid="349578867821273761">"Lubage sellel rakendusel määrata alarme ja ajastada muid toiminguid. Seda rakendust võidakse kasutada ajal, kui te oma seadet ei kasuta, ja see võib akukasutust suurendada. Kui see luba on välja lülitatud, ei pruugi see rakendus korralikult toimida ja selle alarmid ei tööta ajakava järgi."</string>
<string name="keywords_alarms_and_reminders" msgid="6633360095891110611">"ajakava, äratus, meeldetuletus, kell"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="6418297231575050426">"Lülita sisse"</string>
<string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"Valiku Mitte segada sisselülitamine"</string>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 436c648..ebc62f2 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -240,7 +240,7 @@
<string name="keep_screen_on" msgid="1187161672348797558">"Mantendu aktibo"</string>
<string name="keep_screen_on_summary" msgid="1510731514101925829">"Pantaila ez da ezarriko inoiz inaktibo kargatu bitartean"</string>
<string name="bt_hci_snoop_log" msgid="7291287955649081448">"Gaitu Bluetooth HCI miatze-erregistroa"</string>
- <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Hauteman Bluetooth paketeak (aktibatu edo desaktibatu Bluetooth-a ezarpena aldatu ostean)."</string>
+ <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Hauteman Bluetooth paketeak (aktibatu edo desaktibatu Bluetooth-a ezarpena aldatu ostean)"</string>
<string name="oem_unlock_enable" msgid="5334869171871566731">"OEM desblokeoa"</string>
<string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Onartu abiarazlea desblokeatzea"</string>
<string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"OEM desblokeoa onartu nahi duzu?"</string>
@@ -283,7 +283,7 @@
<string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"Ezin izan da konektatu"</string>
<string name="wifi_display_certification_summary" msgid="8111151348106907513">"Erakutsi hari gabe bistaratzeko ziurtagiriaren aukerak"</string>
<string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Erakutsi datu gehiago wifi-sareetan saioa hastean. Erakutsi sarearen identifikatzailea eta seinalearen indarra wifi-sareen hautatzailean."</string>
- <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Bateria gutxiago kontsumituko da, eta sarearen errendimendua hobetuko."</string>
+ <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Bateria gutxiago kontsumituko da, eta sarearen errendimendua hobetuko"</string>
<string name="wifi_enhanced_mac_randomization_summary" msgid="1210663439867489931">"Modu hau gaituta dagoenean, baliteke gailuaren MAC helbidea aldatzea MAC helbideak ausaz antolatzeko aukera gaituta daukan sare batera konektatzen den bakoitzean."</string>
<string name="wifi_metered_label" msgid="8737187690304098638">"Sare neurtua"</string>
<string name="wifi_unmetered_label" msgid="6174142840934095093">"Neurtu gabeko sarea"</string>
@@ -307,7 +307,7 @@
<string name="adb_keys_warning_message" msgid="2968555274488101220">"Aurretik baimendutako ordenagailu guztiei USB bidezko arazketarako sarbidea baliogabetu nahi diezu?"</string>
<string name="dev_settings_warning_title" msgid="8251234890169074553">"Baimendu garapenerako ezarpenak?"</string>
<string name="dev_settings_warning_message" msgid="37741686486073668">"Ezarpen hauek garapen-xedeetarako pentsatu dira soilik. Baliteke ezarpenen eraginez gailua matxuratzea edo funtzionamendu okerra izatea."</string>
- <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Egiaztatu USBko aplikazioak"</string>
+ <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Egiaztatu USB bidezko aplik."</string>
<string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Egiaztatu ADB/ADT bidez instalatutako aplikazioak portaera kaltegarriak atzemateko"</string>
<string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Bluetooth bidezko gailuak izenik gabe (MAC helbideak soilik) erakutsiko dira"</string>
<string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Bluetooth bidezko bolumen absolutuaren eginbidea desgaitu egiten du urruneko gailuetan arazoak hautematen badira; esaterako, bolumena ozenegia bada edo ezin bada kontrolatu"</string>
@@ -331,7 +331,7 @@
<string name="media_category" msgid="8122076702526144053">"Multimedia-edukia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Kontrola"</string>
<string name="strict_mode" msgid="889864762140862437">"Modu zorrotza gaituta"</string>
- <string name="strict_mode_summary" msgid="1838248687233554654">"Egin distira hari nagusian eragiketa luzeak egitean"</string>
+ <string name="strict_mode_summary" msgid="1838248687233554654">"Distirarazi hari nagusian eragiketa luzeak egitean"</string>
<string name="pointer_location" msgid="7516929526199520173">"Erakuslearen kokapena"</string>
<string name="pointer_location_summary" msgid="957120116989798464">"Ukipen-datuak erakusteko pantaila-gainjartzea"</string>
<string name="show_touches" msgid="8437666942161289025">"Erakutsi sakatutakoa"</string>
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Erakutsi kliparen mugak, marjinak, etab."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Behartu eskuin-ezker norabidea"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Behartu pantaila-diseinuaren norabidea eskuin-ezker izatera lurraldeko ezarpen guztiekin"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Behartu 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Gaitu 4x MSAA, OpenGL ES 2.0 aplikazioetan"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Araztu angeluzuzenak ez diren klip-eragiketak"</string>
@@ -464,8 +466,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Kargatuta"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Administratzaileak kontrolatzen du"</string>
<string name="disabled" msgid="8017887509554714950">"Desgaituta"</string>
- <string name="external_source_trusted" msgid="1146522036773132905">"Baimena dauka"</string>
- <string name="external_source_untrusted" msgid="5037891688911672227">"Ez dauka baimenik"</string>
+ <string name="external_source_trusted" msgid="1146522036773132905">"Baimenduta"</string>
+ <string name="external_source_untrusted" msgid="5037891688911672227">"Baimendu gabe"</string>
<string name="install_other_apps" msgid="3232595082023199454">"Instalatu aplikazio ezezagunak"</string>
<string name="home" msgid="973834627243661438">"Ezarpenen hasierako pantaila"</string>
<string-array name="battery_labels">
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 85da015..00a18d3 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"نمایش مرزها، حاشیهها و ویژگیهای دیگر کلیپ."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"اجباری کردن چیدمان راستچین"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"اجباری کردن چیدمان راستچین صفحه برای همه زبانها"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"اجبار 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"فعال کردن 4X MSAA در برنامههای OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"اشکالزدایی عملکردهای کلیپ غیرمربعی"</string>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 74b0bdd..b3187a5 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Näytä leikkeiden rajat, marginaalit jne."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Pakota RTL-ulkoasun suunta"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Pakota kaikkien kielten näytön ulkoasun suunnaksi RTL"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Pakota 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Ota käyttöön 4x MSAA OpenGL ES 2.0 -sovelluksissa"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Korjaa ei-suorakulmaisten leiketoimintojen virheet"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 81c7b4b..b785165 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Afficher les limites, les marges de clip, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forcer droite à gauche"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Forcer l\'orientation droite à gauche (toutes langues)"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forcer MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Activer MSAA 4x dans les applications OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Déboguer opérations de découpage non rectangulaire"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 0a5c313..52c4ec2 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -38,7 +38,7 @@
<string name="saved_network" msgid="7143698034077223645">"Enregistré lors de : <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connecté au réseau facturé à l\'usage"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Connecté automatiquement via %1$s"</string>
- <string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Connecté automatiquement via un fournisseur d\'évaluation de l\'état du réseau"</string>
+ <string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Connecté automatiquement via un fournisseur d\'évaluation du réseau"</string>
<string name="connected_via_passpoint" msgid="7735442932429075684">"Connecté via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connecté via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1716000261192603682">"Disponible via %1$s"</string>
@@ -140,7 +140,7 @@
<string name="accessibility_wifi_signal_full" msgid="7165262794551355617">"Signal Wi-Fi excellent"</string>
<string name="accessibility_wifi_security_type_none" msgid="162352241518066966">"Réseau ouvert"</string>
<string name="accessibility_wifi_security_type_secured" msgid="2399774097343238942">"Réseau sécurisé"</string>
- <string name="process_kernel_label" msgid="950292573930336765">"Plate-forme Android"</string>
+ <string name="process_kernel_label" msgid="950292573930336765">"OS Android"</string>
<string name="data_usage_uninstalled_apps" msgid="1933665711856171491">"Applications supprimées"</string>
<string name="data_usage_uninstalled_apps_users" msgid="5533981546921913295">"Applications et utilisateurs supprimés"</string>
<string name="data_usage_ota" msgid="7984667793701597001">"Mises à jour du système"</string>
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Afficher les limites de coupe, les marges, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forcer écriture droite à gauche"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Forcer l\'orientation du texte de droite à gauche pour toutes les langues"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forcer MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Activer MSAA 4x dans les applications OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Déboguer découpage non rectangulaire"</string>
@@ -504,11 +506,11 @@
<string name="cancel" msgid="5665114069455378395">"Annuler"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes et rappels"</string>
- <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"Autoriser à définir une alarme et des rappels"</string>
+ <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"Autoriser à définir des alarmes et des rappels"</string>
<string name="alarms_and_reminders_title" msgid="8819933264635406032">"Alarmes et rappels"</string>
- <string name="alarms_and_reminders_footer_title" product="default" msgid="1122213569699233612">"Autorisez cette appli à définir des alarmes et à planifier d\'autres actions. Cette appli peut être utilisée quand vous n\'utilisez pas votre téléphone, ce qui peut consommer davantage de batterie. Si cette autorisation est désactivée, l\'appli peut ne pas fonctionner correctement, et les alarmes définies ne se déclencheront pas comme prévu."</string>
- <string name="alarms_and_reminders_footer_title" product="tablet" msgid="4596201244991057839">"Autorisez cette appli à définir des alarmes et à planifier d\'autres actions. Cette appli peut être utilisée lorsque vous n\'utilisez pas votre tablette, ce qui peut consommer davantage de batterie. Si cette autorisation est désactivée, l\'appli peut ne pas fonctionner correctement, et les alarmes définies ne se déclencheront pas comme prévu."</string>
- <string name="alarms_and_reminders_footer_title" product="device" msgid="349578867821273761">"Autorisez cette appli à définir des alarmes et à planifier d\'autres actions. Cette appli peut être utilisée lorsque vous n\'utilisez pas votre appareil, ce qui peut consommer davantage de batterie. Si cette autorisation est désactivée, l\'appli peut ne pas fonctionner correctement, et les alarmes définies ne se déclencheront pas comme prévu."</string>
+ <string name="alarms_and_reminders_footer_title" product="default" msgid="1122213569699233612">"Autoriser cette appli à définir des alarmes et à programmer d\'autres actions. Cette appli peut être utilisée quand vous n\'utilisez pas votre téléphone, ce qui peut consommer davantage de batterie. Si cette autorisation est désactivée, l\'appli peut ne pas fonctionner correctement, et les alarmes définies ne se déclencheront pas comme prévu."</string>
+ <string name="alarms_and_reminders_footer_title" product="tablet" msgid="4596201244991057839">"Autoriser cette appli à définir des alarmes et à programmer d\'autres actions. Cette appli peut être utilisée lorsque vous n\'utilisez pas votre tablette, ce qui peut consommer davantage de batterie. Si cette autorisation est désactivée, l\'appli peut ne pas fonctionner correctement, et les alarmes définies ne se déclencheront pas comme prévu."</string>
+ <string name="alarms_and_reminders_footer_title" product="device" msgid="349578867821273761">"Autoriser cette appli à définir des alarmes et à programmer d\'autres actions. Cette appli peut être utilisée quand vous n\'utilisez pas votre appareil, ce qui peut consommer davantage de batterie. Si cette autorisation est désactivée, l\'appli peut ne pas fonctionner correctement, et les alarmes définies ne se déclencheront pas comme prévu."</string>
<string name="keywords_alarms_and_reminders" msgid="6633360095891110611">"définir, alarme, rappel, horloge"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="6418297231575050426">"Activer"</string>
<string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"Activer le mode Ne pas déranger"</string>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 9d8235b..037a9a9 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Mostra os límites dos clips, as marxes etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forzar dirección do deseño RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Forza a dirección de pantalla a RTL (dereita a esquerda) para todas as configuración rexionais"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forzar MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Activa MSAA 4x en aplicacións OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Depurar accións recorte non rectangulares"</string>
@@ -464,8 +466,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Cargada"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Opción controlada polo administrador"</string>
<string name="disabled" msgid="8017887509554714950">"Desactivada"</string>
- <string name="external_source_trusted" msgid="1146522036773132905">"Con permiso"</string>
- <string name="external_source_untrusted" msgid="5037891688911672227">"Sen permiso"</string>
+ <string name="external_source_trusted" msgid="1146522036773132905">"Permiso concedido"</string>
+ <string name="external_source_untrusted" msgid="5037891688911672227">"Permiso non concedido"</string>
<string name="install_other_apps" msgid="3232595082023199454">"Instalar aplicacións descoñecidas"</string>
<string name="home" msgid="973834627243661438">"Inicio da configuración"</string>
<string-array name="battery_labels">
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index c17c254..6aaa23e 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ક્લિપ બાઉન્ડ, હાંસિયાં વગેરે બતાવો."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL લેઆઉટ દિશા નિર્દેશની ફરજ પાડો"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"તમામ લૉકેલ માટે સ્ક્રીન લેઆઉટ દિશા નિર્દેશને RTLની ફરજ પાડો"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAAને ફરજ પાડો"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ઍપમાં 4x MSAA ચાલુ કરો"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"બિન-લંબચોરસ ક્લિપ કામગીરી ડીબગ કરો"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index ffbf527..b6ac959 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"क्लिप सीमाएं, मार्जिन वगैरह दिखाएं."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"लेआउट की दिशा दाएं से बाएं करें"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"सभी भाषाओं के लिए स्क्रीन लेआउट की दिशा दाएं से बाएं रखें"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA को हर हाल में चालू करें"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ऐप में 4x MSAA को चालू करें"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"उन क्लिप ऑपरेशन को डीबग करें, जो आयताकार नहीं हैं"</string>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 962143b..ac074b0 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Prikazuju se obrubi, margine itd. isječaka."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Nametni zdesna ulijevo"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Nametni smjer zdesna ulijevo za sve zemlje/jezike"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Nametni 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Omogući 4x MSAA u aplikacijama OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Otkloni pogreške operacija nepravokutnog isječka"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 94832e4..3377c45 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Kliphatárok, margók stb. megjelenítése."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Elrendezés jobbról balra"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Elrendezés jobbról balra minden nyelvnél"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA kényszerítése"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"A 4x MSAA engedélyezése az OpenGL ES 2.0-nál"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Nem négyzetes kivágási műveletek hibakeresése"</string>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 906de02..5f6c1a2 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Ցույց տալ կտրվածքի սահմանները, լուսանցքները և այլն"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Ուղղությունը դարձնել RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Բոլոր լեզուների համար էկրանի տեքստի ուղղությունը դարձնել աջից ձախ"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Ստիպել 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Միացնել 4x MSAA-ը OpenGL ES 2.0 հավելվածներում"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Վրիպազերծել ոչ ուղղանկյուն կտրումների գործողությունները"</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 3a329d0..9f7b1f0 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Tampilkan batas klip, margin, dll."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Paksa arah tata letak RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Paksa arah tata letak layar RTL untuk semua lokal"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Paksa 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Aktifkan 4x MSAA dalam aplikasi OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Debug operasi klip non-kotak"</string>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index 85b12f9..c972a99 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Sýna skurðlínur, spássíur o.s.frv."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Þvinga umbrot frá hægri til vinstri"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Þvinga umbrot skjás frá hægri til vinstri fyrir alla tungumálskóða"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Þvinga 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Virkja 4x MSAA í OpenGL ES 2.0 forritum"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Villuleita klippt svæði sem ekki eru rétthyrnd"</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 0cda2e6..17b184a 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Mostra limiti, margini dei clip e così via"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forza direzione layout RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Direzione layout schermo RTL per tutte le lingue"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forza MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Attiva MSAA 4x in applicazioni OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Debug operazioni ritaglio non rettangolare"</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index b33d3c2..8e5649f 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"הצגת גבולות אזור, שוליים וכדומה"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"אילוץ כיוון פריסה מימין לשמאל"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"אילוץ של כיוון פריסת מסך מימין לשמאל עבור כל השפות בכל המקומות"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"אילוץ הפעלת 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"הפעלת 4x MSAA ביישומי OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"ניפוי באגים בפעולות באזור שאינו מלבני"</string>
@@ -506,10 +508,10 @@
<string name="cancel" msgid="5665114069455378395">"ביטול"</string>
<string name="okay" msgid="949938843324579502">"אישור"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"שעונים מעוררים ותזכורות"</string>
- <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"הרשאה להגדרה של שעונים מעוררים ותזכורות"</string>
+ <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"אישור להגדיר שעונים מעוררים ותזכורות"</string>
<string name="alarms_and_reminders_title" msgid="8819933264635406032">"שעונים מעוררים ותזכורות"</string>
- <string name="alarms_and_reminders_footer_title" product="default" msgid="1122213569699233612">"הגדרה זו מתירה לאפליקציה להגדיר שעון מעורר ולתזמן אירועים אחרים. ייתכן שהאפליקציה תפעל גם כשלא נעשה שימוש בטלפון שלך, ולכן תגביר את צריכת הסוללה. אם ההרשאה הזו תושבת, ייתכן שהאפליקציה לא תפעל כראוי ושהשעונים המעוררים לא יפעלו כפי שתוזמנו."</string>
- <string name="alarms_and_reminders_footer_title" product="tablet" msgid="4596201244991057839">"הגדרה זו מתירה לאפליקציה להגדיר שעון מעורר ולתזמן אירועים אחרים. ייתכן שהאפליקציה תפעל גם כשלא נעשה שימוש בטאבלט שלך, ולכן תגביר את צריכת הסוללה. אם ההרשאה הזו תושבת, ייתכן שהאפליקציה לא תפעל כראוי ושהשעונים המעוררים לא יפעלו כפי שתוזמנו."</string>
+ <string name="alarms_and_reminders_footer_title" product="default" msgid="1122213569699233612">"ההגדרה הזו מתירה לאפליקציה להגדיר שעון מעורר ולתזמן פעולות אחרות. ייתכן שהאפליקציה תפעל גם כשלא נעשה שימוש בטלפון שלך, ולכן תגביר את צריכת הסוללה. אם ההרשאה הזו תושבת, יכול להיות שהאפליקציה לא תפעל כראוי ושהשעונים המעוררים לא יפעלו כפי שתוזמנו."</string>
+ <string name="alarms_and_reminders_footer_title" product="tablet" msgid="4596201244991057839">"ההגדרה הזו מתירה לאפליקציה להגדיר שעון מעורר ולתזמן פעולות אחרות. ייתכן שהאפליקציה תפעל גם כשלא נעשה שימוש בטאבלט שלך, ולכן תגביר את צריכת הסוללה. אם ההרשאה הזו תושבת, יכול להיות שהאפליקציה לא תפעל כראוי ושהשעונים המעוררים לא יפעלו כפי שתוזמנו."</string>
<string name="alarms_and_reminders_footer_title" product="device" msgid="349578867821273761">"הגדרה זו מתירה לאפליקציה להגדיר שעון מעורר ולתזמן אירועים אחרים. ייתכן שהאפליקציה תפעל גם כשלא נעשה שימוש במכשיר שלך, ולכן תגביר את צריכת הסוללה. אם ההרשאה הזו תושבת, ייתכן שהאפליקציה לא תפעל כראוי ושהשעונים המעוררים לא יפעלו כפי שתוזמנו."</string>
<string name="keywords_alarms_and_reminders" msgid="6633360095891110611">"תזמון, שעון מעורר, תזכורת, שעון"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="6418297231575050426">"הפעלה"</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 3e179e8..62d887d 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"クリップの境界線、マージンなどを表示"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTLレイアウト方向を使用"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"すべての言語/地域で画面レイアウト方向をRTLに設定"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA を適用"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 アプリで 4x MSAA を有効にする"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"非矩形クリップ操作をデバッグ"</string>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 31c121a..f67d2b2 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"კლიპის საზღვრების, მინდვრების ჩვენება და ა.შ."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"მარჯვნიდან მარცხნივ განლაგების მიმართულების იძულება"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ეკრანის RTL მიმართულებაზე იძულება ყველა ლოკალისათვის"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA-ს ჩართვა"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"4x MSAA-ის ჩართვა OpenGL ES 2.0 აპში."</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"არა-მართკუთხა კლიპ-ოპერაციების გამართვა"</string>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index e5b2059..be176cb 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Қию шегін, шеттерді, т.б. көрсету"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Оңнан солға орналастыру"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Экранның орналасу бағытын барлық тілдер үшін оңнан солға қарату"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA қолдану"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"4x MSAA функциясын OpenGL ES 2.0 қолданбаларында іске қосу"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Тіктөртбұрыштан басқа пішінге қиюды түзету"</string>
@@ -425,7 +427,7 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Протаномалия (қызыл-жасыл)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Тританомалия (көк-сары)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Түсті түзету"</string>
- <string name="accessibility_display_daltonizer_preference_subtitle" msgid="2333641630205214702">"Құрылғыңызда түстердің қалай көрсетілетінін реттеңіз. Бұл мыналар үшін пайдалы болуы мүмкін:<br/><br/> <ol> <li>&nbsp;түстерді анығырақ көру</li> <li>&nbsp;зейініңізді жақсарту үшін түстерді өшіру</li> </ol>"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="2333641630205214702">"Құрылғыңызда түстердің қалай көрсетілетінін реттеңіз. Бұл мыналар үшін пайдалы болуы мүмкін:<br/><br/> <ol> <li>&nbsp;түстерді анығырақ көру</li> <li>&nbsp;зейініңізді жақсарту үшін түстерді өшіру.</li> </ol>"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> үстінен басқан"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> – <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"Шамамен <xliff:g id="TIME_REMAINING">%1$s</xliff:g> қалды"</string>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 8a05982..7e67b9b 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"បង្ហាញការភ្ជាប់អត្ថបទសម្រង់ រឹម ។ល។"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"បង្ខំទិសប្លង់ RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ប្តូរទិសប្លង់អេក្រង់ទៅជា RTL សម្រាប់គ្រប់ភាសាទាំងអស់"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"បង្ខំ 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"បើក 4x MSAA ក្នុងកម្មវិធី OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"កែប្រតិបត្តិការផ្នែកដកចេញដែលមិនមានរាងចតុកោណកែង"</string>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index e9066e5..fde4d72 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ಕ್ಲಿಪ್ನ ಗಡಿಗಳು, ಅಂಚುಗಳು, ಇತ್ಯಾದಿ ತೋರಿಸು."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL ಲೇಔಟ್ ಡೈರೆಕ್ಷನ್ ಫೋರ್ಸ್ ಮಾಡುವಿಕೆ"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ಎಲ್ಲ ಭಾಷೆಗಳಿಗಾಗಿ, RTL ಗೆ ಸ್ಕ್ರೀನ್ ಲೇಔಟ್ ಡೈರೆಕ್ಷನ್ ಅನ್ನು ಫೋರ್ಸ್ ಮಾಡಿ"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA ಫೋರ್ಸ್ ಮಾಡಿ"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ 4x MSAA ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"ಆಯತಾಕಾರವಲ್ಲದ ಕ್ಲಿಪ್ ಕಾರ್ಯಾಚರಣೆ ಡೀಬಗ್"</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 0c3ba74..2bedaa2 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"클립 경계, 여백 등을 표시"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL 레이아웃 방향 강제 적용"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"모든 언어에 대해 화면 레이아웃 방향을 RTL로 강제 적용"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA 강제 사용"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 앱에서 4x MSAA 사용"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"사각형이 아닌 클립 작업 디버그"</string>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index 0e4b7d0..c6086ad 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Кесилген нерсенин чектери жана жээктери көрүнөт"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Интерфейсти чагылдыруу"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Интерфейстин элементтери бардык тилдерде оңдон солго карай жайгашат"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA иштетүү"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 колдонмолорунда 4x MSAA иштетилет"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Татаал формаларды кесүү операцияларынын мүчүлүштүктөрүн оңдоо"</string>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 3acea6b..7eea529 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ສະແດງໜ້າປົກຄລິບ, ຂອບ ແລະ ອື່ນໆ."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"ບັງຄັບໃຫ້ຮູບຮ່າງຂຽນຈາກຂວາຫາຊ້າຍ"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ບັງຄັບໃຫ້ຮູບຮ່າງໜ້າຈໍ ຂຽນຈາກຂວາໄປຊ້າຍ ສຳລັບທຸກພາສາ"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"ບັງຄັບໃຊ້ 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"ເປິດໃຊ້ 4x MSAA ໃນແອັບ OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"ດີບັກການເຮັດວຽກຂອງຄລິບທີ່ບໍ່ແມ່ນສີ່ຫຼ່ຽມ"</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 3dc9f77..79e4870 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Rodyti iškarpų ribas, kraštines ir t. t."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Išdėst. iš dešin. į kairę"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Nust. visų lokalių ekran. išdėst. iš deš. į kairę"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Priverst. vykdyti 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Įgalinti 4x MSAA „OpenGL ES 2.0“ programose"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Derinti ne stačiakampio klipo operacijas"</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index bebe0ca..7f56aad 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Rādīt klipu robežas, malas utt."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Virziens no labās uz kreiso (Obligāts) WL: 295"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Obl. izkārt. virz. no labās uz kr. pusi visām lok."</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA piespiedu palaiš."</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Iespējot 4x MSAA OpenGL ES 2.0 lietotnēs"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Atkļūdot darbības daļā, kas nav taisnstūris."</string>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 845881d..aee2e61 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Прикажи граници на клип, маргини, итн."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Принудно користи RTL за насока"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Принудно постави насока на распоред на екранот во RTL за сите локални стандарди"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Принудно користи 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Овозможи 4x MSAA за апликации OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Отстрани грешка на неправоаголни клип операции"</string>
@@ -464,7 +466,7 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Полна"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Контролирано од администраторот"</string>
<string name="disabled" msgid="8017887509554714950">"Оневозможено"</string>
- <string name="external_source_trusted" msgid="1146522036773132905">"Дозволено"</string>
+ <string name="external_source_trusted" msgid="1146522036773132905">"Со дозвола"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Без дозвола"</string>
<string name="install_other_apps" msgid="3232595082023199454">"Непознати апликации"</string>
<string name="home" msgid="973834627243661438">"Почетна страница за поставки"</string>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index 32ca3fe..5ff7d1b 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ക്ലിപ്പ് ബൗണ്ടുകൾ, മാർജിനുകൾ തുടങ്ങിയവ ദൃശ്യമാക്കുക"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL ലേഔട്ട് ഡയറക്ഷൻ നിർബന്ധമാക്കുക"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"എല്ലാ ഭാഷകൾക്കുമായി സ്ക്രീൻ ലേഔട്ട് ഡയറക്ഷൻ RTL-ലേക്ക് നിർബന്ധമാക്കുക"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA നിർബന്ധമാക്കുക"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ആപ്പുകളിൽ 4x MSAA പ്രവർത്തനക്ഷമമാക്കൂ"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"ചതുരമല്ലാത്ത ക്ലിപ്പ് പ്രവർത്തനം ഡീബഗ്ഗ് ചെയ്യുക"</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 6081f3e..a7d621350 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Клипийн зах, хязгаар зэргийг харуулах"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL байрлалын чиглэлийг хүчээр тогтоох"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Бүх локалын хувьд дэлгэцийн байрлалын чиглэлийг хүчээр RTL болгох"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Хүчээр 4x MSAA ашиглах"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 апп-уудад 4x MSAA-г идэвхжүүлэх"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Тэгш өнцөгт бус клипийн үйлдлүүдийн согогийг засах"</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 4d780cb..667b339 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -226,7 +226,7 @@
<string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"डिव्हाइससह पेअर करा"</string>
<string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"वाय-फाय पेअरिंग कोड"</string>
<string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"पेअर करता आले नाही"</string>
- <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"डिव्हाइस समान नेटवर्कशी कनेक्ट केले असल्याची खात्री करा."</string>
+ <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"डिव्हाइस त्याच नेटवर्कशी कनेक्ट केले असल्याची खात्री करा."</string>
<string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"QR कोड स्कॅन करून वाय-फाय वापरून डिव्हाइस पेअर करा"</string>
<string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"डिव्हाइस पेअर करत आहे…"</string>
<string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"डिव्हाइस पेअर करता आले नाही. QR कोड चुकीचा होता किंवा डिव्हाइस समान नेटवर्कशी कनेक्ट केलेले नाही."</string>
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"क्लिप सीमा, समास इत्यादी दर्शवा."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL लेआउट दिशानिर्देशाची सक्ती करा"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"सर्व लोकॅलसाठी RTL स्क्रीन लेआउट दिशानिर्देशाची सक्ती करा"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA ची सक्ती करा"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ॲप्समध्ये 4x MSAA सुरू करा"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"आयताकृती नसलेले क्लिप ऑपरेशन डीबग करा"</string>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index a2f144f..1011e33 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Tunjukkan batas klip, margin dll."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Paksa arah reka letak RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Paksa arah reka letak skrin RTL bagi semua tempat peristiwa"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Paksa 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Dayakan 4x MSAA dalam apl OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Nyahpepijat operasi keratan bukan segi empat tepat"</string>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 54a213e..e01c123 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ဖြတ်ပိုင်းအနားသတ်များ၊ အနားများ စသဖြင့် ပြပါ။"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL အပြင်အဆင်အတိုင်း ဖြစ်စေခြင်း"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ဘာသာစကားအားလုံးအတွက် RTL အပြင်အဆင်အတိုင်း ဖြစ်စေသည်"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA မဖြစ်မနေဖွင့်ခြင်း"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 အက်ပ်များတွင် 4x MSAA ဖွင့်သည်"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"စတုဂံပုံမကျသောဖြတ်ပိုင်း လုပ်ဆောင်ချက်များကို အမှားဖယ်ရှားသည်"</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 65b84a6..cde30ca 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Vis kanter, marger osv."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Tving layoutretning for RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Tving RTL-retning på skjermen for alle språk"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Tving 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Slå på 4x MSAA i OpenGL ES 2.0-apper"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Feilsøk ikke-rektangulær klipping"</string>
diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
index 2232238..1fc6899 100644
--- a/packages/SettingsLib/res/values-ne/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -242,7 +242,7 @@
<item msgid="1212561935004167943">"हाइलाइट परीक्षण चित्र कोर्ने आदेशहरू हरियोमा"</item>
</string-array>
<string-array name="track_frame_time_entries">
- <item msgid="634406443901014984">"बन्द"</item>
+ <item msgid="634406443901014984">"अफ छ"</item>
<item msgid="1288760936356000927">"स्क्रिनमा बारको रूपमा"</item>
<item msgid="5023908510820531131">"<xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g> मा"</item>
</string-array>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 2646299..aaf2c63 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"क्लिप सीमा, मार्जिन, इत्यादि देखाइयोस्।"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL लेआउट बलपूर्वक प्रयोग गरियोस्"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"सबै लोकेलमा RTLमा स्क्रिन लेआउट बलपूर्वक प्रयोग गरियोस्"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"बलपूर्वक 4x MSAA प्रयोग गरियोस्"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES २.० एपमा ४x MSAA अन गरियोस्"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"गैर आयातकर क्लिप रहेका कार्यहरू डिबग गरियोस्"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index ef81e56..806d87b 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Toon clipgrenzen, marges en meer"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"V.r.n.l.-indelingsrichting afdwingen"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Stel de schermindelingsrichting geforceerd in op v.r.n.l. voor alle talen"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA forceren"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Zet 4x MSAA aan in OpenGL ES 2.0-apps"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Foutopsporing niet-rechthoekig bijsnijden"</string>
@@ -506,7 +508,7 @@
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Wekkers en herinneringen"</string>
<string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"Wekkers en herinneringen laten instellen"</string>
<string name="alarms_and_reminders_title" msgid="8819933264635406032">"Wekkers en herinneringen"</string>
- <string name="alarms_and_reminders_footer_title" product="default" msgid="1122213569699233612">"Sta deze app toe om wekkers te zetten en andere acties te plannen. Deze app kan worden gebruikt als je je telefoon niet gebruikt, waardoor er meer batterijlading wordt verbruikt. Als deze toestemming uit staat, werkt deze app mogelijk niet naar behoren en werken de wekkers niet zoals gepland."</string>
+ <string name="alarms_and_reminders_footer_title" product="default" msgid="1122213569699233612">"Sta deze app toe om wekkers te zetten en andere acties te plannen. Deze app kan actief zijn als je je telefoon niet gebruikt, waardoor je meer batterijlading verbruikt. Als dit recht uitstaat, werkt deze app mogelijk niet naar behoren en de wekkers niet zoals gepland."</string>
<string name="alarms_and_reminders_footer_title" product="tablet" msgid="4596201244991057839">"Sta deze app toe om wekkers te zetten en andere acties te plannen. Deze app kan worden gebruikt als je je tablet niet gebruikt, waardoor er meer batterijlading wordt verbruikt. Als deze toestemming uit staat, werkt deze app mogelijk niet naar behoren en werken de wekkers niet zoals gepland."</string>
<string name="alarms_and_reminders_footer_title" product="device" msgid="349578867821273761">"Sta deze app toe om wekkers te zetten en andere acties te plannen. Deze app kan worden gebruikt als je je apparaat niet gebruikt, waardoor er meer batterijlading wordt verbruikt. Als deze toestemming uit staat, werkt deze app mogelijk niet naar behoren en werken de wekkers niet zoals gepland."</string>
<string name="keywords_alarms_and_reminders" msgid="6633360095891110611">"plannen, schema, wekker, alarm, herinnering, klok"</string>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index a211f48..8c86031 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"କ୍ଲିପ୍ ବାଉଣ୍ଡ, ମାର୍ଜିନ୍ ଆଦି ଦେଖନ୍ତୁ"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL ଲେଆଉଟ୍ ଦିଗ ବାଧ୍ୟ କରନ୍ତୁ"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ସମସ୍ତ ଲୋକେଲ୍ ସକାଶେ ସ୍କ୍ରୀନ୍ ଲେଆଉଟ୍ ଦିଗ RTL ପାଇଁ ବାଧ୍ୟ କରନ୍ତୁ"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA ବାଧ୍ୟ କରନ୍ତୁ"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ଆପ୍ରେ 4x MSAA ସକ୍ଷମ କରନ୍ତୁ"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"ଅଣ-ଆୟତାକାର କ୍ଲିପ୍ କାର୍ଯ୍ୟକୁ ଡିବଗ୍ କରନ୍ତୁ"</string>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 0346a29..635f0a8 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ਕਲਿੱਪ ਸੀਮਾਵਾਂ, ਹਾਸ਼ੀਏ ਆਦਿ ਦਿਖਾਓ"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"ਸੱਜੇ ਤੋਂ ਖੱਬੇ ਵਾਲਾ ਖਾਕਾ ਲਾਗੂ ਕਰੋ"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ਸਾਰੀਆਂ ਭਾਸ਼ਾਵਾਂ ਲਈ ਸਕ੍ਰੀਨ \'ਤੇ ਸੱਜੇ ਤੋਂ ਖੱਬੇ ਵਾਲਾ ਖਾਕਾ ਲਾਗੂ ਕਰੋ"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ਐਪਾਂ ਵਿੱਚ 4x MSAA ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"ਗੈਰ-ਆਇਤਾਕਾਰ ਕਲਿੱਪ ਓਪਰੇਸ਼ਨ ਡੀਬੱਗ ਕਰੋ"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 7703090..7e8a571 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Pokaż granice przycięcia, marginesy itd."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Układ od prawej do lewej"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Wymuś wszędzie układ ekranu od prawej do lewej"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Wymuś 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Włącz 4x MSAA w aplikacjach OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Debuguj operacje przycinania nieprostokątnego"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index d352b61..d6f6da3 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Mostrar limites de corte, margens, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forçar layout da direita p/ esquerda"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Forçar a direção do layout da direita para a esquerda para todas as localidades"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forçar 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Ativar 4x MSAA em apps OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Depurar operações de corte não retangulares"</string>
@@ -511,7 +513,7 @@
<string name="alarms_and_reminders_footer_title" product="device" msgid="349578867821273761">"Permitir que esse app defina alarmes e programe outras ações. Ele poderá ser usado quando você não estiver usando o dispositivo, o que consumirá mais bateria. Se essa permissão for desativada, o app e os alarmes dele poderão não funcionar como planejado."</string>
<string name="keywords_alarms_and_reminders" msgid="6633360095891110611">"programar, alarme, lembrete, relógio"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="6418297231575050426">"Ativar"</string>
- <string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"Ativar o \"Não perturbe\""</string>
+ <string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"Ativar o Não perturbe"</string>
<string name="zen_mode_settings_summary_off" msgid="3832876036123504076">"Nunca"</string>
<string name="zen_interruption_level_priority" msgid="5392140786447823299">"Somente prioridade"</string>
<string name="zen_mode_and_condition" msgid="8877086090066332516">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 618a3d3..294f61a 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Apresentar limites de clipes, margens, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forçar direção do esquema RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Forçar dir. do esq. do ecrã p. RTL tds os locais"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forçar 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Ativar o 4x MSAA em aplicações OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Depurar operações de clipe não retangulares"</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index d352b61..d6f6da3 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Mostrar limites de corte, margens, etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forçar layout da direita p/ esquerda"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Forçar a direção do layout da direita para a esquerda para todas as localidades"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forçar 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Ativar 4x MSAA em apps OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Depurar operações de corte não retangulares"</string>
@@ -511,7 +513,7 @@
<string name="alarms_and_reminders_footer_title" product="device" msgid="349578867821273761">"Permitir que esse app defina alarmes e programe outras ações. Ele poderá ser usado quando você não estiver usando o dispositivo, o que consumirá mais bateria. Se essa permissão for desativada, o app e os alarmes dele poderão não funcionar como planejado."</string>
<string name="keywords_alarms_and_reminders" msgid="6633360095891110611">"programar, alarme, lembrete, relógio"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="6418297231575050426">"Ativar"</string>
- <string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"Ativar o \"Não perturbe\""</string>
+ <string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"Ativar o Não perturbe"</string>
<string name="zen_mode_settings_summary_off" msgid="3832876036123504076">"Nunca"</string>
<string name="zen_interruption_level_priority" msgid="5392140786447823299">"Somente prioridade"</string>
<string name="zen_mode_and_condition" msgid="8877086090066332516">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 51bba78..c922684 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Afișați limitele clipului, marginile etc."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Direcție aspect dreapta - stânga"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Direcție obligatorie aspect ecran dreapta - stânga"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Forțați MSAA 4x"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Activați MSAA 4x în aplicațiile OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Remediați decupări nerectangulare"</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index fff9f9e..24a5039 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Показывать границы обрезки, поля и т. п."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Отразить интерфейс"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Принудительно расположить элементы интерфейса справа налево во всех локалях"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Включить 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Включить 4x MSAA в приложениях OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Отладка операций усечения сложной формы"</string>
@@ -425,7 +427,7 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Протаномалия (красный/зеленый)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Тританомалия (синий/желтый)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Коррекция цвета"</string>
- <string name="accessibility_display_daltonizer_preference_subtitle" msgid="2333641630205214702">"Настройте цветопередачу на экране устройства. Эта функция может помочь:<br/><br/> <ol> <li>&nbsp;сделать цвета более четкими;</li> <li>&nbsp;убрать цвета, чтобы вам проще было сфокусироваться.</li> </ol>"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="2333641630205214702">"Настройте коррекцию цвета на экране устройства. Вы можете:<br/><br/> <ol> <li>&nbsp;улучшить цветопередачу;</li> <li>&nbsp;переключиться в черно-белый режим, чтобы вам проще было сфокусироваться.</li> </ol>"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"Новая настройка: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"Уровень заряда – <xliff:g id="PERCENTAGE">%1$s</xliff:g>. <xliff:g id="TIME_STRING">%2$s</xliff:g>."</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"Заряда хватит примерно на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 47ab4a1..ddfa1c5 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"ක්ලිප් සීමා, මායිම්, ආදිය පෙන්වන්න."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"බල RTL පිරිසැලසුම් දිශාව"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"සියලු පෙදෙසි සඳහා RTL වෙත බල තිර පිරිසැලසුම"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA බල කරන්න"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 යෙදුම්හි 4x MSAA සබල කරන්න"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"සෘජුකෝණාස්ර-නොවන ක්ලිප් මෙහෙයුම් නිදොස් කරන්න"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 10e1635..0d04d69 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Zobraziť vo výstrižku ohraničenie, okraje a pod."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Rozloženie sprava doľava"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Vynútiť pre všetky jazyky rozloženie obrazovky sprava doľava"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Vynútiť 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Povoliť 4x MSAA v aplikáciách OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Ladiť operácie s neobdĺžnikovými výstrižkami"</string>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 305c040..796b938 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Pokaži meje obrezovanja, obrobe ipd."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Vsili od desne proti levi"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Vsili smer postavitve na zaslonu od desne proti levi za vse jezike."</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Vsili 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"V aplikacijah OpenGL ES 2.0 omogoči 4x MSAA."</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Odpravljanje težav s postopki nepravokotnega izrezovanja"</string>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 2d4bb06..99d5c71 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Shfaq konturet e klipit, hapësirat etj."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Detyro drejtimin e shkrimit nga e djathta në të majtë"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Ndrysho me detyrim drejtimin e planit të ekranit nga e djathta në të majtë për të gjitha vendet"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Detyro 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Aktivizo 4x MSAA në aplikacionet OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Korrigjo veprimet mbi klipet jodrejtkëndore"</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 9f2d27b..9830ddb 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -301,9 +301,9 @@
<string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Мобилни подаци су увек активни, чак и када је Wi‑Fi активан (ради брзе промене мреже)."</string>
<string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Користи се хардверско убрзање привезивања ако је доступно"</string>
<string name="adb_warning_title" msgid="7708653449506485728">"Дозволи отклањање USB грешака?"</string>
- <string name="adb_warning_message" msgid="8145270656419669221">"Отклањање USB грешака намењено је само за сврхе програмирања. Користите га за копирање података са рачунара на уређај и обрнуто, инсталирање апликација на уређају без обавештења и читање података из евиденције."</string>
+ <string name="adb_warning_message" msgid="8145270656419669221">"Отклањање USB грешака намењено је само за сврхе програмирања. Користите га за копирање података са рачунара на уређај и обратно, инсталирање апликација на уређају без обавештења и читање података из евиденције."</string>
<string name="adbwifi_warning_title" msgid="727104571653031865">"Желите да дозволите бежично отклањање грешака?"</string>
- <string name="adbwifi_warning_message" msgid="8005936574322702388">"Бежично отклањање грешака намењено је само програмирању. Користите га за копирање података са рачунара на уређај и обрнуто, инсталирање апликација на уређају без обавештења и читање података из евиденције."</string>
+ <string name="adbwifi_warning_message" msgid="8005936574322702388">"Бежично отклањање грешака намењено је само програмирању. Користите га за копирање података са рачунара на уређај и обратно, инсталирање апликација на уређају без обавештења и читање података из евиденције."</string>
<string name="adb_keys_warning_message" msgid="2968555274488101220">"Желите ли да опозовете приступ отклањању USB грешака са свих рачунара које сте претходно одобрили?"</string>
<string name="dev_settings_warning_title" msgid="8251234890169074553">"Желите ли да омогућите програмерска подешавања?"</string>
<string name="dev_settings_warning_message" msgid="37741686486073668">"Ова подешавања су намењена само за програмирање. Могу да изазову престанак функционисања или неочекивано понашање уређаја и апликација на њему."</string>
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Приказује границе клипа, маргине итд."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Наметни смер распореда здесна налево"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Намеће смер распореда екрана здесна налево за све локалитете"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Наметни 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Омогућава 4x MSAA у OpenGL ES 2.0 апликацијама"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Отклони грешке исецања области неправоугаоног облика"</string>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index efcd64f..1208022 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Visa gränser för videoklipp, marginaler m.m."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Tvinga fram RTL-layout"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Tvinga fram RTL-skärmlayout (hö–vä) för alla språk"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Tvinga 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Aktivera 4x MSAA i OpenGL ES 2.0-appar"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Felsök icke-rektangulära urklippsåtgärder"</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index c762fab..0b49cf5 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Onyesha mipaka ya picha, kingo, nk."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Lazimisha uelekezaji wa muundo wa RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Lazimisha mkao wa skrini uwe wa kulia kwenda kushoto kwa lugha zote"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Lazimisha 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Wezesha 4x MSAA katika programu za OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Tatua uendeshaji wa klipu usio mstatili"</string>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 8414ad2..a829ab2 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"கிளிப் எல்லைகள், ஓரங்கள், மேலும் பலவற்றைக் காட்டு"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL தளவமைப்பின் திசையை வலியுறுத்து"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"எல்லா மொழிகளுக்கும் திரையின் தளவமைப்பு திசையை RTL க்கு மாற்று"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA ஐ வலியுறுத்து"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 பயன்பாடுகளில் 4x MSAA ஐ இயக்கு"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"செவ்வகம் அல்லாத கிளிப் செயல்பாடுகளைப் பிழைத்திருத்து"</string>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 15d6a6f..83ff620 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"క్లిప్ సరిహద్దులు, అంచులు మొ. చూపు"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL లేఅవుట్ దిశను నిర్బంధం చేయండి"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"అన్ని లొకేల్ల కోసం RTLకి స్క్రీన్ లేఅవుట్ దిశను నిర్భందించు"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"నిర్భందం 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 యాప్లలో 4x MSAAను ప్రారంభించండి"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"దీర్ఘ చతురస్రం కాని క్లిప్ చర్యలను డీబగ్ చేయండి"</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 0e5d705..f721f15 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"แสดงหน้าปกคลิป ขอบ ฯลฯ"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"บังคับทิศทางการจัดวาง RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"บังคับทิศทางการจัดวางหน้าจอเป็น RTL สำหรับทุกภาษา"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"บังคับใช้ 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"เปิดใช้งาน 4x MSAA ในแอปพลิเคชัน OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"แก้ไขการทำงานของคลิปที่ไม่ใช่สี่เหลี่ยม"</string>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 204928b..57f01a3 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Ipakita ang mga hangganan ng clip, margin, atbp."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Ipilit ang RTL na dir. ng layout"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Ipilit ang RTL na direksyon ng screen layout sa lahat ng lokal"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Puwersahin ang 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Paganahin ang 4x MSAA sa OpenGL ES 2.0 na apps"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"I-debug ang di-parihabang mga clip operation"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 5ab5278..5067990 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Klip sınırlarını, kenar boşluklarını vb. göster"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Sağdan sola düzenini zorla"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Tüm yerel ayarlar için sağdan sola ekran düzenini zorlar"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA\'yı zorla"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 uygulamalarda 4x MSAA\'yı etkinleştir"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Dikdörtgen olmayan kırpma işlemlerinde hata ayıkla"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 2fd5253..061cace 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Показувати межі роликів, поля тощо"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Макет письма справа наліво"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Застосовувати макет письма справа наліво для всіх мов"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Примус. запустити 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Увімкнути 4x MSAA в програмах OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Налагодити непрямокутну обрізку"</string>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index efd159d..6eb3c40 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"کلپ باؤنڈز، حاشیے وغیرہ دکھائیں"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL لے آؤٹ سمت زبردستی نافذ کریں"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"سبھی زبانوں کیلئے اسکرین لے آؤٹ کی سمت کو RTL پر مجبور کریں"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAA زبردستی نافذ کریں"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ایپس میں 4x MSAA فعال کریں"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"غیر مستطیل نما کلپ آپریشنز ڈیبگ کریں"</string>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 7c9959e..ad1a917 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Klip, maydon va h.k. chegaralarini ko‘rsatish"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"O‘ngdan chapga qarab yozish"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Barcha tillarda o‘ngdan chapga qarab yozish"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"4x MSAAni yoqish"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ilovasidan 4x MSAAni yoqish"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"To‘g‘ri burchakli bo‘lmagan kesishma amallarini tuzatish"</string>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 366be8d..2c4e97f 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Hiện viền của đoạn video, lề, v.v.."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Buộc hướng bố cục phải sang trái"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Buộc hướng bố cục màn hình phải sang trái cho tất cả ngôn ngữ"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Bắt buộc 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Bật 4x MSAA trong ứng dụng OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Gỡ lỗi hoạt động của clip không phải là hình chữ nhật"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 88b8db5..d0cbcd4 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"显示剪辑边界、边距等。"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"强制使用从右到左的布局方向"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"强制将所有语言区域的屏幕布局方向改为从右到左"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"强制启用 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"在 OpenGL ES 2.0 应用中启用 4x MSAA"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"调试非矩形剪裁操作"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 0731fde..734a9a5 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"顯示剪輯範圍、邊界等"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"強制使用從右至左的版面配置方向"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"強制將所有語言代碼的畫面配置方向改為從右至左"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"強制 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"在 OpenGL ES 2.0 應用程式中啟用 4x MSAA"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"對非矩形裁剪操作進行偵錯"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index f77f812..17b0a92 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"顯示剪輯範圍、邊界等"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"強制使用從右至左版面配置方向"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"強制將所有語言代碼的畫面配置方向改為從右至左"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"強制 4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"在 OpenGL ES 2.0 應用程式中啟用 4x MSAA"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"針對非矩形裁剪操作進行偵錯"</string>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 3a98feb..3236fd04 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -353,6 +353,8 @@
<string name="debug_layout_summary" msgid="8825829038287321978">"Bonisa imikhawulo, imiphetho, njll, yesiqeshana."</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Phoqelela isikhombisi-ndlela sesakhiwo se-RTL"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Phoqelela isikhombisi-ndlela sesikrini ku-RTL kuzo zonke izifunda"</string>
+ <!-- no translation found for window_blurs (6831008984828425106) -->
+ <skip />
<string name="force_msaa" msgid="4081288296137775550">"Phoqelela i-4x MSAA"</string>
<string name="force_msaa_summary" msgid="9070437493586769500">"Nika amandla i-4x MSAA ezinhlelweni zokusebenza ze-OpenGL ES 2.0"</string>
<string name="show_non_rect_clip" msgid="7499758654867881817">"Susa iphutha ekusebenzeniokungekhona unxantathu kwesiqeshana"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageUtils.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageUtils.java
index 51e533a..3f95a07 100644
--- a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageUtils.java
@@ -73,7 +73,10 @@
private static NetworkTemplate getMobileTemplateForSubId(
TelephonyManager telephonyManager, int subId) {
- return NetworkTemplate.buildTemplateCarrierMetered(
- telephonyManager.getSubscriberId(subId));
+ // The null subscriberId means that no any mobile/carrier network will be matched.
+ // Using old API: buildTemplateMobileAll for the null subscriberId to avoid NPE.
+ String subscriberId = telephonyManager.getSubscriberId(subId);
+ return subscriberId != null ? NetworkTemplate.buildTemplateCarrierMetered(subscriberId)
+ : NetworkTemplate.buildTemplateMobileAll(subscriberId);
}
}
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index d2947c6..bcb21d1 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -589,7 +589,7 @@
<provider android:name=".HeapDumpProvider"
android:authorities="com.android.shell.heapdump"
android:grantUriPermissions="true"
- android:exported="true" />
+ android:exported="false" />
<activity
android:name=".BugreportWarningActivity"
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt
index d185ba36..8bc3d22 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt
@@ -159,6 +159,7 @@
// If we expect an animation, post a timeout to cancel it in case the remote animation is
// never started.
if (willAnimate) {
+ keyguardHandler.disableKeyguardBlurs()
runner.postTimeout()
// Hide the keyguard using the launch animation instead of the default unlock animation.
@@ -218,6 +219,9 @@
/** Hide the keyguard and animate using [runner]. */
fun hideKeyguardWithAnimation(runner: IRemoteAnimationRunner)
+
+ /** Disable window blur so they don't overlap with the window launch animation **/
+ fun disableKeyguardBlurs()
}
/**
diff --git a/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml b/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml
index a45769f..9076da7 100644
--- a/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml
+++ b/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml
@@ -23,7 +23,7 @@
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@android:color/white"/>
- <corners android:radius="@dimen/screenshot_button_corner_radius"/>
+ <corners android:radius="@dimen/qs_footer_action_corner_radius"/>
</shape>
</item>
<item>
diff --git a/packages/SystemUI/res/layout/wallet_empty_state.xml b/packages/SystemUI/res/layout/wallet_empty_state.xml
index cc2e781..d41679a 100644
--- a/packages/SystemUI/res/layout/wallet_empty_state.xml
+++ b/packages/SystemUI/res/layout/wallet_empty_state.xml
@@ -22,7 +22,7 @@
android:id="@+id/wallet_empty_state"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginHorizontal="16dp"
+ android:layout_marginHorizontal="48dp"
android:layout_marginTop="48dp"
android:background="@drawable/wallet_empty_state_bg"
android:orientation="vertical"
diff --git a/packages/SystemUI/res/layout/wallet_fullscreen.xml b/packages/SystemUI/res/layout/wallet_fullscreen.xml
index aceefee..71006f0 100644
--- a/packages/SystemUI/res/layout/wallet_fullscreen.xml
+++ b/packages/SystemUI/res/layout/wallet_fullscreen.xml
@@ -54,9 +54,12 @@
android:id="@+id/label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- style="@style/Wallet.TextAppearance"
+ android:layout_marginHorizontal="48dp"
+ android:textColor="?androidprv:attr/textColorPrimary"
android:textAlignment="center"/>
+ <include layout="@layout/wallet_empty_state"/>
+
<com.android.systemui.wallet.ui.WalletCardCarousel
android:id="@+id/card_carousel"
android:layout_width="match_parent"
@@ -97,8 +100,6 @@
android:layout_marginVertical="24dp"/>
</LinearLayout>
- <include layout="@layout/wallet_empty_state"/>
-
<TextView
android:id="@+id/error_view"
android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 34a1452..1a00503 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -630,9 +630,9 @@
58.0001 29.2229,56.9551 26.8945,55.195
</string>
- <!-- The radius of the enrollment progress bar, in pixels -->
+ <!-- The radius of the enrollment progress bar, in dp -->
<integer name="config_udfpsEnrollProgressBar" translatable="false">
- 360
+ 280
</integer>
<!-- package name of a built-in camera app to use to restrict implicit intent resolution
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index f7f7476..05f2f67 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1427,7 +1427,7 @@
<!-- Distance that the full shade transition takes in order for media to fully transition to
the shade -->
- <dimen name="lockscreen_shade_media_transition_distance">140dp</dimen>
+ <dimen name="lockscreen_shade_media_transition_distance">120dp</dimen>
<!-- Maximum overshoot for the topPadding of notifications when transitioning to the full
shade -->
diff --git a/packages/SystemUI/res/values/flags.xml b/packages/SystemUI/res/values/flags.xml
index 3ded4a5..c388b1e 100644
--- a/packages/SystemUI/res/values/flags.xml
+++ b/packages/SystemUI/res/values/flags.xml
@@ -28,7 +28,7 @@
<bool name="flag_notification_twocolumn">false</bool>
<!-- AOD/Lockscreen alternate layout -->
- <bool name="flag_keyguard_layout">false</bool>
+ <bool name="flag_keyguard_layout">true</bool>
<!-- People Tile flag -->
<bool name="flag_conversations">false</bool>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index e2a49a1..3fe6acd 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1653,6 +1653,8 @@
<!-- Wallet strings -->
<!-- Wallet empty state, title [CHAR LIMIT=32] -->
<string name="wallet_title">Wallet</string>
+ <!-- Wallet empty state label. [CHAR LIMIT=NONE] -->
+ <string name="wallet_empty_state_label">Get set up to make faster, more secure purchases with your phone</string>
<!-- Label of the button at the bottom prompting user enter wallet app. [CHAR LIMIT=NONE] -->
<string name="wallet_app_button_label">Show all</string>
<!-- Label of the button underneath the card carousel prompting user unlock device. [CHAR LIMIT=NONE] -->
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java
index c95101e..0b8868f 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java
@@ -62,10 +62,9 @@
@Override
protected void setPasswordEntryEnabled(boolean enabled) {
- boolean wasEnabled = mPasswordEntry.isEnabled();
mPasswordEntry.setEnabled(enabled);
mOkButton.setEnabled(enabled);
- if (enabled && !wasEnabled && !mPasswordEntry.hasFocus()) {
+ if (enabled && !mPasswordEntry.hasFocus()) {
mPasswordEntry.requestFocus();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsHbmProvider.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsHbmProvider.java
index 52141c0..da24a8f 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsHbmProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsHbmProvider.java
@@ -31,8 +31,10 @@
/**
* UdfpsView will call this to enable the HBM when the fingerprint illumination is needed.
*
- * The call must be made from the UI thread. The callback, if provided, will also be invoked
- * from the UI thread.
+ * This method is a no-op when some type of HBM is already enabled.
+ *
+ * This method must be called from the UI thread. The callback, if provided, will also be
+ * invoked from the UI thread.
*
* @param hbmType The type of HBM that should be enabled. See {@link UdfpsHbmTypes}.
* @param surface The surface for which the HBM is requested, in case the HBM implementation
@@ -45,14 +47,14 @@
/**
* UdfpsView will call this to disable the HBM when the illumination is not longer needed.
*
+ * This method is a no-op when HBM is already disabled. If HBM is enabled, this method will
+ * disable HBM for the {@code hbmType} and {@code surface} that were provided to the
+ * corresponding {@link #enableHbm(int, Surface, Runnable)}.
+ *
* The call must be made from the UI thread. The callback, if provided, will also be invoked
* from the UI thread.
*
- * @param hbmType The type of HBM that should be disabled. See {@link UdfpsHbmTypes}.
- * @param surface The surface for which the HBM is requested, in case the HBM implementation
- * needs to unset special surface flags to disable the HBM. Can be null.
* @param onHbmDisabled A runnable that will be executed once HBM is disabled.
*/
- void disableHbm(@HbmType int hbmType, @Nullable Surface surface,
- @Nullable Runnable onHbmDisabled);
+ void disableHbm(@Nullable Runnable onHbmDisabled);
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsSurfaceView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsSurfaceView.java
index 86e3ae6..6a6f57a 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsSurfaceView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsSurfaceView.java
@@ -124,8 +124,9 @@
@Override
public void stopIllumination() {
if (mHbmProvider != null) {
- final Runnable onHbmDisabled = this::invalidate;
- mHbmProvider.disableHbm(mHbmType, mHolder.getSurface(), onHbmDisabled);
+ final Runnable onHbmDisabled =
+ (mHbmType == UdfpsHbmTypes.GLOBAL_HBM) ? this::invalidate : null;
+ mHbmProvider.disableHbm(onHbmDisabled);
} else {
Log.e(TAG, "stopIllumination | mHbmProvider is null");
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index edba8bd..a159984 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -110,6 +110,7 @@
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;
@@ -240,6 +241,7 @@
private final SysuiStatusBarStateController mStatusBarStateController;
private final Executor mUiBgExecutor;
private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
+ private final Lazy<NotificationShadeDepthController> mNotificationShadeDepthController;
private boolean mSystemReady;
private boolean mBootCompleted;
@@ -810,13 +812,15 @@
SysuiStatusBarStateController statusBarStateController,
KeyguardStateController keyguardStateController,
Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationControllerLazy,
- UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
+ UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
+ Lazy<NotificationShadeDepthController> notificationShadeDepthController) {
super(context);
mFalsingCollector = falsingCollector;
mLockPatternUtils = lockPatternUtils;
mBroadcastDispatcher = broadcastDispatcher;
mKeyguardViewControllerLazy = statusBarKeyguardViewManagerLazy;
mDismissCallbackRegistry = dismissCallbackRegistry;
+ mNotificationShadeDepthController = notificationShadeDepthController;
mUiBgExecutor = uiBgExecutor;
mUpdateMonitor = keyguardUpdateMonitor;
mPM = powerManager;
@@ -1657,6 +1661,14 @@
hideLocked();
}
+ /**
+ * Disable notification shade background blurs until the keyguard is dismissed.
+ * (Used during app launch animations)
+ */
+ public void disableBlursUntilHidden() {
+ mNotificationShadeDepthController.get().setIgnoreShadeBlurUntilHidden(true);
+ }
+
public boolean isSecure() {
return isSecure(KeyguardUpdateMonitor.getCurrentUser());
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
index b071b943..05d1361 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
@@ -46,6 +46,7 @@
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.phone.DozeParameters;
@@ -99,7 +100,8 @@
SysuiStatusBarStateController statusBarStateController,
KeyguardStateController keyguardStateController,
Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController,
- UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
+ UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
+ Lazy<NotificationShadeDepthController> notificationShadeDepthController) {
return new KeyguardViewMediator(
context,
falsingCollector,
@@ -119,7 +121,8 @@
statusBarStateController,
keyguardStateController,
keyguardUnlockAnimationController,
- unlockedScreenOffAnimationController
+ unlockedScreenOffAnimationController,
+ notificationShadeDepthController
);
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
index 09da9d2..18d2c91 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
@@ -367,7 +367,7 @@
ViewGroup.LayoutParams.WRAP_CONTENT)
newRecs.recommendationViewHolder?.recommendations?.setLayoutParams(lp)
newRecs.bindRecommendation(data.copy(backgroundColor = bgColor))
- MediaPlayerData.addMediaRecommendation(key, newRecs, shouldPrioritize)
+ MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize)
updatePlayerToState(newRecs, noAnimation = true)
reorderAllPlayers()
updatePageIndicator()
@@ -408,9 +408,18 @@
bgColor = getBackgroundColor()
pageIndicator.tintList = ColorStateList.valueOf(getForegroundColor())
- MediaPlayerData.mediaData().forEach { (key, data) ->
- removePlayer(key, dismissMediaData = false, dismissRecommendation = false)
- addOrUpdatePlayer(key = key, oldKey = null, data = data)
+ MediaPlayerData.mediaData().forEach { (key, data, isSsMediaRec) ->
+ if (isSsMediaRec) {
+ val smartspaceMediaData = MediaPlayerData.smartspaceMediaData
+ removePlayer(key, dismissMediaData = false, dismissRecommendation = false)
+ smartspaceMediaData?.let {
+ addSmartspaceMediaRecommendations(
+ it.targetId, it, MediaPlayerData.shouldPrioritizeSs)
+ }
+ } else {
+ removePlayer(key, dismissMediaData = false, dismissRecommendation = false)
+ addOrUpdatePlayer(key = key, oldKey = null, data = data)
+ }
}
}
@@ -697,7 +706,10 @@
private val EMPTY = MediaData(-1, false, 0, null, null, null, null, null,
emptyList(), emptyList(), "INVALID", null, null, null, true, null)
// Whether should prioritize Smartspace card.
- private var shouldPrioritizeSs: Boolean = false
+ internal var shouldPrioritizeSs: Boolean = false
+ private set
+ internal var smartspaceMediaData: SmartspaceMediaData? = null
+ private set
data class MediaSortKey(
// Whether the item represents a Smartspace media recommendation.
@@ -724,12 +736,18 @@
mediaPlayers.put(sortKey, player)
}
- fun addMediaRecommendation(key: String, player: MediaControlPanel, shouldPrioritize: Boolean) {
+ fun addMediaRecommendation(
+ key: String,
+ data: SmartspaceMediaData,
+ player: MediaControlPanel,
+ shouldPrioritize: Boolean
+ ) {
shouldPrioritizeSs = shouldPrioritize
removeMediaPlayer(key)
val sortKey = MediaSortKey(isSsMediaRec = true, EMPTY, System.currentTimeMillis())
mediaData.put(key, sortKey)
mediaPlayers.put(sortKey, player)
+ smartspaceMediaData = data
}
fun getMediaPlayer(key: String, oldKey: String?): MediaControlPanel? {
@@ -742,9 +760,14 @@
return mediaData.get(key)?.let { mediaPlayers.get(it) }
}
- fun removeMediaPlayer(key: String) = mediaData.remove(key)?.let { mediaPlayers.remove(it) }
+ fun removeMediaPlayer(key: String) = mediaData.remove(key)?.let {
+ if (it.isSsMediaRec) {
+ smartspaceMediaData = null
+ }
+ mediaPlayers.remove(it)
+ }
- fun mediaData() = mediaData.entries.map { e -> Pair(e.key, e.value.data) }
+ fun mediaData() = mediaData.entries.map { e -> Triple(e.key, e.value.data, e.value.isSsMediaRec) }
fun players() = mediaPlayers.values
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
index 2ab5a3a..6d3190f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
@@ -96,21 +96,32 @@
}
override fun handleClick(view: View?) {
- if (state.state == Tile.STATE_ACTIVE) {
- mUiHandler.post {
- val i = Intent().apply {
- component = ComponentName(mContext, ControlsActivity::class.java)
- addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
- putExtra(ControlsUiController.EXTRA_ANIMATE, true)
- }
- if (keyguardStateController.isUnlocked()) {
- val animationController = view?.let {
- ActivityLaunchAnimator.Controller.fromView(it)
- }
- mActivityStarter.startActivity(i, true /* dismissShade */, animationController)
- } else {
+ if (state.state == Tile.STATE_UNAVAILABLE) {
+ return
+ }
+
+ val intent = Intent().apply {
+ component = ComponentName(mContext, ControlsActivity::class.java)
+ addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
+ putExtra(ControlsUiController.EXTRA_ANIMATE, true)
+ }
+ val animationController = view?.let {
+ ActivityLaunchAnimator.Controller.fromView(it)
+ }
+
+ mUiHandler.post {
+ if (keyguardStateController.isUnlocked) {
+ mActivityStarter.startActivity(
+ intent, true /* dismissShade */, animationController)
+ } else {
+ if (state.state == Tile.STATE_ACTIVE) {
mHost.collapsePanels()
- mContext.startActivity(i)
+ // With an active tile, don't use ActivityStarter so that the activity is
+ // started without prompting keyguard unlock.
+ mContext.startActivity(intent)
+ } else {
+ mActivityStarter.postStartActivityDismissingKeyguard(
+ intent, 0 /* delay */, animationController)
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
index 64aec5e..7fab0f5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
@@ -56,7 +56,6 @@
import com.android.systemui.wallet.ui.WalletActivity;
import java.util.List;
-import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -71,7 +70,6 @@
private final KeyguardStateController mKeyguardStateController;
private final PackageManager mPackageManager;
private final SecureSettings mSecureSettings;
- private final Executor mExecutor;
private final QuickAccessWalletController mController;
private final FeatureFlags mFeatureFlags;
@@ -91,7 +89,6 @@
KeyguardStateController keyguardStateController,
PackageManager packageManager,
SecureSettings secureSettings,
- @Main Executor executor,
QuickAccessWalletController quickAccessWalletController,
FeatureFlags featureFlags) {
super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
@@ -100,7 +97,6 @@
mKeyguardStateController = keyguardStateController;
mPackageManager = packageManager;
mSecureSettings = secureSettings;
- mExecutor = executor;
mFeatureFlags = featureFlags;
}
@@ -118,6 +114,7 @@
if (listening) {
mController.setupWalletChangeObservers(mCardRetriever, DEFAULT_PAYMENT_APP_CHANGE);
if (!mController.getWalletClient().isWalletServiceAvailable()) {
+ Log.i(TAG, "QAW service is unavailable, recreating the wallet client.");
mController.reCreateWalletClient();
}
mController.queryWalletCards(mCardRetriever);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
index 4ed376a..4a4e990 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
@@ -58,6 +58,7 @@
private val displayMetrics: DisplayMetrics,
private val mediaHierarchyManager: MediaHierarchyManager,
private val scrimController: ScrimController,
+ private val depthController: NotificationShadeDepthController,
private val featureFlags: FeatureFlags,
private val context: Context,
configurationController: ConfigurationController,
@@ -289,6 +290,7 @@
mediaHierarchyManager.setTransitionToFullShadeAmount(mediaAmount)
// Fade out all content only visible on the lockscreen
notificationPanelController.setKeyguardOnlyContentAlpha(1.0f - scrimProgress)
+ depthController.transitionToFullShadeProgress = scrimProgress
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
index b7e8bfb..8900551 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
@@ -35,7 +35,6 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
-import com.android.systemui.statusbar.notification.ExpandAnimationParameters
import com.android.systemui.statusbar.phone.BiometricUnlockController
import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK
import com.android.systemui.statusbar.phone.DozeParameters
@@ -79,7 +78,6 @@
private var notificationAnimator: Animator? = null
private var updateScheduled: Boolean = false
private var shadeExpansion = 0f
- private var ignoreShadeBlurUntilHidden: Boolean = false
private var isClosed: Boolean = true
private var isOpen: Boolean = false
private var isBlurred: Boolean = false
@@ -106,21 +104,30 @@
}
/**
+ * How much we're transitioning to the full shade
+ */
+ var transitionToFullShadeProgress = 0f
+ set(value) {
+ if (field == value) return
+ field = value
+ scheduleUpdate()
+ }
+
+ /**
* When launching an app from the shade, the animations progress should affect how blurry the
* shade is, overriding the expansion amount.
*/
- var notificationLaunchAnimationParams: ExpandAnimationParameters? = null
+ var ignoreShadeBlurUntilHidden: Boolean = false
set(value) {
- field = value
- if (value != null) {
- scheduleUpdate()
+ if (field == value) {
return
}
+ field = value
+ scheduleUpdate()
if (shadeSpring.radius == 0 && shadeAnimation.radius == 0) {
return
}
- ignoreShadeBlurUntilHidden = true
shadeSpring.animateTo(0)
shadeSpring.finishIfRunning()
@@ -159,9 +166,8 @@
var combinedBlur = (shadeSpring.radius * INTERACTION_BLUR_FRACTION +
normalizedBlurRadius * ANIMATION_BLUR_FRACTION).toInt()
combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsPanelExpansion))
+ combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(transitionToFullShadeProgress))
var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius).toFloat()
- val launchProgress = notificationLaunchAnimationParams?.linearProgress ?: 0f
- shadeRadius *= (1f - launchProgress) * (1f - launchProgress)
if (ignoreShadeBlurUntilHidden) {
if (shadeRadius == 0f) {
@@ -184,7 +190,8 @@
blur = 0
}
- blurUtils.applyBlur(blurRoot?.viewRootImpl ?: root.viewRootImpl, blur, scrimsVisible)
+ val opaque = scrimsVisible && !ignoreShadeBlurUntilHidden
+ blurUtils.applyBlur(blurRoot?.viewRootImpl ?: root.viewRootImpl, blur, opaque)
val zoomOut = blurUtils.ratioOfBlurRadius(blur)
try {
if (root.isAttachedToWindow && root.windowToken != null) {
@@ -323,7 +330,7 @@
velocity: Float,
direction: Int
) {
- if (isOnKeyguardNotDismissing()) {
+ if (shouldApplyShadeBlur()) {
if (expansion > 0f) {
// Blur view if user starts animating in the shade.
if (isClosed) {
@@ -370,7 +377,7 @@
private fun animateBlur(blur: Boolean, velocity: Float) {
isBlurred = blur
- val targetBlurNormalized = if (blur && isOnKeyguardNotDismissing()) {
+ val targetBlurNormalized = if (blur && shouldApplyShadeBlur()) {
1f
} else {
0f
@@ -382,7 +389,7 @@
private fun updateShadeBlur() {
var newBlur = 0
- if (isOnKeyguardNotDismissing()) {
+ if (shouldApplyShadeBlur()) {
newBlur = blurUtils.blurRadiusOfRatio(shadeExpansion)
}
shadeSpring.animateTo(newBlur)
@@ -397,7 +404,11 @@
choreographer.postFrameCallback(updateBlurCallback)
}
- private fun isOnKeyguardNotDismissing(): Boolean {
+ /**
+ * Should blur be applied to the shade currently. This is mainly used to make sure that
+ * on the lockscreen, the wallpaper isn't blurred.
+ */
+ private fun shouldApplyShadeBlur(): Boolean {
val state = statusBarStateController.state
return (state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) &&
!keyguardStateController.isKeyguardFadingAway
@@ -415,8 +426,6 @@
it.println("shadeAnimation: ${shadeAnimation.radius}")
it.println("globalActionsRadius: ${globalActionsSpring.radius}")
it.println("wakeAndUnlockBlur: $wakeAndUnlockBlurRadius")
- it.println("notificationLaunchAnimationProgress: " +
- "${notificationLaunchAnimationParams?.linearProgress}")
it.println("ignoreShadeBlurUntilHidden: $ignoreShadeBlurUntilHidden")
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 9dc4ac9..f7b3a35 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -20,14 +20,11 @@
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
-import android.os.SystemProperties;
import android.util.AttributeSet;
import android.util.MathUtils;
-import android.view.DisplayCutout;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
-import android.view.WindowInsets;
import android.view.accessibility.AccessibilityNodeInfo;
import com.android.internal.annotations.VisibleForTesting;
@@ -372,6 +369,9 @@
return;
}
+ final float smallCornerRadius =
+ getResources().getDimension(R.dimen.notification_corner_radius_small)
+ / getResources().getDimension(R.dimen.notification_corner_radius);
final float viewEnd = viewStart + anv.getActualHeight();
final float cornerAnimationDistance = mCornerAnimationDistance
* mAmbientState.getExpansionFraction();
@@ -387,7 +387,7 @@
} else if (viewEnd < cornerAnimationTop) {
// Fast scroll skips frames and leaves corners with unfinished rounding.
// Reset top and bottom corners outside of animation bounds.
- anv.setBottomRoundness(anv.isLastInSection() ? 1f : 0f,
+ anv.setBottomRoundness(anv.isLastInSection() ? 1f : smallCornerRadius,
false /* animate */);
}
@@ -401,7 +401,7 @@
} else if (viewStart < cornerAnimationTop) {
// Fast scroll skips frames and leaves corners with unfinished rounding.
// Reset top and bottom corners outside of animation bounds.
- anv.setTopRoundness(anv.isFirstInSection() ? 1f : 0f,
+ anv.setTopRoundness(anv.isFirstInSection() ? 1f : smallCornerRadius,
false /* animate */);
}
}
@@ -663,8 +663,8 @@
boolean isAppearing = row.isDrawingAppearAnimation() && !row.isInShelf();
iconState.hidden = isAppearing
|| (view instanceof ExpandableNotificationRow
- && ((ExpandableNotificationRow) view).isLowPriority()
- && mShelfIcons.hasMaxNumDot())
+ && ((ExpandableNotificationRow) view).isLowPriority()
+ && mShelfIcons.hasMaxNumDot())
|| (transitionAmount == 0.0f && !iconState.isAnimating(icon))
|| row.isAboveShelf()
|| row.showingPulsing()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
index c4e2279..bce39ce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
@@ -3,7 +3,6 @@
import android.view.ViewGroup
import com.android.internal.jank.InteractionJankMonitor
import com.android.systemui.animation.ActivityLaunchAnimator
-import com.android.systemui.statusbar.NotificationShadeDepthController
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone
@@ -15,7 +14,6 @@
class NotificationLaunchAnimatorControllerProvider(
private val notificationShadeWindowViewController: NotificationShadeWindowViewController,
private val notificationListContainer: NotificationListContainer,
- private val depthController: NotificationShadeDepthController,
private val headsUpManager: HeadsUpManagerPhone
) {
fun getAnimatorController(
@@ -24,7 +22,6 @@
return NotificationLaunchAnimatorController(
notificationShadeWindowViewController,
notificationListContainer,
- depthController,
notification,
headsUpManager
)
@@ -39,7 +36,6 @@
class NotificationLaunchAnimatorController(
private val notificationShadeWindowViewController: NotificationShadeWindowViewController,
private val notificationListContainer: NotificationListContainer,
- private val depthController: NotificationShadeDepthController,
private val notification: ExpandableNotificationRow,
private val headsUpManager: HeadsUpManagerPhone
) : ActivityLaunchAnimator.Controller {
@@ -128,7 +124,6 @@
private fun applyParams(params: ExpandAnimationParameters?) {
notification.applyExpandAnimationParams(params)
notificationListContainer.applyExpandAnimationParams(params)
- depthController.notificationLaunchAnimationParams = params
}
override fun onLaunchAnimationProgress(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
index 61f6ad5..b18f191 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
@@ -18,7 +18,6 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
@@ -84,7 +83,16 @@
* or {@link #setOverrideTintColor(int, float)}.
*/
protected static final int NO_COLOR = 0;
-
+ /**
+ * The content of the view should start showing at animation progress value of
+ * #ALPHA_APPEAR_START_FRACTION.
+ */
+ private static final float ALPHA_APPEAR_START_FRACTION = .4f;
+ /**
+ * The content should show fully with progress at #ALPHA_APPEAR_END_FRACTION
+ * The start of the animation is at #ALPHA_APPEAR_START_FRACTION
+ */
+ private static final float ALPHA_APPEAR_END_FRACTION = 1;
private static final Interpolator ACTIVATE_INVERSE_INTERPOLATOR
= new PathInterpolator(0.6f, 0, 0.5f, 1);
private static final Interpolator ACTIVATE_INVERSE_ALPHA_INTERPOLATOR
@@ -106,10 +114,8 @@
private final Interpolator mSlowOutFastInInterpolator;
private final Interpolator mSlowOutLinearInInterpolator;
private Interpolator mCurrentAppearInterpolator;
- private Interpolator mCurrentAlphaInterpolator;
NotificationBackgroundView mBackgroundNormal;
- private ObjectAnimator mBackgroundAnimator;
private RectF mAppearAnimationRect = new RectF();
private float mAnimationTranslationY;
private boolean mDrawingAppearAnimation;
@@ -475,8 +481,8 @@
private void startAppearAnimation(boolean isAppearing, float translationDirection, long delay,
long duration, final Runnable onFinishedRunnable,
AnimatorListenerAdapter animationListener) {
- cancelAppearAnimation();
mAnimationTranslationY = translationDirection * getActualHeight();
+ cancelAppearAnimation();
if (mAppearAnimationFraction == -1.0f) {
// not initialized yet, we start anew
if (isAppearing) {
@@ -492,15 +498,9 @@
float targetValue;
if (isAppearing) {
mCurrentAppearInterpolator = mSlowOutFastInInterpolator;
- mCurrentAlphaInterpolator = Interpolators.LINEAR_OUT_SLOW_IN;
targetValue = 1.0f;
- if (!mIsHeadsUpAnimation && isChildInGroup()) {
- // slower fade in of children to avoid visibly overlapping with other children
- mCurrentAlphaInterpolator = Interpolators.SLOW_OUT_LINEAR_IN;
- }
} else {
mCurrentAppearInterpolator = Interpolators.FAST_OUT_SLOW_IN;
- mCurrentAlphaInterpolator = mSlowOutLinearInInterpolator;
targetValue = 0.0f;
}
mAppearAnimator = ValueAnimator.ofFloat(mAppearAnimationFraction,
@@ -588,61 +588,23 @@
float translationFraction = mCurrentAppearInterpolator.getInterpolation(inverseFraction);
float translateYTotalAmount = translationFraction * mAnimationTranslationY;
mAppearAnimationTranslation = translateYTotalAmount;
-
- // handle width animation
- float widthFraction = (inverseFraction - (1.0f - HORIZONTAL_ANIMATION_START))
- / (HORIZONTAL_ANIMATION_START - HORIZONTAL_ANIMATION_END);
- widthFraction = Math.min(1.0f, Math.max(0.0f, widthFraction));
- widthFraction = mCurrentAppearInterpolator.getInterpolation(widthFraction);
- float startWidthFraction = HORIZONTAL_COLLAPSED_REST_PARTIAL;
- if (mIsHeadsUpAnimation && !mIsAppearing) {
- startWidthFraction = 0;
- }
- if (mIsAppearing && !mIsHeadsUpAnimation && isChildInGroup()) {
- // Children in a group (when not heads up) should simply fade in.
- startWidthFraction = 1;
- }
- float width = MathUtils.lerp(startWidthFraction, 1.0f, 1.0f - widthFraction)
- * getWidth();
- float left;
- float right;
- if (mIsHeadsUpAnimation) {
- left = MathUtils.lerp(mHeadsUpLocation, 0, 1.0f - widthFraction);
- right = left + width;
- } else {
- left = getWidth() * 0.5f - width / 2.0f;
- right = getWidth() - left;
- }
-
- // handle top animation
- float heightFraction = (inverseFraction - (1.0f - VERTICAL_ANIMATION_START)) /
- VERTICAL_ANIMATION_START;
- heightFraction = Math.max(0.0f, heightFraction);
- heightFraction = mCurrentAppearInterpolator.getInterpolation(heightFraction);
-
- float top;
- float bottom;
final int actualHeight = getActualHeight();
- if (mAnimationTranslationY > 0.0f) {
- bottom = actualHeight - heightFraction * mAnimationTranslationY * 0.1f
- - translateYTotalAmount;
- top = bottom * heightFraction;
- } else {
- top = heightFraction * (actualHeight + mAnimationTranslationY) * 0.1f -
- translateYTotalAmount;
- bottom = actualHeight * (1 - heightFraction) + top * heightFraction;
- }
- mAppearAnimationRect.set(left, top, right, bottom);
- setOutlineRect(left, top + mAppearAnimationTranslation, right,
- bottom + mAppearAnimationTranslation);
+ float bottom = actualHeight * mAppearAnimationFraction;
+
+ setOutlineRect(0, mAppearAnimationTranslation,
+ getWidth(), bottom + mAppearAnimationTranslation);
+ }
+
+ private float getAppearAnimationFraction() {
+ return mAppearAnimationFraction >= 0 ? mAppearAnimationFraction : 1;
}
private void updateAppearAnimationAlpha() {
- float contentAlphaProgress = mAppearAnimationFraction;
- contentAlphaProgress = contentAlphaProgress / (1.0f - ALPHA_ANIMATION_END);
- contentAlphaProgress = Math.min(1.0f, contentAlphaProgress);
- contentAlphaProgress = mCurrentAlphaInterpolator.getInterpolation(contentAlphaProgress);
- setContentAlpha(contentAlphaProgress);
+ float contentAlphaProgress = MathUtils.constrain(mAppearAnimationFraction,
+ ALPHA_APPEAR_START_FRACTION, ALPHA_APPEAR_END_FRACTION);
+ float range = ALPHA_APPEAR_END_FRACTION - ALPHA_APPEAR_START_FRACTION;
+ float alpha = (contentAlphaProgress - ALPHA_APPEAR_START_FRACTION) / range;
+ setContentAlpha(Interpolators.ALPHA_IN.getInterpolation(alpha));
}
private void setContentAlpha(float contentAlpha) {
@@ -665,6 +627,22 @@
getCurrentBackgroundRadiusBottom());
}
+ @Override
+ public float getCurrentBackgroundRadiusTop() {
+ float fraction = getAppearAnimationFraction();
+ return isHeadsUpAnimatingAway() || isHeadsUp()
+ ? mOutlineRadius * fraction
+ : super.getCurrentBackgroundRadiusTop();
+ }
+
+ @Override
+ public float getCurrentBackgroundRadiusBottom() {
+ float fraction = getAppearAnimationFraction();
+ return isHeadsUpAnimatingAway() || isHeadsUp()
+ ? mOutlineRadius * fraction
+ : super.getCurrentBackgroundRadiusBottom();
+ }
+
private void applyBackgroundRoundness(float topRadius, float bottomRadius) {
mBackgroundNormal.setRadius(topRadius, bottomRadius);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index d68271a..6fd5567 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -1997,23 +1997,6 @@
return false;
}
- @Override
- public float getCurrentTopRoundness() {
- if (mExpandAnimationRunning) {
- return mTopRoundnessDuringExpandAnimation;
- }
-
- return super.getCurrentTopRoundness();
- }
-
- @Override
- public float getCurrentBottomRoundness() {
- if (mExpandAnimationRunning) {
- return mBottomRoundnessDuringExpandAnimation;
- }
-
- return super.getCurrentBottomRoundness();
- }
public void applyExpandAnimationParams(ExpandAnimationParameters params) {
if (params == null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationFilter.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationFilter.java
index 6cd2290..5343cbf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationFilter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationFilter.java
@@ -117,16 +117,6 @@
NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_GO_TO_FULL_SHADE) {
hasGoToFullShadeEvent = true;
}
- if (ev.animationType == NotificationStackScrollLayout.AnimationEvent
- .ANIMATION_TYPE_HEADS_UP_DISAPPEAR) {
- customDelay = StackStateAnimator.ANIMATION_DELAY_HEADS_UP;
- } else if (ev.animationType == NotificationStackScrollLayout.AnimationEvent
- .ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK) {
- // We need both timeouts when clicking, one to delay it and one for the animation
- // to look nice
- customDelay = StackStateAnimator.ANIMATION_DELAY_HEADS_UP_CLICKED
- + StackStateAnimator.ANIMATION_DELAY_HEADS_UP;
- }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
index b60ef1d..63c5c80 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
@@ -258,16 +258,14 @@
}
}
- // Save (height of view before shelf, index of first view in shelf) from when shade is fully
+ // Save the index of first view in shelf from when shade is fully
// expanded. Consider updating these states in updateContentView instead so that we don't
// have to recalculate in every frame.
float currentY = -scrollY;
if (!ambientState.isOnKeyguard()) {
currentY += mNotificationScrimPadding;
}
- float previousY = 0;
state.firstViewInShelf = null;
- state.viewHeightBeforeShelf = -1;
for (int i = 0; i < state.visibleChildren.size(); i++) {
final ExpandableView view = state.visibleChildren.get(i);
@@ -285,17 +283,8 @@
&& !(view instanceof FooterView)
&& state.firstViewInShelf == null) {
state.firstViewInShelf = view;
- // There might be a section gap right before the shelf.
- // Limit the height of the view before the shelf so that it does not include
- // a gap and become taller than it normally is.
- state.viewHeightBeforeShelf = Math.min(getMaxAllowedChildHeight(view),
- ambientState.getStackEndHeight()
- - ambientState.getShelf().getIntrinsicHeight()
- - mPaddingBetweenElements
- - previousY);
}
}
- previousY = currentY;
currentY = currentY
+ getMaxAllowedChildHeight(view)
+ mPaddingBetweenElements;
@@ -454,16 +443,7 @@
}
// Clip height of view right before shelf.
- float maxViewHeight = getMaxAllowedChildHeight(view);
- if (ambientState.isExpansionChanging()
- && algorithmState.viewHeightBeforeShelf != -1) {
- final int indexOfFirstViewInShelf = algorithmState.visibleChildren.indexOf(
- algorithmState.firstViewInShelf);
- if (i == indexOfFirstViewInShelf - 1) {
- maxViewHeight = algorithmState.viewHeightBeforeShelf;
- }
- }
- viewState.height = (int) (maxViewHeight * expansionFraction);
+ viewState.height = (int) (getMaxAllowedChildHeight(view) * expansionFraction);
}
algorithmState.mCurrentYPosition += viewState.height
@@ -558,7 +538,7 @@
continue;
}
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
- if (!row.isHeadsUp()) {
+ if (!(row.isHeadsUp() || row.isHeadsUpAnimatingAway())) {
continue;
}
ExpandableViewState childState = row.getViewState();
@@ -605,6 +585,7 @@
}
}
if (row.isHeadsUpAnimatingAway()) {
+ childState.yTranslation = Math.max(childState.yTranslation, mHeadsUpInset);
childState.hidden = false;
}
}
@@ -737,11 +718,6 @@
public ExpandableView firstViewInShelf;
/**
- * Height of view right before the shelf.
- */
- public float viewHeightBeforeShelf;
-
- /**
* The children from the host view which are not gone.
*/
public final ArrayList<ExpandableView> visibleChildren = new ArrayList<>();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
index 883f9f2..83dc6df 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
@@ -63,8 +63,6 @@
public static final int ANIMATION_DELAY_PER_ELEMENT_MANUAL = 32;
public static final int ANIMATION_DELAY_PER_ELEMENT_GO_TO_FULL_SHADE = 48;
public static final int DELAY_EFFECT_MAX_INDEX_DIFFERENCE = 2;
- public static final int ANIMATION_DELAY_HEADS_UP = 120;
- public static final int ANIMATION_DELAY_HEADS_UP_CLICKED= 120;
private static final int MAX_STAGGER_COUNT = 5;
private static final HeadsUpAppearInterpolator HEADS_UP_APPEAR_INTERPOLATOR =
new HeadsUpAppearInterpolator();
@@ -424,7 +422,6 @@
if (event.headsUpFromBottom) {
mTmpState.yTranslation = mHeadsUpAppearHeightBottom;
} else {
- mTmpState.yTranslation = 0;
changingView.performAddAnimation(0, ANIMATION_DURATION_HEADS_UP_APPEAR_CLOSED,
true /* isHeadsUpAppear */);
}
@@ -436,24 +433,11 @@
.AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK) {
mHeadsUpDisappearChildren.add(changingView);
Runnable endRunnable = null;
- // We need some additional delay in case we were removed to make sure we're not
- // lagging
- int extraDelay = event.animationType == NotificationStackScrollLayout
- .AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK
- ? ANIMATION_DELAY_HEADS_UP_CLICKED
- : 0;
if (changingView.getParent() == null) {
// This notification was actually removed, so we need to add it transiently
mHostLayout.addTransientView(changingView, 0);
changingView.setTransientContainer(mHostLayout);
mTmpState.initFrom(changingView);
- mTmpState.yTranslation = 0;
- // We temporarily enable Y animations, the real filter will be combined
- // afterwards anyway
- mAnimationFilter.animateY = true;
- mAnimationProperties.delay = extraDelay + ANIMATION_DELAY_HEADS_UP;
- mAnimationProperties.duration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR;
- mTmpState.animateTo(changingView, mAnimationProperties);
endRunnable = () -> removeTransientView(changingView);
}
float targetLocation = 0;
@@ -483,8 +467,8 @@
// running anymore, the panel will instantly hide itself. We need to wait until
// the animation is fully finished for this though.
long removeAnimationDelay = changingView.performRemoveAnimation(
- ANIMATION_DURATION_HEADS_UP_DISAPPEAR + ANIMATION_DELAY_HEADS_UP,
- extraDelay, 0.0f, true /* isHeadsUpAppear */, targetLocation,
+ ANIMATION_DURATION_HEADS_UP_DISAPPEAR,
+ 0, 0.0f, true /* isHeadsUpAppear */, targetLocation,
endRunnable, getGlobalAnimationFinishedListener());
mAnimationProperties.delay += removeAnimationDelay;
} else if (endRunnable != null) {
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 f545710..dc71c10 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -2203,7 +2203,7 @@
final int qsPanelBottomY = calculateQsBottomPosition(computeQsExpansionFraction());
final boolean visible = (computeQsExpansionFraction() > 0 || qsPanelBottomY > 0)
&& !mShouldUseSplitNotificationShade;
- setQsExpansionEnabled(mAmbientState.getScrollY() == 0);
+ setQsExpansionEnabled(mAmbientState.getScrollY() == 0 && !mAmbientState.isShadeOpening());
if (!mShouldUseSplitNotificationShade) {
if (mTransitioningToFullShadeProgress > 0.0f) {
@@ -2226,6 +2226,8 @@
left = mNotificationStackScrollLayoutController.getLeft();
right = mNotificationStackScrollLayoutController.getRight();
}
+ // top should never be lower than bottom, otherwise it will be invisible.
+ top = Math.min(top, bottom);
applyQSClippingBounds(left, top, right, bottom, visible);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 8e8dcbd..06aedaa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -1424,7 +1424,6 @@
mNotificationAnimationProvider = new NotificationLaunchAnimatorControllerProvider(
mNotificationShadeWindowViewController,
mStackScrollerController.getNotificationListContainer(),
- mNotificationShadeDepthControllerLazy.get(),
mHeadsUpManager
);
@@ -2122,6 +2121,11 @@
mKeyguardViewMediator.hideWithAnimation(runner);
}
+ @Override
+ public void disableKeyguardBlurs() {
+ mMainThreadHandler.post(mKeyguardViewMediator::disableBlursUntilHidden);
+ }
+
public boolean isDeviceInVrMode() {
return mPresenter.isDeviceInVrMode();
}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java b/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java
index 9d0cc6a..65f236b 100644
--- a/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java
+++ b/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java
@@ -25,7 +25,6 @@
import android.service.quickaccesswallet.GetWalletCardsRequest;
import android.service.quickaccesswallet.QuickAccessWalletClient;
import android.service.quickaccesswallet.QuickAccessWalletClientImpl;
-import android.util.Log;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
@@ -143,10 +142,6 @@
*/
public void queryWalletCards(
QuickAccessWalletClient.OnWalletCardsRetrievedCallback cardsRetriever) {
- if (!mWalletEnabled) {
- Log.w(TAG, "QuickAccessWallet is unavailable, unable to query cards.");
- return;
- }
int cardWidth =
mContext.getResources().getDimensionPixelSize(R.dimen.wallet_tile_card_view_width);
int cardHeight =
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java
index c6123e7..236954b 100644
--- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java
@@ -24,6 +24,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.service.quickaccesswallet.QuickAccessWalletClient;
+import android.service.quickaccesswallet.WalletServiceEvent;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -51,7 +52,8 @@
/**
* Displays Wallet carousel screen inside an activity.
*/
-public class WalletActivity extends LifecycleActivity {
+public class WalletActivity extends LifecycleActivity implements
+ QuickAccessWalletClient.WalletServiceEventListener {
private static final String TAG = "WalletActivity";
private final KeyguardStateController mKeyguardStateController;
@@ -63,6 +65,8 @@
private final UserTracker mUserTracker;
private final StatusBarKeyguardViewManager mKeyguardViewManager;
private WalletScreenController mWalletScreenController;
+ private QuickAccessWalletClient mWalletClient;
+ private boolean mHasRegisteredListener;
@Inject
public WalletActivity(
@@ -102,11 +106,11 @@
getActionBar().setHomeActionContentDescription(R.string.accessibility_desc_close);
WalletView walletView = requireViewById(R.id.wallet_view);
- QuickAccessWalletClient walletClient = QuickAccessWalletClient.create(this);
+ mWalletClient = QuickAccessWalletClient.create(this);
mWalletScreenController = new WalletScreenController(
this,
walletView,
- walletClient,
+ mWalletClient,
mActivityStarter,
mExecutor,
mHandler,
@@ -116,7 +120,7 @@
walletView.getAppButton().setOnClickListener(
v -> {
- if (walletClient.createWalletIntent() == null) {
+ if (mWalletClient.createWalletIntent() == null) {
Log.w(TAG, "Unable to create wallet app intent.");
return;
}
@@ -127,12 +131,12 @@
if (mKeyguardStateController.isUnlocked()) {
mActivityStarter.startActivity(
- walletClient.createWalletIntent(), true);
+ mWalletClient.createWalletIntent(), true);
finish();
} else {
mKeyguardDismissUtil.executeWhenUnlocked(() -> {
mActivityStarter.startActivity(
- walletClient.createWalletIntent(), true);
+ mWalletClient.createWalletIntent(), true);
finish();
return false;
}, false, true);
@@ -154,6 +158,11 @@
@Override
protected void onStart() {
super.onStart();
+ if (!mHasRegisteredListener) {
+ // Listener is registered even when device is locked. Should only be registered once.
+ mWalletClient.addWalletServiceEventListener(this);
+ mHasRegisteredListener = true;
+ }
mKeyguardStateController.addCallback(mWalletScreenController);
}
@@ -178,6 +187,24 @@
return super.onCreateOptionsMenu(menu);
}
+ /**
+ * Implements {@link QuickAccessWalletClient.WalletServiceEventListener}. Called when the wallet
+ * application propagates an event, such as an NFC tap, to the quick access wallet view.
+ */
+ @Override
+ public void onWalletServiceEvent(WalletServiceEvent event) {
+ switch (event.getEventType()) {
+ case WalletServiceEvent.TYPE_NFC_PAYMENT_STARTED:
+ finish();
+ break;
+ case WalletServiceEvent.TYPE_WALLET_CARDS_UPDATED:
+ mWalletScreenController.queryWalletCards();
+ break;
+ default:
+ Log.w(TAG, "onWalletServiceEvent: Unknown event type");
+ }
+ }
+
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int itemId = item.getItemId();
@@ -198,6 +225,8 @@
protected void onDestroy() {
mKeyguardStateController.removeCallback(mWalletScreenController);
mWalletScreenController.onDismissed();
+ mWalletClient.removeWalletServiceEventListener(this);
+ mHasRegisteredListener = false;
super.onDestroy();
}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
index 8da80ca..96a3087 100644
--- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
@@ -30,7 +30,6 @@
import android.service.quickaccesswallet.QuickAccessWalletClient;
import android.service.quickaccesswallet.SelectWalletCardRequest;
import android.service.quickaccesswallet.WalletCard;
-import android.service.quickaccesswallet.WalletServiceEvent;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -55,7 +54,6 @@
public class WalletScreenController implements
WalletCardCarousel.OnSelectionListener,
QuickAccessWalletClient.OnWalletCardsRetrievedCallback,
- QuickAccessWalletClient.WalletServiceEventListener,
KeyguardStateController.Callback {
private static final String TAG = "WalletScreenCtrl";
@@ -77,7 +75,6 @@
@VisibleForTesting String mSelectedCardId;
@VisibleForTesting boolean mIsDismissed;
- private boolean mHasRegisteredListener;
public WalletScreenController(
Context context,
@@ -117,6 +114,7 @@
if (mIsDismissed) {
return;
}
+ Log.i(TAG, "Successfully retrieved wallet cards.");
List<WalletCard> walletCards = response.getWalletCards();
List<WalletCardViewInfo> data = new ArrayList<>(walletCards.size());
for (WalletCard card : walletCards) {
@@ -158,26 +156,6 @@
});
}
- /**
- * Implements {@link QuickAccessWalletClient.WalletServiceEventListener}. Called when the wallet
- * application propagates an event, such as an NFC tap, to the quick access wallet view.
- */
- @Override
- public void onWalletServiceEvent(WalletServiceEvent event) {
- if (mIsDismissed) {
- return;
- }
- switch (event.getEventType()) {
- case WalletServiceEvent.TYPE_NFC_PAYMENT_STARTED:
- break;
- case WalletServiceEvent.TYPE_WALLET_CARDS_UPDATED:
- queryWalletCards();
- break;
- default:
- Log.w(TAG, "onWalletServiceEvent: Unknown event type");
- }
- }
-
@Override
public void onKeyguardFadingAwayChanged() {
queryWalletCards();
@@ -236,11 +214,6 @@
if (cardWidthPx == 0 || cardHeightPx == 0) {
return;
}
- if (!mHasRegisteredListener) {
- // Listener is registered even when device is locked. Should only be registered once.
- mWalletClient.addWalletServiceEventListener(this);
- mHasRegisteredListener = true;
- }
mWalletView.show();
mWalletView.hideErrorMessage();
@@ -261,7 +234,6 @@
mSelectedCardId = null;
mHandler.removeCallbacks(mSelectionRunnable);
mWalletClient.notifyWalletDismissed();
- mWalletClient.removeWalletServiceEventListener(this);
mWalletView.animateDismissal();
// clear refs to the Wallet Activity
mContext = null;
@@ -282,7 +254,6 @@
mWalletView.hide();
mPrefs.edit().putInt(PREFS_WALLET_VIEW_HEIGHT, 0).apply();
} else {
- logo.setTint(mContext.getColor(R.color.GM2_grey_900));
mWalletView.showEmptyStateView(
logo,
logoContentDesc,
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java
index bf146b6..4f83abf 100644
--- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java
@@ -161,10 +161,12 @@
OnClickListener clickListener) {
mEmptyStateView.setVisibility(VISIBLE);
mErrorView.setVisibility(GONE);
- mCardCarouselContainer.setVisibility(GONE);
+ mCardCarousel.setVisibility(GONE);
+ mIcon.setImageDrawable(logo);
+ mIcon.setContentDescription(logoContentDescription);
+ mCardLabel.setText(R.string.wallet_empty_state_label);
ImageView logoView = mEmptyStateView.requireViewById(R.id.empty_state_icon);
- logoView.setImageDrawable(logo);
- logoView.setContentDescription(logoContentDescription);
+ logoView.setImageDrawable(mContext.getDrawable(R.drawable.ic_qs_plus));
mEmptyStateView.<TextView>requireViewById(R.id.empty_state_title).setText(label);
mEmptyStateView.setOnClickListener(clickListener);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt
index d499011..2c7d291 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt
@@ -123,6 +123,7 @@
waitForIdleSync()
verify(controller).onIntentStarted(willAnimateCaptor.capture())
+ verify(keyguardHandler).disableKeyguardBlurs()
verify(keyguardHandler).hideKeyguardWithAnimation(any())
assertTrue(willAnimateCaptor.value)
@@ -189,6 +190,10 @@
) : ActivityLaunchAnimator.KeyguardHandler {
override fun isOnKeyguard(): Boolean = isOnKeyguard
+ override fun disableKeyguardBlurs() {
+ // Do nothing
+ }
+
override fun hideKeyguardWithAnimation(runner: IRemoteAnimationRunner) {
// Do nothing.
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
index e6f9aaf..d9b56a4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -46,6 +46,7 @@
import com.android.systemui.classifier.FalsingCollectorFake;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.navigationbar.NavigationModeController;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
@@ -82,6 +83,7 @@
private @Mock DozeParameters mDozeParameters;
private @Mock SysuiStatusBarStateController mStatusBarStateController;
private @Mock KeyguardStateController mKeyguardStateController;
+ private @Mock NotificationShadeDepthController mNotificationShadeDepthController;
private @Mock KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
private @Mock UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake();
@@ -104,7 +106,7 @@
mPowerManager, mTrustManager, mDeviceConfig, mNavigationModeController,
mKeyguardDisplayManager, mDozeParameters, mStatusBarStateController,
mKeyguardStateController, () -> mKeyguardUnlockAnimationController,
- mUnlockedScreenOffAnimationController);
+ mUnlockedScreenOffAnimationController, () -> mNotificationShadeDepthController);
mViewMediator.start();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
index 580cd35..6d1bbd9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
@@ -17,9 +17,9 @@
package com.android.systemui.qs.tiles
import android.content.ComponentName
-import android.os.Handler
import android.content.Context
import android.content.Intent
+import android.os.Handler
import android.provider.Settings
import android.service.quicksettings.Tile
import android.testing.AndroidTestingRunner
@@ -52,14 +52,17 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.doNothing
import org.mockito.Mockito.never
+import org.mockito.Mockito.nullable
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyZeroInteractions
import org.mockito.MockitoAnnotations
import java.util.Optional
@@ -95,6 +98,8 @@
@Captor
private lateinit var listingCallbackCaptor:
ArgumentCaptor<ControlsListingController.ControlsListingCallback>
+ @Captor
+ private lateinit var intentCaptor: ArgumentCaptor<Intent>
private lateinit var testableLooper: TestableLooper
private lateinit var tile: DeviceControlsTile
@@ -259,21 +264,21 @@
}
@Test
- fun testNoDialogWhenUnavailable() {
+ fun handleClick_unavailable_noActivityStarted() {
tile.click(null /* view */)
testableLooper.processAllMessages()
- verify(activityStarter, never()).startActivity(any(), anyBoolean(),
- any<ActivityLaunchAnimator.Controller>())
+ verifyZeroInteractions(activityStarter)
}
@Test
- fun testDialogShowWhenAvailable() {
+ fun handleClick_availableAndLocked_activityStarted() {
verify(controlsListingController).observe(
any(LifecycleOwner::class.java),
capture(listingCallbackCaptor)
)
`when`(controlsComponent.getVisibility()).thenReturn(ControlsComponent.Visibility.AVAILABLE)
+ `when`(keyguardStateController.isUnlocked).thenReturn(false)
listingCallbackCaptor.value.onServicesUpdated(listOf(serviceInfo))
testableLooper.processAllMessages()
@@ -281,18 +286,44 @@
tile.click(null /* view */)
testableLooper.processAllMessages()
- verify(activityStarter).startActivity(any(), eq(true) /* dismissShade */,
- eq(null) as ActivityLaunchAnimator.Controller?)
+ // The activity should be started right away and not require a keyguard dismiss.
+ verifyZeroInteractions(activityStarter)
+ verify(spiedContext).startActivity(intentCaptor.capture())
+ assertThat(intentCaptor.value.component?.className).isEqualTo(CONTROLS_ACTIVITY_CLASS_NAME)
}
@Test
- fun testNoDialogWhenInactive() {
+ fun handleClick_availableAndUnlocked_activityStarted() {
+ verify(controlsListingController).observe(
+ any(LifecycleOwner::class.java),
+ capture(listingCallbackCaptor)
+ )
+ `when`(controlsComponent.getVisibility()).thenReturn(ControlsComponent.Visibility.AVAILABLE)
+ `when`(keyguardStateController.isUnlocked).thenReturn(true)
+
+ listingCallbackCaptor.value.onServicesUpdated(listOf(serviceInfo))
+ testableLooper.processAllMessages()
+
+ tile.click(null /* view */)
+ testableLooper.processAllMessages()
+
+ verify(activityStarter, never()).postStartActivityDismissingKeyguard(any(), anyInt())
+ verify(activityStarter).startActivity(
+ intentCaptor.capture(),
+ eq(true) /* dismissShade */,
+ nullable(ActivityLaunchAnimator.Controller::class.java))
+ assertThat(intentCaptor.value.component?.className).isEqualTo(CONTROLS_ACTIVITY_CLASS_NAME)
+ }
+
+ @Test
+ fun handleClick_availableAfterUnlockAndIsLocked_keyguardDismissRequired() {
verify(controlsListingController).observe(
any(LifecycleOwner::class.java),
capture(listingCallbackCaptor)
)
`when`(controlsComponent.getVisibility())
.thenReturn(ControlsComponent.Visibility.AVAILABLE_AFTER_UNLOCK)
+ `when`(keyguardStateController.isUnlocked).thenReturn(false)
listingCallbackCaptor.value.onServicesUpdated(listOf(serviceInfo))
testableLooper.processAllMessages()
@@ -300,8 +331,39 @@
tile.click(null /* view */)
testableLooper.processAllMessages()
- verify(activityStarter, never()).startActivity(any(), anyBoolean(),
- any<ActivityLaunchAnimator.Controller>())
+ verify(activityStarter, never()).startActivity(
+ any(),
+ anyBoolean() /* dismissShade */,
+ nullable(ActivityLaunchAnimator.Controller::class.java))
+ verify(activityStarter).postStartActivityDismissingKeyguard(
+ intentCaptor.capture(),
+ anyInt(),
+ nullable(ActivityLaunchAnimator.Controller::class.java))
+ assertThat(intentCaptor.value.component?.className).isEqualTo(CONTROLS_ACTIVITY_CLASS_NAME)
+ }
+
+ @Test
+ fun handleClick_availableAfterUnlockAndIsUnlocked_activityStarted() {
+ verify(controlsListingController).observe(
+ any(LifecycleOwner::class.java),
+ capture(listingCallbackCaptor)
+ )
+ `when`(controlsComponent.getVisibility())
+ .thenReturn(ControlsComponent.Visibility.AVAILABLE_AFTER_UNLOCK)
+ `when`(keyguardStateController.isUnlocked).thenReturn(true)
+
+ listingCallbackCaptor.value.onServicesUpdated(listOf(serviceInfo))
+ testableLooper.processAllMessages()
+
+ tile.click(null /* view */)
+ testableLooper.processAllMessages()
+
+ verify(activityStarter, never()).postStartActivityDismissingKeyguard(any(), anyInt())
+ verify(activityStarter).startActivity(
+ intentCaptor.capture(),
+ eq(true) /* dismissShade */,
+ nullable(ActivityLaunchAnimator.Controller::class.java))
+ assertThat(intentCaptor.value.component?.className).isEqualTo(CONTROLS_ACTIVITY_CLASS_NAME)
}
private fun createTile(): DeviceControlsTile {
@@ -319,3 +381,5 @@
)
}
}
+
+private const val CONTROLS_ACTIVITY_CLASS_NAME = "com.android.systemui.controls.ui.ControlsActivity"
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
index b09afab..09b0427 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
@@ -46,7 +46,6 @@
import android.graphics.drawable.Icon;
import android.os.Handler;
import android.service.quickaccesswallet.GetWalletCardsError;
-import android.service.quickaccesswallet.GetWalletCardsRequest;
import android.service.quickaccesswallet.GetWalletCardsResponse;
import android.service.quickaccesswallet.QuickAccessWalletClient;
import android.service.quickaccesswallet.QuickAccessWalletService;
@@ -75,8 +74,6 @@
import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.wallet.controller.QuickAccessWalletController;
-import com.google.common.util.concurrent.MoreExecutors;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -126,8 +123,6 @@
@Captor
ArgumentCaptor<Intent> mIntentCaptor;
@Captor
- ArgumentCaptor<GetWalletCardsRequest> mRequestCaptor;
- @Captor
ArgumentCaptor<QuickAccessWalletClient.OnWalletCardsRetrievedCallback> mCallbackCaptor;
private Context mSpiedContext;
@@ -163,7 +158,6 @@
mKeyguardStateController,
mPackageManager,
mSecureSettings,
- MoreExecutors.directExecutor(),
mController,
mFeatureFlags);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageExporterTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageExporterTest.java
index b0f78ad..7d56339 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageExporterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageExporterTest.java
@@ -25,7 +25,6 @@
import android.content.ContentResolver;
import android.content.ContentValues;
-import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
@@ -39,7 +38,6 @@
import androidx.exifinterface.media.ExifInterface;
import androidx.test.filters.MediumTest;
-import androidx.test.platform.app.InstrumentationRegistry;
import com.android.systemui.SysuiTestCase;
@@ -92,8 +90,7 @@
@Test
public void testImageExport() throws ExecutionException, InterruptedException, IOException {
- Context context = InstrumentationRegistry.getInstrumentation().getContext();
- ContentResolver contentResolver = context.getContentResolver();
+ ContentResolver contentResolver = mContext.getContentResolver();
ImageExporter exporter = new ImageExporter(contentResolver);
UUID requestId = UUID.fromString("3c11da99-9284-4863-b1d5-6f3684976814");
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureClientTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureClientTest.java
index cf7dc20..d95063f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureClientTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureClientTest.java
@@ -26,11 +26,8 @@
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
-import static java.util.Objects.requireNonNull;
-
import android.content.Context;
import android.graphics.Rect;
-import android.hardware.display.DisplayManager;
import android.os.RemoteException;
import android.testing.AndroidTestingRunner;
import android.view.Display;
@@ -63,17 +60,12 @@
public class ScrollCaptureClientTest extends SysuiTestCase {
private static final float MAX_PAGES = 3.0f;
- private Context mContext;
private IWindowManager mWm;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
Context context = InstrumentationRegistry.getInstrumentation().getContext();
- DisplayManager displayManager = requireNonNull(
- context.getSystemService(DisplayManager.class));
- mContext = context.createDisplayContext(
- displayManager.getDisplay(Display.DEFAULT_DISPLAY));
mWm = mock(IWindowManager.class);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureFrameworkSmokeTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureFrameworkSmokeTest.java
index 54d9732..de97bc3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureFrameworkSmokeTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureFrameworkSmokeTest.java
@@ -35,6 +35,7 @@
import com.android.systemui.SysuiTestCase;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -46,6 +47,7 @@
*/
@RunWith(AndroidTestingRunner.class)
@SmallTest
+@Ignore
public class ScrollCaptureFrameworkSmokeTest extends SysuiTestCase {
private static final String TAG = "ScrollCaptureFrameworkSmokeTest";
private volatile ScrollCaptureResponse mResponse;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
index 18b6c30..18cf1c8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
@@ -68,6 +68,7 @@
@Mock lateinit var notificationPanelController: NotificationPanelViewController
@Mock lateinit var nsslController: NotificationStackScrollLayoutController
@Mock lateinit var featureFlags: FeatureFlags
+ @Mock lateinit var depthController: NotificationShadeDepthController
@Mock lateinit var stackscroller: NotificationStackScrollLayout
@Mock lateinit var expandHelperCallback: ExpandHelper.Callback
@Mock lateinit var statusbar: StatusBar
@@ -94,7 +95,8 @@
featureFlags = featureFlags,
context = context,
configurationController = configurationController,
- falsingManager = falsingManager
+ falsingManager = falsingManager,
+ depthController = depthController
)
whenever(nsslController.view).thenReturn(stackscroller)
whenever(nsslController.expandHelperCallback).thenReturn(expandHelperCallback)
@@ -221,5 +223,6 @@
verify(notificationPanelController).setTransitionToFullShadeAmount(anyFloat(),
anyBoolean(), anyLong())
verify(qS).setTransitionToFullShadeAmount(anyFloat(), anyBoolean())
+ verify(depthController).transitionToFullShadeProgress = anyFloat()
}
}
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 4169cdd..61c3835 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
@@ -27,7 +27,6 @@
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
-import com.android.systemui.statusbar.notification.ExpandAnimationParameters
import com.android.systemui.statusbar.phone.BiometricUnlockController
import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.phone.ScrimController
@@ -185,6 +184,13 @@
}
@Test
+ fun setFullShadeTransition_appliesBlur() {
+ notificationShadeDepthController.transitionToFullShadeProgress = 1f
+ notificationShadeDepthController.updateBlurCallback.doFrame(0)
+ verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false))
+ }
+
+ @Test
fun updateGlobalDialogVisibility_animatesBlur() {
notificationShadeDepthController.updateGlobalDialogVisibility(0.5f, root)
verify(globalActionsSpring).animateTo(eq(maxBlur / 2), eq(root))
@@ -230,12 +236,10 @@
}
@Test
- fun updateBlurCallback_appLaunchAnimation_overridesZoom() {
+ fun updateBlurCallback_ignoreShadeBlurUntilHidden_overridesZoom() {
`when`(shadeSpring.radius).thenReturn(maxBlur)
`when`(shadeAnimation.radius).thenReturn(maxBlur)
- val animProgress = ExpandAnimationParameters()
- animProgress.linearProgress = 1f
- notificationShadeDepthController.notificationLaunchAnimationParams = animProgress
+ notificationShadeDepthController.ignoreShadeBlurUntilHidden = true
notificationShadeDepthController.updateBlurCallback.doFrame(0)
verify(blurUtils).applyBlur(any(), eq(0), eq(false))
}
@@ -256,21 +260,17 @@
}
@Test
- fun setNotificationLaunchAnimationParams_schedulesFrame() {
- val animProgress = ExpandAnimationParameters()
- animProgress.linearProgress = 0.5f
- notificationShadeDepthController.notificationLaunchAnimationParams = animProgress
+ fun ignoreShadeBlurUntilHidden_schedulesFrame() {
+ notificationShadeDepthController.ignoreShadeBlurUntilHidden = true
verify(choreographer).postFrameCallback(
eq(notificationShadeDepthController.updateBlurCallback))
}
@Test
- fun setNotificationLaunchAnimationParams_whennNull_ignoresIfShadeHasNoBlur() {
- val animProgress = ExpandAnimationParameters()
- animProgress.linearProgress = 0.5f
+ fun ignoreShadeBlurUntilHidden_whennNull_ignoresIfShadeHasNoBlur() {
`when`(shadeSpring.radius).thenReturn(0)
`when`(shadeAnimation.radius).thenReturn(0)
- notificationShadeDepthController.notificationLaunchAnimationParams = animProgress
+ notificationShadeDepthController.ignoreShadeBlurUntilHidden = true
verify(shadeSpring, never()).animateTo(anyInt(), any())
verify(shadeAnimation, never()).animateTo(anyInt(), any())
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
index 407afbe..37a6d21 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
@@ -61,7 +61,6 @@
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.NotificationActivityStarter;
@@ -191,7 +190,6 @@
new NotificationLaunchAnimatorControllerProvider(
mock(NotificationShadeWindowViewController.class), mock(
NotificationListContainer.class),
- mock(NotificationShadeDepthController.class),
headsUpManager);
mNotificationActivityStarter =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/QuickAccessWalletControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/QuickAccessWalletControllerTest.java
index 33666bc..23abce0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/QuickAccessWalletControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/QuickAccessWalletControllerTest.java
@@ -21,9 +21,7 @@
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -127,17 +125,7 @@
}
@Test
- public void queryWalletCards_walletNotEnabled_notQuery() {
- when(mQuickAccessWalletClient.isWalletServiceAvailable()).thenReturn(false);
-
- mController.queryWalletCards(mCardsRetriever);
-
- verify(mQuickAccessWalletClient, never()).getWalletCards(any(), any(), any());
- }
-
- @Test
public void queryWalletCards_walletEnabled_queryCards() {
- mController.updateWalletPreference();
mController.queryWalletCards(mCardsRetriever);
verify(mQuickAccessWalletClient)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wallet/ui/WalletScreenControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/wallet/ui/WalletScreenControllerTest.java
index cd1eb1c..01623d6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wallet/ui/WalletScreenControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wallet/ui/WalletScreenControllerTest.java
@@ -20,13 +20,9 @@
import static android.view.View.VISIBLE;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import android.app.PendingIntent;
@@ -43,7 +39,6 @@
import android.service.quickaccesswallet.QuickAccessWalletClient;
import android.service.quickaccesswallet.QuickAccessWalletService;
import android.service.quickaccesswallet.WalletCard;
-import android.service.quickaccesswallet.WalletServiceEvent;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -250,7 +245,7 @@
callback.onWalletCardsRetrieved(response);
mTestableLooper.processAllMessages();
- assertEquals(GONE, mWalletView.getCardCarouselContainer().getVisibility());
+ assertEquals(GONE, mWalletView.getCardCarousel().getVisibility());
assertEquals(VISIBLE, mWalletView.getEmptyStateView().getVisibility());
assertEquals(GONE, mWalletView.getErrorView().getVisibility());
}
@@ -267,7 +262,7 @@
mCallbackCaptor.getValue().onWalletCardsRetrieved(response);
mTestableLooper.processAllMessages();
- assertEquals(GONE, mWalletView.getCardCarouselContainer().getVisibility());
+ assertEquals(GONE, mWalletView.getCardCarousel().getVisibility());
assertEquals(VISIBLE, mWalletView.getEmptyStateView().getVisibility());
assertEquals(GONE, mWalletView.getErrorView().getVisibility());
}
@@ -292,40 +287,6 @@
}
@Test
- public void onWalletServiceEvent_nfcPaymentStart_doNothing() {
- WalletServiceEvent event =
- new WalletServiceEvent(WalletServiceEvent.TYPE_NFC_PAYMENT_STARTED);
-
- mController.onWalletServiceEvent(event);
- mTestableLooper.processAllMessages();
-
- assertNull(mController.mSelectedCardId);
- assertFalse(mController.mIsDismissed);
- verifyZeroInteractions(mWalletClient);
- }
-
- @Test
- public void onWalletServiceEvent_walletCardsUpdate_queryCards() {
- mController.queryWalletCards();
-
- verify(mWalletClient).addWalletServiceEventListener(mListenerCaptor.capture());
-
- WalletServiceEvent event =
- new WalletServiceEvent(WalletServiceEvent.TYPE_WALLET_CARDS_UPDATED);
-
- QuickAccessWalletClient.WalletServiceEventListener listener = mListenerCaptor.getValue();
- listener.onWalletServiceEvent(event);
- mTestableLooper.processAllMessages();
-
- verify(mWalletClient, times(2))
- .getWalletCards(any(), mRequestCaptor.capture(), mCallbackCaptor.capture());
-
- GetWalletCardsRequest request = mRequestCaptor.getValue();
-
- assertEquals(MAX_CARDS, request.getMaxCards());
- }
-
- @Test
public void onKeyguardFadingAwayChanged_queryCards() {
mController.onKeyguardFadingAwayChanged();
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 9abe00f..7eecc45 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -710,6 +710,34 @@
}
@Override
+ public boolean removeClient(IAccessibilityManagerClient callback, int userId) {
+ // TODO(b/190216606): Add tracing for removeClient when implementation is the same in master
+
+ synchronized (mLock) {
+ final int resolvedUserId = mSecurityPolicy
+ .resolveCallingUserIdEnforcingPermissionsLocked(userId);
+
+ AccessibilityUserState userState = getUserStateLocked(resolvedUserId);
+ if (mSecurityPolicy.isCallerInteractingAcrossUsers(userId)) {
+ boolean unregistered = mGlobalClients.unregister(callback);
+ if (DEBUG) {
+ Slog.i(LOG_TAG,
+ "Removed global client for pid:" + Binder.getCallingPid() + "state: "
+ + unregistered);
+ }
+ return unregistered;
+ } else {
+ boolean unregistered = userState.mUserClients.unregister(callback);
+ if (DEBUG) {
+ Slog.i(LOG_TAG, "Removed user client for pid:" + Binder.getCallingPid()
+ + " and userId:" + resolvedUserId + "state: " + unregistered);
+ }
+ return unregistered;
+ }
+ }
+ }
+
+ @Override
public void sendAccessibilityEvent(AccessibilityEvent event, int userId) {
if (mTraceManager.isA11yTracingEnabled()) {
mTraceManager.logTrace(LOG_TAG + ".sendAccessibilityEvent",
@@ -3271,6 +3299,14 @@
pw.println();
}
mA11yWindowManager.dump(fd, pw, args);
+ pw.println("Global client list info:{");
+ mGlobalClients.dump(pw, " Client list ");
+ pw.println(" Registered clients:{");
+ for (int i = 0; i < mGlobalClients.getRegisteredCallbackCount(); i++) {
+ AccessibilityManagerService.Client client = (AccessibilityManagerService.Client)
+ mGlobalClients.getRegisteredCallbackCookie(i);
+ pw.append(Arrays.toString(client.mPackageNames));
+ }
}
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
index df349c8..0fde0de 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
@@ -51,6 +51,7 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -573,6 +574,15 @@
pw.append(componentName.toShortString());
}
}
+ pw.println("}");
+ pw.println(" Client list info:{");
+ mUserClients.dump(pw, " Client list ");
+ pw.println(" Registered clients:{");
+ for (int i = 0; i < mUserClients.getRegisteredCallbackCount(); i++) {
+ AccessibilityManagerService.Client client = (AccessibilityManagerService.Client)
+ mUserClients.getRegisteredCallbackCookie(i);
+ pw.append(Arrays.toString(client.mPackageNames));
+ }
pw.println("}]");
}
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 6dd4f04..afaddd9 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -1930,7 +1930,6 @@
decActiveForegroundAppLocked(smap, r);
}
r.isForeground = false;
- resetFgsRestrictionLocked(r);
r.mFgsExitTime = SystemClock.uptimeMillis();
ServiceState stracker = r.getTracker();
if (stracker != null) {
@@ -1945,6 +1944,7 @@
FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__STATE__EXIT,
r.mFgsExitTime > r.mFgsEnterTime
? (int)(r.mFgsExitTime - r.mFgsEnterTime) : 0);
+ resetFgsRestrictionLocked(r);
mAm.updateForegroundServiceUsageStats(r.name, r.userId, false);
if (r.app != null) {
mAm.updateLruProcessLocked(r.app, false, null);
@@ -4192,8 +4192,7 @@
r.isForeground = false;
r.foregroundId = 0;
r.foregroundNoti = null;
- r.mAllowWhileInUsePermissionInFgs = false;
- r.mAllowStartForeground = REASON_DENIED;
+ resetFgsRestrictionLocked(r);
// Clear start entries.
r.clearDeliveredStartsLocked();
diff --git a/services/core/java/com/android/server/am/AppExitInfoTracker.java b/services/core/java/com/android/server/am/AppExitInfoTracker.java
index 1b5483a..abb8243 100644
--- a/services/core/java/com/android/server/am/AppExitInfoTracker.java
+++ b/services/core/java/com/android/server/am/AppExitInfoTracker.java
@@ -24,6 +24,7 @@
import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import android.annotation.CurrentTimeMillisLong;
import android.annotation.Nullable;
import android.app.ApplicationExitInfo;
import android.app.ApplicationExitInfo.Reason;
@@ -287,8 +288,8 @@
if (!mAppExitInfoLoaded.get()) {
return;
}
- mKillHandler.obtainMessage(KillHandler.MSG_PROC_DIED, obtainRawRecord(app))
- .sendToTarget();
+ mKillHandler.obtainMessage(KillHandler.MSG_PROC_DIED,
+ obtainRawRecord(app, System.currentTimeMillis())).sendToTarget();
}
void scheduleNoteAppKill(final ProcessRecord app, final @Reason int reason,
@@ -300,7 +301,7 @@
return;
}
- ApplicationExitInfo raw = obtainRawRecord(app);
+ ApplicationExitInfo raw = obtainRawRecord(app, System.currentTimeMillis());
raw.setReason(reason);
raw.setSubReason(subReason);
raw.setDescription(msg);
@@ -542,7 +543,8 @@
return AppExitInfoTracker.FOREACH_ACTION_NONE;
});
- Collections.sort(list, (a, b) -> (int) (b.getTimestamp() - a.getTimestamp()));
+ Collections.sort(list,
+ (a, b) -> Long.compare(b.getTimestamp(), a.getTimestamp()));
int size = list.size();
if (maxNum > 0) {
size = Math.min(size, maxNum);
@@ -976,7 +978,7 @@
}
@VisibleForTesting
- ApplicationExitInfo obtainRawRecord(ProcessRecord app) {
+ ApplicationExitInfo obtainRawRecord(ProcessRecord app, @CurrentTimeMillisLong long timestamp) {
ApplicationExitInfo info = mRawRecordsPool.acquire();
if (info == null) {
info = new ApplicationExitInfo();
@@ -998,7 +1000,7 @@
info.setImportance(procStateToImportance(app.mState.getSetProcState()));
info.setPss(app.mProfile.getLastPss());
info.setRss(app.mProfile.getLastRss());
- info.setTimestamp(System.currentTimeMillis());
+ info.setTimestamp(timestamp);
}
return info;
@@ -1298,7 +1300,7 @@
results.add(mInfos.valueAt(i));
}
Collections.sort(results,
- (a, b) -> (int) (b.getTimestamp() - a.getTimestamp()));
+ (a, b) -> Long.compare(b.getTimestamp(), a.getTimestamp()));
} else {
if (maxNum == 1) {
// Most of the caller might be only interested with the most recent one
@@ -1318,7 +1320,7 @@
list.add(mInfos.valueAt(i));
}
Collections.sort(list,
- (a, b) -> (int) (b.getTimestamp() - a.getTimestamp()));
+ (a, b) -> Long.compare(b.getTimestamp(), a.getTimestamp()));
for (int i = 0; i < maxNum; i++) {
results.add(list.get(i));
}
@@ -1412,7 +1414,7 @@
for (int i = mInfos.size() - 1; i >= 0; i--) {
list.add(mInfos.valueAt(i));
}
- Collections.sort(list, (a, b) -> (int) (b.getTimestamp() - a.getTimestamp()));
+ Collections.sort(list, (a, b) -> Long.compare(b.getTimestamp(), a.getTimestamp()));
int size = list.size();
for (int i = 0; i < size; i++) {
list.get(i).dump(pw, prefix + " ", "#" + i, sdf);
@@ -1629,7 +1631,8 @@
}
}
- private static boolean isFresh(long timestamp) {
+ @VisibleForTesting
+ boolean isFresh(long timestamp) {
// A process could be dying but being stuck in some state, i.e.,
// being TRACED by tombstoned, thus the zygote receives SIGCHILD
// way after we already knew the kill (maybe because we did the kill :P),
diff --git a/services/core/java/com/android/server/am/ContentProviderHelper.java b/services/core/java/com/android/server/am/ContentProviderHelper.java
index 9a96e53..ab1da80 100644
--- a/services/core/java/com/android/server/am/ContentProviderHelper.java
+++ b/services/core/java/com/android/server/am/ContentProviderHelper.java
@@ -501,37 +501,38 @@
mService.grantImplicitAccess(userId, null, callingUid,
UserHandle.getAppId(cpi.applicationInfo.uid));
- }
- if (caller != null) {
- // The client will be waiting, and we'll notify it when the provider is ready.
- synchronized (cpr) {
- if (cpr.provider == null) {
- if (cpr.launchingApp == null) {
- Slog.w(TAG, "Unable to launch app "
- + cpi.applicationInfo.packageName + "/"
- + cpi.applicationInfo.uid + " for provider "
- + name + ": launching app became null");
- EventLogTags.writeAmProviderLostProcess(
- UserHandle.getUserId(cpi.applicationInfo.uid),
- cpi.applicationInfo.packageName,
- cpi.applicationInfo.uid, name);
- return null;
- }
+ if (caller != null) {
+ // The client will be waiting, and we'll notify it when the provider is ready.
+ synchronized (cpr) {
+ if (cpr.provider == null) {
+ if (cpr.launchingApp == null) {
+ Slog.w(TAG, "Unable to launch app "
+ + cpi.applicationInfo.packageName + "/"
+ + cpi.applicationInfo.uid + " for provider "
+ + name + ": launching app became null");
+ EventLogTags.writeAmProviderLostProcess(
+ UserHandle.getUserId(cpi.applicationInfo.uid),
+ cpi.applicationInfo.packageName,
+ cpi.applicationInfo.uid, name);
+ return null;
+ }
- if (conn != null) {
- conn.waiting = true;
+ if (conn != null) {
+ conn.waiting = true;
+ }
+ Message msg = mService.mHandler.obtainMessage(
+ ActivityManagerService.WAIT_FOR_CONTENT_PROVIDER_TIMEOUT_MSG);
+ msg.obj = cpr;
+ mService.mHandler.sendMessageDelayed(msg,
+ ContentResolver.CONTENT_PROVIDER_READY_TIMEOUT_MILLIS);
}
- Message msg = mService.mHandler.obtainMessage(
- ActivityManagerService.WAIT_FOR_CONTENT_PROVIDER_TIMEOUT_MSG);
- msg.obj = cpr;
- mService.mHandler.sendMessageDelayed(msg,
- ContentResolver.CONTENT_PROVIDER_READY_TIMEOUT_MILLIS);
}
+ // Return a holder instance even if we are waiting for the publishing of the
+ // provider, client will check for the holder.provider to see if it needs to wait
+ // for it.
+ return cpr.newHolder(conn, false);
}
- // Return a holder instance even if we are waiting for the publishing of the provider,
- // client will check for the holder.provider to see if it needs to wait for it.
- return cpr.newHolder(conn, false);
}
// Because of the provider's external client (i.e., SHELL), we'll have to wait right here.
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index fdb3d8c..a68364e 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -3351,10 +3351,21 @@
boolean shouldCollectMessage) {
RestrictionBypass bypass;
try {
- bypass = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName);
+ boolean isLocOrActivity = code == AppOpsManager.OP_FINE_LOCATION
+ || code == AppOpsManager.OP_FINE_LOCATION_SOURCE
+ || code == AppOpsManager.OP_ACTIVITY_RECOGNITION
+ || code == AppOpsManager.OP_ACTIVITY_RECOGNITION_SOURCE;
+ bypass = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName,
+ isLocOrActivity);
+ boolean wasNull = attributionTag == null;
if (bypass != null && bypass.getIsAttributionTagNotFound()) {
attributionTag = null;
}
+ if (attributionTag == null && isLocOrActivity
+ && packageName.equals("com.google.android.gms")) {
+ Slog.i("AppOpsDebug", "null tag on location or activity op " + code
+ + " for " + packageName + ", was overridden: " + !wasNull, new Exception());
+ }
} catch (SecurityException e) {
Slog.e(TAG, "noteOperation", e);
return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
@@ -3861,10 +3872,20 @@
int attributionChainId, boolean dryRun) {
RestrictionBypass bypass;
try {
- bypass = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName);
+ boolean isLocOrActivity = code == AppOpsManager.OP_FINE_LOCATION
+ || code == AppOpsManager.OP_FINE_LOCATION_SOURCE
+ || code == AppOpsManager.OP_ACTIVITY_RECOGNITION
+ || code == AppOpsManager.OP_ACTIVITY_RECOGNITION_SOURCE;
+ bypass = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName,
+ isLocOrActivity);
if (bypass != null && bypass.getIsAttributionTagNotFound()) {
attributionTag = null;
}
+ if (attributionTag == null && isLocOrActivity
+ && packageName.equals("com.google.android.gms")) {
+ Slog.i("AppOpsDebug", "null tag on location or activity op "
+ + code + " for " + packageName, new Exception());
+ }
} catch (SecurityException e) {
Slog.e(TAG, "startOperation", e);
return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
@@ -4418,7 +4439,7 @@
*/
private @Nullable RestrictionBypass verifyAndGetBypass(int uid, String packageName,
@Nullable String attributionTag) {
- return verifyAndGetBypass(uid, packageName, attributionTag, null);
+ return verifyAndGetBypass(uid, packageName, attributionTag, null, false);
}
/**
@@ -4433,7 +4454,7 @@
* @return {@code true} iff the package is privileged
*/
private @Nullable RestrictionBypass verifyAndGetBypass(int uid, String packageName,
- @Nullable String attributionTag, @Nullable String proxyPackageName) {
+ @Nullable String attributionTag, @Nullable String proxyPackageName, boolean extraLog) {
if (uid == Process.ROOT_UID) {
// For backwards compatibility, don't check package name for root UID.
return null;
@@ -4475,6 +4496,15 @@
AndroidPackage pkg = pmInt.getPackage(packageName);
if (pkg != null) {
isAttributionTagValid = isAttributionInPackage(pkg, attributionTag);
+ if (packageName.equals("com.google.android.gms") && extraLog) {
+ if (isAttributionTagValid && attributionTag != null) {
+ Slog.i("AppOpsDebug", "tag " + attributionTag + " found in "
+ + packageName);
+ } else {
+ Slog.i("AppOpsDebug", "tag " + attributionTag + " missing from "
+ + packageName);
+ }
+ }
pkgUid = UserHandle.getUid(userId, UserHandle.getAppId(pkg.getUid()));
bypass = getBypassforPackage(pkg);
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 00a68a0..be2a63d 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -2684,9 +2684,9 @@
} else {
result.addAll(approvedInfos);
- // If the other profile has an app that's of equal or higher approval, add it
+ // If the other profile has an app that's higher approval, add it
if (xpDomainInfo != null
- && xpDomainInfo.highestApprovalLevel >= highestApproval) {
+ && xpDomainInfo.highestApprovalLevel > highestApproval) {
result.add(xpDomainInfo.resolveInfo);
}
}
diff --git a/services/core/java/com/android/server/policy/AppOpsPolicy.java b/services/core/java/com/android/server/policy/AppOpsPolicy.java
index 607bc56..a6c93de 100644
--- a/services/core/java/com/android/server/policy/AppOpsPolicy.java
+++ b/services/core/java/com/android/server/policy/AppOpsPolicy.java
@@ -43,8 +43,6 @@
import com.android.internal.util.function.DecFunction;
import com.android.internal.util.function.HeptFunction;
import com.android.internal.util.function.HexFunction;
-import com.android.internal.util.function.NonaFunction;
-import com.android.internal.util.function.OctFunction;
import com.android.internal.util.function.QuadFunction;
import com.android.internal.util.function.QuintFunction;
import com.android.internal.util.function.TriFunction;
@@ -225,13 +223,21 @@
if (isDatasourceAttributionTag(uid, packageName, attributionTag,
mLocationTags)) {
return resolvedCode;
+ } else if (packageName.equals("com.google.android.gms")) {
+ Log.i("AppOpsDebugRemapping", "NOT remapping " + packageName + " code "
+ + code + " for tag " + attributionTag);
}
} else {
resolvedCode = resolveArOp(code);
if (resolvedCode != code) {
if (isDatasourceAttributionTag(uid, packageName, attributionTag,
mActivityRecognitionTags)) {
+ Log.i("AppOpsDebugRemapping", "remapping " + packageName + " code "
+ + code + " to " + resolvedCode + " for tag " + attributionTag);
return resolvedCode;
+ } else if (packageName.equals("com.google.android.gms")) {
+ Log.i("AppOpsDebugRemapping", "NOT remapping " + packageName
+ + " code " + code + " for tag " + attributionTag);
}
}
}
@@ -313,6 +319,17 @@
if (appIdTags == null) {
appIdTags = new ArrayMap<>();
}
+
+ // Remove any invalid tags
+ boolean nullRemoved = packageTags.remove(null);
+ boolean nullStrRemoved = packageTags.remove("null");
+ boolean emptyRemoved = packageTags.remove("");
+ if (nullRemoved || nullStrRemoved || emptyRemoved) {
+ Log.e(LOG_TAG, "Attempted to add invalid source attribution tag, removed "
+ + "null: " + nullRemoved + " removed \"null\": " + nullStrRemoved
+ + " removed empty string: " + emptyRemoved);
+ }
+
appIdTags.put(packageName, packageTags);
datastore.put(appId, appIdTags);
} else if (appIdTags != null) {
@@ -334,8 +351,22 @@
if (appIdTags != null) {
final ArraySet<String> packageTags = appIdTags.get(packageName);
if (packageTags != null && packageTags.contains(attributionTag)) {
+ if (packageName.equals("com.google.android.gms")) {
+ Log.i("AppOpsDebugRemapping", packageName + " tag "
+ + attributionTag + " in " + packageTags);
+ }
return true;
}
+ if (packageName.equals("com.google.android.gms")) {
+ Log.i("AppOpsDebugRemapping", packageName + " tag " + attributionTag
+ + " NOT in " + packageTags);
+ }
+ } else {
+ if (packageName.equals("com.google.android.gms")) {
+ Log.i("AppOpsDebugRemapping", "no package tags for uid " + uid
+ + " package " + packageName);
+ }
+
}
return false;
}
diff --git a/services/core/java/com/android/server/utils/WatchedSparseBooleanMatrix.java b/services/core/java/com/android/server/utils/WatchedSparseBooleanMatrix.java
index 42a2f81..bf54bd5 100644
--- a/services/core/java/com/android/server/utils/WatchedSparseBooleanMatrix.java
+++ b/services/core/java/com/android/server/utils/WatchedSparseBooleanMatrix.java
@@ -16,9 +16,12 @@
package com.android.server.utils;
+import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE;
+
import android.annotation.Nullable;
import android.annotation.Size;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.GrowingArrayUtils;
@@ -39,13 +42,14 @@
public class WatchedSparseBooleanMatrix extends WatchableImpl implements Snappable {
/**
- * The matrix is implemented through four arrays. The matrix of booleans is stored in
- * a one-dimensional {@code mValues} array. {@code mValues} is always of size
- * {@code mOrder * mOrder}. Elements of {@code mValues} are addressed with
- * arithmetic: the offset of the element {@code {row, col}} is at
- * {@code row * mOrder + col}. The term "storage index" applies to {@code mValues}.
- * A storage index designates a row (column) in the underlying storage. This is not
- * the same as the row seen by client code.
+ * The matrix is implemented through four arrays. First, the matrix of booleans is
+ * stored in a two-dimensional {@code mValues} array of bit-packed booleans.
+ * {@code mValues} is always of size {@code mOrder * mOrder / 8}. The factor of 8 is
+ * present because there are 8 bits in a byte. Elements of {@code mValues} are
+ * addressed with arithmetic: the element {@code {row, col}} is bit {@code col % 8} in
+ * byte * {@code (row * mOrder + col) / 8}. The term "storage index" applies to
+ * {@code mValues}. A storage index designates a row (column) in the underlying
+ * storage. This is not the same as the row seen by client code.
*
* Client code addresses the matrix through indices. These are integers that need not
* be contiguous. Client indices are mapped to storage indices through two linear
@@ -61,16 +65,32 @@
*
* Some notes:
* <ul>
- * <li> The matrix never shrinks.
+ * <li> The matrix does not automatically shrink but there is a compress() method that
+ * will recover unused space.
* <li> Equality is a very, very expesive operation.
* </ul>
*/
/**
* mOrder is always a multiple of this value. A minimal matrix therefore holds 2^12
- * values and requires 1024 bytes.
+ * values and requires 1024 bytes. The value is visible for testing.
*/
- private static final int STEP = 64;
+ @VisibleForTesting(visibility = PRIVATE)
+ static final int STEP = 64;
+
+ /**
+ * There are 8 bits in a byte. The constant is defined here only to make it easy to
+ * find in the code.
+ */
+ private static final int BYTE = 8;
+
+ /**
+ * Constants that index into the string array returned by matrixToString. The primary
+ * consumer is test code.
+ */
+ static final int STRING_KEY_INDEX = 0;
+ static final int STRING_MAP_INDEX = 1;
+ static final int STRING_INUSE_INDEX = 2;
/**
* The order of the matrix storage, including any padding. The matrix is always
@@ -103,7 +123,7 @@
/**
* The boolean array. This array is always {@code mOrder x mOrder} in size.
*/
- private boolean[] mValues;
+ private byte[] mValues;
/**
* A convenience function called when the elements are added to or removed from the storage.
@@ -140,7 +160,7 @@
mInUse = new boolean[mOrder];
mKeys = ArrayUtils.newUnpaddedIntArray(mOrder);
mMap = ArrayUtils.newUnpaddedIntArray(mOrder);
- mValues = new boolean[mOrder * mOrder];
+ mValues = new byte[mOrder * mOrder / 8];
mSize = 0;
}
@@ -207,7 +227,7 @@
}
if (r >= 0 && c >= 0) {
setValueAt(r, c, value);
- onChanged();
+ // setValueAt() will call onChanged().
} else {
throw new RuntimeException("matrix overflow");
}
@@ -232,8 +252,12 @@
public void removeAt(int index) {
validateIndex(index);
mInUse[mMap[index]] = false;
+ // Remove the specified index and ensure that unused words in mKeys and mMap are
+ // always zero, to simplify the equality function.
System.arraycopy(mKeys, index + 1, mKeys, index, mSize - (index + 1));
+ mKeys[mSize - 1] = 0;
System.arraycopy(mMap, index + 1, mMap, index, mSize - (index + 1));
+ mMap[mSize - 1] = 0;
mSize--;
onChanged();
}
@@ -272,6 +296,17 @@
}
/**
+ * An internal method to fetch the boolean value given the mValues row and column
+ * indices. These are not the indices used by the *At() methods.
+ */
+ private boolean valueAtInternal(int row, int col) {
+ int element = row * mOrder + col;
+ int offset = element / BYTE;
+ int mask = 1 << (element % BYTE);
+ return (mValues[offset] & mask) != 0;
+ }
+
+ /**
* Given a row and column, each in the range <code>0...size()-1</code>, returns the
* value from the <code>index</code>th key-value mapping that this WatchedSparseBooleanMatrix
* stores.
@@ -280,8 +315,22 @@
validateIndex(rowIndex, colIndex);
int r = mMap[rowIndex];
int c = mMap[colIndex];
- int element = r * mOrder + c;
- return mValues[element];
+ return valueAtInternal(r, c);
+ }
+
+ /**
+ * An internal method to set the boolean value given the mValues row and column
+ * indices. These are not the indices used by the *At() methods.
+ */
+ private void setValueAtInternal(int row, int col, boolean value) {
+ int element = row * mOrder + col;
+ int offset = element / BYTE;
+ byte mask = (byte) (1 << (element % BYTE));
+ if (value) {
+ mValues[offset] |= mask;
+ } else {
+ mValues[offset] &= ~mask;
+ }
}
/**
@@ -291,8 +340,7 @@
validateIndex(rowIndex, colIndex);
int r = mMap[rowIndex];
int c = mMap[colIndex];
- int element = r * mOrder + c;
- mValues[element] = value;
+ setValueAtInternal(r, c, value);
onChanged();
}
@@ -327,12 +375,17 @@
mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
mMap = GrowingArrayUtils.insert(mMap, mSize, i, newIndex);
mSize++;
+
// Initialize the row and column corresponding to the new index.
+ int valueRow = mOrder / BYTE;
+ int offset = newIndex / BYTE;
+ byte mask = (byte) (~(1 << (newIndex % BYTE)));
+ Arrays.fill(mValues, newIndex * valueRow, (newIndex + 1) * valueRow, (byte) 0);
for (int n = 0; n < mSize; n++) {
- mValues[n * mOrder + newIndex] = false;
- mValues[newIndex * mOrder + n] = false;
+ mValues[n * valueRow + offset] &= mask;
}
- onChanged();
+ // Do not report onChanged() from this private method. onChanged() is the
+ // responsibility of public methods that call this one.
}
return i;
}
@@ -356,6 +409,33 @@
}
/**
+ * Expand the 2D array. This also extends the free list.
+ */
+ private void growMatrix() {
+ resizeValues(mOrder + STEP);
+ }
+
+ /**
+ * Resize the values array to the new dimension.
+ */
+ private void resizeValues(int newOrder) {
+
+ boolean[] newInuse = Arrays.copyOf(mInUse, newOrder);
+ int minOrder = Math.min(mOrder, newOrder);
+
+ byte[] newValues = new byte[newOrder * newOrder / BYTE];
+ for (int i = 0; i < minOrder; i++) {
+ int row = mOrder * i / BYTE;
+ int newRow = newOrder * i / BYTE;
+ System.arraycopy(mValues, row, newValues, newRow, minOrder / BYTE);
+ }
+
+ mInUse = newInuse;
+ mValues = newValues;
+ mOrder = newOrder;
+ }
+
+ /**
* Find an unused storage index, mark it in-use, and return it.
*/
private int nextFree() {
@@ -369,27 +449,82 @@
}
/**
- * Expand the 2D array. This also extends the free list.
+ * Return the index of the key that uses the highest row index in use. This returns
+ * -1 if the matrix is empty. Note that the return is an index suitable for the *At()
+ * methods. It is not the index in the mInUse array.
*/
- private void growMatrix() {
- int newOrder = mOrder + STEP;
-
- boolean[] newInuse = Arrays.copyOf(mInUse, newOrder);
-
- boolean[] newValues = new boolean[newOrder * newOrder];
- for (int i = 0; i < mOrder; i++) {
- int row = mOrder * i;
- int newRow = newOrder * i;
- for (int j = 0; j < mOrder; j++) {
- int index = row + j;
- int newIndex = newRow + j;
- newValues[newIndex] = mValues[index];
+ private int lastInuse() {
+ for (int i = mOrder - 1; i >= 0; i--) {
+ if (mInUse[i]) {
+ for (int j = 0; j < mSize; j++) {
+ if (mMap[j] == i) {
+ return j;
+ }
+ }
+ throw new IndexOutOfBoundsException();
}
}
+ return -1;
+ }
- mInUse = newInuse;
- mValues = newValues;
- mOrder = newOrder;
+ /**
+ * Compress the matrix by packing keys into consecutive indices. If the compression
+ * is sufficient, the mValues array can be shrunk.
+ */
+ private void pack() {
+ if (mSize == 0 || mSize == mOrder) {
+ return;
+ }
+ // dst and src are identify raw (row, col) in mValues. srcIndex is the index (as
+ // in the result of keyAt()) of the key being relocated.
+ for (int dst = nextFree(); dst < mSize; dst = nextFree()) {
+ int srcIndex = lastInuse();
+ int src = mMap[srcIndex];
+ mInUse[src] = false;
+ mMap[srcIndex] = dst;
+ System.arraycopy(mValues, src * mOrder / BYTE,
+ mValues, dst * mOrder / BYTE,
+ mOrder / BYTE);
+ int srcOffset = (src / BYTE);
+ byte srcMask = (byte) (1 << (src % BYTE));
+ int dstOffset = (dst / BYTE);
+ byte dstMask = (byte) (1 << (dst % BYTE));
+ for (int i = 0; i < mOrder; i++) {
+ if ((mValues[srcOffset] & srcMask) == 0) {
+ mValues[dstOffset] &= ~dstMask;
+ } else {
+ mValues[dstOffset] |= dstMask;
+ }
+ srcOffset += mOrder / BYTE;
+ dstOffset += mOrder / BYTE;
+ }
+ }
+ }
+
+ /**
+ * Shrink the matrix, if possible.
+ */
+ public void compact() {
+ pack();
+ int unused = (mOrder - mSize) / STEP;
+ if (unused > 0) {
+ resizeValues(mOrder - (unused * STEP));
+ }
+ }
+
+ /**
+ * Return a copy of the keys that are in use by the matrix.
+ */
+ public int[] keys() {
+ return Arrays.copyOf(mKeys, mSize);
+ }
+
+ /**
+ * Return the size of the 2D matrix. This is always greater than or equal to size().
+ * This does not reflect the sizes of the meta-information arrays (such as mKeys).
+ */
+ public int capacity() {
+ return mOrder;
}
/**
@@ -398,15 +533,12 @@
@Override
public int hashCode() {
int hashCode = mSize;
+ hashCode = 31 * hashCode + Arrays.hashCode(mKeys);
+ hashCode = 31 * hashCode + Arrays.hashCode(mMap);
for (int i = 0; i < mSize; i++) {
- hashCode = 31 * hashCode + mKeys[i];
- hashCode = 31 * hashCode + mMap[i];
- }
- for (int i = 0; i < mSize; i++) {
- int row = mMap[i] * mOrder;
+ int row = mMap[i];
for (int j = 0; j < mSize; j++) {
- int element = mMap[j] + row;
- hashCode = 31 * hashCode + (mValues[element] ? 1 : 0);
+ hashCode = 31 * hashCode + (valueAtInternal(row, mMap[j]) ? 1 : 0);
}
}
return hashCode;
@@ -429,20 +561,16 @@
if (mSize != other.mSize) {
return false;
}
-
- for (int i = 0; i < mSize; i++) {
- if (mKeys[i] != other.mKeys[i]) {
- return false;
- }
- if (mMap[i] != other.mMap[i]) {
- return false;
- }
+ if (!Arrays.equals(mKeys, other.mKeys)) {
+ // mKeys is zero padded at the end and is sorted, so the arrays can always be
+ // directly compared.
+ return false;
}
for (int i = 0; i < mSize; i++) {
- int row = mMap[i] * mOrder;
+ int row = mMap[i];
for (int j = 0; j < mSize; j++) {
- int element = mMap[j] + row;
- if (mValues[element] != other.mValues[element]) {
+ int col = mMap[j];
+ if (valueAtInternal(row, col) != other.valueAtInternal(row, col)) {
return false;
}
}
@@ -451,9 +579,12 @@
}
/**
- * Return the matrix meta information. This is always three strings long.
+ * Return the matrix meta information. This is always three strings long. The
+ * strings are indexed by the constants STRING_KEY_INDEX, STRING_MAP_INDEX, and
+ * STRING_INUSE_INDEX.
*/
- private @Size(3) String[] matrixToStringMeta() {
+ @VisibleForTesting(visibility = PRIVATE)
+ @Size(3) String[] matrixToStringMeta() {
String[] result = new String[3];
StringBuilder k = new StringBuilder();
@@ -463,7 +594,7 @@
k.append(" ");
}
}
- result[0] = k.substring(0);
+ result[STRING_KEY_INDEX] = k.substring(0);
StringBuilder m = new StringBuilder();
for (int i = 0; i < mSize; i++) {
@@ -472,42 +603,47 @@
m.append(" ");
}
}
- result[1] = m.substring(0);
+ result[STRING_MAP_INDEX] = m.substring(0);
StringBuilder u = new StringBuilder();
for (int i = 0; i < mOrder; i++) {
u.append(mInUse[i] ? "1" : "0");
}
- result[2] = u.substring(0);
+ result[STRING_INUSE_INDEX] = u.substring(0);
return result;
}
/**
* Return the matrix as an array of strings. There is one string per row. Each
- * string has a '1' or a '0' in the proper column.
+ * string has a '1' or a '0' in the proper column. This is the raw data indexed by
+ * row/column disregarding the key map.
*/
- private String[] matrixToStringRaw() {
+ @VisibleForTesting(visibility = PRIVATE)
+ String[] matrixToStringRaw() {
String[] result = new String[mOrder];
for (int i = 0; i < mOrder; i++) {
- int row = i * mOrder;
StringBuilder line = new StringBuilder(mOrder);
for (int j = 0; j < mOrder; j++) {
- int element = row + j;
- line.append(mValues[element] ? "1" : "0");
+ line.append(valueAtInternal(i, j) ? "1" : "0");
}
result[i] = line.substring(0);
}
return result;
}
- private String[] matrixToStringCooked() {
+ /**
+ * Return the matrix as an array of strings. There is one string per row. Each
+ * string has a '1' or a '0' in the proper column. This is the cooked data indexed by
+ * keys, in key order.
+ */
+ @VisibleForTesting(visibility = PRIVATE)
+ String[] matrixToStringCooked() {
String[] result = new String[mSize];
for (int i = 0; i < mSize; i++) {
- int row = mMap[i] * mOrder;
+ int row = mMap[i];
StringBuilder line = new StringBuilder(mSize);
for (int j = 0; j < mSize; j++) {
- int element = row + mMap[j];
- line.append(mValues[element] ? "1" : "0");
+ line.append(valueAtInternal(row, mMap[j]) ? "1" : "0");
}
result[i] = line.substring(0);
}
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index d4df2f2..9c43dd3 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -7729,13 +7729,20 @@
return false;
}
- // Compute configuration based on max supported width and height.
- // Also account for the left / top insets (e.g. from display cutouts), which will be clipped
- // away later in {@link Task#computeConfigResourceOverrides()}. Otherwise, the app
- // bounds would end up too small.
- outBounds.set(containingBounds.left, containingBounds.top,
- activityWidth + containingAppBounds.left,
- activityHeight + containingAppBounds.top);
+ // Compute configuration based on max or min supported width and height.
+ // Also account for the insets (e.g. display cutouts, navigation bar), which will be
+ // clipped away later in {@link Task#computeConfigResourceOverrides()}, i.e., the out
+ // bounds are the app bounds restricted by aspect ratio + clippable insets. Otherwise,
+ // the app bounds would end up too small.
+ int right = activityWidth + containingAppBounds.left;
+ if (right >= containingAppBounds.right) {
+ right += containingBounds.right - containingAppBounds.right;
+ }
+ int bottom = activityHeight + containingAppBounds.top;
+ if (bottom >= containingAppBounds.bottom) {
+ bottom += containingBounds.bottom - containingAppBounds.bottom;
+ }
+ outBounds.set(containingBounds.left, containingBounds.top, right, bottom);
return true;
}
diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java
index 7189fb4..d55d060 100644
--- a/services/people/java/com/android/server/people/data/DataManager.java
+++ b/services/people/java/com/android/server/people/data/DataManager.java
@@ -264,7 +264,7 @@
@Nullable
private ConversationChannel getConversationChannel(ShortcutInfo shortcutInfo,
ConversationInfo conversationInfo) {
- if (conversationInfo == null) {
+ if (conversationInfo == null || conversationInfo.isDemoted()) {
return null;
}
if (shortcutInfo == null) {
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java b/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java
index d220444..803a0c1 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java
@@ -36,10 +36,12 @@
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
+import android.annotation.CurrentTimeMillisLong;
import android.app.ApplicationExitInfo;
import android.content.ComponentName;
import android.content.Context;
@@ -163,14 +165,15 @@
}
}
- private void updateExitInfo(ProcessRecord app) {
- ApplicationExitInfo raw = mAppExitInfoTracker.obtainRawRecord(app);
+ private void updateExitInfo(ProcessRecord app, @CurrentTimeMillisLong long timestamp) {
+ ApplicationExitInfo raw = mAppExitInfoTracker.obtainRawRecord(app, timestamp);
mAppExitInfoTracker.handleNoteProcessDiedLocked(raw);
mAppExitInfoTracker.recycleRawRecord(raw);
}
- private void noteAppKill(ProcessRecord app, int reason, int subReason, String msg) {
- ApplicationExitInfo raw = mAppExitInfoTracker.obtainRawRecord(app);
+ private void noteAppKill(ProcessRecord app, int reason, int subReason, String msg,
+ @CurrentTimeMillisLong long timestamp) {
+ ApplicationExitInfo raw = mAppExitInfoTracker.obtainRawRecord(app, timestamp);
raw.setReason(reason);
raw.setSubReason(subReason);
raw.setDescription(msg);
@@ -190,6 +193,7 @@
// Test application calls System.exit()
doNothing().when(mAppExitInfoTracker).schedulePersistProcessExitInfo(anyBoolean());
+ doReturn(true).when(mAppExitInfoTracker).isFresh(anyLong());
final int app1Uid = 10123;
final int app1Pid1 = 12345;
@@ -216,7 +220,7 @@
final byte[] app1Cookie2 = {(byte) 0x08, (byte) 0x07, (byte) 0x06, (byte) 0x05,
(byte) 0x04, (byte) 0x03, (byte) 0x02, (byte) 0x01};
- final long now1 = System.currentTimeMillis();
+ final long now1 = 1;
ProcessRecord app = makeProcessRecord(
app1Pid1, // pid
app1Uid, // uid
@@ -240,7 +244,7 @@
doReturn(null)
.when(mAppExitInfoTracker.mAppExitInfoSourceLmkd)
.remove(anyInt(), anyInt());
- updateExitInfo(app);
+ updateExitInfo(app, now1);
ArrayList<ApplicationExitInfo> list = new ArrayList<ApplicationExitInfo>();
mAppExitInfoTracker.getExitInfo(app1PackageName, app1Uid, app1Pid1, 0, list);
@@ -290,11 +294,11 @@
.when(mAppExitInfoTracker.mAppExitInfoSourceLmkd)
.remove(anyInt(), anyInt());
noteAppKill(app, ApplicationExitInfo.REASON_USER_REQUESTED,
- ApplicationExitInfo.SUBREASON_UNKNOWN, null);
+ ApplicationExitInfo.SUBREASON_UNKNOWN, null, now1s);
// Case 2: create another app1 process record with a different pid
sleep(1);
- final long now2 = System.currentTimeMillis();
+ final long now2 = 2;
app = makeProcessRecord(
app1Pid2, // pid
app1Uid, // uid
@@ -316,16 +320,15 @@
doReturn(new Pair<Long, Object>(now2, Integer.valueOf(makeExitStatus(exitCode))))
.when(mAppExitInfoTracker.mAppExitInfoSourceZygote)
.remove(anyInt(), anyInt());
- updateExitInfo(app);
+ updateExitInfo(app, now2);
list.clear();
// Get all the records for app1Uid
mAppExitInfoTracker.getExitInfo(null, app1Uid, 0, 0, list);
assertEquals(3, list.size());
- info = list.get(0);
+ info = list.get(1);
- // Verify the most recent one
verifyApplicationExitInfo(
info, // info
now2, // timestamp
@@ -346,7 +349,7 @@
assertTrue(ArrayUtils.equals(info.getProcessStateSummary(), app1Cookie2,
app1Cookie2.length));
- info = list.get(1);
+ info = list.get(0);
verifyApplicationExitInfo(
info, // info
now1s, // timestamp
@@ -386,7 +389,7 @@
doReturn(new Pair<Long, Object>(now3, Integer.valueOf(makeSignalStatus(sigNum))))
.when(mAppExitInfoTracker.mAppExitInfoSourceZygote)
.remove(anyInt(), anyInt());
- updateExitInfo(app);
+ updateExitInfo(app, now3);
list.clear();
mAppExitInfoTracker.getExitInfo(app1PackageName, app1UidUser2, app1PidUser2, 0, list);
@@ -463,7 +466,7 @@
app2Rss1, // rss
app2ProcessName, // processName
app2PackageName); // packageName
- updateExitInfo(app);
+ updateExitInfo(app, now4);
list.clear();
mAppExitInfoTracker.getExitInfo(app2PackageName, app2UidUser2, app2PidUser2, 0, list);
assertEquals(1, list.size());
@@ -523,9 +526,9 @@
app3ProcessName, // processName
app3PackageName); // packageName
noteAppKill(app, ApplicationExitInfo.REASON_CRASH_NATIVE,
- ApplicationExitInfo.SUBREASON_UNKNOWN, app3Description);
+ ApplicationExitInfo.SUBREASON_UNKNOWN, app3Description, now5);
- updateExitInfo(app);
+ updateExitInfo(app, now5);
list.clear();
mAppExitInfoTracker.getExitInfo(app3PackageName, app3UidUser2, app3PidUser2, 0, list);
assertEquals(1, list.size());
@@ -648,11 +651,11 @@
app3PackageName); // packageName
mAppExitInfoTracker.mIsolatedUidRecords.addIsolatedUid(app3IsolatedUid, app3Uid);
noteAppKill(app, ApplicationExitInfo.REASON_CRASH,
- ApplicationExitInfo.SUBREASON_UNKNOWN, app3Description2);
+ ApplicationExitInfo.SUBREASON_UNKNOWN, app3Description2, now6);
assertEquals(app3Uid, mAppExitInfoTracker.mIsolatedUidRecords
.getUidByIsolatedUid(app3IsolatedUid).longValue());
- updateExitInfo(app);
+ updateExitInfo(app, now6);
assertNull(mAppExitInfoTracker.mIsolatedUidRecords.getUidByIsolatedUid(app3IsolatedUid));
list.clear();
@@ -736,9 +739,9 @@
mAppExitInfoTracker.mIsolatedUidRecords.addIsolatedUid(app1IsolatedUidUser2, app1UidUser2);
noteAppKill(app, ApplicationExitInfo.REASON_OTHER,
- ApplicationExitInfo.SUBREASON_UNKNOWN, app1Description);
+ ApplicationExitInfo.SUBREASON_UNKNOWN, app1Description, now8);
- updateExitInfo(app);
+ updateExitInfo(app, now8);
list.clear();
mAppExitInfoTracker.getExitInfo(app1PackageName, app1UidUser2, app1PidUser2, 1, list);
assertEquals(1, list.size());
@@ -802,8 +805,8 @@
traceFile, traceStart, traceEnd);
noteAppKill(app, ApplicationExitInfo.REASON_OTHER,
- ApplicationExitInfo.SUBREASON_TOO_MANY_EMPTY, app1Description2);
- updateExitInfo(app);
+ ApplicationExitInfo.SUBREASON_TOO_MANY_EMPTY, app1Description2, now9);
+ updateExitInfo(app, now9);
list.clear();
mAppExitInfoTracker.getExitInfo(app1PackageName, app1UidUser2, app1Pid2User2, 1, list);
assertEquals(1, list.size());
@@ -859,7 +862,7 @@
mAppExitInfoTracker.getExitInfo(null, app1Uid, 0, 0, list);
assertEquals(3, list.size());
- info = list.get(0);
+ info = list.get(1);
exitCode = 6;
verifyApplicationExitInfo(
@@ -879,7 +882,7 @@
IMPORTANCE_SERVICE, // importance
null); // description
- info = list.get(1);
+ info = list.get(0);
verifyApplicationExitInfo(
info, // info
now1s, // timestamp
diff --git a/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java b/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
index b112f3fc..c506485 100644
--- a/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
@@ -682,6 +682,29 @@
}
@Test
+ public void testGetConversation_demoted() {
+ mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+ assertThat(mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
+ TEST_SHORTCUT_ID)).isNull();
+
+ ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+ buildPerson());
+ shortcut.setCached(ShortcutInfo.FLAG_PINNED);
+ mDataManager.addOrUpdateConversationInfo(shortcut);
+ assertThat(mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
+ TEST_SHORTCUT_ID)).isNotNull();
+
+ mNotificationChannel.setDemoted(true);
+ NotificationListenerService listenerService =
+ mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
+ listenerService.onNotificationChannelModified(TEST_PKG_NAME, UserHandle.of(USER_ID_PRIMARY),
+ mNotificationChannel, NOTIFICATION_CHANNEL_OR_GROUP_UPDATED);
+
+ assertThat(mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
+ TEST_SHORTCUT_ID)).isNull();
+ }
+
+ @Test
public void testGetConversationGetsPersonsData() {
mDataManager.onUserUnlocked(USER_ID_PRIMARY);
@@ -720,6 +743,27 @@
}
@Test
+ public void testIsConversation_demoted() {
+ mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+ assertThat(mDataManager.isConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
+ TEST_SHORTCUT_ID)).isFalse();
+
+ ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+ buildPerson());
+ shortcut.setCached(ShortcutInfo.FLAG_PINNED);
+ mDataManager.addOrUpdateConversationInfo(shortcut);
+
+ mNotificationChannel.setDemoted(true);
+ NotificationListenerService listenerService =
+ mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
+ listenerService.onNotificationChannelModified(TEST_PKG_NAME, UserHandle.of(USER_ID_PRIMARY),
+ mNotificationChannel, NOTIFICATION_CHANNEL_OR_GROUP_UPDATED);
+
+ assertThat(mDataManager.isConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
+ TEST_SHORTCUT_ID)).isFalse();
+ }
+
+ @Test
public void testNotificationChannelCreated() {
mDataManager.onUserUnlocked(USER_ID_PRIMARY);
mDataManager.onUserUnlocked(USER_ID_SECONDARY);
@@ -1371,13 +1415,20 @@
NotificationListenerService listenerService =
mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
listenerService.onNotificationPosted(mStatusBarNotification);
+ // posting updates the last interaction time, so delay before deletion
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ long approxDeletionTime = System.currentTimeMillis();
listenerService.onNotificationRemoved(mStatusBarNotification, null,
NotificationListenerService.REASON_CANCEL);
ConversationInfo conversationInfo = mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY)
.getConversationStore()
.getConversation(TEST_SHORTCUT_ID);
- assertEquals(conversationInfo.getLastEventTimestamp(), System.currentTimeMillis());
+ assertTrue(conversationInfo.getLastEventTimestamp() - approxDeletionTime < 100);
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/utils/WatcherTest.java b/services/tests/servicestests/src/com/android/server/utils/WatcherTest.java
index 5db9492..f361f4a 100644
--- a/services/tests/servicestests/src/com/android/server/utils/WatcherTest.java
+++ b/services/tests/servicestests/src/com/android/server/utils/WatcherTest.java
@@ -22,7 +22,6 @@
import android.util.ArrayMap;
import android.util.ArraySet;
-import android.util.Log;
import android.util.LongSparseArray;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
@@ -35,7 +34,6 @@
import org.junit.Test;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Random;
/**
@@ -869,12 +867,34 @@
mSeed = seed;
mRandom = new Random(mSeed);
}
- public int index() {
+ public int next() {
return mRandom.nextInt(50000);
}
public void reset() {
mRandom.setSeed(mSeed);
}
+ // This is an inefficient way to know if a value appears in an array.
+ private boolean contains(int[] s, int length, int k) {
+ for (int i = 0; i < length; i++) {
+ if (s[i] == k) {
+ return true;
+ }
+ }
+ return false;
+ }
+ public int[] indexes(int size) {
+ reset();
+ int[] r = new int[size];
+ for (int i = 0; i < size; i++) {
+ int key = next();
+ // Ensure the list of indices are unique.
+ while (contains(r, i, key)) {
+ key = next();
+ }
+ r[i] = key;
+ }
+ return r;
+ }
}
// Return a value based on the row and column. The algorithm tries to avoid simple
@@ -883,28 +903,8 @@
return (((row * 4 + col) % 3)& 1) == 1;
}
- // This is an inefficient way to know if a value appears in an array.
- private final boolean contains(int[] s, int length, int k) {
- for (int i = 0; i < length; i++) {
- if (s[i] == k) {
- return true;
- }
- }
- return false;
- }
-
- private void matrixTest(WatchedSparseBooleanMatrix matrix, int size, IndexGenerator indexer) {
- indexer.reset();
- int[] indexes = new int[size];
- for (int i = 0; i < size; i++) {
- int key = indexer.index();
- // Ensure the list of indices are unique.
- while (contains(indexes, i, key)) {
- key = indexer.index();
- }
- indexes[i] = key;
- }
- // Set values in the matrix.
+ // Fill a matrix
+ private void fill(WatchedSparseBooleanMatrix matrix, int size, int[] indexes) {
for (int i = 0; i < size; i++) {
int row = indexes[i];
for (int j = 0; j < size; j++) {
@@ -913,21 +913,39 @@
matrix.put(row, col, want);
}
}
+ }
- assertEquals(matrix.size(), size);
-
- // Read back and verify
+ // Verify the content of a matrix. This asserts on mismatch. Selected indices may
+ // have been deleted.
+ private void verify(WatchedSparseBooleanMatrix matrix, int[] indexes, boolean[] absent) {
for (int i = 0; i < matrix.size(); i++) {
int row = indexes[i];
for (int j = 0; j < matrix.size(); j++) {
int col = indexes[j];
- boolean want = cellValue(i, j);
- boolean actual = matrix.get(row, col);
- String msg = String.format("matrix(%d:%d, %d:%d) == %s, expected %s",
- i, row, j, col, actual, want);
- assertEquals(msg, actual, want);
+ if (absent != null && (absent[i] || absent[j])) {
+ boolean want = false;
+ String msg = String.format("matrix(%d:%d, %d:%d) (deleted)", i, row, j, col);
+ assertEquals(msg, matrix.get(row, col), false);
+ assertEquals(msg, matrix.get(row, col, false), false);
+ assertEquals(msg, matrix.get(row, col, true), true);
+ } else {
+ boolean want = cellValue(i, j);
+ String msg = String.format("matrix(%d:%d, %d:%d)", i, row, j, col);
+ assertEquals(msg, matrix.get(row, col), want);
+ assertEquals(msg, matrix.get(row, col, false), want);
+ assertEquals(msg, matrix.get(row, col, true), want);
+ }
}
}
+ }
+
+ private void matrixGrow(WatchedSparseBooleanMatrix matrix, int size, IndexGenerator indexer) {
+ int[] indexes = indexer.indexes(size);
+
+ // Set values in the matrix, then read back and verify.
+ fill(matrix, size, indexes);
+ assertEquals(matrix.size(), size);
+ verify(matrix, indexes, null);
// Test the keyAt/indexOfKey methods
for (int i = 0; i < matrix.size(); i++) {
@@ -936,17 +954,101 @@
}
}
+ private void matrixDelete(WatchedSparseBooleanMatrix matrix, int size, IndexGenerator indexer) {
+ int[] indexes = indexer.indexes(size);
+ fill(matrix, size, indexes);
+
+ // Delete a bunch of rows. Verify that reading back results in false and that
+ // contains() is false. Recreate the rows and verify that all cells (other than
+ // the one just created) are false.
+ boolean[] absent = new boolean[size];
+ for (int i = 0; i < size; i += 13) {
+ matrix.deleteKey(indexes[i]);
+ absent[i] = true;
+ }
+ verify(matrix, indexes, absent);
+ }
+
+ private void matrixShrink(WatchedSparseBooleanMatrix matrix, int size, IndexGenerator indexer) {
+ int[] indexes = indexer.indexes(size);
+ fill(matrix, size, indexes);
+
+ int initialCapacity = matrix.capacity();
+
+ // Delete every other row, remembering which rows were deleted. The goal is to
+ // make room for compaction.
+ boolean[] absent = new boolean[size];
+ for (int i = 0; i < size; i += 2) {
+ matrix.deleteKey(indexes[i]);
+ absent[i] = true;
+ }
+
+ matrix.compact();
+ int finalCapacity = matrix.capacity();
+ assertTrue("Matrix shrink", initialCapacity > finalCapacity);
+ assertTrue("Matrix shrink", finalCapacity - matrix.size() < matrix.STEP);
+ }
+
@Test
public void testWatchedSparseBooleanMatrix() {
final String name = "WatchedSparseBooleanMatrix";
- // The first part of this method tests the core matrix functionality. The second
- // part tests the watchable behavior. The third part tests the snappable
- // behavior.
+ // Test the core matrix functionality. The three tess are meant to test various
+ // combinations of auto-grow.
IndexGenerator indexer = new IndexGenerator(3);
- matrixTest(new WatchedSparseBooleanMatrix(), 10, indexer);
- matrixTest(new WatchedSparseBooleanMatrix(1000), 500, indexer);
- matrixTest(new WatchedSparseBooleanMatrix(1000), 2000, indexer);
+ matrixGrow(new WatchedSparseBooleanMatrix(), 10, indexer);
+ matrixGrow(new WatchedSparseBooleanMatrix(1000), 500, indexer);
+ matrixGrow(new WatchedSparseBooleanMatrix(1000), 2000, indexer);
+ matrixDelete(new WatchedSparseBooleanMatrix(), 500, indexer);
+ matrixShrink(new WatchedSparseBooleanMatrix(), 500, indexer);
+
+ // Test Watchable behavior.
+ WatchedSparseBooleanMatrix matrix = new WatchedSparseBooleanMatrix();
+ WatchableTester tester = new WatchableTester(matrix, name);
+ tester.verify(0, "Initial array - no registration");
+ matrix.put(INDEX_A, INDEX_A, true);
+ tester.verify(0, "Updates with no registration");
+ tester.register();
+ tester.verify(0, "Updates with no registration");
+ matrix.put(INDEX_A, INDEX_B, true);
+ tester.verify(1, "Single cell assignment");
+ matrix.put(INDEX_A, INDEX_B, true);
+ tester.verify(2, "Single cell assignment - same value");
+ matrix.put(INDEX_C, INDEX_B, true);
+ tester.verify(3, "Single cell assignment");
+ matrix.deleteKey(INDEX_B);
+ tester.verify(4, "Delete key");
+ assertEquals(matrix.get(INDEX_B, INDEX_C), false);
+ assertEquals(matrix.get(INDEX_B, INDEX_C, false), false);
+ assertEquals(matrix.get(INDEX_B, INDEX_C, true), true);
+
+ matrix.clear();
+ tester.verify(5, "Clear");
+ assertEquals(matrix.size(), 0);
+ fill(matrix, 10, indexer.indexes(10));
+ int[] keys = matrix.keys();
+ assertEquals(keys.length, matrix.size());
+ for (int i = 0; i < matrix.size(); i++) {
+ assertEquals(matrix.keyAt(i), keys[i]);
+ }
+
+ WatchedSparseBooleanMatrix a = new WatchedSparseBooleanMatrix();
+ matrixGrow(a, 10, indexer);
+ assertEquals(a.size(), 10);
+ WatchedSparseBooleanMatrix b = new WatchedSparseBooleanMatrix();
+ matrixGrow(b, 10, indexer);
+ assertEquals(b.size(), 10);
+ assertEquals(a.equals(b), true);
+ int rowIndex = b.keyAt(3);
+ int colIndex = b.keyAt(4);
+ b.put(rowIndex, colIndex, !b.get(rowIndex, colIndex));
+ assertEquals(a.equals(b), false);
+
+ // Test Snappable behavior.
+ WatchedSparseBooleanMatrix s = a.snapshot();
+ assertEquals(a.equals(s), true);
+ a.put(rowIndex, colIndex, !a.get(rowIndex, colIndex));
+ assertEquals(a.equals(s), false);
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index 1827730..db7e437 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -982,7 +982,9 @@
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM})
public void testOverrideMinAspectRatioLowerThanManifest() {
- setUpDisplaySizeWithApp(1400, 1600);
+ final DisplayContent display = new TestDisplayContent.Builder(mAtm, 1400, 1800)
+ .setNotch(200).setSystemDecorations(true).build();
+ mTask = new TaskBuilder(mSupervisor).setDisplay(display).build();
// Create a size compat activity on the same task.
final ActivityRecord activity = new ActivityBuilder(mAtm)
@@ -996,8 +998,13 @@
// The per-package override should have no effect, because the manifest aspect ratio is
// larger (2:1)
- assertEquals(1600, activity.getBounds().height());
- assertEquals(800, activity.getBounds().width());
+ final Rect appBounds = activity.getWindowConfiguration().getAppBounds();
+ assertEquals("App bounds must have min aspect ratio", 2f,
+ (float) appBounds.height() / appBounds.width(), 0.0001f /* delta */);
+ assertEquals("Long side must fit task",
+ mTask.getWindowConfiguration().getAppBounds().height(), appBounds.height());
+ assertEquals("Bounds can include insets", mTask.getBounds().height(),
+ activity.getBounds().height());
}
@Test
diff --git a/telecomm/java/android/telecom/RemoteConnectionManager.java b/telecomm/java/android/telecom/RemoteConnectionManager.java
index f3c7bd8..fbbfefd 100644
--- a/telecomm/java/android/telecom/RemoteConnectionManager.java
+++ b/telecomm/java/android/telecom/RemoteConnectionManager.java
@@ -45,7 +45,10 @@
outgoingConnectionServiceRpc,
mOurConnectionServiceImpl);
mRemoteConnectionServices.put(componentName, remoteConnectionService);
- } catch (RemoteException ignored) {
+ } catch (RemoteException e) {
+ Log.w(RemoteConnectionManager.this,
+ "error when addConnectionService of %s: %s", componentName,
+ e.toString());
}
}
}
diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java
index 8b6f2b5..be1502a 100644
--- a/telephony/java/android/telephony/data/ApnSetting.java
+++ b/telephony/java/android/telephony/data/ApnSetting.java
@@ -1551,6 +1551,20 @@
}
/**
+ * Converts the APN type bitmask to an array of all APN types
+ * @param apnTypeBitmask bitmask of APN types.
+ * @return int array of APN types
+ * @hide
+ */
+ @NonNull
+ public static int[] getApnTypesFromBitmask(int apnTypeBitmask) {
+ return APN_TYPE_INT_MAP.keySet().stream()
+ .filter(type -> ((apnTypeBitmask & type) == type))
+ .mapToInt(Integer::intValue)
+ .toArray();
+ }
+
+ /**
* Converts the integer representation of APN type to its string representation.
*
* @param apnType APN type as an integer
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt
index 0e2f5a4..71184c2 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt
@@ -16,7 +16,6 @@
package com.android.server.wm.flicker.close
-import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import com.android.server.wm.flicker.FlickerParametersRunnerFactory
import com.android.server.wm.flicker.FlickerTestParameter
@@ -24,7 +23,6 @@
import com.android.server.wm.flicker.annotation.Group1
import com.android.server.wm.flicker.dsl.FlickerBuilder
import org.junit.FixMethodOrder
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
import org.junit.runners.Parameterized
@@ -48,30 +46,6 @@
}
}
- @FlakyTest(bugId = 185401242)
- @Test
- override fun launcherLayerReplacesApp() {
- super.launcherLayerReplacesApp()
- }
-
- @FlakyTest(bugId = 185401242)
- @Test
- override fun launcherReplacesAppWindowAsTopWindow() {
- super.launcherReplacesAppWindowAsTopWindow()
- }
-
- @FlakyTest(bugId = 185401242)
- @Test
- override fun launcherWindowBecomesVisible() {
- super.launcherWindowBecomesVisible()
- }
-
- @FlakyTest(bugId = 185401242)
- @Test
- override fun noUncoveredRegions() {
- super.noUncoveredRegions()
- }
-
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt
index 95e55a1..6786279 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt
@@ -16,7 +16,6 @@
package com.android.server.wm.flicker.close
-import android.platform.test.annotations.Postsubmit
import androidx.test.filters.RequiresDevice
import com.android.server.wm.flicker.FlickerParametersRunnerFactory
import com.android.server.wm.flicker.FlickerTestParameter
@@ -24,7 +23,6 @@
import com.android.server.wm.flicker.annotation.Group1
import com.android.server.wm.flicker.dsl.FlickerBuilder
import org.junit.FixMethodOrder
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
import org.junit.runners.Parameterized
@@ -48,30 +46,6 @@
}
}
- @Postsubmit
- @Test
- override fun statusBarLayerIsAlwaysVisible() {
- super.statusBarLayerIsAlwaysVisible()
- }
-
- @Postsubmit
- @Test
- override fun statusBarLayerRotatesScales() {
- super.statusBarLayerRotatesScales()
- }
-
- @Postsubmit
- @Test
- override fun launcherLayerReplacesApp() {
- super.launcherLayerReplacesApp()
- }
-
- @Postsubmit
- @Test
- override fun noUncoveredRegions() {
- super.noUncoveredRegions()
- }
-
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt
index e088062..f7f977d 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt
@@ -17,7 +17,6 @@
package com.android.server.wm.flicker.close
import android.app.Instrumentation
-import android.platform.test.annotations.Postsubmit
import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.FlakyTest
@@ -83,7 +82,7 @@
testSpec.navBarLayerIsAlwaysVisible(rotatesScreen = testSpec.isRotated)
}
- @Postsubmit
+ @Presubmit
@Test
open fun statusBarLayerIsAlwaysVisible() {
testSpec.statusBarLayerIsAlwaysVisible(rotatesScreen = testSpec.isRotated)
@@ -95,7 +94,7 @@
testSpec.navBarLayerRotatesAndScales(testSpec.config.startRotation, Surface.ROTATION_0)
}
- @Postsubmit
+ @Presubmit
@Test
open fun statusBarLayerRotatesScales() {
testSpec.statusBarLayerRotatesScales(testSpec.config.startRotation, Surface.ROTATION_0)
@@ -117,25 +116,25 @@
}
}
- @FlakyTest(bugId = 185400889)
+ @Presubmit
@Test
open fun noUncoveredRegions() {
testSpec.noUncoveredRegions(testSpec.config.startRotation, Surface.ROTATION_0)
}
- @FlakyTest(bugId = 185400889)
+ @Presubmit
@Test
open fun launcherReplacesAppWindowAsTopWindow() {
testSpec.launcherReplacesAppWindowAsTopWindow(testApp)
}
- @Postsubmit
+ @Presubmit
@Test
open fun launcherWindowBecomesVisible() {
testSpec.launcherWindowBecomesVisible()
}
- @FlakyTest(bugId = 185400889)
+ @Presubmit
@Test
open fun launcherLayerReplacesApp() {
testSpec.launcherLayerReplacesApp(testApp)
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 013e844..9ff0bdf 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
@@ -40,7 +40,6 @@
@RunWith(Parameterized::class)
@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@FlakyTest(bugId = 185400889)
@Group1
class OpenAppColdTest(testSpec: FlickerTestParameter) : OpenAppTransition(testSpec) {
override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit
@@ -71,14 +70,32 @@
@FlakyTest
@Test
+ override fun navBarLayerIsAlwaysVisible() {
+ super.navBarLayerIsAlwaysVisible()
+ }
+
+ @FlakyTest
+ @Test
override fun navBarLayerRotatesAndScales() {
super.navBarLayerRotatesAndScales()
}
@FlakyTest
@Test
- override fun focusChanges() {
- super.focusChanges()
+ override fun statusBarLayerIsAlwaysVisible() {
+ super.statusBarLayerIsAlwaysVisible()
+ }
+
+ @FlakyTest
+ @Test
+ override fun appLayerReplacesLauncher() {
+ super.appLayerReplacesLauncher()
+ }
+
+ @FlakyTest
+ @Test
+ override fun appWindowReplacesLauncherAsTopWindow() {
+ super.appWindowReplacesLauncherAsTopWindow()
}
companion object {
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 67d5418..b073a7c 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
@@ -16,7 +16,6 @@
package com.android.server.wm.flicker.launch
-import android.platform.test.annotations.Presubmit
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import com.android.server.wm.flicker.FlickerParametersRunnerFactory
@@ -26,7 +25,6 @@
import com.android.server.wm.flicker.helpers.reopenAppFromOverview
import com.android.server.wm.flicker.helpers.setRotation
import com.android.server.wm.flicker.startRotation
-import com.android.server.wm.flicker.launcherWindowBecomesInvisible
import com.android.server.wm.flicker.dsl.FlickerBuilder
import org.junit.FixMethodOrder
import org.junit.Test
@@ -65,15 +63,16 @@
}
}
- @Presubmit
+ @FlakyTest
@Test
- override fun appWindowReplacesLauncherAsTopWindow() =
- super.appWindowReplacesLauncherAsTopWindow()
+ override fun navBarLayerIsAlwaysVisible() {
+ super.navBarLayerIsAlwaysVisible()
+ }
- @Presubmit
+ @FlakyTest
@Test
- override fun launcherWindowBecomesInvisible() {
- testSpec.launcherWindowBecomesInvisible()
+ override fun statusBarLayerIsAlwaysVisible() {
+ super.statusBarLayerIsAlwaysVisible()
}
@FlakyTest
@@ -94,18 +93,6 @@
super.visibleLayersShownMoreThanOneConsecutiveEntry()
}
- @FlakyTest
- @Test
- override fun focusChanges() {
- super.focusChanges()
- }
-
- @FlakyTest(bugId = 185400889)
- @Test
- override fun noUncoveredRegions() {
- super.noUncoveredRegions()
- }
-
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt
index 26e77b6..b304d5f 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt
@@ -19,7 +19,6 @@
import android.app.Instrumentation
import android.platform.test.annotations.Presubmit
import android.view.Surface
-import androidx.test.filters.FlakyTest
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.FlickerBuilderProvider
import com.android.server.wm.flicker.FlickerTestParameter
@@ -76,13 +75,13 @@
testSpec.navBarWindowIsAlwaysVisible()
}
- @FlakyTest
+ @Presubmit
@Test
open fun navBarLayerIsAlwaysVisible() {
testSpec.navBarLayerIsAlwaysVisible(rotatesScreen = testSpec.isRotated)
}
- @FlakyTest
+ @Presubmit
@Test
open fun navBarLayerRotatesAndScales() {
testSpec.navBarLayerRotatesAndScales(Surface.ROTATION_0, testSpec.config.endRotation)
@@ -94,7 +93,7 @@
testSpec.statusBarWindowIsAlwaysVisible()
}
- @FlakyTest
+ @Presubmit
@Test
open fun statusBarLayerIsAlwaysVisible() {
testSpec.statusBarLayerIsAlwaysVisible(rotatesScreen = testSpec.isRotated)
@@ -135,13 +134,13 @@
testSpec.focusChanges("NexusLauncherActivity", testApp.`package`)
}
- @FlakyTest
+ @Presubmit
@Test
open fun appLayerReplacesLauncher() {
testSpec.appLayerReplacesLauncher(testApp.`package`)
}
- @FlakyTest
+ @Presubmit
@Test
open fun appWindowReplacesLauncherAsTopWindow() {
testSpec.appWindowReplacesLauncherAsTopWindow(testApp)
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 c6dea00..e2705c7 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.platform.test.annotations.Presubmit
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import com.android.server.wm.flicker.FlickerParametersRunnerFactory
@@ -68,8 +67,8 @@
@FlakyTest
@Test
- override fun focusChanges() {
- super.focusChanges()
+ override fun navBarLayerIsAlwaysVisible() {
+ super.navBarLayerIsAlwaysVisible()
}
@FlakyTest
@@ -78,24 +77,6 @@
super.navBarLayerRotatesAndScales()
}
- @FlakyTest
- @Test
- override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
- super.visibleLayersShownMoreThanOneConsecutiveEntry()
- }
-
- @Presubmit
- @Test
- override fun launcherWindowBecomesInvisible() {
- super.launcherWindowBecomesInvisible()
- }
-
- @FlakyTest
- @Test
- override fun noUncoveredRegions() {
- super.noUncoveredRegions()
- }
-
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
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 1dbb617..69e8a8d 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
@@ -55,7 +55,7 @@
}
}
- @FlakyTest(bugId = 151179149)
+ @FlakyTest(bugId = 190185577)
@Test
override fun focusDoesNotChange() {
super.focusDoesNotChange()
@@ -63,12 +63,6 @@
@Postsubmit
@Test
- override fun noUncoveredRegions() {
- super.noUncoveredRegions()
- }
-
- @FlakyTest
- @Test
fun screenshotLayerBecomesInvisible() {
testSpec.assertLayers {
this.isVisible(testApp.getPackage())
@@ -81,14 +75,8 @@
@Postsubmit
@Test
- override fun appLayerRotates_EndingPos() {
- super.appLayerRotates_EndingPos()
- }
-
- @Postsubmit
- @Test
- override fun appLayerRotates_StartingPos() {
- super.appLayerRotates_StartingPos()
+ override fun statusBarLayerRotatesScales() {
+ super.statusBarLayerRotatesScales()
}
@Presubmit
@@ -97,18 +85,12 @@
super.navBarWindowIsAlwaysVisible()
}
- @Postsubmit
+ @FlakyTest
@Test
override fun statusBarLayerIsAlwaysVisible() {
super.statusBarLayerIsAlwaysVisible()
}
- @Postsubmit
- @Test
- override fun statusBarWindowIsAlwaysVisible() {
- super.statusBarWindowIsAlwaysVisible()
- }
-
companion object {
private const val SCREENSHOT_LAYER = "RotationLayer"
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 ab8ebd9..4b888cd 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
@@ -88,7 +88,7 @@
testSpec.config.startRotation, testSpec.config.endRotation)
}
- @FlakyTest
+ @Presubmit
@Test
open fun statusBarWindowIsAlwaysVisible() {
testSpec.statusBarWindowIsAlwaysVisible()
@@ -128,7 +128,7 @@
}
}
- @FlakyTest
+ @Presubmit
@Test
open fun noUncoveredRegions() {
testSpec.noUncoveredRegions(testSpec.config.startRotation,
@@ -141,7 +141,7 @@
testSpec.focusDoesNotChange()
}
- @FlakyTest
+ @Presubmit
@Test
open fun appLayerRotates_StartingPos() {
testSpec.assertLayersStart {
@@ -149,7 +149,7 @@
}
}
- @FlakyTest
+ @Presubmit
@Test
open fun appLayerRotates_EndingPos() {
testSpec.assertLayersEnd {
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 4627107..b153bec 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,6 +17,7 @@
package com.android.server.wm.flicker.rotation
import android.platform.test.annotations.Postsubmit
+import android.platform.test.annotations.Presubmit
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import com.android.server.wm.flicker.FlickerParametersRunnerFactory
@@ -71,13 +72,7 @@
super.statusBarLayerIsAlwaysVisible()
}
- @FlakyTest(bugId = 185400889)
- @Test
- override fun noUncoveredRegions() {
- super.noUncoveredRegions()
- }
-
- @FlakyTest(bugId = 185400889)
+ @Presubmit
@Test
fun appLayerAlwaysVisible() {
testSpec.assertLayers {
@@ -97,12 +92,6 @@
@Postsubmit
@Test
- override fun navBarWindowIsAlwaysVisible() {
- super.navBarWindowIsAlwaysVisible()
- }
-
- @Postsubmit
- @Test
override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
super.visibleLayersShownMoreThanOneConsecutiveEntry()
}
diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp
index 9574d27..145d7f8 100644
--- a/tools/aapt2/dump/DumpManifest.cpp
+++ b/tools/aapt2/dump/DumpManifest.cpp
@@ -88,10 +88,12 @@
COMPILE_SDK_VERSION_CODENAME_ATTR = 0x01010573,
VERSION_MAJOR_ATTR = 0x01010577,
PACKAGE_TYPE_ATTR = 0x01010587,
+ USES_PERMISSION_FLAGS_ATTR = 0x01010644,
};
const std::string& kAndroidNamespace = "http://schemas.android.com/apk/res/android";
constexpr int kCurrentDevelopmentVersion = 10000;
+constexpr int kNeverForLocation = 0x00010000;
/** Retrieves the attribute of the element with the specified attribute resource id. */
static xml::Attribute* FindAttribute(xml::Element *el, uint32_t resd_id) {
@@ -1070,6 +1072,7 @@
std::vector<std::string> requiredNotFeatures;
int32_t required = true;
int32_t maxSdkVersion = -1;
+ int32_t usesPermissionFlags = 0;
void Extract(xml::Element* element) override {
name = GetAttributeStringDefault(FindAttribute(element, NAME_ATTR), "");
@@ -1086,6 +1089,8 @@
required = GetAttributeIntegerDefault(FindAttribute(element, REQUIRED_ATTR), 1);
maxSdkVersion = GetAttributeIntegerDefault(
FindAttribute(element, MAX_SDK_VERSION_ATTR), -1);
+ usesPermissionFlags = GetAttributeIntegerDefault(
+ FindAttribute(element, USES_PERMISSION_FLAGS_ATTR), 0);
if (!name.empty()) {
CommonFeatureGroup* common = extractor()->GetCommonFeatureGroup();
@@ -1099,6 +1104,9 @@
if (maxSdkVersion >= 0) {
printer->Print(StringPrintf(" maxSdkVersion='%d'", maxSdkVersion));
}
+ if ((usesPermissionFlags & kNeverForLocation) != 0) {
+ printer->Print(StringPrintf(" usesPermissionFlags='neverForLocation'"));
+ }
printer->Print("\n");
for (const std::string& requiredFeature : requiredFeatures) {
printer->Print(StringPrintf(" required-feature='%s'\n", requiredFeature.data()));
@@ -1111,6 +1119,9 @@
if (maxSdkVersion >= 0) {
printer->Print(StringPrintf(" maxSdkVersion='%d'", maxSdkVersion));
}
+ if ((usesPermissionFlags & kNeverForLocation) != 0) {
+ printer->Print(StringPrintf(" usesPermissionFlags='neverForLocation'"));
+ }
printer->Print("\n");
}
}
@@ -1121,6 +1132,9 @@
if (maxSdkVersion >= 0) {
printer->Print(StringPrintf(" maxSdkVersion='%d'", maxSdkVersion));
}
+ if ((usesPermissionFlags & kNeverForLocation) != 0) {
+ printer->Print(StringPrintf(" usesPermissionFlags='neverForLocation'"));
+ }
printer->Print(StringPrintf(" reason='%s'\n", reason.data()));
}
};