From 02e3cb1d58b917618f9f04c88ff13aa2325e9410 Mon Sep 17 00:00:00 2001 From: Lyn Han Date: Tue, 6 Dec 2022 09:35:04 -0800 Subject: [PATCH 01/36] Add bufferlogs for setExpandedHeight call stack Bug: 250686317 Test: adb shell dumpsys activity service com.android.systemui | grep ShadeHeightLogger Change-Id: Ica7a634067a8a8b032ea482eed646582b7b99fd8 --- .../systemui/log/dagger/LogModule.java | 9 ++++ .../systemui/log/dagger/ShadeHeightLog.java | 33 ++++++++++++ .../NotificationPanelViewController.java | 18 ++++++- .../systemui/shade/ShadeHeightLogger.kt | 52 +++++++++++++++++++ .../NotificationPanelViewControllerTest.java | 2 + 5 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 packages/SystemUI/src/com/android/systemui/log/dagger/ShadeHeightLog.java create mode 100644 packages/SystemUI/src/com/android/systemui/shade/ShadeHeightLogger.kt diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java index 74d50433b9a77..a7fcd5f6f6c7a 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java @@ -100,6 +100,15 @@ public class LogModule { return factory.create("ShadeLog", 500, false); } + /** Provides a logging buffer for Shade height messages. */ + @Provides + @SysUISingleton + @ShadeHeightLog + public static LogBuffer provideShadeHeightLogBuffer(LogBufferFactory factory) { + return factory.create("ShadeHeightLog", 500 /* maxSize */); + } + + /** Provides a logging buffer for all logs related to managing notification sections. */ @Provides @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/ShadeHeightLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/ShadeHeightLog.java new file mode 100644 index 0000000000000..6fe868655ee62 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/ShadeHeightLog.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.log.dagger; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.android.systemui.plugins.log.LogBuffer; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.inject.Qualifier; + +/** A {@link LogBuffer} for Shade height changes. */ +@Qualifier +@Documented +@Retention(RUNTIME) +public @interface ShadeHeightLog { +} diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index bc0175a23ac2f..319a086262c87 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -627,6 +627,7 @@ public final class NotificationPanelViewController implements Dumpable { private final KeyguardBottomAreaViewModel mKeyguardBottomAreaViewModel; private final KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor; private float mMinExpandHeight; + private ShadeHeightLogger mShadeHeightLogger; private boolean mPanelUpdateWhenAnimatorEnds; private boolean mHasVibratedOnOpen = false; private int mFixedDuration = NO_FIXED_DURATION; @@ -706,6 +707,7 @@ public final class NotificationPanelViewController implements Dumpable { KeyguardUpdateMonitor keyguardUpdateMonitor, MetricsLogger metricsLogger, ShadeLogger shadeLogger, + ShadeHeightLogger shadeHeightLogger, ConfigurationController configurationController, Provider flingAnimationUtilsBuilder, StatusBarTouchableRegionManager statusBarTouchableRegionManager, @@ -766,6 +768,7 @@ public final class NotificationPanelViewController implements Dumpable { mLockscreenGestureLogger = lockscreenGestureLogger; mShadeExpansionStateManager = shadeExpansionStateManager; mShadeLog = shadeLogger; + mShadeHeightLogger = shadeHeightLogger; mGutsManager = gutsManager; mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override @@ -1807,6 +1810,7 @@ public final class NotificationPanelViewController implements Dumpable { waiting = true; } else { resetViews(false /* animate */); + mShadeHeightLogger.logFunctionCall("collapsePanel"); setExpandedFraction(0); // just in case } if (!waiting) { @@ -3679,6 +3683,7 @@ public final class NotificationPanelViewController implements Dumpable { beginJankMonitoring(); fling(0 /* expand */); } else { + mShadeHeightLogger.logFunctionCall("expand"); setExpandedFraction(1f); } mInstantExpanding = false; @@ -4742,6 +4747,7 @@ public final class NotificationPanelViewController implements Dumpable { mInitialTouchFromKeyguard = mKeyguardStateController.isShowing(); if (startTracking) { mTouchSlopExceeded = true; + mShadeHeightLogger.logFunctionCall("startExpandMotion"); setExpandedHeight(mInitialOffsetOnTouch); onTrackingStarted(); } @@ -4887,6 +4893,7 @@ public final class NotificationPanelViewController implements Dumpable { @VisibleForTesting void setExpandedHeight(float height) { debugLog("setExpandedHeight(%.1f)", height); + mShadeHeightLogger.logFunctionCall("setExpandedHeight"); setExpandedHeightInternal(height); } @@ -4910,10 +4917,13 @@ public final class NotificationPanelViewController implements Dumpable { return; } + mShadeHeightLogger.logFunctionCall("updateExpandedHeightToMaxHeight"); setExpandedHeight(currentMaxPanelHeight); } private void setExpandedHeightInternal(float h) { + mShadeHeightLogger.logSetExpandedHeightInternal(h, mSystemClock.currentTimeMillis()); + if (isNaN(h)) { Log.wtf(TAG, "ExpandedHeight set to NaN"); } @@ -4970,7 +4980,9 @@ public final class NotificationPanelViewController implements Dumpable { /** Sets the expanded height relative to a number from 0 to 1. */ public void setExpandedFraction(float frac) { - setExpandedHeight(getMaxPanelTransitionDistance() * frac); + final int maxDist = getMaxPanelTransitionDistance(); + mShadeHeightLogger.logFunctionCall("setExpandedFraction"); + setExpandedHeight(maxDist * frac); } float getExpandedHeight() { @@ -5005,6 +5017,7 @@ public final class NotificationPanelViewController implements Dumpable { /** Collapses the shade instantly without animation. */ public void instantCollapse() { abortAnimations(); + mShadeHeightLogger.logFunctionCall("instantCollapse"); setExpandedFraction(0f); if (mExpanding) { notifyExpandingFinished(); @@ -5121,6 +5134,7 @@ public final class NotificationPanelViewController implements Dumpable { animator.getAnimatedFraction())); setOverExpansionInternal(expansion, false /* isFromGesture */); } + mShadeHeightLogger.logFunctionCall("height animator update"); setExpandedHeightInternal((float) animation.getAnimatedValue()); }); return animator; @@ -5601,6 +5615,7 @@ public final class NotificationPanelViewController implements Dumpable { mStatusBarStateController.setUpcomingState(KEYGUARD); mStatusBarStateListener.onStateChanged(KEYGUARD); mStatusBarStateListener.onDozeAmountChanged(1f, 1f); + mShadeHeightLogger.logFunctionCall("showAodUi"); setExpandedFraction(1f); } @@ -6129,6 +6144,7 @@ public final class NotificationPanelViewController implements Dumpable { // otherwise {@link NotificationStackScrollLayout} // wrongly enables stack height updates at the start of lockscreen swipe-up mAmbientState.setSwipingUp(h <= 0); + mShadeHeightLogger.logFunctionCall("ACTION_MOVE"); setExpandedHeightInternal(newHeight); } break; diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeightLogger.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeightLogger.kt new file mode 100644 index 0000000000000..e610b985aef90 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeightLogger.kt @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.android.systemui.shade + +import com.android.systemui.log.dagger.ShadeHeightLog +import com.android.systemui.plugins.log.LogBuffer +import com.android.systemui.plugins.log.LogLevel.DEBUG +import java.text.SimpleDateFormat +import javax.inject.Inject + +private const val TAG = "ShadeHeightLogger" + +/** + * Log the call stack for [NotificationPanelViewController] setExpandedHeightInternal. + * + * Tracking bug: b/261593829 + */ +class ShadeHeightLogger +@Inject constructor( + @ShadeHeightLog private val buffer: LogBuffer, +) { + + private val dateFormat = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS") + + fun logFunctionCall(functionName: String) { + buffer.log(TAG, DEBUG, { + str1 = functionName + }, { + "$str1" + }) + } + + fun logSetExpandedHeightInternal(h: Float, time: Long) { + buffer.log(TAG, DEBUG, { + double1 = h.toDouble() + long1 = time + }, { + "setExpandedHeightInternal=$double1 time=${dateFormat.format(long1)}" + }) + } +} \ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java index 17ba30a301b30..aee57612eee9b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java @@ -217,6 +217,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Mock private KeyguardStateController mKeyguardStateController; @Mock private DozeLog mDozeLog; @Mock private ShadeLogger mShadeLog; + @Mock private ShadeHeightLogger mShadeHeightLogger; @Mock private CommandQueue mCommandQueue; @Mock private VibratorHelper mVibratorHelper; @Mock private LatencyTracker mLatencyTracker; @@ -453,6 +454,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor, mMetricsLogger, mShadeLog, + mShadeHeightLogger, mConfigurationController, () -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager, mConversationNotificationManager, mMediaHierarchyManager, From 0a847149aaf85716b468f7c9109b15b752d9539b Mon Sep 17 00:00:00 2001 From: Chris Poultney Date: Mon, 12 Dec 2022 17:35:32 +0000 Subject: [PATCH 02/36] Fix a minor javadoc issue Bug: 253481667 Test: n/a, documentation only Change-Id: Iadbd3a1a9f065bc1222ebc9af8ee4ddb5371d23f --- core/java/android/app/WallpaperManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 162a9976f4f37..7eacc3c3bdf19 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -1096,7 +1096,7 @@ public class WallpaperManager { } /** - * Like {@link #getFastDrawable(int)}, but the returned Drawable has a number + * Like {@link #getDrawable(int)}, but the returned Drawable has a number * of limitations to reduce its overhead as much as possible. It will * never scale the wallpaper (only centering it if the requested bounds * do match the bitmap bounds, which should not be typical), doesn't From 3306e7bb7c3da7f959b65e3ed9296b237d4603e7 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Thu, 15 Dec 2022 09:34:39 +0000 Subject: [PATCH 03/36] [ShellTrans] Fix SystemUI crash when finish keyguard animation. The animation leashes will be release after calls KVM#finishSurfaceBehindRemoteAnimation, so if there are playing animation with setSurfaceBehindAppearAmount, the released leash could cause SystemUI crash. There are two scenario may cause that crash: 1. Hovering between Keyguard <=> Launcher, which could trigger fadeOutSurfaceBehind and finish the remote animation, so the surfaceBehindRemoteAnimationTargets could remained in KUAC. Then when next transition animation start, KUAC could attemp to play animation with those released leash. 2. Unlock keyguard directly, notifyFinishedKeyguardExitAnimation will cancel the surfaceBehindAlphaAnimator, which could finish the remote animation immediately before setSurfaceBehindAppearAmount. To ensure the opening app must be visible, calls setSurfaceBehindAppearAmount before cancel animatiors. Fixes: 262444073 Test: enable shell transition, then scroll up to unlock device, a. verify the launcher won't stay in a fully/semi transparent. b. verify the launcher won't reshow when scrolling on keyguard. Also verify above cases via fingerprint unlock. Change-Id: Ib8c0211c35e76ec46337c1e8807e381081755ad1 --- .../systemui/keyguard/KeyguardUnlockAnimationController.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt index 0c46b23fd23ed..53070a0ab8a7a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt @@ -321,6 +321,7 @@ class KeyguardUnlockAnimationController @Inject constructor( // and unlock the device as well as hiding the surface. if (surfaceBehindAlpha == 0f) { Log.d(TAG, "surfaceBehindAlphaAnimator#onAnimationEnd") + surfaceBehindRemoteAnimationTargets = null keyguardViewMediator.get().finishSurfaceBehindRemoteAnimation( false /* cancelled */) } else { @@ -825,13 +826,13 @@ class KeyguardUnlockAnimationController @Inject constructor( // Make sure we made the surface behind fully visible, just in case. It should already be // fully visible. The exit animation is finished, and we should not hold the leash anymore, // so forcing it to 1f. - surfaceBehindAlphaAnimator.cancel() - surfaceBehindEntryAnimator.cancel() surfaceBehindAlpha = 1f setSurfaceBehindAppearAmount(1f) + surfaceBehindAlphaAnimator.cancel() + surfaceBehindEntryAnimator.cancel() try { launcherUnlockController?.setUnlockAmount(1f, false /* forceIfAnimating */) - } catch (e: RemoteException) { + } catch (e: RemoteException) { Log.e(TAG, "Remote exception in notifyFinishedKeyguardExitAnimation", e) } From c14e8fec598a02c9f6e763bea06b877e540fdbfc Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Thu, 15 Dec 2022 12:40:07 +0100 Subject: [PATCH 04/36] Reconcile Expandable.kt on master/tm-qpr-dev-plus-aosp and tm-qpr-dev Bug: 262222023 Test: Builds Change-Id: I97660c5a9a2758c5e19d037e635c21456b6085c3 Merged-In: I97660c5a9a2758c5e19d037e635c21456b6085c3 --- .../systemui/compose/animation/Expandable.kt | 1 - .../ViewTreeSavedStateRegistryOwner.kt | 33 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/ViewTreeSavedStateRegistryOwner.kt diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt index 8f9a4dae67bd8..0abdeca31898c 100644 --- a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt @@ -53,7 +53,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.Density import androidx.lifecycle.ViewTreeLifecycleOwner import androidx.lifecycle.ViewTreeViewModelStoreOwner -import androidx.savedstate.ViewTreeSavedStateRegistryOwner import com.android.systemui.animation.LaunchAnimator import kotlin.math.min diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/ViewTreeSavedStateRegistryOwner.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/ViewTreeSavedStateRegistryOwner.kt new file mode 100644 index 0000000000000..79f1cad1eb936 --- /dev/null +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/ViewTreeSavedStateRegistryOwner.kt @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.compose.animation + +import android.view.View +import androidx.savedstate.SavedStateRegistryOwner +import androidx.savedstate.ViewTreeSavedStateRegistryOwner as AndroidXViewTreeSavedStateRegistryOwner + +// TODO(b/262222023): Remove this workaround and import the new savedstate libraries in tm-qpr-dev +// instead. +object ViewTreeSavedStateRegistryOwner { + fun set(view: View, owner: SavedStateRegistryOwner?) { + AndroidXViewTreeSavedStateRegistryOwner.set(view, owner) + } + + fun get(view: View): SavedStateRegistryOwner? { + return AndroidXViewTreeSavedStateRegistryOwner.get(view) + } +} From 7c353ae99a9d08e7f80ec790ede848d5574a57d0 Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Fri, 21 Oct 2022 14:02:39 +0200 Subject: [PATCH 05/36] Add support for borders in Expandable (1/2) This CL adds support for borders in Expandable. See b/230830644#comment24 for a video. Bug: 230830644 Test: Manual Change-Id: If9ce29bac72b725eb01b1839a982a2ce17efc41a --- .../systemui/compose/animation/Expandable.kt | 149 +++++++++++++++--- .../compose/animation/ExpandableController.kt | 14 +- 2 files changed, 139 insertions(+), 24 deletions(-) diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt index 0abdeca31898c..5267f79482d6b 100644 --- a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt @@ -20,7 +20,9 @@ import android.content.Context import android.view.View import android.view.ViewGroup import android.view.ViewGroupOverlay +import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background +import androidx.compose.foundation.border import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -41,10 +43,17 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.geometry.CornerRadius +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.RoundRect import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Outline +import androidx.compose.ui.graphics.Path +import androidx.compose.ui.graphics.PathOperation import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.drawOutline +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.drawscope.scale import androidx.compose.ui.layout.boundsInRoot import androidx.compose.ui.layout.onGloballyPositioned @@ -53,7 +62,9 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.Density import androidx.lifecycle.ViewTreeLifecycleOwner import androidx.lifecycle.ViewTreeViewModelStoreOwner +import com.android.systemui.animation.Expandable import com.android.systemui.animation.LaunchAnimator +import kotlin.math.max import kotlin.math.min /** @@ -85,10 +96,11 @@ fun Expandable( shape: Shape, modifier: Modifier = Modifier, contentColor: Color = contentColorFor(color), + borderStroke: BorderStroke? = null, content: @Composable (ExpandableController) -> Unit, ) { Expandable( - rememberExpandableController(color, shape, contentColor), + rememberExpandableController(color, shape, contentColor, borderStroke), modifier, content, ) @@ -189,9 +201,13 @@ fun Expandable( } else -> { Box( - modifier.clip(shape).background(color, shape).onGloballyPositioned { - controller.boundsInComposeViewRoot.value = it.boundsInRoot() - } + modifier + .clip(shape) + .background(color, shape) + .border(controller) + .onGloballyPositioned { + controller.boundsInComposeViewRoot.value = it.boundsInRoot() + } ) { wrappedContent(controller) } } } @@ -204,7 +220,7 @@ private fun AnimatedContentInOverlay( sizeInOriginalLayout: Size, animatorState: State, overlay: ViewGroupOverlay, - controller: ExpandableController, + controller: ExpandableControllerImpl, content: @Composable (ExpandableController) -> Unit, composeViewRoot: View, onOverlayComposeViewChanged: (View?) -> Unit, @@ -254,24 +270,7 @@ private fun AnimatedContentInOverlay( return@drawWithContent } - val topRadius = animatorState.topCornerRadius - val bottomRadius = animatorState.bottomCornerRadius - if (topRadius == bottomRadius) { - // Shortcut to avoid Outline calculation and allocation. - val cornerRadius = CornerRadius(topRadius) - drawRoundRect(color, cornerRadius = cornerRadius) - } else { - val shape = - RoundedCornerShape( - topStart = topRadius, - topEnd = topRadius, - bottomStart = bottomRadius, - bottomEnd = bottomRadius, - ) - val outline = shape.createOutline(size, layoutDirection, this) - drawOutline(outline, color = color) - } - + drawBackground(animatorState, color, controller.borderStroke) drawContent() }, // We center the content in the expanding container. @@ -360,3 +359,107 @@ private fun getOverlayViewGroup(context: Context, overlay: ViewGroupOverlay): Vi overlay.remove(view) return current as ViewGroup } + +private fun Modifier.border(controller: ExpandableControllerImpl): Modifier { + return if (controller.borderStroke != null) { + this.border(controller.borderStroke, controller.shape) + } else { + this + } +} + +private fun ContentDrawScope.drawBackground( + animatorState: LaunchAnimator.State, + color: Color, + border: BorderStroke?, +) { + val topRadius = animatorState.topCornerRadius + val bottomRadius = animatorState.bottomCornerRadius + if (topRadius == bottomRadius) { + // Shortcut to avoid Outline calculation and allocation. + val cornerRadius = CornerRadius(topRadius) + + // Draw the background. + drawRoundRect(color, cornerRadius = cornerRadius) + + // Draw the border. + if (border != null) { + // Copied from androidx.compose.foundation.Border.kt + val strokeWidth = border.width.toPx() + val halfStroke = strokeWidth / 2 + val borderStroke = Stroke(strokeWidth) + + drawRoundRect( + brush = border.brush, + topLeft = Offset(halfStroke, halfStroke), + size = Size(size.width - strokeWidth, size.height - strokeWidth), + cornerRadius = cornerRadius.shrink(halfStroke), + style = borderStroke + ) + } + } else { + val shape = + RoundedCornerShape( + topStart = topRadius, + topEnd = topRadius, + bottomStart = bottomRadius, + bottomEnd = bottomRadius, + ) + val outline = shape.createOutline(size, layoutDirection, this) + + // Draw the background. + drawOutline(outline, color = color) + + // Draw the border. + if (border != null) { + // Copied from androidx.compose.foundation.Border.kt. + val strokeWidth = border.width.toPx() + val path = + createRoundRectPath( + (outline as Outline.Rounded).roundRect, + strokeWidth, + ) + + drawPath(path, border.brush) + } + } +} + +/** + * Helper method that creates a round rect with the inner region removed by the given stroke width. + * + * Copied from androidx.compose.foundation.Border.kt. + */ +private fun createRoundRectPath( + roundedRect: RoundRect, + strokeWidth: Float, +): Path { + return Path().apply { + addRoundRect(roundedRect) + val insetPath = + Path().apply { addRoundRect(createInsetRoundedRect(strokeWidth, roundedRect)) } + op(this, insetPath, PathOperation.Difference) + } +} + +/* Copied from androidx.compose.foundation.Border.kt. */ +private fun createInsetRoundedRect(widthPx: Float, roundedRect: RoundRect) = + RoundRect( + left = widthPx, + top = widthPx, + right = roundedRect.width - widthPx, + bottom = roundedRect.height - widthPx, + topLeftCornerRadius = roundedRect.topLeftCornerRadius.shrink(widthPx), + topRightCornerRadius = roundedRect.topRightCornerRadius.shrink(widthPx), + bottomLeftCornerRadius = roundedRect.bottomLeftCornerRadius.shrink(widthPx), + bottomRightCornerRadius = roundedRect.bottomRightCornerRadius.shrink(widthPx) + ) + +/** + * Helper method to shrink the corner radius by the given value, clamping to 0 if the resultant + * corner radius would be negative. + * + * Copied from androidx.compose.foundation.Border.kt. + */ +private fun CornerRadius.shrink(value: Float): CornerRadius = + CornerRadius(max(0f, this.x - value), max(0f, this.y - value)) diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/ExpandableController.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/ExpandableController.kt index d6db574a34ae7..f75b3a8a61c42 100644 --- a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/ExpandableController.kt +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/ExpandableController.kt @@ -20,6 +20,7 @@ import android.view.View import android.view.ViewGroup import android.view.ViewGroupOverlay import android.view.ViewRootImpl +import androidx.compose.foundation.BorderStroke import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -62,6 +63,7 @@ fun rememberExpandableController( color: Color, shape: Shape, contentColor: Color = contentColorFor(color), + borderStroke: BorderStroke? = null, ): ExpandableController { val composeViewRoot = LocalView.current val density = LocalDensity.current @@ -87,11 +89,20 @@ fun rememberExpandableController( val isComposed = remember { mutableStateOf(true) } DisposableEffect(Unit) { onDispose { isComposed.value = false } } - return remember(color, contentColor, shape, composeViewRoot, density, layoutDirection) { + return remember( + color, + contentColor, + shape, + borderStroke, + composeViewRoot, + density, + layoutDirection, + ) { ExpandableControllerImpl( color, contentColor, shape, + borderStroke, composeViewRoot, density, animatorState, @@ -109,6 +120,7 @@ internal class ExpandableControllerImpl( internal val color: Color, internal val contentColor: Color, internal val shape: Shape, + internal val borderStroke: BorderStroke?, internal val composeViewRoot: View, internal val density: Density, internal val animatorState: MutableState, From b85fe2b4a0b178c885bdb4e1d3d193c5d29e01b4 Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Tue, 13 Dec 2022 13:23:12 +0100 Subject: [PATCH 06/36] Make clickable Expandables have a minimum (interactive) size (1/2) This CL improves Expandable by making sure that expandables that expand when clicked directly have a minimum size of 40dp and minimum interactive size (touchable area) of 48dp. This is consistent with the M3 components like buttons. Bug: 230830644 Test: Manual Change-Id: Iada048498ff4655406968d7dac5d13c948efaea1 --- .../systemui/compose/animation/Expandable.kt | 110 ++++++++++++++---- 1 file changed, 90 insertions(+), 20 deletions(-) diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt index 5267f79482d6b..18534f43ae871 100644 --- a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt @@ -23,12 +23,16 @@ import android.view.ViewGroupOverlay import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background import androidx.compose.foundation.border +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalMinimumTouchTargetEnforcement import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -36,8 +40,10 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.State import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCompositionContext +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -56,34 +62,48 @@ import androidx.compose.ui.graphics.drawscope.ContentDrawScope import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.drawscope.scale import androidx.compose.ui.layout.boundsInRoot +import androidx.compose.ui.layout.layout import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.dp import androidx.lifecycle.ViewTreeLifecycleOwner import androidx.lifecycle.ViewTreeViewModelStoreOwner import com.android.systemui.animation.Expandable import com.android.systemui.animation.LaunchAnimator import kotlin.math.max import kotlin.math.min +import kotlin.math.roundToInt /** * Create an expandable shape that can launch into an Activity or a Dialog. * + * If this expandable should be expanded when it is clicked directly, then you should specify a + * [onClick] handler, which will ensure that this expandable interactive size and background size + * are consistent with the M3 components (48dp and 40dp respectively). + * + * If this expandable should be expanded when a children component is clicked, like a button inside + * the expandable, then you can use the Expandable parameter passed to the [content] lambda. + * * Example: * ``` * Expandable( * color = MaterialTheme.colorScheme.primary, * shape = RoundedCornerShape(16.dp), - * ) { controller -> - * Row( - * Modifier - * // For activities: - * .clickable { activityStarter.startActivity(intent, controller.forActivity()) } * - * // For dialogs: - * .clickable { dialogLaunchAnimator.show(dialog, controller.forDialog()) } - * ) { ... } + * // For activities: + * onClick = { expandable -> + * activityStarter.startActivity(intent, expandable.activityLaunchController()) + * }, + * + * // For dialogs: + * onClick = { expandable -> + * dialogLaunchAnimator.show(dialog, controller.dialogLaunchController()) + * }, + * ) { + * ... * } * ``` * @@ -97,11 +117,13 @@ fun Expandable( modifier: Modifier = Modifier, contentColor: Color = contentColorFor(color), borderStroke: BorderStroke? = null, - content: @Composable (ExpandableController) -> Unit, + onClick: ((Expandable) -> Unit)? = null, + content: @Composable (Expandable) -> Unit, ) { Expandable( rememberExpandableController(color, shape, contentColor, borderStroke), modifier, + onClick, content, ) } @@ -130,11 +152,13 @@ fun Expandable( * @sample com.android.systemui.compose.gallery.ActivityLaunchScreen * @sample com.android.systemui.compose.gallery.DialogLaunchScreen */ +@OptIn(ExperimentalMaterial3Api::class) @Composable fun Expandable( controller: ExpandableController, modifier: Modifier = Modifier, - content: @Composable (ExpandableController) -> Unit, + onClick: ((Expandable) -> Unit)? = null, + content: @Composable (Expandable) -> Unit, ) { val controller = controller as ExpandableControllerImpl val color = controller.color @@ -148,13 +172,23 @@ fun Expandable( CompositionLocalProvider( LocalContentColor provides contentColor, ) { - content(controller) + // We make sure that the content itself (wrapped by the background) is at least + // 40.dp, which is the same as the M3 buttons. This applies even if onClick is + // null, to make it easier to write expandables that are sometimes clickable and + // sometimes not. There shouldn't be any Expandable smaller than 40dp because if + // the expandable is not clickable directly, then something in its content should + // be (and with a size >= 40dp). + val minSize = 40.dp + Box( + Modifier.defaultMinSize(minWidth = minSize, minHeight = minSize), + contentAlignment = Alignment.Center, + ) { + content(controller.expandable) + } } } - val thisExpandableSize by remember { - derivedStateOf { controller.boundsInComposeViewRoot.value.size } - } + var thisExpandableSize by remember { mutableStateOf(Size.Zero) } // Make sure we don't read animatorState directly here to avoid recomposition every time the // state changes (i.e. every frame of the animation). @@ -164,22 +198,42 @@ fun Expandable( } } + // If this expandable is expanded when it's being directly clicked on, let's ensure that it has + // the minimum interactive size followed by all M3 components (48.dp). + val minInteractiveSizeModifier = + if (onClick != null && LocalMinimumTouchTargetEnforcement.current) { + // TODO(b/242040009): Replace this by Modifier.minimumInteractiveComponentSize() once + // http://aosp/2305511 is available. + val minTouchSize = LocalViewConfiguration.current.minimumTouchTargetSize + Modifier.layout { measurable, constraints -> + // Copied from androidx.compose.material3.InteractiveComponentSize.kt + val placeable = measurable.measure(constraints) + val width = maxOf(placeable.width, minTouchSize.width.roundToPx()) + val height = maxOf(placeable.height, minTouchSize.height.roundToPx()) + layout(width, height) { + val centerX = ((width - placeable.width) / 2f).roundToInt() + val centerY = ((height - placeable.height) / 2f).roundToInt() + placeable.place(centerX, centerY) + } + } + } else { + Modifier + } + when { isAnimating -> { // Don't compose the movable content during the animation, as it should be composed only // once at all times. We make this spacer exactly the same size as this Expandable when // it is visible. Spacer( - modifier - .clip(shape) - .requiredSize(with(controller.density) { thisExpandableSize.toDpSize() }) + modifier.requiredSize(with(controller.density) { thisExpandableSize.toDpSize() }) ) // The content and its animated background in the overlay. We draw it only when we are // animating. AnimatedContentInOverlay( color, - thisExpandableSize, + controller.boundsInComposeViewRoot.value.size, controller.animatorState, controller.overlay.value ?: error("AnimatedContentInOverlay shouldn't be composed with null overlay."), @@ -193,6 +247,8 @@ fun Expandable( controller.isDialogShowing.value -> { Box( modifier + .onGloballyPositioned { thisExpandableSize = it.boundsInRoot().size } + .then(minInteractiveSizeModifier) .drawWithContent { /* Don't draw anything when the dialog is shown. */} .onGloballyPositioned { controller.boundsInComposeViewRoot.value = it.boundsInRoot() @@ -200,15 +256,29 @@ fun Expandable( ) { wrappedContent(controller) } } else -> { + val clickModifier = + if (onClick != null) { + Modifier.clickable { onClick(controller.expandable) } + } else { + Modifier + } + Box( modifier + .onGloballyPositioned { thisExpandableSize = it.boundsInRoot().size } + .then(minInteractiveSizeModifier) + // Note that clip() *must* be above the clickModifier to properly clip the + // ripple. .clip(shape) + .then(clickModifier) .background(color, shape) .border(controller) .onGloballyPositioned { controller.boundsInComposeViewRoot.value = it.boundsInRoot() - } - ) { wrappedContent(controller) } + }, + ) { + wrappedContent(controller) + } } } } From 509c9a2b6a2e242054e477b831da96edb477c4a9 Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Thu, 15 Dec 2022 11:27:39 +0100 Subject: [PATCH 07/36] Introduce the FadingBackground modifier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This CL introduces an overload of Modifier.background which takes a `alpha: () -> Float` parameter to set the alpha of the background. This should be used when the alpha of the background is animated, to avoid recompositions during an animation. The content of FadingBackground.kt was mostly copy pasted from Background.kt [1]. [1] http://cs/androidx-platform-dev/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt Bug: 242040009 Test: Manual Change-Id: I3296f7bc7382e2afe77a088cfdbefbfae134051d --- .../compose/modifiers/FadingBackground.kt | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 packages/SystemUI/compose/core/src/com/android/systemui/compose/modifiers/FadingBackground.kt diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/modifiers/FadingBackground.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/modifiers/FadingBackground.kt new file mode 100644 index 0000000000000..121bf2cf8a053 --- /dev/null +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/modifiers/FadingBackground.kt @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.compose.modifiers + +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.DrawModifier +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Outline +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.drawOutline +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.platform.InspectorInfo +import androidx.compose.ui.platform.InspectorValueInfo +import androidx.compose.ui.platform.debugInspectorInfo +import androidx.compose.ui.unit.LayoutDirection + +/** + * Draws a fading [shape] with a solid [color] and [alpha] behind the content. + * + * @param color color to paint background with + * @param alpha alpha of the background + * @param shape desired shape of the background + */ +fun Modifier.background( + color: Color, + alpha: () -> Float, + shape: Shape = RectangleShape, +) = + this.then( + FadingBackground( + brush = SolidColor(color), + alpha = alpha, + shape = shape, + inspectorInfo = + debugInspectorInfo { + name = "background" + value = color + properties["color"] = color + properties["alpha"] = alpha + properties["shape"] = shape + } + ) + ) + +private class FadingBackground +constructor( + private val brush: Brush, + private val shape: Shape, + private val alpha: () -> Float, + inspectorInfo: InspectorInfo.() -> Unit +) : DrawModifier, InspectorValueInfo(inspectorInfo) { + // naive cache outline calculation if size is the same + private var lastSize: Size? = null + private var lastLayoutDirection: LayoutDirection? = null + private var lastOutline: Outline? = null + + override fun ContentDrawScope.draw() { + if (shape === RectangleShape) { + // shortcut to avoid Outline calculation and allocation + drawRect() + } else { + drawOutline() + } + drawContent() + } + + private fun ContentDrawScope.drawRect() { + drawRect(brush, alpha = alpha()) + } + + private fun ContentDrawScope.drawOutline() { + val outline = + if (size == lastSize && layoutDirection == lastLayoutDirection) { + lastOutline!! + } else { + shape.createOutline(size, layoutDirection, this) + } + drawOutline(outline, brush = brush, alpha = alpha()) + lastOutline = outline + lastSize = size + lastLayoutDirection = layoutDirection + } + + override fun hashCode(): Int { + var result = brush.hashCode() + result = 31 * result + alpha.hashCode() + result = 31 * result + shape.hashCode() + return result + } + + override fun equals(other: Any?): Boolean { + val otherModifier = other as? FadingBackground ?: return false + return brush == otherModifier.brush && + alpha == otherModifier.alpha && + shape == otherModifier.shape + } + + override fun toString(): String = "FadingBackground(brush=$brush, alpha = $alpha, shape=$shape)" +} From 37d8f5748feda8a6eb58ed9d382759f91e6cf3d7 Mon Sep 17 00:00:00 2001 From: Marcello Galhardo Date: Wed, 23 Nov 2022 14:42:28 +0000 Subject: [PATCH 08/36] Add StylusSystemUpdateNotifier Initial prototype to support Stylus updates. Test: atest SystemUITests:StylusSystemUpdateNotifierTest Fixes: b/253013763 Change-Id: If0cf51da3128232aa5cdbc04b578161cf06626de --- .../android/systemui/dagger/FrameworkServicesModule.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java index f902252fa2e68..2260e35fd6bcb 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java @@ -71,6 +71,7 @@ import android.os.BatteryStats; import android.os.PowerExemptionManager; import android.os.PowerManager; import android.os.ServiceManager; +import android.os.SystemUpdateManager; import android.os.UserManager; import android.os.Vibrator; import android.os.storage.StorageManager; @@ -139,6 +140,12 @@ public class FrameworkServicesModule { return context.getSystemService(AlarmManager.class); } + @Provides + @Singleton + static Optional provideSystemUpdateManager(Context context) { + return Optional.ofNullable(context.getSystemService(SystemUpdateManager.class)); + } + /** */ @Provides public AmbientDisplayConfiguration provideAmbientDisplayConfiguration(Context context) { From 304250829269d92eb7500a102768785a2a3254a1 Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Wed, 19 Oct 2022 14:04:52 +0200 Subject: [PATCH 09/36] Implement the QS footer actions in Compose (1/2) This CL reimplements the FooterActions in Compose. This is going to be one of the first features to be hidden behind a build time flag in our SystemUICompose build once that flag is available. See http://b/242040009#comment20 for a video and http://ag/20745047 for the screenshot difference between the Compose and View implementations. Bug: 242040009 Test: atest FooterActionsScreenshotTest Change-Id: I83df8d191c1ab5d95466471c834ac1b0903ad21a --- core/res/res/values/symbols.xml | 1 + .../systemui/compose/animation/Expandable.kt | 36 +- .../compose/theme/AndroidColorScheme.kt | 12 +- .../android/systemui/compose/theme/Color.kt | 30 ++ .../common/ui/compose/ContentDescription.kt | 30 ++ .../systemui/common/ui/compose/Icon.kt | 47 +++ .../people/ui/compose/PeopleScreen.kt | 1 - .../qs/footer/ui/compose/FooterActions.kt | 361 ++++++++++++++++++ .../ui/binder/FooterActionsViewBinder.kt | 8 +- .../viewmodel/FooterActionsButtonViewModel.kt | 7 +- .../ui/viewmodel/FooterActionsViewModel.kt | 12 +- .../viewmodel/FooterActionsViewModelTest.kt | 6 +- 12 files changed, 528 insertions(+), 23 deletions(-) create mode 100644 packages/SystemUI/compose/core/src/com/android/systemui/compose/theme/Color.kt create mode 100644 packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/ContentDescription.kt create mode 100644 packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt create mode 100644 packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index b9259218c2d30..d6fdc55c8bb88 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2331,6 +2331,7 @@ + diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt index 18534f43ae871..d31ca511130b9 100644 --- a/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/animation/Expandable.kt @@ -24,6 +24,7 @@ import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.defaultMinSize @@ -62,6 +63,7 @@ import androidx.compose.ui.graphics.drawscope.ContentDrawScope import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.drawscope.scale import androidx.compose.ui.layout.boundsInRoot +import androidx.compose.ui.layout.findRootCoordinates import androidx.compose.ui.layout.layout import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.ComposeView @@ -118,12 +120,14 @@ fun Expandable( contentColor: Color = contentColorFor(color), borderStroke: BorderStroke? = null, onClick: ((Expandable) -> Unit)? = null, + interactionSource: MutableInteractionSource? = null, content: @Composable (Expandable) -> Unit, ) { Expandable( rememberExpandableController(color, shape, contentColor, borderStroke), modifier, onClick, + interactionSource, content, ) } @@ -158,6 +162,7 @@ fun Expandable( controller: ExpandableController, modifier: Modifier = Modifier, onClick: ((Expandable) -> Unit)? = null, + interactionSource: MutableInteractionSource? = null, content: @Composable (Expandable) -> Unit, ) { val controller = controller as ExpandableControllerImpl @@ -190,6 +195,18 @@ fun Expandable( var thisExpandableSize by remember { mutableStateOf(Size.Zero) } + /** Set the current element size as this Expandable size. */ + fun Modifier.updateExpandableSize(): Modifier { + return this.onGloballyPositioned { coords -> + thisExpandableSize = + coords + .findRootCoordinates() + // Make sure that we report the actual size, and not the visual/clipped one. + .localBoundingBoxOf(coords, clipBounds = false) + .size + } + } + // Make sure we don't read animatorState directly here to avoid recomposition every time the // state changes (i.e. every frame of the animation). val isAnimating by remember { @@ -247,7 +264,7 @@ fun Expandable( controller.isDialogShowing.value -> { Box( modifier - .onGloballyPositioned { thisExpandableSize = it.boundsInRoot().size } + .updateExpandableSize() .then(minInteractiveSizeModifier) .drawWithContent { /* Don't draw anything when the dialog is shown. */} .onGloballyPositioned { @@ -258,18 +275,25 @@ fun Expandable( else -> { val clickModifier = if (onClick != null) { - Modifier.clickable { onClick(controller.expandable) } + if (interactionSource != null) { + // If the caller provided an interaction source, then that means that they + // will draw the click indication themselves. + Modifier.clickable(interactionSource, indication = null) { + onClick(controller.expandable) + } + } else { + // If no interaction source is provided, we draw the default indication (a + // ripple) and make sure it's clipped by the expandable shape. + Modifier.clip(shape).clickable { onClick(controller.expandable) } + } } else { Modifier } Box( modifier - .onGloballyPositioned { thisExpandableSize = it.boundsInRoot().size } + .updateExpandableSize() .then(minInteractiveSizeModifier) - // Note that clip() *must* be above the clickModifier to properly clip the - // ripple. - .clip(shape) .then(clickModifier) .background(color, shape) .border(controller) diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/theme/AndroidColorScheme.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/theme/AndroidColorScheme.kt index b8639e64e0020..caa7e5fae63f8 100644 --- a/packages/SystemUI/compose/core/src/com/android/systemui/compose/theme/AndroidColorScheme.kt +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/theme/AndroidColorScheme.kt @@ -65,10 +65,12 @@ class AndroidColorScheme internal constructor(context: Context) { val colorForeground = getColor(context, R.attr.colorForeground) val colorForegroundInverse = getColor(context, R.attr.colorForegroundInverse) - private fun getColor(context: Context, attr: Int): Color { - val ta = context.obtainStyledAttributes(intArrayOf(attr)) - @ColorInt val color = ta.getColor(0, 0) - ta.recycle() - return Color(color) + companion object { + fun getColor(context: Context, attr: Int): Color { + val ta = context.obtainStyledAttributes(intArrayOf(attr)) + @ColorInt val color = ta.getColor(0, 0) + ta.recycle() + return Color(color) + } } } diff --git a/packages/SystemUI/compose/core/src/com/android/systemui/compose/theme/Color.kt b/packages/SystemUI/compose/core/src/com/android/systemui/compose/theme/Color.kt new file mode 100644 index 0000000000000..de47ccedb3ee9 --- /dev/null +++ b/packages/SystemUI/compose/core/src/com/android/systemui/compose/theme/Color.kt @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.compose.theme + +import android.annotation.AttrRes +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext + +/** Read the [Color] from the given [attribute]. */ +@Composable +@ReadOnlyComposable +fun colorAttr(@AttrRes attribute: Int): Color { + return AndroidColorScheme.getColor(LocalContext.current, attribute) +} diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/ContentDescription.kt b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/ContentDescription.kt new file mode 100644 index 0000000000000..4a5ad6554dc67 --- /dev/null +++ b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/ContentDescription.kt @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.common.ui.compose + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import com.android.systemui.common.shared.model.ContentDescription + +/** Returns the loaded [String] or `null` if there isn't one. */ +@Composable +fun ContentDescription.load(): String? { + return when (this) { + is ContentDescription.Loaded -> description + is ContentDescription.Resource -> stringResource(res) + } +} diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt new file mode 100644 index 0000000000000..6e8312436d96f --- /dev/null +++ b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.common.ui.compose + +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.res.painterResource +import androidx.core.graphics.drawable.toBitmap +import com.android.systemui.common.shared.model.Icon + +/** + * Icon composable that draws [icon] using [tint]. + * + * Note: You can use [Color.Unspecified] to disable the tint and keep the original icon colors. + */ +@Composable +fun Icon( + icon: Icon, + modifier: Modifier = Modifier, + tint: Color = LocalContentColor.current, +) { + val contentDescription = icon.contentDescription?.load() + when (icon) { + is Icon.Loaded -> { + Icon(icon.drawable.toBitmap().asImageBitmap(), contentDescription, modifier, tint) + } + is Icon.Resource -> Icon(painterResource(icon.res), contentDescription, modifier, tint) + } +} diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt b/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt index 2bf1937a1c1e8..2aac46e903426 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt @@ -53,7 +53,6 @@ import com.android.systemui.R import com.android.systemui.compose.theme.LocalAndroidColorScheme import com.android.systemui.people.ui.viewmodel.PeopleTileViewModel import com.android.systemui.people.ui.viewmodel.PeopleViewModel -import kotlinx.coroutines.flow.collect /** * Compose the screen associated to a [PeopleViewModel]. diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt new file mode 100644 index 0000000000000..654b723f5cffd --- /dev/null +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt @@ -0,0 +1,361 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.qs.footer.ui.compose + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.LocalIndication +import androidx.compose.foundation.indication +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawWithContent +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.layout.layout +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.constrainHeight +import androidx.compose.ui.unit.constrainWidth +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.em +import androidx.compose.ui.unit.sp +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.repeatOnLifecycle +import com.android.systemui.R +import com.android.systemui.animation.Expandable +import com.android.systemui.common.shared.model.Icon +import com.android.systemui.common.ui.compose.Icon +import com.android.systemui.compose.animation.Expandable +import com.android.systemui.compose.modifiers.background +import com.android.systemui.compose.theme.LocalAndroidColorScheme +import com.android.systemui.compose.theme.colorAttr +import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsButtonViewModel +import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsForegroundServicesButtonViewModel +import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsSecurityButtonViewModel +import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel +import kotlinx.coroutines.launch + +/** The Quick Settings footer actions row. */ +@Composable +fun FooterActions( + viewModel: FooterActionsViewModel, + qsVisibilityLifecycleOwner: LifecycleOwner, + modifier: Modifier = Modifier, +) { + val context = LocalContext.current + + // Collect visibility and alphas as soon as we are composed, even when not visible. + val isVisible by viewModel.isVisible.collectAsState() + val alpha by viewModel.alpha.collectAsState() + val backgroundAlpha = viewModel.backgroundAlpha.collectAsState() + + var security by remember { mutableStateOf(null) } + var foregroundServices by remember { + mutableStateOf(null) + } + var userSwitcher by remember { mutableStateOf(null) } + + LaunchedEffect( + context, + qsVisibilityLifecycleOwner, + viewModel, + viewModel.security, + viewModel.foregroundServices, + viewModel.userSwitcher, + ) { + launch { + // Listen for dialog requests as soon as we are composed, even when not visible. + viewModel.observeDeviceMonitoringDialogRequests(context) + } + + // Listen for model changes only when QS are visible. + qsVisibilityLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { + launch { viewModel.security.collect { security = it } } + launch { viewModel.foregroundServices.collect { foregroundServices = it } } + launch { viewModel.userSwitcher.collect { userSwitcher = it } } + } + } + + val backgroundColor = colorAttr(R.attr.underSurfaceColor) + val contentColor = LocalAndroidColorScheme.current.textColorPrimary + val backgroundTopRadius = dimensionResource(R.dimen.qs_corner_radius) + val backgroundModifier = + remember( + backgroundColor, + backgroundAlpha, + backgroundTopRadius, + ) { + Modifier.background( + backgroundColor, + backgroundAlpha::value, + RoundedCornerShape(topStart = backgroundTopRadius, topEnd = backgroundTopRadius), + ) + } + + Row( + modifier + .fillMaxWidth() + .graphicsLayer { this.alpha = alpha } + .drawWithContent { + if (isVisible) { + drawContent() + } + } + .then(backgroundModifier) + .padding( + top = dimensionResource(R.dimen.qs_footer_actions_top_padding), + bottom = dimensionResource(R.dimen.qs_footer_actions_bottom_padding), + ) + .layout { measurable, constraints -> + // All buttons have a 4dp padding to increase their touch size. To be consistent + // with the View implementation, we want to left-most and right-most buttons to be + // visually aligned with the left and right sides of this row. So we let this + // component be 2*4dp wider and then offset it by -4dp to the start. + val inset = 4.dp.roundToPx() + val additionalWidth = inset * 2 + val newConstraints = + if (constraints.hasBoundedWidth) { + constraints.copy(maxWidth = constraints.maxWidth + additionalWidth) + } else { + constraints + } + val placeable = measurable.measure(newConstraints) + + val width = constraints.constrainWidth(placeable.width - additionalWidth) + val height = constraints.constrainHeight(placeable.height) + layout(width, height) { placeable.place(-inset, 0) } + }, + verticalAlignment = Alignment.CenterVertically, + ) { + CompositionLocalProvider( + LocalContentColor provides contentColor, + ) { + if (security == null && foregroundServices == null) { + Spacer(Modifier.weight(1f)) + } + + security?.let { SecurityButton(it, Modifier.weight(1f)) } + foregroundServices?.let { ForegroundServicesButton(it) } + userSwitcher?.let { IconButton(it) } + IconButton(viewModel.settings) + viewModel.power?.let { IconButton(it) } + } + } +} + +/** The security button. */ +@Composable +private fun SecurityButton( + model: FooterActionsSecurityButtonViewModel, + modifier: Modifier = Modifier, +) { + val onClick: ((Expandable) -> Unit)? = + model.onClick?.let { onClick -> + val context = LocalContext.current + { expandable -> onClick(context, expandable) } + } + + TextButton( + model.icon, + model.text, + showNewDot = false, + onClick = onClick, + modifier, + ) +} + +/** The foreground services button. */ +@Composable +private fun RowScope.ForegroundServicesButton( + model: FooterActionsForegroundServicesButtonViewModel, +) { + if (model.displayText) { + TextButton( + Icon.Resource(R.drawable.ic_info_outline, contentDescription = null), + model.text, + showNewDot = model.hasNewChanges, + onClick = model.onClick, + Modifier.weight(1f), + ) + } else { + NumberButton( + model.foregroundServicesCount, + showNewDot = model.hasNewChanges, + onClick = model.onClick, + ) + } +} + +/** A button with an icon. */ +@Composable +private fun IconButton( + model: FooterActionsButtonViewModel, + modifier: Modifier = Modifier, +) { + Expandable( + color = colorAttr(model.backgroundColor), + shape = CircleShape, + onClick = model.onClick, + modifier = modifier, + ) { + val tint = model.iconTint?.let { Color(it) } ?: Color.Unspecified + Icon( + model.icon, + tint = tint, + modifier = Modifier.size(20.dp), + ) + } +} + +/** A button with a number an an optional dot (to indicate new changes). */ +@Composable +private fun NumberButton( + number: Int, + showNewDot: Boolean, + onClick: (Expandable) -> Unit, + modifier: Modifier = Modifier, +) { + // By default Expandable will show a ripple above its content when clicked, and clip the content + // with the shape of the expandable. In this case we also want to show a "new changes dot" + // outside of the shape, so we can't clip. To work around that we can pass our own interaction + // source and draw the ripple indication ourselves above the text but below the "new changes + // dot". + val interactionSource = remember { MutableInteractionSource() } + + Expandable( + color = colorAttr(R.attr.offStateColor), + shape = CircleShape, + onClick = onClick, + interactionSource = interactionSource, + modifier = modifier, + ) { + Box(Modifier.size(40.dp)) { + Box( + Modifier.fillMaxSize() + .clip(CircleShape) + .indication( + interactionSource, + LocalIndication.current, + ) + ) { + Text( + number.toString(), + modifier = Modifier.align(Alignment.Center), + style = MaterialTheme.typography.bodyLarge, + color = LocalAndroidColorScheme.current.textColorPrimary, + // TODO(b/242040009): This should only use a standard text style instead and + // should not override the text size. + fontSize = 18.sp, + ) + } + + if (showNewDot) { + NewChangesDot(Modifier.align(Alignment.BottomEnd)) + } + } + } +} + +/** A dot that indicates new changes. */ +@Composable +private fun NewChangesDot(modifier: Modifier = Modifier) { + val contentDescription = stringResource(R.string.fgs_dot_content_description) + val color = LocalAndroidColorScheme.current.colorAccentTertiary + + Canvas(modifier.size(12.dp).semantics { this.contentDescription = contentDescription }) { + drawCircle(color) + } +} + +/** A larger button with an icon, some text and an optional dot (to indicate new changes). */ +@Composable +private fun TextButton( + icon: Icon, + text: String, + showNewDot: Boolean, + onClick: ((Expandable) -> Unit)?, + modifier: Modifier = Modifier, +) { + Expandable( + shape = CircleShape, + color = colorAttr(R.attr.underSurfaceColor), + contentColor = LocalAndroidColorScheme.current.textColorSecondary, + borderStroke = BorderStroke(1.dp, LocalAndroidColorScheme.current.colorBackground), + modifier = modifier.padding(horizontal = 4.dp), + onClick = onClick, + ) { + Row( + Modifier.padding(horizontal = dimensionResource(R.dimen.qs_footer_padding)), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon(icon, Modifier.padding(end = 12.dp).size(20.dp)) + + Text( + text, + Modifier.weight(1f), + style = MaterialTheme.typography.bodyMedium, + // TODO(b/242040009): Remove this letter spacing. We should only use the M3 text + // styles without modifying them. + letterSpacing = 0.01.em, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + + if (showNewDot) { + NewChangesDot(Modifier.padding(start = 8.dp)) + } + + if (onClick != null) { + Icon( + painterResource(com.android.internal.R.drawable.ic_chevron_end), + contentDescription = null, + Modifier.padding(start = 8.dp).size(20.dp), + ) + } + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/binder/FooterActionsViewBinder.kt b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/binder/FooterActionsViewBinder.kt index 6db3c9941b784..30f81243e8d01 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/binder/FooterActionsViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/binder/FooterActionsViewBinder.kt @@ -237,7 +237,13 @@ object FooterActionsViewBinder { return } - buttonView.setBackgroundResource(model.background) + val backgroundResource = + when (model.backgroundColor) { + R.attr.offStateColor -> R.drawable.qs_footer_action_circle + com.android.internal.R.attr.colorAccent -> R.drawable.qs_footer_action_circle_color + else -> error("Unsupported icon background resource ${model.backgroundColor}") + } + buttonView.setBackgroundResource(backgroundResource) buttonView.setOnClickListener { model.onClick(Expandable.fromView(buttonView)) } val icon = model.icon diff --git a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsButtonViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsButtonViewModel.kt index 8d819dacba672..2670787909b43 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsButtonViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsButtonViewModel.kt @@ -16,7 +16,8 @@ package com.android.systemui.qs.footer.ui.viewmodel -import android.annotation.DrawableRes +import android.annotation.AttrRes +import android.annotation.ColorInt import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.Icon @@ -27,7 +28,7 @@ import com.android.systemui.common.shared.model.Icon data class FooterActionsButtonViewModel( val id: Int, val icon: Icon, - val iconTint: Int?, - @DrawableRes val background: Int, + @ColorInt val iconTint: Int?, + @AttrRes val backgroundColor: Int, val onClick: (Expandable) -> Unit, ) diff --git a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt index dee6fadbc9cba..fbf32b3b99ea9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt @@ -18,6 +18,7 @@ package com.android.systemui.qs.footer.ui.viewmodel import android.content.Context import android.util.Log +import android.view.ContextThemeWrapper import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner @@ -49,12 +50,15 @@ import kotlinx.coroutines.flow.map /** A ViewModel for the footer actions. */ class FooterActionsViewModel( - @Application private val context: Context, + @Application appContext: Context, private val footerActionsInteractor: FooterActionsInteractor, private val falsingManager: FalsingManager, private val globalActionsDialogLite: GlobalActionsDialogLite, showPowerButton: Boolean, ) { + /** The context themed with the Quick Settings colors. */ + private val context = ContextThemeWrapper(appContext, R.style.Theme_SystemUI_QuickSettings) + /** * Whether the UI rendering this ViewModel should be visible. Note that even when this is false, * the UI should still participate to the layout it is included in (i.e. in the View world it @@ -142,7 +146,7 @@ class FooterActionsViewModel( ContentDescription.Resource(R.string.accessibility_quick_settings_settings) ), iconTint = null, - R.drawable.qs_footer_action_circle, + backgroundColor = R.attr.offStateColor, this::onSettingsButtonClicked, ) @@ -160,7 +164,7 @@ class FooterActionsViewModel( context, com.android.internal.R.attr.textColorOnAccent, ), - R.drawable.qs_footer_action_circle_color, + backgroundColor = com.android.internal.R.attr.colorAccent, this::onPowerButtonClicked, ) } else { @@ -260,7 +264,7 @@ class FooterActionsViewModel( ), ), iconTint = null, - background = R.drawable.qs_footer_action_circle, + backgroundColor = R.attr.offStateColor, onClick = this::onUserSwitcherClicked, ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt index 01411c9e7f04b..0b9fbd919715a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt @@ -84,7 +84,7 @@ class FooterActionsViewModelTest : SysuiTestCase() { ContentDescription.Resource(R.string.accessibility_quick_settings_settings) ) ) - assertThat(settings.background).isEqualTo(R.drawable.qs_footer_action_circle) + assertThat(settings.backgroundColor).isEqualTo(R.attr.offStateColor) assertThat(settings.iconTint).isNull() } @@ -105,7 +105,7 @@ class FooterActionsViewModelTest : SysuiTestCase() { ContentDescription.Resource(R.string.accessibility_quick_settings_power_menu) ) ) - assertThat(power.background).isEqualTo(R.drawable.qs_footer_action_circle_color) + assertThat(power.backgroundColor).isEqualTo(com.android.internal.R.attr.colorAccent) assertThat(power.iconTint) .isEqualTo( Utils.getColorAttrDefaultColor( @@ -170,7 +170,7 @@ class FooterActionsViewModelTest : SysuiTestCase() { assertThat(userSwitcher).isNotNull() assertThat(userSwitcher!!.icon) .isEqualTo(Icon.Loaded(picture, ContentDescription.Loaded("Signed in as foo"))) - assertThat(userSwitcher.background).isEqualTo(R.drawable.qs_footer_action_circle) + assertThat(userSwitcher.backgroundColor).isEqualTo(R.attr.offStateColor) // Change the current user name. userSwitcherControllerWrapper.currentUserName = "bar" From eb88f20d603cd355a4902b4e42b6c264606268a4 Mon Sep 17 00:00:00 2001 From: Lyn Han Date: Mon, 12 Dec 2022 12:15:24 -0800 Subject: [PATCH 10/36] Add FSI view model Bug: 243421660 Test: FsiChromeWindowViewModelTest Change-Id: I2964d4df7985271d304324602a3e846f45bad7b0 --- .../dagger/SystemUICoreStartableModule.kt | 7 ++ .../fsi/FsiChromeViewModelFactory.kt | 87 ++++++++++++++ .../fsi/FsiChromeViewModelFactoryTest.kt | 112 ++++++++++++++++++ 3 files changed, 206 insertions(+) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/notification/fsi/FsiChromeViewModelFactory.kt create mode 100644 packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/fsi/FsiChromeViewModelFactoryTest.kt diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt index 30117d9880911..4db77abacd699 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt @@ -42,6 +42,7 @@ import com.android.systemui.settings.dagger.MultiUserUtilsModule import com.android.systemui.shortcut.ShortcutKeyDispatcher import com.android.systemui.statusbar.notification.fsi.FsiChromeRepo import com.android.systemui.statusbar.notification.InstantAppNotifier +import com.android.systemui.statusbar.notification.fsi.FsiChromeViewModelFactory import com.android.systemui.statusbar.phone.KeyguardLiftController import com.android.systemui.stylus.StylusUsiPowerStartable import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator @@ -86,6 +87,12 @@ abstract class SystemUICoreStartableModule { @ClassKey(FsiChromeRepo::class) abstract fun bindFSIChromeRepo(sysui: FsiChromeRepo): CoreStartable + /** Inject into FsiChromeWindowViewModel. */ + @Binds + @IntoMap + @ClassKey(FsiChromeViewModelFactory::class) + abstract fun bindFSIChromeWindowViewModel(sysui: FsiChromeViewModelFactory): CoreStartable + /** Inject into GarbageMonitor.Service. */ @Binds @IntoMap diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/fsi/FsiChromeViewModelFactory.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/fsi/FsiChromeViewModelFactory.kt new file mode 100644 index 0000000000000..1ca698b6bd58e --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/fsi/FsiChromeViewModelFactory.kt @@ -0,0 +1,87 @@ +package com.android.systemui.statusbar.notification.fsi + +import android.annotation.UiContext +import android.app.PendingIntent +import android.content.Context +import android.graphics.drawable.Drawable +import com.android.systemui.CoreStartable +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.statusbar.notification.fsi.FsiDebug.Companion.log +import com.android.wm.shell.TaskView +import com.android.wm.shell.TaskViewFactory +import java.util.Optional +import java.util.concurrent.Executor +import javax.inject.Inject +import kotlin.coroutines.resume +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.suspendCancellableCoroutine + +/** + * Handle view-related data for fullscreen intent container on lockscreen. Wraps FsiChromeRepo, + * transforms events/state into view-relevant representation for FsiChromeView. Alive for lifetime + * of SystemUI. + */ +@SysUISingleton +class FsiChromeViewModelFactory +@Inject +constructor( + val repo: FsiChromeRepo, + val taskViewFactory: Optional, + @UiContext val context: Context, + @Main val mainExecutor: Executor, +) : CoreStartable { + + companion object { + private const val classTag = "FsiChromeViewModelFactory" + } + + val viewModelFlow: Flow = + repo.infoFlow.mapLatest { fsiInfo -> + fsiInfo?.let { + log("$classTag viewModelFlow got new fsiInfo") + + // mapLatest emits null when FSIInfo is null + FsiChromeViewModel( + fsiInfo.appName, + fsiInfo.appIcon, + createTaskView(), + fsiInfo.fullscreenIntent, + repo + ) + } + } + + override fun start() { + log("$classTag start") + } + + private suspend fun createTaskView(): TaskView = suspendCancellableCoroutine { k -> + log("$classTag createTaskView") + + taskViewFactory.get().create(context, mainExecutor) { taskView -> k.resume(taskView) } + } +} + +// Alive for lifetime of FSI. +data class FsiChromeViewModel( + val appName: String, + val appIcon: Drawable, + val taskView: TaskView, + val fsi: PendingIntent, + val repo: FsiChromeRepo +) { + companion object { + private const val classTag = "FsiChromeViewModel" + } + + fun onDismiss() { + log("$classTag onDismiss") + repo.dismiss() + } + fun onFullscreen() { + log("$classTag onFullscreen") + repo.onFullscreen() + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/fsi/FsiChromeViewModelFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/fsi/FsiChromeViewModelFactoryTest.kt new file mode 100644 index 0000000000000..5cee9e377dfb1 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/fsi/FsiChromeViewModelFactoryTest.kt @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.fsi + +import android.app.PendingIntent +import android.graphics.drawable.Drawable +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper.RunWithLooper +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.util.concurrency.FakeExecutor +import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.mock +import com.android.systemui.util.mockito.whenever +import com.android.systemui.util.mockito.withArgCaptor +import com.android.systemui.util.time.FakeSystemClock +import com.android.wm.shell.TaskView +import com.android.wm.shell.TaskViewFactory +import com.google.common.truth.Truth.assertThat +import java.util.Optional +import java.util.function.Consumer +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.Mockito.verify +import org.mockito.MockitoAnnotations + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@RunWithLooper(setAsMainLooper = true) +class FsiChromeViewModelFactoryTest : SysuiTestCase() { + @Mock private lateinit var taskViewFactoryOptional: Optional + @Mock private lateinit var taskViewFactory: TaskViewFactory + @Mock lateinit var taskView: TaskView + + @Main var mainExecutor = FakeExecutor(FakeSystemClock()) + lateinit var viewModelFactory: FsiChromeViewModelFactory + + private val fakeInfoFlow = MutableStateFlow(null) + private var fsiChromeRepo: FsiChromeRepo = + mock().apply { whenever(infoFlow).thenReturn(fakeInfoFlow) } + + private val appName = "appName" + private val appIcon: Drawable = context.getDrawable(com.android.systemui.R.drawable.ic_android) + private val fsi: PendingIntent = Mockito.mock(PendingIntent::class.java) + private val fsiInfo = FsiChromeRepo.FSIInfo(appName, appIcon, fsi) + + @Before + fun setUp() { + MockitoAnnotations.initMocks(this) + + whenever(taskViewFactoryOptional.get()).thenReturn(taskViewFactory) + + viewModelFactory = + FsiChromeViewModelFactory(fsiChromeRepo, taskViewFactoryOptional, context, mainExecutor) + } + + @Test + fun testViewModelFlow_update_createsTaskView() { + runTest { + val latestViewModel = + viewModelFactory.viewModelFlow + .onStart { FsiDebug.log("viewModelFactory.viewModelFlow.onStart") } + .stateIn( + backgroundScope, // stateIn runs forever, don't count it as test coroutine + SharingStarted.Eagerly, + null + ) + runCurrent() // Drain queued backgroundScope operations + + // Test: emit the fake FSIInfo + fakeInfoFlow.emit(fsiInfo) + runCurrent() + + val taskViewFactoryCallback: Consumer = withArgCaptor { + verify(taskViewFactory).create(any(), any(), capture()) + } + taskViewFactoryCallback.accept(taskView) // this will call k.resume + runCurrent() + + // Verify that the factory has produced a new ViewModel + // containing the relevant data from FsiInfo + val expectedViewModel = + FsiChromeViewModel(appName, appIcon, taskView, fsi, fsiChromeRepo) + + assertThat(latestViewModel.value).isEqualTo(expectedViewModel) + } + } +} From d4e51d102f9179103f577eee619b893912f19221 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Sun, 20 Nov 2022 22:01:24 +0000 Subject: [PATCH 11/36] Moving PackageManagerServiceTests to their own suite. Bug: 238141698 Fixes: 238141698 Bug: 262254794 Test: atest PackageManagerServiceServerTests FrameworksServicesTests Change-Id: Iacc89c7525d8d9beec39c242bfc305ad08844580 Merged-In: Iacc89c7525d8d9beec39c242bfc305ad08844580 --- .../PackageManagerServiceTests/TEST_MAPPING | 34 ++++ .../apks/Android.bp | 0 .../apks/OWNERS | 0 .../apks/install-split-base/Android.bp | 0 .../install-split-base/AndroidManifest.xml | 0 .../dexapis/splitapp/BaseActivity.java | 0 .../apks/install-split-feature-a/Android.bp | 0 .../AndroidManifest.xml | 0 .../splitapp/feature_a/FeatureAActivity.java | 0 .../apks/install/Android.bp | 0 .../apks/install/AndroidManifest.xml | 0 .../apks/install/res/values/strings.xml | 0 .../apks/install_bad_dex/Android.bp | 0 .../apks/install_bad_dex/AndroidManifest.xml | 0 .../apks/install_bad_dex/classes.dex | 0 .../install_bad_dex/res/values/strings.xml | 0 .../frameworks/coretests/TestActivity.java | 0 .../install_complete_package_info/Android.bp | 0 .../AndroidManifest.xml | 0 .../frameworks/coretests/TestActivity.java | 0 .../frameworks/coretests/TestProvider.java | 0 .../frameworks/coretests/TestReceiver.java | 0 .../frameworks/coretests/TestService.java | 0 .../apks/install_decl_perm/Android.bp | 0 .../install_decl_perm/AndroidManifest.xml | 0 .../install_decl_perm/res/values/strings.xml | 0 .../apks/install_intent_filters/Android.bp | 0 .../AndroidManifest.xml | 0 .../servicestests/TestActivity.java | 0 .../apks/install_loc_auto/Android.bp | 0 .../apks/install_loc_auto/AndroidManifest.xml | 0 .../install_loc_auto/res/values/strings.xml | 0 .../apks/install_loc_internal/Android.bp | 0 .../install_loc_internal/AndroidManifest.xml | 0 .../res/values/strings.xml | 0 .../apks/install_loc_sdcard/Android.bp | 0 .../install_loc_sdcard/AndroidManifest.xml | 0 .../install_loc_sdcard/res/values/strings.xml | 0 .../apks/install_loc_unspecified/Android.bp | 0 .../AndroidManifest.xml | 0 .../res/values/strings.xml | 0 .../apks/install_use_perm_good/Android.bp | 0 .../install_use_perm_good/AndroidManifest.xml | 0 .../res/values/strings.xml | 0 .../apks/install_uses_feature/Android.bp | 0 .../install_uses_feature/AndroidManifest.xml | 0 .../res/values/strings.xml | 0 .../apks/install_uses_sdk/Android.bp | 12 ++ .../install_uses_sdk/AndroidManifest-0.xml | 0 .../AndroidManifest-q0-r0.xml | 0 .../install_uses_sdk/AndroidManifest-q0.xml | 0 .../AndroidManifest-r-none.xml | 0 .../AndroidManifest-r0-s0.xml | 0 .../AndroidManifest-r0-s1000.xml} | 0 .../AndroidManifest-r0-s5.xml | 27 +++ .../install_uses_sdk/AndroidManifest-r0.xml | 0 .../AndroidManifest-r1000.xml} | 0 .../install_uses_sdk/AndroidManifest-r5.xml | 26 +++ .../install_uses_sdk/res/values/strings.xml | 0 .../apks/keyset/Android.bp | 0 .../apks/keyset/api_test/AndroidManifest.xml | 0 .../apks/keyset/permDef/AndroidManifest.xml | 0 .../apks/keyset/permUse/AndroidManifest.xml | 0 .../apks/keyset/res/values/strings.xml | 0 .../apks/keyset/uA/AndroidManifest.xml | 0 .../apks/keyset/uAB/AndroidManifest.xml | 0 .../apks/keyset/uAuB/AndroidManifest.xml | 0 .../apks/keyset/uB/AndroidManifest.xml | 0 .../apks/keyset/uNone/AndroidManifest.xml | 0 .../server/Android.bp | 160 ++++++++++++++++++ .../server/AndroidManifest.xml | 126 ++++++++++++++ .../server/AndroidTest.xml | 33 ++++ .../certs/ec-p256-lineage-2-signers | Bin .../certs/ec-p256-lineage-3-signers | Bin .../PackageSignaturesTest/certs/ec-p256.pk8 | Bin .../certs/ec-p256.x509.der | Bin .../PackageSignaturesTest/certs/ec-p256_2.pk8 | Bin .../certs/ec-p256_2.x509.der | Bin .../PackageSignaturesTest/certs/ec-p256_3.pk8 | Bin .../certs/ec-p256_3.x509.der | Bin .../assets/PackageSignaturesTest/xml/README | 0 .../xml/one-signer-extra-cert-tag.xml | 0 .../xml/one-signer-invalid-cert-index.xml | 0 .../xml/one-signer-invalid-cert-key.xml | 0 ...one-signer-invalid-public-key-cert-key.xml | 0 .../xml/one-signer-invalid-tag.xml | 0 .../xml/one-signer-missing-cert-index.xml | 0 .../xml/one-signer-missing-cert-key.xml | 0 .../xml/one-signer-missing-cert-tag.xml | 0 .../xml/one-signer-missing-scheme-version.xml | 0 .../xml/one-signer-missing-sigs-count.xml | 0 .../xml/one-signer-previous-cert.xml | 0 .../PackageSignaturesTest/xml/one-signer.xml | 0 ...ners-in-lineage-invalid-pastSigs-count.xml | 0 ...s-in-lineage-missing-pastSigs-cert-tag.xml | 0 ...ners-in-lineage-missing-pastSigs-count.xml | 0 ...ners-in-lineage-missing-scheme-version.xml | 0 .../xml/three-signers-in-lineage.xml | 0 ...signers-in-lineage-invalid-certs-flags.xml | 0 ...in-lineage-invalid-pastSigs-cert-index.xml | 0 ...signers-in-lineage-missing-certs-flags.xml | 0 ...in-lineage-missing-pastSigs-cert-index.xml | 0 ...ners-in-lineage-multiple-pastSigs-tags.xml | 0 .../xml/two-signers-in-lineage-no-caps.xml | 0 ...rs-in-lineage-undefined-pastSigs-index.xml | 0 .../xml/two-signers-in-lineage.xml | 0 .../xml/two-signers-v1v2-missing-cert-tag.xml | 0 .../xml/two-signers-v1v2.xml | 0 .../PackageParsingTestAppEmptyActionSdkQ.apk | Bin .../PackageParsingTestAppEmptyActionSdkR.apk | Bin ...PackageParsingTestAppEmptyCategorySdkQ.apk | Bin ...PackageParsingTestAppEmptyCategorySdkR.apk | Bin .../PackageParsingTestAppMissingAppSdkQ.apk | Bin .../PackageParsingTestAppMissingAppSdkR.apk | Bin .../server}/res/raw/com_android_tzdata.apex | Bin .../server}/res/raw/install_app1_cert1 | Bin .../server}/res/raw/install_app1_cert1_cert2 | Bin .../server}/res/raw/install_app1_cert2 | Bin .../server}/res/raw/install_app1_cert3 | Bin .../server}/res/raw/install_app1_cert3_cert4 | Bin .../server}/res/raw/install_app1_cert5 | Bin .../res/raw/install_app1_cert5_rotated_cert6 | Bin .../server}/res/raw/install_app1_cert6 | Bin .../server}/res/raw/install_app1_unsigned | Bin .../server}/res/raw/install_app2_cert1 | Bin .../server}/res/raw/install_app2_cert1_cert2 | Bin .../server}/res/raw/install_app2_cert2 | Bin .../server}/res/raw/install_app2_cert3 | Bin .../res/raw/install_app2_cert5_rotated_cert6 | Bin .../server}/res/raw/install_app2_unsigned | Bin .../server}/res/raw/install_shared1_cert1 | Bin .../res/raw/install_shared1_cert1_cert2 | Bin .../server}/res/raw/install_shared1_cert2 | Bin .../server}/res/raw/install_shared1_unsigned | Bin .../server}/res/raw/install_shared2_cert1 | Bin .../res/raw/install_shared2_cert1_cert2 | Bin .../server}/res/raw/install_shared2_cert2 | Bin .../server}/res/raw/install_shared2_unsigned | Bin .../server/res/values/values.xml | 20 +++ .../server}/res/xml/unparseable_metadata1.xml | 0 .../server}/res/xml/unparseable_metadata2.xml | 0 .../server}/res/xml/well_formed_metadata.xml | 0 .../android/server}/AppsFilterImplTest.java | 0 .../com/android/server}/BundleUtilsTest.java | 0 .../server}/CompatibilityModeTest.java | 0 .../CrossProfileAppsServiceImplTest.java | 2 +- .../com/android/server}/InstallerTest.java | 0 .../server}/KeySetManagerServiceTest.java | 0 .../com/android/server}/KeySetStrings.java | 0 .../src/com/android/server}/KeySetUtils.java | 0 .../server}/ModuleInfoProviderTest.java | 2 +- .../server}/PackageInstallerSessionTest.java | 0 .../server}/PackageManagerServiceTest.java | 2 - .../server}/PackageManagerSettingsTests.java | 0 .../android/server}/PackageManagerTests.java | 2 +- .../android/server}/PackageParserTest.java | 0 .../server}/PackageSignaturesTest.java | 0 .../android/server}/PackageUserStateTest.java | 0 .../server}/PackageVerificationStateTest.java | 0 .../server}/ParallelPackageParserTest.java | 0 .../server}/PreferredComponentTest.java | 0 .../android/server}/RestrictionsSetTest.java | 0 .../android/server}/ScanRequestBuilder.java | 0 .../src/com/android/server}/ScanTests.java | 0 .../android/server}/UserDataPreparerTest.java | 10 +- .../server}/WatchedIntentHandlingTest.java | 0 .../parsing/PackageParserLegacyCoreTest.java | 2 +- .../parsing/PackageParsingDeferErrorTest.kt | 3 +- .../parsing/SystemPartitionParseTest.kt | 0 .../library/AndroidHidlUpdaterTest.java | 0 .../AndroidNetIpSecIkeUpdaterTest.java | 0 .../library/AndroidTestBaseUpdaterTest.java | 0 .../AndroidTestRunnerSplitUpdaterTest.java | 0 .../library/ApexSharedLibraryUpdaterTest.java | 0 .../ComGoogleAndroidMapsUpdaterTest.java | 0 .../parsing/library/OptionalClassRunner.java | 0 .../OrgApacheHttpLegacyUpdaterTest.java | 0 .../PackageBackwardCompatibilityTest.java | 0 .../PackageSharedLibraryUpdaterTest.java | 0 ...UnnecessaryAndroidTestBaseLibraryTest.java | 0 ...cessaryOrgApacheHttpLegacyLibraryTest.java | 0 .../src/com/android/server/utils/OWNERS | 4 + .../android/server/utils/WatchableTester.java | 0 .../com/android/server/utils/WatcherTest.java | 2 +- services/tests/servicestests/Android.bp | 72 ++++---- .../tests/servicestests/AndroidManifest.xml | 7 - .../backup/UserBackupManagerServiceTest.java | 2 + .../DevicePolicyManagerServiceTestable.java | 12 +- .../devicepolicy/DevicePolicyManagerTest.java | 8 +- .../src/com/android/server/utils/OWNERS | 6 +- 190 files changed, 503 insertions(+), 71 deletions(-) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/OWNERS (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install-split-base/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install-split-base/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install-split-feature-a/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install-split-feature-a/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_bad_dex/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_bad_dex/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_bad_dex/classes.dex (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_bad_dex/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_complete_package_info/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_complete_package_info/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_decl_perm/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_decl_perm/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_decl_perm/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_intent_filters/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_intent_filters/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_intent_filters/src/com/android/frameworks/servicestests/TestActivity.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_auto/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_auto/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_auto/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_internal/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_internal/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_internal/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_sdcard/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_sdcard/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_sdcard/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_unspecified/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_unspecified/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_loc_unspecified/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_use_perm_good/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_use_perm_good/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_use_perm_good/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_feature/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_feature/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_feature/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_sdk/Android.bp (82%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_sdk/AndroidManifest-0.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_sdk/AndroidManifest-q0-r0.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_sdk/AndroidManifest-q0.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_sdk/AndroidManifest-r-none.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_sdk/AndroidManifest-r0-s0.xml (100%) rename services/tests/{servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml => PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s1000.xml} (100%) create mode 100644 services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_sdk/AndroidManifest-r0.xml (100%) rename services/tests/{servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml => PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r1000.xml} (100%) create mode 100644 services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r5.xml rename services/tests/{servicestests => PackageManagerServiceTests}/apks/install_uses_sdk/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/Android.bp (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/api_test/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/permDef/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/permUse/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/res/values/strings.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/uA/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/uAB/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/uAuB/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/uB/AndroidManifest.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests}/apks/keyset/uNone/AndroidManifest.xml (100%) create mode 100644 services/tests/PackageManagerServiceTests/server/Android.bp create mode 100644 services/tests/PackageManagerServiceTests/server/AndroidManifest.xml create mode 100644 services/tests/PackageManagerServiceTests/server/AndroidTest.xml rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/certs/ec-p256-lineage-2-signers (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/certs/ec-p256-lineage-3-signers (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/certs/ec-p256.pk8 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/certs/ec-p256.x509.der (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/certs/ec-p256_2.pk8 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/certs/ec-p256_2.x509.der (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/certs/ec-p256_3.pk8 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/certs/ec-p256_3.x509.der (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/README (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-extra-cert-tag.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-index.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-key.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-invalid-public-key-cert-key.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-invalid-tag.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-missing-cert-index.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-missing-cert-key.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-missing-cert-tag.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-missing-scheme-version.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-missing-sigs-count.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer-previous-cert.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/one-signer.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/three-signers-in-lineage-invalid-pastSigs-count.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-cert-tag.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-count.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-scheme-version.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/three-signers-in-lineage.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-certs-flags.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-pastSigs-cert-index.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-certs-flags.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-pastSigs-cert-index.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-in-lineage-multiple-pastSigs-tags.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-in-lineage-no-caps.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-in-lineage-undefined-pastSigs-index.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-in-lineage.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-v1v2-missing-cert-tag.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/assets/PackageSignaturesTest/xml/two-signers-v1v2.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/PackageParsingTestAppEmptyActionSdkQ.apk (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/PackageParsingTestAppEmptyActionSdkR.apk (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/PackageParsingTestAppEmptyCategorySdkQ.apk (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/PackageParsingTestAppEmptyCategorySdkR.apk (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/PackageParsingTestAppMissingAppSdkQ.apk (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/PackageParsingTestAppMissingAppSdkR.apk (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/com_android_tzdata.apex (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_cert1 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_cert1_cert2 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_cert2 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_cert3 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_cert3_cert4 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_cert5 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_cert5_rotated_cert6 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_cert6 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app1_unsigned (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app2_cert1 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app2_cert1_cert2 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app2_cert2 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app2_cert3 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app2_cert5_rotated_cert6 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_app2_unsigned (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_shared1_cert1 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_shared1_cert1_cert2 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_shared1_cert2 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_shared1_unsigned (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_shared2_cert1 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_shared2_cert1_cert2 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_shared2_cert2 (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/raw/install_shared2_unsigned (100%) create mode 100644 services/tests/PackageManagerServiceTests/server/res/values/values.xml rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/xml/unparseable_metadata1.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/xml/unparseable_metadata2.xml (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/res/xml/well_formed_metadata.xml (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/AppsFilterImplTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/BundleUtilsTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/CompatibilityModeTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/CrossProfileAppsServiceImplTest.java (99%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/InstallerTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/KeySetManagerServiceTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/KeySetStrings.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/KeySetUtils.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/ModuleInfoProviderTest.java (98%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PackageInstallerSessionTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PackageManagerServiceTest.java (99%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PackageManagerSettingsTests.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PackageManagerTests.java (99%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PackageParserTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PackageSignaturesTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PackageUserStateTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PackageVerificationStateTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/ParallelPackageParserTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/PreferredComponentTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/RestrictionsSetTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/ScanRequestBuilder.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/ScanTests.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/UserDataPreparerTest.java (96%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/WatchedIntentHandlingTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/PackageParserLegacyCoreTest.java (99%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/PackageParsingDeferErrorTest.kt (97%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/SystemPartitionParseTest.kt (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/AndroidHidlUpdaterTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/AndroidNetIpSecIkeUpdaterTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/AndroidTestBaseUpdaterTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/AndroidTestRunnerSplitUpdaterTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/ApexSharedLibraryUpdaterTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/ComGoogleAndroidMapsUpdaterTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/OptionalClassRunner.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/OrgApacheHttpLegacyUpdaterTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/PackageBackwardCompatibilityTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/PackageSharedLibraryUpdaterTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java (100%) rename services/tests/{servicestests/src/com/android/server/pm => PackageManagerServiceTests/server/src/com/android/server}/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java (100%) create mode 100644 services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/OWNERS rename services/tests/{servicestests => PackageManagerServiceTests/server}/src/com/android/server/utils/WatchableTester.java (100%) rename services/tests/{servicestests => PackageManagerServiceTests/server}/src/com/android/server/utils/WatcherTest.java (99%) diff --git a/services/tests/PackageManagerServiceTests/TEST_MAPPING b/services/tests/PackageManagerServiceTests/TEST_MAPPING index af0008c29aafa..fe27a3777ee84 100644 --- a/services/tests/PackageManagerServiceTests/TEST_MAPPING +++ b/services/tests/PackageManagerServiceTests/TEST_MAPPING @@ -2,11 +2,45 @@ "presubmit": [ { "name": "AppEnumerationInternalTests" + }, + { + "name": "PackageManagerServiceServerTests", + "options": [ + { + "include-filter": "com.android.server.pm." + }, + { + "include-annotation": "android.platform.test.annotations.Presubmit" + }, + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + }, + { + "exclude-annotation": "org.junit.Ignore" + } + ] } ], "postsubmit": [ { "name": "PackageManagerServiceHostTests" + }, + { + "name": "PackageManagerServiceServerTests", + "options": [ + { + "include-filter": "com.android.server.pm." + }, + { + "include-annotation": "android.platform.test.annotations.Postsubmit" + }, + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + }, + { + "exclude-annotation": "org.junit.Ignore" + } + ] } ], "imports": [ diff --git a/services/tests/servicestests/apks/Android.bp b/services/tests/PackageManagerServiceTests/apks/Android.bp similarity index 100% rename from services/tests/servicestests/apks/Android.bp rename to services/tests/PackageManagerServiceTests/apks/Android.bp diff --git a/services/tests/servicestests/apks/OWNERS b/services/tests/PackageManagerServiceTests/apks/OWNERS similarity index 100% rename from services/tests/servicestests/apks/OWNERS rename to services/tests/PackageManagerServiceTests/apks/OWNERS diff --git a/services/tests/servicestests/apks/install-split-base/Android.bp b/services/tests/PackageManagerServiceTests/apks/install-split-base/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install-split-base/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install-split-base/Android.bp diff --git a/services/tests/servicestests/apks/install-split-base/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install-split-base/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install-split-base/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install-split-base/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java b/services/tests/PackageManagerServiceTests/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java similarity index 100% rename from services/tests/servicestests/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java rename to services/tests/PackageManagerServiceTests/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java diff --git a/services/tests/servicestests/apks/install-split-feature-a/Android.bp b/services/tests/PackageManagerServiceTests/apks/install-split-feature-a/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install-split-feature-a/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install-split-feature-a/Android.bp diff --git a/services/tests/servicestests/apks/install-split-feature-a/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install-split-feature-a/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install-split-feature-a/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install-split-feature-a/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java b/services/tests/PackageManagerServiceTests/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java similarity index 100% rename from services/tests/servicestests/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java rename to services/tests/PackageManagerServiceTests/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java diff --git a/services/tests/servicestests/apks/install/Android.bp b/services/tests/PackageManagerServiceTests/apks/install/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install/Android.bp diff --git a/services/tests/servicestests/apks/install/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_bad_dex/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_bad_dex/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_bad_dex/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_bad_dex/Android.bp diff --git a/services/tests/servicestests/apks/install_bad_dex/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_bad_dex/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_bad_dex/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_bad_dex/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_bad_dex/classes.dex b/services/tests/PackageManagerServiceTests/apks/install_bad_dex/classes.dex similarity index 100% rename from services/tests/servicestests/apks/install_bad_dex/classes.dex rename to services/tests/PackageManagerServiceTests/apks/install_bad_dex/classes.dex diff --git a/services/tests/servicestests/apks/install_bad_dex/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_bad_dex/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_bad_dex/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_bad_dex/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java b/services/tests/PackageManagerServiceTests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java similarity index 100% rename from services/tests/servicestests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java rename to services/tests/PackageManagerServiceTests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java diff --git a/services/tests/servicestests/apks/install_complete_package_info/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_complete_package_info/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_complete_package_info/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_complete_package_info/Android.bp diff --git a/services/tests/servicestests/apks/install_complete_package_info/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_complete_package_info/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_complete_package_info/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_complete_package_info/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java b/services/tests/PackageManagerServiceTests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java similarity index 100% rename from services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java rename to services/tests/PackageManagerServiceTests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java diff --git a/services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java b/services/tests/PackageManagerServiceTests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java similarity index 100% rename from services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java rename to services/tests/PackageManagerServiceTests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java diff --git a/services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java b/services/tests/PackageManagerServiceTests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java similarity index 100% rename from services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java rename to services/tests/PackageManagerServiceTests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java diff --git a/services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java b/services/tests/PackageManagerServiceTests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java similarity index 100% rename from services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java rename to services/tests/PackageManagerServiceTests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java diff --git a/services/tests/servicestests/apks/install_decl_perm/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_decl_perm/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_decl_perm/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_decl_perm/Android.bp diff --git a/services/tests/servicestests/apks/install_decl_perm/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_decl_perm/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_decl_perm/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_decl_perm/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_decl_perm/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_decl_perm/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_decl_perm/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_decl_perm/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_intent_filters/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_intent_filters/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_intent_filters/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_intent_filters/Android.bp diff --git a/services/tests/servicestests/apks/install_intent_filters/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_intent_filters/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_intent_filters/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_intent_filters/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_intent_filters/src/com/android/frameworks/servicestests/TestActivity.java b/services/tests/PackageManagerServiceTests/apks/install_intent_filters/src/com/android/frameworks/servicestests/TestActivity.java similarity index 100% rename from services/tests/servicestests/apks/install_intent_filters/src/com/android/frameworks/servicestests/TestActivity.java rename to services/tests/PackageManagerServiceTests/apks/install_intent_filters/src/com/android/frameworks/servicestests/TestActivity.java diff --git a/services/tests/servicestests/apks/install_loc_auto/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_loc_auto/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_loc_auto/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_loc_auto/Android.bp diff --git a/services/tests/servicestests/apks/install_loc_auto/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_loc_auto/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_loc_auto/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_loc_auto/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_loc_auto/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_loc_auto/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_loc_auto/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_loc_auto/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_loc_internal/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_loc_internal/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_loc_internal/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_loc_internal/Android.bp diff --git a/services/tests/servicestests/apks/install_loc_internal/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_loc_internal/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_loc_internal/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_loc_internal/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_loc_internal/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_loc_internal/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_loc_internal/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_loc_internal/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_loc_sdcard/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_loc_sdcard/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_loc_sdcard/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_loc_sdcard/Android.bp diff --git a/services/tests/servicestests/apks/install_loc_sdcard/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_loc_sdcard/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_loc_sdcard/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_loc_sdcard/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_loc_sdcard/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_loc_sdcard/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_loc_sdcard/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_loc_sdcard/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_loc_unspecified/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_loc_unspecified/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_loc_unspecified/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_loc_unspecified/Android.bp diff --git a/services/tests/servicestests/apks/install_loc_unspecified/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_loc_unspecified/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_loc_unspecified/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_loc_unspecified/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_loc_unspecified/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_loc_unspecified/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_loc_unspecified/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_loc_unspecified/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_use_perm_good/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_use_perm_good/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_use_perm_good/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_use_perm_good/Android.bp diff --git a/services/tests/servicestests/apks/install_use_perm_good/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_use_perm_good/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_use_perm_good/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_use_perm_good/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_use_perm_good/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_use_perm_good/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_use_perm_good/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_use_perm_good/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_uses_feature/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_uses_feature/Android.bp similarity index 100% rename from services/tests/servicestests/apks/install_uses_feature/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_uses_feature/Android.bp diff --git a/services/tests/servicestests/apks/install_uses_feature/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_feature/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_feature/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_feature/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/install_uses_feature/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_feature/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_feature/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_feature/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_uses_sdk/Android.bp b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/Android.bp similarity index 82% rename from services/tests/servicestests/apks/install_uses_sdk/Android.bp rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/Android.bp index a51293dc19974..9f96256078f3f 100644 --- a/services/tests/servicestests/apks/install_uses_sdk/Android.bp +++ b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/Android.bp @@ -37,12 +37,24 @@ android_test_helper_app { manifest: "AndroidManifest-r5.xml", } +android_test_helper_app { + name: "FrameworksServicesTests_install_uses_sdk_r1000", + defaults: ["FrameworksServicesTests_apks_defaults"], + manifest: "AndroidManifest-r1000.xml", +} + android_test_helper_app { name: "FrameworksServicesTests_install_uses_sdk_r0_s0", defaults: ["FrameworksServicesTests_apks_defaults"], manifest: "AndroidManifest-r0-s0.xml", } +android_test_helper_app { + name: "FrameworksServicesTests_install_uses_sdk_r0_s1000", + defaults: ["FrameworksServicesTests_apks_defaults"], + manifest: "AndroidManifest-r0-s1000.xml", +} + android_test_helper_app { name: "FrameworksServicesTests_install_uses_sdk_r0_s5", defaults: ["FrameworksServicesTests_apks_defaults"], diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-0.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-0.xml diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-q0.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-q0.xml diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r-none.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r-none.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r-none.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r-none.xml diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s1000.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s1000.xml diff --git a/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml new file mode 100644 index 0000000000000..bafe4c4faa3f6 --- /dev/null +++ b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r0.xml diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r1000.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r1000.xml diff --git a/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r5.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r5.xml new file mode 100644 index 0000000000000..7723d051a0418 --- /dev/null +++ b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/AndroidManifest-r5.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/services/tests/servicestests/apks/install_uses_sdk/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/install_uses_sdk/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/install_uses_sdk/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/install_uses_sdk/res/values/strings.xml diff --git a/services/tests/servicestests/apks/keyset/Android.bp b/services/tests/PackageManagerServiceTests/apks/keyset/Android.bp similarity index 100% rename from services/tests/servicestests/apks/keyset/Android.bp rename to services/tests/PackageManagerServiceTests/apks/keyset/Android.bp diff --git a/services/tests/servicestests/apks/keyset/api_test/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/keyset/api_test/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/api_test/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/api_test/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/keyset/permDef/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/keyset/permDef/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/permDef/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/permDef/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/keyset/permUse/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/keyset/permUse/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/permUse/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/permUse/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/keyset/res/values/strings.xml b/services/tests/PackageManagerServiceTests/apks/keyset/res/values/strings.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/res/values/strings.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/res/values/strings.xml diff --git a/services/tests/servicestests/apks/keyset/uA/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/keyset/uA/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/uA/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/uA/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/keyset/uAB/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/keyset/uAB/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/uAB/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/uAB/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/keyset/uAuB/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/keyset/uAuB/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/uAuB/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/uAuB/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/keyset/uB/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/keyset/uB/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/uB/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/uB/AndroidManifest.xml diff --git a/services/tests/servicestests/apks/keyset/uNone/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/apks/keyset/uNone/AndroidManifest.xml similarity index 100% rename from services/tests/servicestests/apks/keyset/uNone/AndroidManifest.xml rename to services/tests/PackageManagerServiceTests/apks/keyset/uNone/AndroidManifest.xml diff --git a/services/tests/PackageManagerServiceTests/server/Android.bp b/services/tests/PackageManagerServiceTests/server/Android.bp new file mode 100644 index 0000000000000..f1edd96d1adcb --- /dev/null +++ b/services/tests/PackageManagerServiceTests/server/Android.bp @@ -0,0 +1,160 @@ +//######################################################################## +// Build PackageManagerServiceServerTests package +//######################################################################## + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +android_test { + name: "PackageManagerServiceServerTests", + + // Include all test java files. + srcs: [ + "src/**/*.java", + "src/**/*.kt", + ], + static_libs: [ + "frameworks-base-testutils", + "services.accessibility", + "services.appwidget", + "services.autofill", + "services.backup", + "services.companion", + "services.core", + "services.devicepolicy", + "services.net", + "services.people", + "services.usage", + "guava", + "guava-android-testlib", + "androidx.test.core", + "androidx.test.ext.truth", + "androidx.test.runner", + "androidx.test.rules", + "cts-wm-util", + "platform-compat-test-rules", + "mockito-target-minus-junit4", + "platform-test-annotations", + "ShortcutManagerTestUtils", + "truth-prebuilt", + "testables", + "ub-uiautomator", + "platformprotosnano", + "framework-protos", + "hamcrest-library", + "servicestests-core-utils", + "servicestests-dpm-utils", + "servicestests-utils", + "service-permission.impl", + "testng", + "truth-prebuilt", + "junit", + "junit-params", + "platform-compat-test-rules", + "ActivityContext", + "coretests-aidl", + ], + + libs: [ + "android.hardware.power-V1-java", + "android.hardware.tv.cec-V1.0-java", + "android.hardware.vibrator-V2-java", + "android.hidl.manager-V1.0-java", + "android.test.mock", + "android.test.base", + "android.test.runner", + ], + + platform_apis: true, + + test_suites: [ + "device-tests", + "automotive-tests", + ], + + certificate: "platform", + + // These are not normally accessible from apps so they must be explicitly included. + jni_libs: [ + "libbase", + "libbinder", + "libc++", + "libcutils", + "liblog", + "liblzma", + "libnativehelper", + "libpsi", + "libui", + "libunwindstack", + "libutils", + "netd_aidl_interface-V5-cpp", + ], + + dxflags: ["--multi-dex"], + + java_resources: [ + ":PackageParserTestApp1", + ":PackageParserTestApp2", + ":PackageParserTestApp3", + ":PackageParserTestApp4", + ":PackageParserTestApp5", + ], + resource_zips: [":PackageManagerServiceServerTests_apks_as_resources"], +} + +// Rules to copy all the test apks to the intermediate raw resource directory +java_genrule { + name: "PackageManagerServiceServerTests_apks_as_resources", + srcs: [ + ":FrameworksServicesTests_install", + ":FrameworksServicesTests_install_bad_dex", + ":FrameworksServicesTests_install_complete_package_info", + ":FrameworksServicesTests_install_decl_perm", + ":FrameworksServicesTests_install_intent_filters", + ":FrameworksServicesTests_install_loc_auto", + ":FrameworksServicesTests_install_loc_internal", + ":FrameworksServicesTests_install_loc_sdcard", + ":FrameworksServicesTests_install_loc_unspecified", + ":FrameworksServicesTests_install_use_perm_good", + ":FrameworksServicesTests_install_uses_feature", + ":FrameworksServicesTests_install_uses_sdk_0", + ":FrameworksServicesTests_install_uses_sdk_q0", + ":FrameworksServicesTests_install_uses_sdk_q0_r0", + ":FrameworksServicesTests_install_uses_sdk_r0", + ":FrameworksServicesTests_install_uses_sdk_r5", + ":FrameworksServicesTests_install_uses_sdk_r1000", + ":FrameworksServicesTests_install_uses_sdk_r_none", + ":FrameworksServicesTests_install_uses_sdk_r0_s0", + ":FrameworksServicesTests_install_uses_sdk_r0_s5", + ":FrameworksServicesTests_install_uses_sdk_r0_s1000", + ":FrameworksServicesTests_keyset_permdef_sa_unone", + ":FrameworksServicesTests_keyset_permuse_sa_ua_ub", + ":FrameworksServicesTests_keyset_permuse_sb_ua_ub", + ":FrameworksServicesTests_keyset_sa_ua", + ":FrameworksServicesTests_keyset_sa_ua_ub", + ":FrameworksServicesTests_keyset_sa_uab", + ":FrameworksServicesTests_keyset_sa_ub", + ":FrameworksServicesTests_keyset_sa_unone", + ":FrameworksServicesTests_keyset_sab_ua", + ":FrameworksServicesTests_keyset_sau_ub", + ":FrameworksServicesTests_keyset_sb_ua", + ":FrameworksServicesTests_keyset_sb_ub", + ":FrameworksServicesTests_keyset_splat_api", + ":FrameworksServicesTests_keyset_splata_api", + ], + out: ["PackageManagerServiceServerTests_apks_as_resources.res.zip"], + tools: ["soong_zip"], + + cmd: "mkdir -p $(genDir)/res/raw && " + + "for i in $(in); do " + + " x=$${i##*FrameworksCoreTests_}; cp $$i $(genDir)/res/raw/$${x%.apk};" + + " x=$${i##*FrameworksServicesTests_}; cp $$i $(genDir)/res/raw/$${x%.apk};" + + "done && " + + "$(location soong_zip) -o $(out) -C $(genDir)/res -D $(genDir)/res", +} diff --git a/services/tests/PackageManagerServiceTests/server/AndroidManifest.xml b/services/tests/PackageManagerServiceTests/server/AndroidManifest.xml new file mode 100644 index 0000000000000..c383197792b0f --- /dev/null +++ b/services/tests/PackageManagerServiceTests/server/AndroidManifest.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/services/tests/PackageManagerServiceTests/server/AndroidTest.xml b/services/tests/PackageManagerServiceTests/server/AndroidTest.xml new file mode 100644 index 0000000000000..869d60ead3a1e --- /dev/null +++ b/services/tests/PackageManagerServiceTests/server/AndroidTest.xml @@ -0,0 +1,33 @@ + + + + diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256-lineage-2-signers b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256-lineage-2-signers similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256-lineage-2-signers rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256-lineage-2-signers diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256-lineage-3-signers b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256-lineage-3-signers similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256-lineage-3-signers rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256-lineage-3-signers diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256.pk8 b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256.pk8 similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256.pk8 rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256.pk8 diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256.x509.der b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256.x509.der similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256.x509.der rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256.x509.der diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256_2.pk8 b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256_2.pk8 similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256_2.pk8 rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256_2.pk8 diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256_2.x509.der b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256_2.x509.der similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256_2.x509.der rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256_2.x509.der diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256_3.pk8 b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256_3.pk8 similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256_3.pk8 rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256_3.pk8 diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256_3.x509.der b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256_3.x509.der similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/certs/ec-p256_3.x509.der rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/certs/ec-p256_3.x509.der diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/README b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/README similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/README rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/README diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-extra-cert-tag.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-extra-cert-tag.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-extra-cert-tag.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-extra-cert-tag.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-index.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-index.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-index.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-index.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-key.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-key.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-key.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-invalid-cert-key.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-invalid-public-key-cert-key.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-invalid-public-key-cert-key.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-invalid-public-key-cert-key.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-invalid-public-key-cert-key.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-invalid-tag.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-invalid-tag.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-invalid-tag.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-invalid-tag.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-cert-index.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-cert-index.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-cert-index.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-cert-index.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-cert-key.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-cert-key.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-cert-key.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-cert-key.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-cert-tag.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-cert-tag.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-cert-tag.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-cert-tag.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-scheme-version.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-scheme-version.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-scheme-version.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-scheme-version.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-sigs-count.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-sigs-count.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-missing-sigs-count.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-missing-sigs-count.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-previous-cert.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-previous-cert.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer-previous-cert.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer-previous-cert.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/one-signer.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/one-signer.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage-invalid-pastSigs-count.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage-invalid-pastSigs-count.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage-invalid-pastSigs-count.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage-invalid-pastSigs-count.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-cert-tag.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-cert-tag.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-cert-tag.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-cert-tag.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-count.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-count.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-count.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-pastSigs-count.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-scheme-version.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-scheme-version.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-scheme-version.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage-missing-scheme-version.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/three-signers-in-lineage.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/three-signers-in-lineage.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-certs-flags.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-certs-flags.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-certs-flags.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-certs-flags.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-pastSigs-cert-index.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-pastSigs-cert-index.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-pastSigs-cert-index.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-invalid-pastSigs-cert-index.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-certs-flags.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-certs-flags.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-certs-flags.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-certs-flags.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-pastSigs-cert-index.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-pastSigs-cert-index.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-pastSigs-cert-index.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-missing-pastSigs-cert-index.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-multiple-pastSigs-tags.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-multiple-pastSigs-tags.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-multiple-pastSigs-tags.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-multiple-pastSigs-tags.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-no-caps.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-no-caps.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-no-caps.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-no-caps.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-undefined-pastSigs-index.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-undefined-pastSigs-index.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage-undefined-pastSigs-index.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage-undefined-pastSigs-index.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-in-lineage.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-in-lineage.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-v1v2-missing-cert-tag.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-v1v2-missing-cert-tag.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-v1v2-missing-cert-tag.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-v1v2-missing-cert-tag.xml diff --git a/services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-v1v2.xml b/services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-v1v2.xml similarity index 100% rename from services/tests/servicestests/assets/PackageSignaturesTest/xml/two-signers-v1v2.xml rename to services/tests/PackageManagerServiceTests/server/assets/PackageSignaturesTest/xml/two-signers-v1v2.xml diff --git a/services/tests/servicestests/res/raw/PackageParsingTestAppEmptyActionSdkQ.apk b/services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppEmptyActionSdkQ.apk similarity index 100% rename from services/tests/servicestests/res/raw/PackageParsingTestAppEmptyActionSdkQ.apk rename to services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppEmptyActionSdkQ.apk diff --git a/services/tests/servicestests/res/raw/PackageParsingTestAppEmptyActionSdkR.apk b/services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppEmptyActionSdkR.apk similarity index 100% rename from services/tests/servicestests/res/raw/PackageParsingTestAppEmptyActionSdkR.apk rename to services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppEmptyActionSdkR.apk diff --git a/services/tests/servicestests/res/raw/PackageParsingTestAppEmptyCategorySdkQ.apk b/services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppEmptyCategorySdkQ.apk similarity index 100% rename from services/tests/servicestests/res/raw/PackageParsingTestAppEmptyCategorySdkQ.apk rename to services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppEmptyCategorySdkQ.apk diff --git a/services/tests/servicestests/res/raw/PackageParsingTestAppEmptyCategorySdkR.apk b/services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppEmptyCategorySdkR.apk similarity index 100% rename from services/tests/servicestests/res/raw/PackageParsingTestAppEmptyCategorySdkR.apk rename to services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppEmptyCategorySdkR.apk diff --git a/services/tests/servicestests/res/raw/PackageParsingTestAppMissingAppSdkQ.apk b/services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppMissingAppSdkQ.apk similarity index 100% rename from services/tests/servicestests/res/raw/PackageParsingTestAppMissingAppSdkQ.apk rename to services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppMissingAppSdkQ.apk diff --git a/services/tests/servicestests/res/raw/PackageParsingTestAppMissingAppSdkR.apk b/services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppMissingAppSdkR.apk similarity index 100% rename from services/tests/servicestests/res/raw/PackageParsingTestAppMissingAppSdkR.apk rename to services/tests/PackageManagerServiceTests/server/res/raw/PackageParsingTestAppMissingAppSdkR.apk diff --git a/services/tests/servicestests/res/raw/com_android_tzdata.apex b/services/tests/PackageManagerServiceTests/server/res/raw/com_android_tzdata.apex similarity index 100% rename from services/tests/servicestests/res/raw/com_android_tzdata.apex rename to services/tests/PackageManagerServiceTests/server/res/raw/com_android_tzdata.apex diff --git a/services/tests/servicestests/res/raw/install_app1_cert1 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert1 similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_cert1 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert1 diff --git a/services/tests/servicestests/res/raw/install_app1_cert1_cert2 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert1_cert2 similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_cert1_cert2 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert1_cert2 diff --git a/services/tests/servicestests/res/raw/install_app1_cert2 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert2 similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_cert2 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert2 diff --git a/services/tests/servicestests/res/raw/install_app1_cert3 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert3 similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_cert3 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert3 diff --git a/services/tests/servicestests/res/raw/install_app1_cert3_cert4 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert3_cert4 similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_cert3_cert4 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert3_cert4 diff --git a/services/tests/servicestests/res/raw/install_app1_cert5 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert5 similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_cert5 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert5 diff --git a/services/tests/servicestests/res/raw/install_app1_cert5_rotated_cert6 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert5_rotated_cert6 similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_cert5_rotated_cert6 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert5_rotated_cert6 diff --git a/services/tests/servicestests/res/raw/install_app1_cert6 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert6 similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_cert6 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_cert6 diff --git a/services/tests/servicestests/res/raw/install_app1_unsigned b/services/tests/PackageManagerServiceTests/server/res/raw/install_app1_unsigned similarity index 100% rename from services/tests/servicestests/res/raw/install_app1_unsigned rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app1_unsigned diff --git a/services/tests/servicestests/res/raw/install_app2_cert1 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert1 similarity index 100% rename from services/tests/servicestests/res/raw/install_app2_cert1 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert1 diff --git a/services/tests/servicestests/res/raw/install_app2_cert1_cert2 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert1_cert2 similarity index 100% rename from services/tests/servicestests/res/raw/install_app2_cert1_cert2 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert1_cert2 diff --git a/services/tests/servicestests/res/raw/install_app2_cert2 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert2 similarity index 100% rename from services/tests/servicestests/res/raw/install_app2_cert2 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert2 diff --git a/services/tests/servicestests/res/raw/install_app2_cert3 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert3 similarity index 100% rename from services/tests/servicestests/res/raw/install_app2_cert3 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert3 diff --git a/services/tests/servicestests/res/raw/install_app2_cert5_rotated_cert6 b/services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert5_rotated_cert6 similarity index 100% rename from services/tests/servicestests/res/raw/install_app2_cert5_rotated_cert6 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app2_cert5_rotated_cert6 diff --git a/services/tests/servicestests/res/raw/install_app2_unsigned b/services/tests/PackageManagerServiceTests/server/res/raw/install_app2_unsigned similarity index 100% rename from services/tests/servicestests/res/raw/install_app2_unsigned rename to services/tests/PackageManagerServiceTests/server/res/raw/install_app2_unsigned diff --git a/services/tests/servicestests/res/raw/install_shared1_cert1 b/services/tests/PackageManagerServiceTests/server/res/raw/install_shared1_cert1 similarity index 100% rename from services/tests/servicestests/res/raw/install_shared1_cert1 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_shared1_cert1 diff --git a/services/tests/servicestests/res/raw/install_shared1_cert1_cert2 b/services/tests/PackageManagerServiceTests/server/res/raw/install_shared1_cert1_cert2 similarity index 100% rename from services/tests/servicestests/res/raw/install_shared1_cert1_cert2 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_shared1_cert1_cert2 diff --git a/services/tests/servicestests/res/raw/install_shared1_cert2 b/services/tests/PackageManagerServiceTests/server/res/raw/install_shared1_cert2 similarity index 100% rename from services/tests/servicestests/res/raw/install_shared1_cert2 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_shared1_cert2 diff --git a/services/tests/servicestests/res/raw/install_shared1_unsigned b/services/tests/PackageManagerServiceTests/server/res/raw/install_shared1_unsigned similarity index 100% rename from services/tests/servicestests/res/raw/install_shared1_unsigned rename to services/tests/PackageManagerServiceTests/server/res/raw/install_shared1_unsigned diff --git a/services/tests/servicestests/res/raw/install_shared2_cert1 b/services/tests/PackageManagerServiceTests/server/res/raw/install_shared2_cert1 similarity index 100% rename from services/tests/servicestests/res/raw/install_shared2_cert1 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_shared2_cert1 diff --git a/services/tests/servicestests/res/raw/install_shared2_cert1_cert2 b/services/tests/PackageManagerServiceTests/server/res/raw/install_shared2_cert1_cert2 similarity index 100% rename from services/tests/servicestests/res/raw/install_shared2_cert1_cert2 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_shared2_cert1_cert2 diff --git a/services/tests/servicestests/res/raw/install_shared2_cert2 b/services/tests/PackageManagerServiceTests/server/res/raw/install_shared2_cert2 similarity index 100% rename from services/tests/servicestests/res/raw/install_shared2_cert2 rename to services/tests/PackageManagerServiceTests/server/res/raw/install_shared2_cert2 diff --git a/services/tests/servicestests/res/raw/install_shared2_unsigned b/services/tests/PackageManagerServiceTests/server/res/raw/install_shared2_unsigned similarity index 100% rename from services/tests/servicestests/res/raw/install_shared2_unsigned rename to services/tests/PackageManagerServiceTests/server/res/raw/install_shared2_unsigned diff --git a/services/tests/PackageManagerServiceTests/server/res/values/values.xml b/services/tests/PackageManagerServiceTests/server/res/values/values.xml new file mode 100644 index 0000000000000..79c66537a06a9 --- /dev/null +++ b/services/tests/PackageManagerServiceTests/server/res/values/values.xml @@ -0,0 +1,20 @@ + + + + + module_1_name + module_2_name + diff --git a/services/tests/servicestests/res/xml/unparseable_metadata1.xml b/services/tests/PackageManagerServiceTests/server/res/xml/unparseable_metadata1.xml similarity index 100% rename from services/tests/servicestests/res/xml/unparseable_metadata1.xml rename to services/tests/PackageManagerServiceTests/server/res/xml/unparseable_metadata1.xml diff --git a/services/tests/servicestests/res/xml/unparseable_metadata2.xml b/services/tests/PackageManagerServiceTests/server/res/xml/unparseable_metadata2.xml similarity index 100% rename from services/tests/servicestests/res/xml/unparseable_metadata2.xml rename to services/tests/PackageManagerServiceTests/server/res/xml/unparseable_metadata2.xml diff --git a/services/tests/servicestests/res/xml/well_formed_metadata.xml b/services/tests/PackageManagerServiceTests/server/res/xml/well_formed_metadata.xml similarity index 100% rename from services/tests/servicestests/res/xml/well_formed_metadata.xml rename to services/tests/PackageManagerServiceTests/server/res/xml/well_formed_metadata.xml diff --git a/services/tests/servicestests/src/com/android/server/pm/AppsFilterImplTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/AppsFilterImplTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/AppsFilterImplTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/AppsFilterImplTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/BundleUtilsTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/BundleUtilsTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/BundleUtilsTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/BundleUtilsTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/CompatibilityModeTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/CompatibilityModeTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/CrossProfileAppsServiceImplTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/CrossProfileAppsServiceImplTest.java similarity index 99% rename from services/tests/servicestests/src/com/android/server/pm/CrossProfileAppsServiceImplTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/CrossProfileAppsServiceImplTest.java index 8bd6fcdbb9c2a..129efc630be6e 100644 --- a/services/tests/servicestests/src/com/android/server/pm/CrossProfileAppsServiceImplTest.java +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/CrossProfileAppsServiceImplTest.java @@ -66,7 +66,7 @@ import java.util.List; /** * Build/Install/Run: - * atest FrameworksServicesTests:com.android.server.pm.CrossProfileAppsServiceImplTest + * atest PackageManagerServiceServerTests:com.android.server.pm.CrossProfileAppsServiceImplTest */ @Presubmit @RunWith(MockitoJUnitRunner.class) diff --git a/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/InstallerTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/InstallerTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/InstallerTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/KeySetManagerServiceTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/KeySetManagerServiceTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/KeySetStrings.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/KeySetStrings.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/KeySetStrings.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/KeySetStrings.java diff --git a/services/tests/servicestests/src/com/android/server/pm/KeySetUtils.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/KeySetUtils.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/KeySetUtils.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/KeySetUtils.java diff --git a/services/tests/servicestests/src/com/android/server/pm/ModuleInfoProviderTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/ModuleInfoProviderTest.java similarity index 98% rename from services/tests/servicestests/src/com/android/server/pm/ModuleInfoProviderTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/ModuleInfoProviderTest.java index 9ea7907ef4d0f..ad58507522a97 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ModuleInfoProviderTest.java +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/ModuleInfoProviderTest.java @@ -24,7 +24,7 @@ import android.content.pm.PackageManager; import android.platform.test.annotations.Presubmit; import android.test.InstrumentationTestCase; -import com.android.frameworks.servicestests.R; +import com.android.server.pm.test.service.server.R; import org.mockito.Mock; diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageInstallerSessionTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageInstallerSessionTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/PackageInstallerSessionTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageInstallerSessionTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageManagerServiceTest.java similarity index 99% rename from services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageManagerServiceTest.java index 1877d45e5ce3f..b82ffb4d0b397 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageManagerServiceTest.java @@ -66,8 +66,6 @@ import java.util.List; import java.util.regex.Pattern; // atest PackageManagerServiceTest -// runtest -c com.android.server.pm.PackageManagerServiceTest frameworks-services -// bit FrameworksServicesTests:com.android.server.pm.PackageManagerServiceTest @Postsubmit @RunWith(AndroidJUnit4.class) public class PackageManagerServiceTest { diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageManagerSettingsTests.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageManagerSettingsTests.java diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerTests.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageManagerTests.java similarity index 99% rename from services/tests/servicestests/src/com/android/server/pm/PackageManagerTests.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageManagerTests.java index 869ac8877d6de..d288d41ae96c3 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerTests.java +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageManagerTests.java @@ -69,7 +69,7 @@ import androidx.test.filters.LargeTest; import androidx.test.filters.SmallTest; import androidx.test.filters.Suppress; -import com.android.frameworks.servicestests.R; +import com.android.server.pm.test.service.server.R; import com.android.internal.content.InstallLocationUtils; import com.android.server.pm.pkg.parsing.ParsingPackage; import com.android.server.pm.pkg.parsing.ParsingPackageUtils; diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageParserTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageParserTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageSignaturesTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageSignaturesTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/PackageSignaturesTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageSignaturesTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageUserStateTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageUserStateTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageVerificationStateTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageVerificationStateTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/PackageVerificationStateTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PackageVerificationStateTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/ParallelPackageParserTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/ParallelPackageParserTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/PreferredComponentTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/PreferredComponentTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/PreferredComponentTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/PreferredComponentTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/RestrictionsSetTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/RestrictionsSetTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/RestrictionsSetTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/RestrictionsSetTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/ScanRequestBuilder.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/ScanRequestBuilder.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/ScanRequestBuilder.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/ScanRequestBuilder.java diff --git a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/ScanTests.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/ScanTests.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/ScanTests.java diff --git a/services/tests/servicestests/src/com/android/server/pm/UserDataPreparerTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/UserDataPreparerTest.java similarity index 96% rename from services/tests/servicestests/src/com/android/server/pm/UserDataPreparerTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/UserDataPreparerTest.java index c489cf0a138d4..2d09ef78ecbc5 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserDataPreparerTest.java +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/UserDataPreparerTest.java @@ -46,15 +46,7 @@ import java.nio.charset.Charset; import java.util.Arrays; import java.util.Collections; -/** - *

Run with:

- * m FrameworksServicesTests &&
- * adb install \
- * -r out/target/product/hammerhead/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&
- * adb shell am instrument -e class com.android.server.pm.UserDataPreparerTest \
- * -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner
- * 
- */ +// atest PackageManagerServiceTest:com.android.server.pm.UserDataPreparerTest @RunWith(AndroidJUnit4.class) @Presubmit @SmallTest diff --git a/services/tests/servicestests/src/com/android/server/pm/WatchedIntentHandlingTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/WatchedIntentHandlingTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/WatchedIntentHandlingTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/WatchedIntentHandlingTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/PackageParserLegacyCoreTest.java similarity index 99% rename from services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/PackageParserLegacyCoreTest.java index 07cca0ca6ba0f..c6a634056087d 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/PackageParserLegacyCoreTest.java @@ -42,7 +42,7 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; -import com.android.frameworks.servicestests.R; +import com.android.server.pm.test.service.server.R; import com.android.internal.util.ArrayUtils; import com.android.server.pm.PackageManagerException; import com.android.server.pm.parsing.pkg.AndroidPackage; diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParsingDeferErrorTest.kt b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/PackageParsingDeferErrorTest.kt similarity index 97% rename from services/tests/servicestests/src/com/android/server/pm/parsing/PackageParsingDeferErrorTest.kt rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/PackageParsingDeferErrorTest.kt index bb094ba897e6b..d8cc5aaa59445 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParsingDeferErrorTest.kt +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/PackageParsingDeferErrorTest.kt @@ -23,7 +23,8 @@ import com.android.server.pm.pkg.parsing.ParsingPackageUtils import android.content.pm.parsing.result.ParseResult import android.platform.test.annotations.Presubmit import androidx.test.InstrumentationRegistry -import com.android.frameworks.servicestests.R +import com.android.server.pm.parsing.pkg.ParsedPackage +import com.android.server.pm.test.service.server.R import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import org.junit.Rule diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/SystemPartitionParseTest.kt b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/SystemPartitionParseTest.kt similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/SystemPartitionParseTest.kt rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/SystemPartitionParseTest.kt diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidHidlUpdaterTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/AndroidHidlUpdaterTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidHidlUpdaterTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/AndroidHidlUpdaterTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidNetIpSecIkeUpdaterTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/AndroidNetIpSecIkeUpdaterTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidNetIpSecIkeUpdaterTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/AndroidNetIpSecIkeUpdaterTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestBaseUpdaterTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/AndroidTestBaseUpdaterTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestBaseUpdaterTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/AndroidTestBaseUpdaterTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestRunnerSplitUpdaterTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/AndroidTestRunnerSplitUpdaterTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestRunnerSplitUpdaterTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/AndroidTestRunnerSplitUpdaterTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/ApexSharedLibraryUpdaterTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/ApexSharedLibraryUpdaterTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/ApexSharedLibraryUpdaterTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/ApexSharedLibraryUpdaterTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/ComGoogleAndroidMapsUpdaterTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/ComGoogleAndroidMapsUpdaterTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/ComGoogleAndroidMapsUpdaterTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/ComGoogleAndroidMapsUpdaterTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/OptionalClassRunner.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/OptionalClassRunner.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/OptionalClassRunner.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/OptionalClassRunner.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/OrgApacheHttpLegacyUpdaterTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/OrgApacheHttpLegacyUpdaterTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/OrgApacheHttpLegacyUpdaterTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/OrgApacheHttpLegacyUpdaterTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/PackageBackwardCompatibilityTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/PackageBackwardCompatibilityTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageSharedLibraryUpdaterTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/PackageSharedLibraryUpdaterTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageSharedLibraryUpdaterTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/PackageSharedLibraryUpdaterTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/OWNERS b/services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/OWNERS new file mode 100644 index 0000000000000..1853220b94337 --- /dev/null +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/OWNERS @@ -0,0 +1,4 @@ +per-file WatchableTester.java = file:/services/core/java/com/android/server/pm/OWNERS +per-file WatchableTester.java = shombert@google.com +per-file WatcherTest.java = file:/services/core/java/com/android/server/pm/OWNERS +per-file WatcherTest.java = shombert@google.com diff --git a/services/tests/servicestests/src/com/android/server/utils/WatchableTester.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/WatchableTester.java similarity index 100% rename from services/tests/servicestests/src/com/android/server/utils/WatchableTester.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/WatchableTester.java diff --git a/services/tests/servicestests/src/com/android/server/utils/WatcherTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/WatcherTest.java similarity index 99% rename from services/tests/servicestests/src/com/android/server/utils/WatcherTest.java rename to services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/WatcherTest.java index 37c95f735d893..74d491dbf87c9 100644 --- a/services/tests/servicestests/src/com/android/server/utils/WatcherTest.java +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/utils/WatcherTest.java @@ -44,7 +44,7 @@ import java.util.Random; * {@link WatchedSparseBooleanArray}. * * Build/Install/Run: - * atest FrameworksServicesTests:WatcherTest + * atest PackageManagerServiceTest:WatcherTest */ @SmallTest public class WatcherTest { diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp index 16df5deb2e5c2..c48ae58d52e24 100644 --- a/services/tests/servicestests/Android.bp +++ b/services/tests/servicestests/Android.bp @@ -107,17 +107,12 @@ android_test { ], java_resources: [ - ":PackageParserTestApp1", - ":PackageParserTestApp2", - ":PackageParserTestApp3", - ":PackageParserTestApp4", - ":PackageParserTestApp5", - ":apex.test", - ":test.rebootless_apex_v1", - ":test.rebootless_apex_v2", ":com.android.apex.cts.shim.v1_prebuilt", ":com.android.apex.cts.shim.v2_different_certificate_prebuilt", ":com.android.apex.cts.shim.v2_unsigned_apk_container_prebuilt", + ":apex.test", + ":test.rebootless_apex_v1", + ":test.rebootless_apex_v2", ], resource_zips: [":FrameworksServicesTests_apks_as_resources"], } @@ -127,6 +122,7 @@ java_library { srcs: [ "src/com/android/server/pm/PackageSettingBuilder.java", "src/com/android/server/am/DeviceConfigSession.java", + "src/com/android/server/pm/parsing/TestPackageParser2.kt", ], static_libs: [ "services.core", @@ -134,6 +130,33 @@ java_library { ], } +java_library { + name: "servicestests-dpm-utils", + srcs: [ + "src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java", + "src/com/android/server/devicepolicy/DevicePolicyManagerTestable.java", + "src/com/android/server/devicepolicy/DpmMockContext.java", + "src/com/android/server/devicepolicy/DpmTestBase.java", + "src/com/android/server/devicepolicy/DpmTestUtils.java", + "src/com/android/server/devicepolicy/DummyDeviceAdmins.java", + "src/com/android/server/devicepolicy/MockSystemServices.java", + "src/com/android/server/devicepolicy/MockUtils.java", + ], + libs: [ + "android.test.mock", + "android.test.base", + "mockito-target-minus-junit4", + ], + static_libs: [ + "frameworks-base-testutils", + "androidx.test.core", + "androidx.test.ext.truth", + "androidx.test.rules", + "services.core", + "services.devicepolicy", + ], +} + java_library { name: "servicestests-utils", srcs: [ @@ -177,41 +200,8 @@ filegroup { java_genrule { name: "FrameworksServicesTests_apks_as_resources", srcs: [ - ":FrameworksServicesTests_install", - ":FrameworksServicesTests_install_bad_dex", - ":FrameworksServicesTests_install_complete_package_info", - ":FrameworksServicesTests_install_decl_perm", - ":FrameworksServicesTests_install_intent_filters", - ":FrameworksServicesTests_install_loc_auto", - ":FrameworksServicesTests_install_loc_internal", - ":FrameworksServicesTests_install_loc_sdcard", - ":FrameworksServicesTests_install_loc_unspecified", ":FrameworksServicesTests_install_split_base", ":FrameworksServicesTests_install_split_feature_a", - ":FrameworksServicesTests_install_use_perm_good", - ":FrameworksServicesTests_install_uses_feature", - ":FrameworksServicesTests_install_uses_sdk_0", - ":FrameworksServicesTests_install_uses_sdk_q0", - ":FrameworksServicesTests_install_uses_sdk_q0_r0", - ":FrameworksServicesTests_install_uses_sdk_r0", - ":FrameworksServicesTests_install_uses_sdk_r5", - ":FrameworksServicesTests_install_uses_sdk_r_none", - ":FrameworksServicesTests_install_uses_sdk_r0_s0", - ":FrameworksServicesTests_install_uses_sdk_r0_s5", - ":FrameworksServicesTests_keyset_permdef_sa_unone", - ":FrameworksServicesTests_keyset_permuse_sa_ua_ub", - ":FrameworksServicesTests_keyset_permuse_sb_ua_ub", - ":FrameworksServicesTests_keyset_sa_ua", - ":FrameworksServicesTests_keyset_sa_ua_ub", - ":FrameworksServicesTests_keyset_sa_uab", - ":FrameworksServicesTests_keyset_sa_ub", - ":FrameworksServicesTests_keyset_sa_unone", - ":FrameworksServicesTests_keyset_sab_ua", - ":FrameworksServicesTests_keyset_sau_ub", - ":FrameworksServicesTests_keyset_sb_ua", - ":FrameworksServicesTests_keyset_sb_ub", - ":FrameworksServicesTests_keyset_splat_api", - ":FrameworksServicesTests_keyset_splata_api", ], out: ["FrameworkServicesTests_apks_as_resources.res.zip"], tools: ["soong_zip"], diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml index 0afb1829f9d49..6c03cb9d56e3d 100644 --- a/services/tests/servicestests/AndroidManifest.xml +++ b/services/tests/servicestests/AndroidManifest.xml @@ -287,11 +287,4 @@ - - - - - - diff --git a/services/tests/servicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java index bccd8a0b14b48..bc8670f3b98ee 100644 --- a/services/tests/servicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java @@ -37,6 +37,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.platform.test.annotations.Presubmit; +import androidx.test.filters.FlakyTest; import androidx.test.runner.AndroidJUnit4; import com.android.server.backup.internal.LifecycleOperationStorage; @@ -172,6 +173,7 @@ public class UserBackupManagerServiceTest { } @Test + @FlakyTest public void testAgentDisconnected_cancelsCurrentOperations() throws Exception { when(mOperationStorage.operationTokensForPackage(eq("com.android.foo"))).thenReturn( ImmutableSet.of(123, 456, 789) diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java index c771998de8626..9a73dd3ac3d48 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java @@ -35,6 +35,7 @@ import android.media.IAudioService; import android.net.IIpConnectivityMetrics; import android.net.Uri; import android.os.Bundle; +import android.os.Environment; import android.os.Looper; import android.os.PowerManagerInternal; import android.os.UserHandle; @@ -57,6 +58,7 @@ import com.android.server.net.NetworkPolicyManagerInternal; import com.android.server.pm.UserManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; +import java.io.File; import java.io.IOException; import java.util.Map; @@ -443,7 +445,7 @@ public class DevicePolicyManagerServiceTestable extends DevicePolicyManagerServi @Override public TransferOwnershipMetadataManager newTransferOwnershipMetadataManager() { return new TransferOwnershipMetadataManager( - new TransferOwnershipMetadataManagerTest.MockInjector()); + new TransferOwnershipMetadataManagerMockInjector()); } @Override @@ -496,4 +498,12 @@ public class DevicePolicyManagerServiceTestable extends DevicePolicyManagerServi return context; } } + + static class TransferOwnershipMetadataManagerMockInjector extends + TransferOwnershipMetadataManager.Injector { + @Override + public File getOwnerTransferMetadataDir() { + return Environment.getExternalStorageDirectory(); + } + } } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 388170bd24cbd..7e5033200210a 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -132,7 +132,6 @@ import android.os.IpcDataCache; import android.os.Process; import android.os.UserHandle; import android.os.UserManager; -import android.platform.test.annotations.FlakyTest; import android.platform.test.annotations.Presubmit; import android.provider.Settings; import android.security.KeyChain; @@ -144,6 +143,7 @@ import android.util.ArraySet; import android.util.Log; import android.util.Pair; +import androidx.test.filters.FlakyTest; import androidx.test.filters.SmallTest; import com.android.internal.R; @@ -4782,6 +4782,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { } @Test + @FlakyTest(bugId = 260145949) public void testLockTaskPolicyForProfileOwner() throws Exception { mockPolicyExemptApps(); mockVendorPolicyExemptApps(); @@ -4817,6 +4818,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { } @Test + @FlakyTest(bugId = 260145949) public void testLockTaskFeatures_IllegalArgumentException() throws Exception { // Setup a device owner. mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID; @@ -7812,6 +7814,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { } @Test + @FlakyTest(bugId = 260145949) public void testSetLockTaskFeatures_financeDo_validLockTaskFeatures_lockTaskFeaturesSet() throws Exception { int validLockTaskFeatures = LOCK_TASK_FEATURE_SYSTEM_INFO | LOCK_TASK_FEATURE_KEYGUARD @@ -7827,6 +7830,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { } @Test + @FlakyTest(bugId = 260145949) public void testSetLockTaskFeatures_financeDo_invalidLockTaskFeatures_throwsException() throws Exception { int invalidLockTaskFeatures = LOCK_TASK_FEATURE_NONE | LOCK_TASK_FEATURE_OVERVIEW @@ -7843,6 +7847,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { } @Test + @FlakyTest(bugId = 260145949) public void testIsUninstallBlocked_financeDo_success() throws Exception { String packageName = "com.android.foo.package"; setDeviceOwner(); @@ -7943,6 +7948,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { } @Test + @FlakyTest(bugId = 260145949) public void testSetLockTaskPackages_financeDo_success() throws Exception { String[] packages = {"com.android.foo.package"}; mockEmptyPolicyExemptApps(); diff --git a/services/tests/servicestests/src/com/android/server/utils/OWNERS b/services/tests/servicestests/src/com/android/server/utils/OWNERS index 1853220b94337..5e2482825c740 100644 --- a/services/tests/servicestests/src/com/android/server/utils/OWNERS +++ b/services/tests/servicestests/src/com/android/server/utils/OWNERS @@ -1,4 +1,2 @@ -per-file WatchableTester.java = file:/services/core/java/com/android/server/pm/OWNERS -per-file WatchableTester.java = shombert@google.com -per-file WatcherTest.java = file:/services/core/java/com/android/server/pm/OWNERS -per-file WatcherTest.java = shombert@google.com +per-file EventLoggerTest.java = file:/platform/frameworks/av:/media/janitors/media_solutions_OWNERS +per-file EventLoggerTest.java = jmtrivi@google.com From b7833028438d1a7ccd86a9a1e3480cc81fc4c389 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Wed, 23 Nov 2022 20:40:38 +0000 Subject: [PATCH 12/36] Cleanup after test suite split. Bug: 238141698 Bug: 262254794 Test: presubmit Change-Id: I3d99829a735bc09b52ef77d75d875ca547d53f01 Merged-In: I3d99829a735bc09b52ef77d75d875ca547d53f01 --- TEST_MAPPING | 30 +++++++++++++++++++++++++ services/tests/servicestests/Android.bp | 1 - 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/TEST_MAPPING b/TEST_MAPPING index e178583bca784..a48ce0ce1b6c3 100644 --- a/TEST_MAPPING +++ b/TEST_MAPPING @@ -15,6 +15,22 @@ ] } ], + "presubmit-pm": [ + { + "name": "PackageManagerServiceServerTests", + "options": [ + { + "include-annotation": "android.platform.test.annotations.Presubmit" + }, + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + }, + { + "exclude-annotation": "org.junit.Ignore" + } + ] + } + ], "presubmit": [ { "name": "ManagedProvisioningTests", @@ -167,6 +183,20 @@ "exclude-annotation": "org.junit.Ignore" } ] + }, + { + "name": "PackageManagerServiceServerTests", + "options": [ + { + "include-annotation": "android.platform.test.annotations.Presubmit" + }, + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + }, + { + "exclude-annotation": "org.junit.Ignore" + } + ] } ] } diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp index c48ae58d52e24..d622a80324851 100644 --- a/services/tests/servicestests/Android.bp +++ b/services/tests/servicestests/Android.bp @@ -55,7 +55,6 @@ android_test { "hamcrest-library", "servicestests-utils", "service-jobscheduler", - "service-permission.impl", // TODO: remove once Android migrates to JUnit 4.12, // which provides assertThrows "testng", From 006a03aaeb45a7d958a97a06f337d0c9c817054d Mon Sep 17 00:00:00 2001 From: Mady Mellor Date: Fri, 9 Dec 2022 15:03:51 -0800 Subject: [PATCH 13/36] Ensure Bubbles get removed at the end of the test - Fix an NPE found when removing bubbles at the end of the test - Remove all the bubbles at the end of the test - Remove the @Flaky annotation Bug: 259961387 Test: run the tests in gradle and check the ahprof file Change-Id: Ic7eff0c3cd1dd78c25c9e80479134f2e0ce2cbd7 --- .../android/wm/shell/bubbles/BubbleStackView.java | 6 ++++-- .../com/android/systemui/wmshell/BubblesTest.java | 13 +++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) 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 2b7600cbfe530..f2afefe243bc2 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 @@ -2923,8 +2923,10 @@ public class BubbleStackView extends FrameLayout .withEndActions(() -> { View child = mManageMenu.getChildAt(0); child.requestAccessibilityFocus(); - // Update the AV's obscured touchable region for the new visibility state. - mExpandedBubble.getExpandedView().updateObscuredTouchableRegion(); + if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) { + // Update the AV's obscured touchable region for the new state. + mExpandedBubble.getExpandedView().updateObscuredTouchableRegion(); + } }) .start(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java index b9dfc27483b83..2e06cc544c634 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java @@ -77,7 +77,6 @@ import android.view.View; import android.view.ViewTreeObserver; import android.view.WindowManager; -import androidx.test.filters.FlakyTest; import androidx.test.filters.SmallTest; import com.android.internal.colorextraction.ColorExtractor; @@ -142,6 +141,7 @@ import com.android.wm.shell.sysui.ShellCommandHandler; import com.android.wm.shell.sysui.ShellController; import com.android.wm.shell.sysui.ShellInit; +import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -152,13 +152,13 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.stubbing.Answer; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Optional; -@FlakyTest @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper(setAsMainLooper = true) @@ -411,6 +411,15 @@ public class BubblesTest extends SysuiTestCase { .addCallback(mKeyguardStateControllerCallbackCaptor.capture()); } + @After + public void tearDown() { + ArrayList bubbles = new ArrayList<>(mBubbleData.getBubbles()); + for (int i = 0; i < bubbles.size(); i++) { + mBubbleController.removeBubble(bubbles.get(i).getKey(), + Bubbles.DISMISS_NO_LONGER_BUBBLE); + } + } + @Test public void dreamingHidesBubbles() throws RemoteException { mBubbleController.updateBubble(mBubbleEntry); From d2bd9e8327614ed4dd4ffd0e65c411d8e6c43de6 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sun, 18 Dec 2022 23:43:50 -0800 Subject: [PATCH 14/36] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I170203860aa5c4db233c9803ec72ae5cfe84f71b --- core/res/res/values-te/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index de7de299bd6ca..1a5e13bdd4188 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -1425,7 +1425,7 @@ "%sని తొలగిస్తోంది" "తీసివేయవద్దు" "సెటప్ చేయండి" - "తొలగించు" + "తొలగించండి" "విశ్లేషించు" "అవుట్‌పుట్ మార్చండి" "%s కనుగొనబడటం లేదు" @@ -1525,7 +1525,7 @@ "కాదు" "తొలగింపు పరిమితి మించిపోయింది" "%2$s, ఖాతా %3$sకి సంబంధించి %1$d తొలగించబడే అంశాలు ఉన్నాయి. మీరు ఏమి చేయాలనుకుంటున్నారు?" - "అంశాలను తొలగించు" + "అంశాలను తొలగించండి" "తొలగింపులను చర్య రద్దు చేయండి" "ఇప్పటికీ ఏమీ చేయవద్దు" "ఖాతాను ఎంచుకోండి" From 0d0f0cae58394e395e09b46f2ffe60189bf888af Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 19 Dec 2022 00:25:08 -0800 Subject: [PATCH 15/36] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ie0396324791a64f8012edd0a5052bd565cc19823 --- packages/SystemUI/res/values-af/strings.xml | 2 ++ packages/SystemUI/res/values-am/strings.xml | 2 ++ packages/SystemUI/res/values-ar/strings.xml | 2 ++ packages/SystemUI/res/values-as/strings.xml | 8 ++++---- packages/SystemUI/res/values-az/strings.xml | 2 ++ .../SystemUI/res/values-b+sr+Latn/strings.xml | 2 ++ packages/SystemUI/res/values-be/strings.xml | 8 ++++---- packages/SystemUI/res/values-bg/strings.xml | 8 ++++---- packages/SystemUI/res/values-bn/strings.xml | 2 ++ packages/SystemUI/res/values-bs/strings.xml | 6 ++++-- packages/SystemUI/res/values-ca/strings.xml | 8 ++++---- packages/SystemUI/res/values-cs/strings.xml | 8 ++++---- packages/SystemUI/res/values-da/strings.xml | 2 ++ packages/SystemUI/res/values-de/strings.xml | 2 ++ packages/SystemUI/res/values-el/strings.xml | 2 ++ .../SystemUI/res/values-en-rAU/strings.xml | 2 ++ .../SystemUI/res/values-en-rCA/strings.xml | 8 ++++---- .../SystemUI/res/values-en-rGB/strings.xml | 2 ++ .../SystemUI/res/values-en-rIN/strings.xml | 2 ++ .../SystemUI/res/values-en-rXC/strings.xml | 8 ++++---- .../SystemUI/res/values-es-rUS/strings.xml | 2 ++ packages/SystemUI/res/values-es/strings.xml | 2 ++ packages/SystemUI/res/values-et/strings.xml | 8 ++++---- packages/SystemUI/res/values-eu/strings.xml | 8 ++++---- packages/SystemUI/res/values-fa/strings.xml | 8 ++++---- packages/SystemUI/res/values-fi/strings.xml | 8 ++++---- .../SystemUI/res/values-fr-rCA/strings.xml | 2 ++ packages/SystemUI/res/values-fr/strings.xml | 18 +++++++++--------- packages/SystemUI/res/values-gl/strings.xml | 8 ++++---- packages/SystemUI/res/values-gu/strings.xml | 8 ++++---- packages/SystemUI/res/values-hi/strings.xml | 8 ++++---- packages/SystemUI/res/values-hr/strings.xml | 2 ++ packages/SystemUI/res/values-hu/strings.xml | 2 ++ packages/SystemUI/res/values-hy/strings.xml | 2 ++ packages/SystemUI/res/values-in/strings.xml | 2 ++ packages/SystemUI/res/values-is/strings.xml | 8 ++++---- packages/SystemUI/res/values-it/strings.xml | 8 ++++---- packages/SystemUI/res/values-iw/strings.xml | 2 ++ packages/SystemUI/res/values-ja/strings.xml | 8 ++++---- packages/SystemUI/res/values-ka/strings.xml | 2 ++ packages/SystemUI/res/values-kk/strings.xml | 8 ++++---- packages/SystemUI/res/values-km/strings.xml | 8 ++++---- packages/SystemUI/res/values-kn/strings.xml | 8 ++++---- packages/SystemUI/res/values-ko/strings.xml | 2 ++ packages/SystemUI/res/values-ky/strings.xml | 8 ++++---- packages/SystemUI/res/values-lo/strings.xml | 2 ++ packages/SystemUI/res/values-lt/strings.xml | 2 ++ packages/SystemUI/res/values-lv/strings.xml | 8 ++++---- packages/SystemUI/res/values-mk/strings.xml | 2 ++ packages/SystemUI/res/values-ml/strings.xml | 8 ++++---- packages/SystemUI/res/values-mn/strings.xml | 2 ++ packages/SystemUI/res/values-mr/strings.xml | 2 ++ packages/SystemUI/res/values-ms/strings.xml | 2 ++ packages/SystemUI/res/values-my/strings.xml | 2 ++ packages/SystemUI/res/values-nb/strings.xml | 2 ++ packages/SystemUI/res/values-ne/strings.xml | 8 ++++---- packages/SystemUI/res/values-nl/strings.xml | 8 ++++---- packages/SystemUI/res/values-or/strings.xml | 8 ++++---- packages/SystemUI/res/values-pa/strings.xml | 8 ++++---- packages/SystemUI/res/values-pl/strings.xml | 8 ++++---- .../SystemUI/res/values-pt-rBR/strings.xml | 2 ++ .../SystemUI/res/values-pt-rPT/strings.xml | 8 ++++---- packages/SystemUI/res/values-pt/strings.xml | 2 ++ packages/SystemUI/res/values-ro/strings.xml | 2 ++ packages/SystemUI/res/values-ru/strings.xml | 2 ++ packages/SystemUI/res/values-si/strings.xml | 2 ++ packages/SystemUI/res/values-sk/strings.xml | 8 ++++---- packages/SystemUI/res/values-sl/strings.xml | 8 ++++---- packages/SystemUI/res/values-sq/strings.xml | 8 ++++---- packages/SystemUI/res/values-sr/strings.xml | 8 ++++---- packages/SystemUI/res/values-sv/strings.xml | 8 ++++---- packages/SystemUI/res/values-sw/strings.xml | 14 ++++++-------- packages/SystemUI/res/values-ta/strings.xml | 8 ++++---- packages/SystemUI/res/values-te/strings.xml | 2 ++ packages/SystemUI/res/values-th/strings.xml | 2 ++ packages/SystemUI/res/values-tl/strings.xml | 2 ++ packages/SystemUI/res/values-tr/strings.xml | 2 ++ packages/SystemUI/res/values-uk/strings.xml | 8 ++++---- packages/SystemUI/res/values-ur/strings.xml | 2 ++ packages/SystemUI/res/values-uz/strings.xml | 2 ++ packages/SystemUI/res/values-vi/strings.xml | 8 ++++---- .../SystemUI/res/values-zh-rCN/strings.xml | 2 ++ .../SystemUI/res/values-zh-rHK/strings.xml | 2 ++ .../SystemUI/res/values-zh-rTW/strings.xml | 2 ++ packages/SystemUI/res/values-zu/strings.xml | 8 ++++---- 85 files changed, 259 insertions(+), 171 deletions(-) diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 6fe2ca6d6668b..25a47f47a35d8 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi is af" "Bluetooth is af" "Moenie Steur Nie is af" + + "\'n Outomatiese reël (%s) het Moenie Steur Nie aangeskakel." "\'n Program (%s) het Moenie Steur Nie aangeskakel." "\'n Outomatiese reël of program het Moenie Steur Nie aangeskakel." diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 73b889687bffd..e4b5307094ad4 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi ጠፍቷል" "ብሉቱዝ ጠፍቷል" "አትረብሽ ጠፍቷል" + + "አትረብሽ በአንድ ራስ-ሰር ደንብ (%s) በርቷል።" "አትረብሽ በአንድ መተግበሪያ (%s) በርቷል።" "አትረብሽ በአንድ ራስ-ሰር ደንብ ወይም መተግበሪያ በርቷል።" diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index dbce86fa38736..361cf3a016232 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -731,6 +731,8 @@ "‏ميزة Wi-Fi غير مفعّلة" "تم إيقاف البلوتوث." "تم إيقاف وضع \"عدم الإزعاج\"" + + "تم تفعيل وضع \"عدم الإزعاج\" بواسطة قاعدة تلقائية (%s)." "تم تفعيل وضع \"عدم الإزعاج\" بواسطة تطبيق (%s)." "تم تفعيل وضع \"عدم الإزعاج\" بواسطة قاعدة تلقائية أو تطبيق." diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index e294156a09aac..6c102a54f5eae 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -731,6 +731,8 @@ "ৱাই-ফাই অফ অৱস্থাত আছে" "ব্লুটুথ অফ অৱস্থাত আছে" "অসুবিধা নিদিব অফ অৱস্থাত আছে" + + "অসুবিধা নিদিব-ক এটা স্বয়ংক্ৰিয় নিয়ম (%s)এ অন কৰিলে।" "অসুবিধা নিদিব-ক কোনো এপ্ (%s)এ অন কৰিলে।" "অসুবিধা নিদিব-ক এটা স্বয়ংক্ৰিয় নিয়ম বা এপে অন কৰিলে।" @@ -1010,10 +1012,8 @@ "উন্নত ছেল্ফিৰ বাবে সন্মুখৰ ডিছপ্লে’ লুটিয়াই দিবনে?" "অধিক ৰিজ’লিউশ্বনৰ বহল ফট’ৰ বাবে পিছফালে থকা কেমেৰাটো ব্যৱহাৰ কৰক।" "✱ ই স্ক্ৰীনখন অফ হ’ব" - - - - + "জপাব পৰা ডিভাইচৰ জাপ খুলি থকা হৈছে" + "জপাব পৰা ডিভাইচৰ ওলোটাই থকা হৈছে" diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 375f0eea08088..d2529a26fa38d 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi deaktivdir" "Bluetooth deaktivdir" "\"Narahat Etməyin\" deaktivdir" + + "\"Narahat etməyin\" rejimi (%s) avtomatik qaydası tərəfindən aktiv edildi." "\"Narahat etməyin\" rejimi (%s) tətbiqi tərəfindən aktiv edildi." "\"Narahat etməyin\" rejimi avtomatik qayda və ya tətbiq tərəfindən aktiv edildi." diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 778e471ca95e9..f3c3de3a19709 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -731,6 +731,8 @@ "WiFi је искључен" "Bluetooth је искључен" "Режим Не узнемиравај је искључен" + + "Аутоматско правило (%s) је укључило режим Не узнемиравај." "Апликација (%s) је укључила режим Не узнемиравај." "Аутоматско правило или апликација су укључили режим Не узнемиравај." diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 88a7cebe8a247..97a29bdf443e9 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi выключаны" "Bluetooth выключаны" "Рэжым \"Не турбаваць\" выключаны" + + "Рэжым \"Не турбаваць\" быў уключаны аўтаматычным правілам (%s)." "Рэжым \"Не турбаваць\" быў уключаны праграмай (%s)." "Рэжым \"Не турбаваць\" быў уключаны аўтаматычным правілам ці праграмай." @@ -1010,10 +1012,8 @@ "Пераключыць на пярэднюю камеру для лепшага сэлфі?" "Каб зрабіць шырэйшае фота з больш высокай раздзяляльнасцю, скарыстайце заднюю камеру." "✱ Гэты экран будзе выключаны" - - - - + "Складная прылада ў раскладзеным выглядзе" + "Перавернутая складная прылада" diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 1a7a3215afd16..2dd94d29823ec 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -731,6 +731,8 @@ "Функцията за Wi‑Fi е изключена" "Функцията за Bluetooth е изключена" "Режимът „Не безпокойте“ е изключен" + + "Режимът „Не безпокойте“ бе включен от автоматично правило (%s)." "Режимът „Не безпокойте“ бе включен от приложение (%s)." "Режимът „Не безпокойте“ бе включен от автоматично правило или от приложение." @@ -1010,10 +1012,8 @@ "Да се ползва ли предната камера за по-добро селфи?" "Използвайте задната камера за по-широка снимка с по-висока разделителна способност." "✱ Този екран ще се изключи" - - - - + "Разгъване на сгъваемо устройство" + "Обръщане на сгъваемо устройство" diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index b4203a5b54c31..864d7e7be6bb5 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -731,6 +731,8 @@ "ওয়াই ফাই বন্ধ আছে" "ব্লুটুথ বন্ধ আছে" "বিরক্ত করবে না বিকল্পটি বন্ধ আছে" + + "বিরক্ত করবে না বিকল্পটি একটি স্বয়ংক্রিয় নিয়ম %s এর দ্বারা চালু করা হয়েছে।" "বিরক্ত করবে না বিকল্পটি একটি অ্যাপ %s এর দ্বারা চালু করা হয়েছে।" "বিরক্ত করবে না বিকল্পটি একটি স্বয়ংক্রিয় নিয়ম বা অ্যাপের দ্বারা চালু করা হয়েছে।" diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index f227aa6605d04..87b6d3b5805c9 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -731,6 +731,8 @@ "WiFi je isključen" "Bluetooth je isključen" "Način rada Ne ometaj je isključen" + + "Opciju Ne ometaju uključilo je automatsko pravilo (%s)." "Način rada Ne ometaj uključila je aplikacija %s." "Način rada Ne ometaj uključilo je automatsko pravilo ili aplikacija." @@ -1010,8 +1012,8 @@ "Obrnuti na prednji ekran radi boljeg selfija?" "Koristite stražnju kameru za širu fotografiju veće rezolucije." "✱ Ekran će se isključiti" - "Rasklopljen sklopivi uređaj" - "Okretanje sklopivog uređaja sa svih strana" + "Sklopivi uređaj se rasklapa" + "Sklopivi uređaj se obrće" diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 5625f727e07d4..fcbd8418446bb 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -731,6 +731,8 @@ "La Wi-Fi està desactivada" "El Bluetooth està desactivat" "El mode No molestis està desactivat" + + "Una regla automàtica (%s) ha activat el mode No molestis." "Una aplicació (%s) ha activat el mode No molestis." "Una regla automàtica o una aplicació han activat el mode No molestis." @@ -1010,10 +1012,8 @@ "Girar a pantalla frontal per fer millors selfies?" "Utilitza la càmera posterior per obtenir una foto més àmplia amb una resolució més alta." "✱ Aquesta pantalla s\'apagarà" - - - - + "Dispositiu plegable que es desplega" + "Dispositiu plegable que gira" diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 1f7ae0bfb8f16..3f6dd913261cc 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi je vypnuta" "Bluetooth je vypnuto" "Režim Nerušit je vypnut" + + "Režim Nerušit byl zapnut automatickým pravidlem (%s)." "Režim Nerušit byl zapnut aplikací (%s)." "Režim Nerušit byl zapnut automatickým pravidlem nebo aplikací." @@ -1010,10 +1012,8 @@ "Otočit na přední fotoaparát pro lepší selfie?" "Pomocí zadního fotoaparátu pořiďte širší fotku s vyšším rozlišením." "✱ Tato obrazovka se vypne" - - - - + "Rozkládání rozkládacího zařízení" + "Otáčení rozkládacího zařízení" diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 8b2fc84d8c42d..3596d0e8a701d 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi er slået fra" "Bluetooth er slået fra" "Forstyr ikke er slået fra" + + "Tilstanden Forstyr ikke blev aktiveret af en automatisk regel (%s)." "Tilstanden Forstyr ikke blev aktiveret af en app (%s)." "Tilstanden Forstyr ikke blev aktiveret af en automatisk regel eller en app." diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index ff600c76e2d3b..bcae5b4f0f877 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -731,6 +731,8 @@ "WLAN ist deaktiviert" "Bluetooth ist deaktiviert" "„Bitte nicht stören“ ist deaktiviert" + + "„Bitte nicht stören“ wurde von einer automatischen Regel aktiviert (%s)." "„Bitte nicht stören“ wurde von einer App aktiviert (%s)." "„Bitte nicht stören“ wurde von einer automatischen Regel oder einer App aktiviert." diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 7a17ea687034e..54f162b472dfc 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -731,6 +731,8 @@ "Το Wi-Fi είναι ανενεργό" "Το Bluetooth είναι ανενεργό" "Η λειτουργία \"Μην ενοχλείτε\" είναι ανενεργή" + + "Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε από έναν αυτόματο κανόνα (%s)." "Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε από μια εφαρμογή (%s)." "Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε από έναν αυτόματο κανόνα ή μια εφαρμογή." diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index 4cf6b754e1d04..224d6fc43e36c 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi is off" "Bluetooth is off" "Do Not Disturb is off" + + "Do Not Disturb was turned on by an automatic rule (%s)." "Do Not Disturb was turned on by an app (%s)." "Do Not Disturb was turned on by an automatic rule or app." diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 28738f0f9fd5f..6238b83ba8606 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi is off" "Bluetooth is off" "Do Not Disturb is off" + + "Do Not Disturb was turned on by an automatic rule (%s)." "Do Not Disturb was turned on by an app (%s)." "Do Not Disturb was turned on by an automatic rule or app." @@ -1002,8 +1004,7 @@ "• Install a camera app" "• The app is set up" "• At least one device is available" - - + "Press and hold to activate" "Cancel" "Flip now" "Unfold phone for a better selfie" @@ -1012,6 +1013,5 @@ "✱ This screen will turn off" "Foldable device being unfolded" "Foldable device being flipped around" - - + "Stylus battery low" diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 4cf6b754e1d04..224d6fc43e36c 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi is off" "Bluetooth is off" "Do Not Disturb is off" + + "Do Not Disturb was turned on by an automatic rule (%s)." "Do Not Disturb was turned on by an app (%s)." "Do Not Disturb was turned on by an automatic rule or app." diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 4cf6b754e1d04..224d6fc43e36c 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi is off" "Bluetooth is off" "Do Not Disturb is off" + + "Do Not Disturb was turned on by an automatic rule (%s)." "Do Not Disturb was turned on by an app (%s)." "Do Not Disturb was turned on by an automatic rule or app." diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index ef527255a5ef1..7bb3fd36de857 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -731,6 +731,8 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎Wi-Fi is off‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎Bluetooth is off‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎Do Not Disturb is off‎‏‎‎‏‎" + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎Do Not Disturb was turned on by an automatic rule (‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎).‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎Do Not Disturb was turned on by an app (‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎).‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎Do Not Disturb was turned on by an automatic rule or app.‎‏‎‎‏‎" @@ -1002,8 +1004,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‎• Install a camera app‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎• The app is set up‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎• At least one device is available‎‏‎‎‏‎" - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‎‎‎Press and hold to activate‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎Cancel‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎Flip now‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎Unfold phone for a better selfie‎‏‎‎‏‎" @@ -1012,6 +1013,5 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎✱ This screen will turn off‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎Foldable device being unfolded‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎Foldable device being flipped around‎‏‎‎‏‎" - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎Stylus battery low‎‏‎‎‏‎" diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 4addec07eeaeb..75fdd0d5c914c 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi desactivado" "Bluetooth desactivado" "No interrumpir desactivado" + + "Se activó el modo No interrumpir con una regla automática (%s)." "Se activó el modo No interrumpir con una app (%s)." "Se activó el modo No interrumpir con una app o regla automática." diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 32e0daa75e342..8ebe61db91c3c 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi desactivado" "Bluetooth desactivado" "No molestar está desactivado" + + "Una regla automática (%s) ha activado No molestar." "Una aplicación (%s) ha activado No molestar." "Una aplicación o una regla automática han activado No molestar." diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 6bfc71ea01825..5345e53db68a6 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -731,6 +731,8 @@ "WiFi on välja lülitatud" "Bluetooth on välja lülitatud" "Funktsioon Mitte segada on välja lülitatud" + + "Automaatne reegel (%s) lülitas funktsiooni Mitte segada sisse." "Rakendus (%s) lülitas funktsiooni Mitte segada sisse." "Automaatne reegel või rakendus lülitas funktsiooni Mitte segada sisse." @@ -1010,10 +1012,8 @@ "Kas kasutada parema selfi jaoks esikaamerat?" "Kasutage tagakülje kaamerat, et jäädvustada suurema eraldusvõimega laiem foto." "✱ See ekraan lülitatakse välja" - - - - + "Volditava seadme lahtivoltimine" + "Volditava seadme ümberpööramine" diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index f530e00711893..4ed4bc19508e9 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -731,6 +731,8 @@ "Wifi-konexioa desaktibatuta dago" "Bluetooth bidezko konexioa desaktibatuta dago" "Ez molestatzeko modua desaktibatuta dago" + + "Ez molestatzeko modua aktibatu du arau automatiko batek (%s)." "Ez molestatzeko modua aktibatu du aplikazio batek (%s)." "Ez molestatzeko modua aktibatu du arau automatiko edo aplikazio batek." @@ -1010,10 +1012,8 @@ "Telefonoa irauli nahi duzu autoargazki hobeak ateratzeko?" "Erabili atzeko kamera kalitate handiagoko argazki zabalago bat ateratzeko." "✱ Pantaila itzali egingo da" - - - - + "Gailu tolesgarria zabaltzen" + "Gailu tolesgarria biratzen" diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index d75c5a8eb4129..d304821306ebc 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -731,6 +731,8 @@ "‏Wi-Fi خاموش است" "بلوتوث خاموش است" "«مزاحم نشوید» خاموش است" + + "قانون خودکاری (%s) «مزاحم نشوید» را روشن کرد." "برنامه‌ای (%s) «مزاحم نشوید» را روشن کرد." "برنامه یا قانون خودکاری، «مزاحم نشوید» را روشن کرد." @@ -1010,10 +1012,8 @@ "برای خویش‌گرفت بهتر، از نمایشگر جلو استفاده شود؟" "برای عکسی عریض‌تر با وضوح بالاتر، از دوربین عقب استفاده کنید." "✱ این صفحه‌نمایش خاموش خواهد شد" - - - - + "دستگاه تاشو درحال باز شدن" + "دستگاه تاشو درحال چرخش به اطراف" diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 2519d9a3a7248..6922fb08194fa 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi on pois päältä" "Bluetooth ei ole käytössä" "Älä häiritse ‑tila on pois päältä" + + "Automaattinen sääntö otti käyttöön Älä häiritse ‑tilan (%s)." "Sovellus otti käyttöön Älä häiritse ‑tilan (%s)." "Automaattinen sääntö tai sovellus otti käyttöön Älä häiritse ‑tilan." @@ -1010,10 +1012,8 @@ "Käännä etunäytölle, jotta saat paremman selfien?" "Voit ottaa laajemman kuvan korkeammalla resoluutiolla, kun käytät takakameraa." "✱ Tämä näyttö sammutetaan" - - - - + "Taitettava laite taitetaan" + "Taitettava laite käännetään ympäri" diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index f11227ba6350d..36453f80c05e5 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -731,6 +731,8 @@ "Le Wi-Fi est désactivé" "Le Bluetooth est désactivé" "Le mode Ne pas déranger est désactivé" + + "Le mode Ne pas déranger a été activé par une règle automatique (%s)." "Le mode Ne pas déranger a été activé par une application (%s)." "Le mode Ne pas déranger a été activé par une règle automatique ou une application." diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index cec4476973f73..61ac4c41aca83 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -120,7 +120,7 @@ "Menu" "Accessibilité" "Faire pivoter l\'écran" - "Aperçu" + "Récents" "Appareil photo" "Téléphoner" "Assistance vocale" @@ -308,7 +308,7 @@ "Caméra accessible" "Micro et caméra accessibles" "Autre appareil" - "Activer/Désactiver l\'aperçu" + "Activer/Désactiver l\'écran Récents" "Vous ne serez dérangé par aucun son ni aucune vibration, hormis ceux des alarmes, des rappels, des événements et des appels des contacts de votre choix. Le son continuera de fonctionner notamment pour la musique, les vidéos et les jeux." "Vous ne serez dérangé par aucun son ni aucune vibration, hormis ceux des alarmes. Le son continuera de fonctionner notamment pour la musique, les vidéos et les jeux." "Personnaliser" @@ -447,14 +447,14 @@ "Son et vibreur" "Paramètres" "L\'application est épinglée" - "Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur les boutons Retour et Aperçu." + "Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur les boutons Retour et Récents." "Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur les boutons Retour et Accueil." "Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, balayez-la vers le haut et gardez le doigt appuyé." - "Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur le bouton Aperçu." + "Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur le bouton Récents." "Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur le bouton Accueil." "Des données à caractère personnel, comme des contacts et le contenu d\'e-mails, peuvent être accessibles." "D\'autres applications peuvent être ouvertes depuis une application épinglée." - "Pour que l\'appli ne soit plus épinglée, appuyez de manière prolongée sur les boutons Retour et Aperçu" + "Pour que l\'appli ne soit plus épinglée, appuyez de manière prolongée sur les boutons Retour et Récents" "Pour que l\'appli ne soit plus épinglée, appuyez de manière prolongée sur les boutons Retour et Accueil" "Pour que l\'appli ne soit plus épinglée, balayez-la vers le haut et maintenez le doigt appuyé" "OK" @@ -731,6 +731,8 @@ "Wi-Fi désactivé" "Bluetooth désactivé" "Mode \"Ne pas déranger\" désactivé" + + "Le mode \"Ne pas déranger\" a été activé par une règle automatique (%s)." "Le mode \"Ne pas déranger\" a été activé par une application (%s)." "Le mode \"Ne pas déranger\" a été activé par une règle automatique ou une application." @@ -1010,10 +1012,8 @@ "Passer à l\'écran frontal pour un meilleur selfie ?" "Utilisez la caméra arrière pour prendre une photo plus large avec une résolution supérieure." "✱ Cet écran sera désactivé" - - - - + "Appareil pliable qui est déplié" + "Appareil pliable qui est retourné" diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index ee77418213b9b..249a78316df7d 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -731,6 +731,8 @@ "A wifi está desactivada" "O Bluetooth está desactivado" "O modo Non molestar está desactivado" + + "Unha norma automática (%s) activou o modo Non molestar." "Unha aplicación (%s) activou o modo Non molestar." "Unha aplicación ou norma automática activou o modo Non molestar." @@ -1010,10 +1012,8 @@ "Usar a cámara dianteira para unha autofoto mellor?" "Usa a cámara traseira para sacar unha foto máis ampla e con maior resolución." "✱ Desactivarase esta pantalla" - - - - + "Dispositivo pregable abríndose" + "Dispositivo pregable xirando" diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 94d3566a6652a..89594425074ab 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -731,6 +731,8 @@ "વાઇ-ફાઇ બંધ છે" "બ્લૂટૂથ બંધ છે" "ખલેલ પાડશો નહીં બંધ છે" + + "ખલેલ પાડશો નહીં એક સ્વચાલિત નિયમ દ્વારા ચાલુ કરાયું હતું (%s)." "ખલેલ પાડશો નહીં એક ઍપ્લિકેશન દ્વારા ચાલુ કરાયું હતું (%s)." "ખલેલ પાડશો નહીં એક સ્વચાલિત નિયમ અથવા ઍપ્લિકેશન દ્વારા ચાલુ કરાયું હતું." @@ -1010,10 +1012,8 @@ "બહેતર સેલ્ફી લેવા ફ્રન્ટ ડિસ્પ્લે પર ફ્લિપ કરીએ?" "વધુ ઉચ્ચ રિઝોલ્યુશનવાળો વિશાળ ફોટો લેવા માટે પાછલા કૅમેરાનો ઉપયોગ કરો." "✱ આ સ્ક્રીન બંધ થઈ જશે" - - - - + "ફોલ્ડ કરી શકાય એવું ડિવાઇસ અનફોલ્ડ કરવામાં આવી રહ્યું છે" + "ફોલ્ડ કરી શકાય એવું ડિવાઇસ ફ્લિપ કરવામાં આવી રહ્યું છે" diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index a3a7ebf257c4c..c39563ee70031 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -731,6 +731,8 @@ "वाई-फ़ाई बंद है" "ब्लूटूथ बंद है" "परेशान न करें बंद है" + + "एक ऑटोमैटिक नियम (%s) ने परेशान न करें को चालू कर दिया था." "एक ऐप्लिकेशन (%s) ने परेशान न करें को चालू कर दिया था." "एक ऑटोमैटिक नियम या ऐप्लिकेशन ने परेशान न करें को चालू कर दिया था." @@ -1010,10 +1012,8 @@ "बेहतर सेल्फ़ी के लिए फ़्रंट डिसप्ले पर स्विच करें?" "वाइड ऐंगल में हाई रिज़ॉल्यूशन वाली फ़ोटो लेने के लिए, पीछे का कैमरा इस्तेमाल करें." "✱ यह स्क्रीन बंद हो जाएगी" - - - - + "फ़ोल्ड किया जा सकने वाला डिवाइस अनफ़ोल्ड किया जा रहा है" + "फ़ोल्ड किया जा सकने वाला डिवाइस पलटा जा रहा है" diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index e98b4b6dd2cbc..920869be5b2a5 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi je isključen" "Bluetooth je isključen" "Način Ne uznemiravaj isključen" + + "Način Ne uznemiravaj uključilo je automatsko pravilo (%s)." "Način Ne uznemiravaj uključila je aplikacija (%s)." "Način Ne uznemiravaj uključilo je automatsko pravilo ili aplikacija." diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 326582aab5b7e..77d5799320bd0 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -731,6 +731,8 @@ "A Wi-Fi ki van kapcsolva" "A Bluetooth ki van kapcsolva" "A „Ne zavarjanak” mód ki van kapcsolva" + + "Az egyik automatikus szabály (%s) bekapcsolta a „Ne zavarjanak” módot." "Az egyik alkalmazás (%s) bekapcsolta a „Ne zavarjanak” módot." "Az egyik alkalmazás vagy automatikus szabály bekapcsolta a „Ne zavarjanak” módot." diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index a393968df16e5..6c770d37cf88d 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi-ն անջատված է" "Bluetooth-ն անջատված է" "Չանհանգստացնելու ռեժիմն անջատված է" + + "Չանհանգստացնել գործառույթը միացված է ավտոմատ կանոնի կողմից (%s):" "Չանհանգստացնել գործառույթը միացված է հավելվածի կողմից (%s):" "Չանհանգստացնել գործառույթը միացված է ավտոմատ կանոնի կամ հավելվածի կողմից:" diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 6c523415525cb..3bbcc82b0e703 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi nonaktif" "Bluetooth nonaktif" "Fitur Jangan Ganggu nonaktif" + + "Mode Jangan Ganggu diaktifkan oleh aturan otomatis (%s)." "Mode Jangan Ganggu diaktifkan oleh aplikasi (%s)." "Mode Jangan Ganggu diaktifkan oleh aturan otomatis atau aplikasi." diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 0cf4542d0c199..a42f42ec2bb3f 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -731,6 +731,8 @@ "Slökkt á Wi-Fi" "Slökkt á Bluetooth" "Slökkt á „Ónáðið ekki“" + + "Sjálfvirk regla kveikti á „Ónáðið ekki“ (%s)." "Forrit kveikti á „Ónáðið ekki“ (%s)." "Sjálfvirk regla eða forrit kveikti á „Ónáðið ekki“" @@ -1010,10 +1012,8 @@ "Snúa á framskjá til að ná betri sjálfsmynd?" "Notaðu aftari myndavélina til að ná víðara sjónarhorni með meiri upplausn." "✱ Slökkt verður á þessum skjá" - - - - + "Samanbrjótanlegt tæki opnað" + "Samanbrjótanlegu tæki snúið við" diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 7fb1e4dfb0da6..8e0efa8650934 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi disattivato" "Bluetooth non attivo" "Funzione Non disturbare disattivata" + + "La funzione Non disturbare è stata attivata da una regola automatica (%s)." "La funzione Non disturbare è stata attivata da un\'app (%s)." "La funzione Non disturbare è stata attivata da una regola automatica o da un\'app." @@ -1010,10 +1012,8 @@ "Girare su display frontale per un selfie migliore?" "Utilizza la fotocamera posteriore per una foto più ampia con maggiore risoluzione." "✱ Questo schermo verrà disattivato" - - - - + "Dispositivo pieghevole che viene aperto" + "Dispositivo pieghevole che viene capovolto" diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 0c140cf46ba2e..5f74a57ad4254 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -731,6 +731,8 @@ "‏Wi-Fi כבוי" "‏Bluetooth כבוי" "מצב \'נא לא להפריע\' כבוי" + + "מצב \'נא לא להפריע\' הופעל על ידי כלל אוטומטי (%s)." "מצב \'נא לא להפריע\' הופעל על ידי אפליקציה (%s)." "מצב \'נא לא להפריע\' הופעל על ידי אפליקציה או על ידי כלל אוטומטי." diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 8617a5d0789f8..485161f85a9a4 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi は OFF です" "Bluetooth は OFF です" "サイレント モードは OFF です" + + "サイレント モードが自動ルール(%s)によって ON になりました。" "サイレント モードがアプリ(%s)によって ON になりました。" "サイレント モードが自動ルールまたはアプリによって ON になりました。" @@ -1002,8 +1004,7 @@ "• カメラアプリをインストールする" "• アプリが設定されている" "• 利用できるデバイスが 1 台以上ある" - - + "有効にするには長押ししてください" "キャンセル" "切り替えましょう" "高画質で撮るにはスマートフォンを開いてください" @@ -1012,6 +1013,5 @@ "✱この画面は OFF になります" "折りたたみ式デバイスが広げられている" "折りたたみ式デバイスがひっくり返されている" - - + "タッチペンのバッテリー残量が少なくなっています" diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 799b199114b8c..f9e9b136bf267 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi გამორთულია" "Bluetooth გამორთულია" "„არ შემაწუხოთ“ რეჟიმი გამორთულია" + + "„არ შემაწუხოთ“ ჩაირთო ავტომატური წესის მიხედვით (%s)." "„არ შემაწუხოთ“ ჩაირთო აპის მიერ (%s)." "„არ შემაწუხოთ“ ჩაირთო ავტომატური წესის მიხედვით ან აპის მიერ." diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 2419213e77788..8619a95e4f532 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi өшірулі" "Bluetooth өшірулі" "Мазаламау режимі өшірулі" + + "Мазаламау режимі (%s) автоматты ережесі арқылы қосылды." "Мазаламау режимі (%s) қолданбасы арқылы қосылды." "Мазаламау режимі автоматты ереже немесе қолданба арқылы қосылды." @@ -1010,10 +1012,8 @@ "Жақсырақ селфи үшін алдыңғы экранға ауысасыз ба?" "Ажыратымдылығы жоғары кеңірек фотосурет түсіру үшін артқы камераны пайдаланыңыз." "✱ Бұл экран өшіріледі." - - - - + "Бүктемелі құрылғы ашылып жатыр." + "Бүктемелі құрылғы аударылып жатыр." diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 9d862376608a0..6914431070a8f 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi បាន​បិទ" "ប៊្លូធូស​បាន​បិទ" "មុខងារ​កុំរំខាន​បាន​បិទ" + + "មុខងារ​កុំ​រំខាន​ត្រូវបាន​បើកដោយច្បាប់​ស្វ័យ​ប្រវត្តិ (%s)។" "មុខងារ​កុំ​រំខាន​ត្រូវបាន​បើកដោយកម្មវិធី (%s)។" "មុខងារ​កុំ​រំខាន​ត្រូវបាន​បើកដោយច្បាប់​ស្វ័យ​ប្រវត្តិ ឬ​កម្មវិធី។" @@ -1010,10 +1012,8 @@ "ត្រឡប់ទៅផ្ទាំងអេក្រង់ខាងមុខ​ ដើម្បី​ថត​សែលហ្វីកាន់តែបានល្អឬ?" "ប្រើកាមេរ៉ាខាងក្រោយ ដើម្បីទទួលបានរូបថតកាន់តែធំជាមួយនឹងកម្រិតគុណភាពកាន់តែខ្ពស់។" "✱ អេក្រង់នេះនឹងបិទ" - - - - + "ឧបករណ៍អាច​បត់បានកំពុងត្រូវបានលា" + "ឧបករណ៍អាច​បត់បានកំពុងត្រូវបានលា" diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 49390db69c50a..2691a70d8795e 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -731,6 +731,8 @@ "ವೈ-ಫೈ ಆಫ್ ಆಗಿದೆ" "ಬ್ಲೂಟೂತ್‌ ಆಫ್ ಆಗಿದೆ" "ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆಫ್ ಆಗಿದೆ" + + "(%s) ಸ್ವಯಂಚಾಲಿತ ನಿಯಮದ ಮೂಲಕ ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ." "(%s) ಅಪ್ಲಿಕೇಶನ್‌ ಮೂಲಕ ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ." "ಸ್ವಯಂಚಾಲಿತ ನಿಯಮ ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್‌ ಮೂಲಕ ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ." @@ -1010,10 +1012,8 @@ "ಉತ್ತಮ ಸೆಲ್ಫೀಗಾಗಿ ಮುಂಭಾಗದ ಕ್ಯಾಮರಾಗೆ ಫ್ಲಿಪ್ ಮಾಡಬೇಕೆ?" "ಹೆಚ್ಚಿನ ರೆಸಲ್ಯೂಷನ್ ಹೊಂದಿರುವ ವಿಶಾಲವಾದ ಫೋಟೋಗಾಗಿ ಹಿಂಭಾಗದ ಕ್ಯಾಮರಾವನ್ನು ಬಳಸಿ." "✱ ಈ ಸ್ಕ್ರೀನ್ ಆಫ್ ಆಗುತ್ತದೆ" - - - - + "ಫೋಲ್ಡ್ ಮಾಡಬಹುದಾದ ಸಾಧನವನ್ನು ಅನ್‌ಫೋಲ್ಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ" + "ಫೋಲ್ಡ್ ಮಾಡಬಹುದಾದ ಸಾಧನವನ್ನು ಸುತ್ತಲೂ ತಿರುಗಿಸಲಾಗುತ್ತಿದೆ" diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 3457a844d52e3..f3f042609eedd 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi가 사용 중지됨" "블루투스가 사용 중지됨" "방해 금지 모드가 사용 중지됨" + + "방해 금지 모드가 자동 규칙(%s)에 의해 사용 설정되었습니다." "방해 금지 모드가 앱(%s)에 의해 사용 설정되었습니다." "방해 금지 모드가 자동 규칙 또는 앱에 의해 사용 설정되었습니다." diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 4bd1695c0aecc..6f64f45080a48 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi өчүк" "Bluetooth өчүк" "\"Тынчымды алба\" режими өчүк" + + "Автоматтык эреже \"Тынчымды алба\" режимин күйгүздү (%s)." "Колдонмо \"Тынчымды алба\" режимин күйгүздү (%s)." "Автоматтык эреже же колдонмо \"Тынчымды алба\" режимин күйгүздү." @@ -1010,10 +1012,8 @@ "Жакшы селфи тартуу үчүн маңдайкы экранга которосузбу?" "Кең жана жогорку дааналыктагы сүрөттү тартуу үчүн негизги камераны колдонуңуз." "✱ Бул экран өчөт" - - - - + "Ачылып турган бүктөлмө түзмөк" + "Оодарылып жаткан бүктөлмө түзмөк" diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 750fa7ebc42cd..8573f69618a51 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi ປິດຢູ່" "Bluetooth ປິດຢູ່" "ຫ້າມລົບກວນ ປິດຢູ່" + + "ໂໝດຫ້າມລົບກວນຖືກເປີດໃຊ້ໂດຍກົດອັດຕະໂນມັດ (%s)." "ມີແອັບເປີດໃຊ້ໂໝດຫ້າມລົບກວນ (%s)." "ໂໝດຫ້າມລົບກວນຖືກເປີດໃຊ້ໂດຍກົດອັດຕະໂນມັດ ຫຼື ແອັບໃດໜຶ່ງ." diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 013ab719b456e..3af4eb0995bb5 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -731,6 +731,8 @@ "„Wi-Fi“ išjungtas" "„Bluetooth“ išjungtas" "Netrukdymo režimas išjungtas" + + "Netrukdymo režimą įjungė automatinė taisyklė (%s)." "Netrukdymo režimą įjungė programa (%s)." "Netrukdymo režimą įjungė automatinė taisyklė arba programa." diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 7c75e6a635330..cec24a47ead58 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi ir izslēgts" "Bluetooth ir izslēgts" "Režīms “Netraucēt” ir izslēgts" + + "Režīmu “Netraucēt” ieslēdza automātiska kārtula (%s)." "Režīmu “Netraucēt” ieslēdza lietotne (%s)." "Režīmu “Netraucēt” ieslēdza automātiska kārtula vai lietotne." @@ -1010,10 +1012,8 @@ "Vai apvērst uz priekšējo kameru labākai pašbildei?" "Lai uzņemtu platāku fotoattēlu ar augstāku izšķirtspēju, izmantojiet aizmugurējo kameru." "✱ Šis ekrāns tiks izslēgts." - - - - + "Salokāma ierīce tiek atlocīta" + "Salokāma ierīce tiek apgriezta" diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 6f0302631a391..fff051b2148be 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi е исклучено" "Bluetooth е исклучен" "„Не вознемирувај“ е исклучено" + + "Едно автоматско правило (%s) ја вклучи „Не вознемирувај“." "Една апликација (%s) ја вклучи „Не вознемирувај“." "Едно автоматско правило или апликација ја вклучи „Не вознемирувај“." diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 74e5d06f0e96f..6f521024409ac 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -731,6 +731,8 @@ "വൈഫൈ ഓഫാണ്" "Bluetooth ഓഫാണ്" "\'ശല്യപ്പെടുത്തരുത്\' ഓഫാണ്" + + "സ്വയമേവയുള്ള ഒരു നയം (%s) \'ശല്യപ്പെടുത്തരുത്\' ഓണാക്കിയിരിക്കുന്നു." "ഒരു ആപ്പ് (%s) \'ശല്യപ്പെടുത്തരുത്\' ഓണാക്കിയിരിക്കുന്നു." "സ്വയമേവയുള്ള ഒരു നയമോ ആപ്പോ \'ശല്യപ്പെടുത്തരുത്\' ഓണാക്കിയിരിക്കുന്നു." @@ -1010,10 +1012,8 @@ "മികച്ച സെൽഫിക്ക് ഫ്രണ്ട് ഡിസ്പ്ലേയിലേക്ക് മാറണോ?" "ഉയർന്ന റെസല്യൂഷൻ ഉള്ള, വീതി കൂടിയ ഫോട്ടോയ്ക്ക്, പിൻഭാഗത്തെ ക്യാമറ ഉപയോഗിക്കുക." "✱ ഈ സ്ക്രീൻ ഓഫാകും" - - - - + "ഫോൾഡ് ചെയ്യാവുന്ന ഉപകരണം അൺഫോൾഡ് ആകുന്നു" + "ഫോൾഡ് ചെയ്യാവുന്ന ഉപകരണം, കറങ്ങുന്ന വിധത്തിൽ ഫ്ലിപ്പ് ആകുന്നു" diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 69f6c09ac434d..0540abfd487ff 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi унтраалттай байна" "Bluetooth унтраалттай байна" "Бүү саад бол горим унтраалттай байна" + + "Автомат дүрэм (%s) Бүү саад бол горимыг асаасан." "Апп (%s) Бүү саад бол горимыг асаасан." "Автомат дүрэм эсвэл апп Бүү саад бол горимыг асаасан." diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index efcbc9b10ffb9..2a33bc17428f9 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -731,6 +731,8 @@ "वाय-फाय बंद आहे" "ब्लूटूथ बंद आहे" "व्यत्यय आणू नका बंद आहे" + + "व्यत्यय आणू नका एका %s स्वयंचलित नियमाने सुरू केले." "व्यत्यय आणू नका (%s) ॲपने सुरू केले." "व्यत्यय आणू नका एका स्वयंचलित नियमाने किंवा ॲपने सुरू केले." diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index a8afbae15dbde..b595d397c66d3 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi dimatikan" "Bluetooth dimatikan" "Jangan Ganggu dimatikan" + + "Jangan Ganggu dihidupkan oleh peraturan automatik (%s)." "Jangan Ganggu dihidupkan oleh apl (%s)." "Jangan Ganggu dihidupkan oleh peraturan automatik atau apl." diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 4e46ec02958a0..627dd7757f62a 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi ပိတ်ထားသည်" "ဘလူးတုသ်ကို ပိတ်ထားသည်" "\"မနှောင့်ယှက်ရ\" ကို ပိတ်ထားသည်" + + "\"မနှောင့်ယှက်ရ\" ကို အလိုအလျောက်စည်းမျဉ်း (%s) က ဖွင့်ခဲ့သည်။" "\"မနှောင့်ယှက်ရ\" ကို အက်ပ် (%s) က ဖွင့်ခဲ့သည်။" "\"မနှောင့်ယှက်ရ\" ကို အလိုအလျောက်စည်းမျဉ်းတစ်ခု သို့မဟုတ် အက်ပ်တစ်ခုက ဖွင့်ခဲ့သည်။" diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index d5258e0993189..8dbdd2f1394ca 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -731,6 +731,8 @@ "Wifi er av" "Bluetooth er av" "Ikke forstyrr er av" + + "Ikke forstyrr ble slått på av en automatisk regel (%s)." "Ikke forstyrr ble slått på av en app (%s)." "Ikke forstyrr ble slått på av en automatisk regel eller en app." diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 123cce08d403a..00e52a160ea84 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -731,6 +731,8 @@ "Wi‑Fi अफ छ" "ब्लुटुथ निष्क्रिय छ" "बाधा नपुर्‍याउनुहोस् नामक विकल्प निष्क्रिय छ" + + "कुनै स्वचालित नियमले बाधा नपुऱ्याउनुहोस् नामक विकल्पलाई सक्रियो गऱ्यो (%s)।" "कुनै अनुप्रयोगले बाधा नपुऱ्याउनुहोस् नामक विकल्पलाई सक्रिय गऱ्यो (%s)।" "कुनै स्वचालित नियम वा अनुप्रयोगले बाधा नपुऱ्याउनुहोस् नामक विकल्पलाई सक्रिय गऱ्यो।" @@ -1010,10 +1012,8 @@ "अझ राम्रो सेल्फी खिच्न फ्लिप गरी अगाडिपट्टिको डिस्प्ले प्रयोग गर्ने हो?" "अझ बढी रिजोल्युसन भएको फराकिलो फोटो खिच्न पछाडिपट्टिको क्यामेरा प्रयोग गर्नुहोस्।" "✱ यो स्क्रिन अफ हुने छ" - - - - + "फोल्ड गर्न मिल्ने डिभाइस अनफोल्ड गरेको देखाइएको एनिमेसन" + "फोल्ड गर्न मिल्ने डिभाइस यताउता पल्टाएर देखाइएको एनिमेसन" diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index d1777b3358b97..61712356bcb73 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -731,6 +731,8 @@ "Wifi staat uit" "Bluetooth staat uit" "Niet storen staat uit" + + "Niet storen is aangezet door een automatische regel (%s)." "Niet storen is aangezet door een app (%s)." "Niet storen is aangezet door een automatische regel of app." @@ -1010,10 +1012,8 @@ "Omkeren naar scherm voorkant voor een betere selfie?" "Gebruik de camera aan de achterzijde voor een bredere foto met hogere resolutie." "✱ Dit scherm gaat uit" - - - - + "Opvouwbaar apparaat wordt uitgevouwen" + "Opvouwbaar apparaat wordt gedraaid" diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 17afa0ccccf4a..40b335a62b8c4 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -731,6 +731,8 @@ "ୱାଇ-ଫାଇ ବନ୍ଦ ଅଛି" "ବ୍ଲୁଟୂଥ୍‍‌ ଅଫ୍ ଅଛି" "\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅଫ୍‍ ଅଛି" + + "ଏକ (%s) ନିୟମ ଦ୍ୱାରା \"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ସ୍ୱଚାଳିତ ଭାବେ ଅନ୍‍ କରାଗଲା।" "ଏକ ଆପ୍‍ (%s) ଦ୍ୱାରା \"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍‌ କରାଗଲା।" "ଏକ ସ୍ୱଚାଳିତ ନିୟମ କିମ୍ବା ଆପ୍‍ ଦ୍ୱାରା \"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍‍ କରାଗଲା।" @@ -1010,10 +1012,8 @@ "ଏକ ଉନ୍ନତ ସେଲ୍ଫି ପାଇଁ ସାମ୍ନା ଡିସପ୍ଲେକୁ ଫ୍ଲିପ କରିବେ?" "ଉଚ୍ଚ ରିଜୋଲ୍ୟୁସନ ସହ ଅଧିକ ଚଉଡ଼ାର ଏକ ଫଟୋ ନେବା ପାଇଁ ପଛ-ପଟର କେମେରା ବ୍ୟବହାର କରନ୍ତୁ।" "✱ ଏହି ସ୍କ୍ରିନ ବନ୍ଦ ହୋଇଯିବ" - - - - + "ଫୋଲ୍ଡ କରାଯାଇପାରୁଥିବା ଡିଭାଇସକୁ ଅନଫୋଲ୍ଡ କରାଯାଉଛି" + "ଫୋଲ୍ଡ କରାଯାଇପାରୁଥିବା ଡିଭାଇସକୁ ଫ୍ଲିପ କରାଯାଉଛି" diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 80c2d2e30e7c3..b6d9121a4ec04 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -731,6 +731,8 @@ "ਵਾਈ-ਫਾਈ ਬੰਦ ਹੈ" "ਬਲੂਟੁੱਥ ਬੰਦ ਹੈ" "\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਬੰਦ ਹੈ" + + "ਸਵੈਚਲਿਤ ਨਿਯਮ (%s) ਦੁਆਰਾ \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਸੀ।" "ਐਪ (%s) ਵੱਲੋਂ \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਸੀ।" "ਇੱਕ ਸਵੈਚਲਿਤ ਨਿਯਮ ਜਾਂ ਐਪ ਵੱਲੋਂ \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਸੀ।" @@ -1010,10 +1012,8 @@ "ਕੀ ਬਿਹਤਰ ਸੈਲਫ਼ੀ ਲਈ ਅਗਲੀ ਡਿਸਪਲੇ \'ਤੇ ਫਲਿੱਪ ਕਰਨਾ ਹੈ?" "ਉੱਚ ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਵਾਲੀ ਜ਼ਿਆਦਾ ਚੌੜੀ ਫ਼ੋਟੋ ਲਈ ਪਿਛਲੇ ਕੈਮਰੇ ਦੀ ਵਰਤੋਂ ਕਰੋ।" "✱ ਇਹ ਸਕ੍ਰੀਨ ਬੰਦ ਹੋ ਜਾਵੇਗੀ" - - - - + "ਮੋੜਨਯੋਗ ਡੀਵਾਈਸ ਨੂੰ ਖੋਲ੍ਹਿਆ ਜਾ ਰਿਹਾ ਹੈ" + "ਮੋੜਨਯੋਗ ਡੀਵਾਈਸ ਨੂੰ ਆਲੇ-ਦੁਆਲੇ ਫਲਿੱਪ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 45a555b21237e..5f71cc69bf81d 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi jest wyłączone" "Bluetooth jest wyłączony" "Tryb Nie przeszkadzać jest wyłączony" + + "Tryb Nie przeszkadzać został włączony przez regułę automatyczną (%s)." "Tryb Nie przeszkadzać został włączony przez aplikację (%s)." "Tryb Nie przeszkadzać został włączony przez regułę automatyczną lub aplikację." @@ -1010,10 +1012,8 @@ "Przełączyć na przedni wyświetlacz?" "Użyj tylnego aparatu, aby zrobić szersze zdjęcie o większej rozdzielczości." "* Ekran się wyłączy" - - - - + "Składane urządzenie jest rozkładane" + "Składane urządzenie jest obracane" diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 5a712b3971b0d..11a4c69b468cb 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -731,6 +731,8 @@ "O Wi-Fi está desativado" "Bluetooth desativado" "O recurso Não perturbe está desativado" + + "O recurso Não perturbe foi ativado por uma regra automática (%s)." "O recurso Não perturbe foi ativado por um app (%s)." "O recurso Não perturbe foi ativado por uma regra automática ou app." diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index bf354b088bd2c..30410fd8c2c04 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi desativado" "Bluetooth desativado" "Não incomodar desativado" + + "O modo Não incomodar foi ativado por uma regra automática (%s)." "O modo Não incomodar foi ativado por uma app (%s)." "O modo Não incomodar foi ativado por uma regra automática ou por uma app." @@ -1010,10 +1012,8 @@ "Inverter para ecrã frontal para uma selfie melhor?" "Use a câmara traseira para uma foto mais ampla com uma resolução superior." "✱ Este ecrã vai ser desligado" - - - - + "Dispositivo dobrável a ser desdobrado" + "Dispositivo dobrável a ser virado ao contrário" diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 5a712b3971b0d..11a4c69b468cb 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -731,6 +731,8 @@ "O Wi-Fi está desativado" "Bluetooth desativado" "O recurso Não perturbe está desativado" + + "O recurso Não perturbe foi ativado por uma regra automática (%s)." "O recurso Não perturbe foi ativado por um app (%s)." "O recurso Não perturbe foi ativado por uma regra automática ou app." diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 8fc037381170f..86f6205fe5c19 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -731,6 +731,8 @@ "Conexiunea Wi-Fi este dezactivată" "Funcția Bluetooth este dezactivată" "Funcția Nu deranja este dezactivată" + + "Funcția Nu deranja a fost activată de o regulă automată (%s)." "Funcția Nu deranja a fost activată de o aplicație (%s)." "Funcția Nu deranja a fost activată de o regulă automată sau de o aplicație." diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index b864dc093a0de..28d5f4097ec05 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -731,6 +731,8 @@ "Модуль Wi-Fi отключен" "Модуль Bluetooth отключен" "Режим \"Не беспокоить\" отключен" + + "Режим \"Не беспокоить\" был включен специальным правилом (%s)." "Режим \"Не беспокоить\" был включен приложением (%s)." "Режим \"Не беспокоить\" был включен специальным правилом или приложением." diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 67e74a177e73b..f7cdcb10f1f2e 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi ක්‍රියා විරහිතයි" "බ්ලූටූත් ක්‍රියා විරහිතයි" "බාධා නොකරන්න ක්‍රියා විරහිතයි" + + "ස්වයංක්‍රිය රීතියක් මගින් බාධා නොකරන්න ක්‍රියාත්මක කරන ලදී (%s)." "යෙදුමක් මගින් බාධා නොකරන්න ක්‍රියාත්මක කරන ලදී (%s)." "ස්වයංක්‍රිය රීතියක් හෝ යෙදුමක් මගින් බාධා නොකරන්න ක්‍රියාත්මක කරන ලදී." diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 0e47b41247d12..b2586f1458c93 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -731,6 +731,8 @@ "Pripojenie Wi‑Fi je vypnuté" "Rozhranie Bluetooth je vypnuté" "Režim bez vyrušení je vypnutý" + + "Režim bez vyrušení bol zapnutý automatickým pravidlom (%s)." "Režim bez vyrušení bol zapnutý aplikáciou (%s)." "Režim bez vyrušení bol zapnutý automatickým pravidlom alebo aplikáciou." @@ -1010,10 +1012,8 @@ "Prevrátiť na pred. obrazovku pre lepšie selfie?" "Pomocou zadného fotoaparátu vytvorte širšiu fotku s vyšším rozlíšením." "✱ Táto obrazovka sa vypne" - - - - + "Rozloženie skladacieho zariadenia" + "Prevrátenie skladacieho zariadenia" diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 0f80a43ecbd5b..a52fedeb606d4 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi je izklopljen." "Bluetooth je izklopljen" "Način »ne moti« je izklopljen" + + "Samodejno pravilo (%s) je vklopilo način »ne moti«." "Aplikacija (%s) je vklopila način »ne moti«." "Način »ne moti« je bil vklopljen zaradi samodejnega pravila ali aplikacije." @@ -1010,10 +1012,8 @@ "Obrnite telefon na sprednji zaslon za boljši selfi" "Uporabite hrbtni fotoaparat, da posnamete širšo sliko višje ločljivosti." "✱ Ta zaslon se bo izklopil." - - - - + "Razpiranje zložljive naprave" + "Obračanje zložljive naprave" diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 1856e5a989f78..e9ae54a061899 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi është joaktiv" "Bluetooth-i është joaktiv" "Modaliteti \"Mos shqetëso\" është joaktiv" + + "Modaliteti \"Mos shqetëso\" është aktivizuar nga një rregull automatik (%s)." "Modaliteti \"Mos shqetëso\" është aktivizuar nga një aplikacion (%s)." "Modaliteti \"Mos shqetëso\" është aktivizuar nga një rregull automatik ose një aplikacion." @@ -1010,10 +1012,8 @@ "Të kthehet tek ekrani para për selfi më të mirë?" "Përdor lenten e kamerës së pasme për një fotografi më të gjerë me rezolucion më të lartë." "✱ Ky ekran do të fiket" - - - - + "Pajisja e palosshme duke u hapur" + "Pajisja e palosshme duke u rrotulluar" diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 40d38d90daaba..f3c3de3a19709 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -731,6 +731,8 @@ "WiFi је искључен" "Bluetooth је искључен" "Режим Не узнемиравај је искључен" + + "Аутоматско правило (%s) је укључило режим Не узнемиравај." "Апликација (%s) је укључила режим Не узнемиравај." "Аутоматско правило или апликација су укључили режим Не узнемиравај." @@ -1010,10 +1012,8 @@ "Желите да обрнете на предњи екран за бољи селфи?" "Користите задњу камеру да бисте снимили ширу слику са вишом резолуцијом." "✱ Овај екран ће се искључити" - - - - + "Уређај на преклоп се отвара" + "Уређај на преклоп се обрће" diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 3ab7c4b8f9dd4..ae40b7bdea19b 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -731,6 +731,8 @@ "wifi är inaktiverat" "Bluetooth är inaktiverat" "Stör ej är inaktiverat" + + "Stör ej aktiverades via en automatisk regel (%s)." "Stör ej aktiverades via en app (%s)." "Stör ej aktiverades via en automatisk regel eller en app." @@ -1010,10 +1012,8 @@ "Vill du ta en bättre selfie med främre skärmen?" "Använd den bakre kameran för att ta ett mer vidsträckt foto med högre upplösning." "✱ Den här skärmen inaktiveras" - - - - + "En vikbar enhet viks upp" + "En vikbar enhet vänds" diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index e269b6107e3ff..f13afb8331dad 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi imezimwa" "Bluetooth imezimwa" "Kipengele cha Usinisumbue kimezimwa" + + "Kipengele cha Usinisumbue kimewashwa na sheria ya kiotomatiki %s." "Kipengele cha usinisumbue kimewashwa na programu (%s)." "Kipengele cha Usinisumbue kimewashwa na sheria ya kiotomatiki au programu." @@ -872,8 +874,7 @@ "Acha kutuma" "Vifaa vya kutoa sauti vilivyopo" "Sauti" - - + "%1$d%%" "Jinsi utangazaji unavyofanya kazi" "Tangaza" "Watu walio karibu nawe wenye vifaa oanifu vya Bluetooth wanaweza kusikiliza maudhui unayoyatangaza" @@ -987,8 +988,7 @@ "Kamera na maikrofoni zimezimwa" "{count,plural, =1{Arifa #}other{Arifa #}}" "%1$s, %2$s" - - + "Kuandika vidokezo" "Inaarifu" "Ungependa kusimamisha utangazaji kwenye %1$s?" "Ikiwa unatangaza kwenye %1$s au unabadilisha maudhui, tangazo lako la sasa litasimamishwa" @@ -1012,10 +1012,8 @@ "Ungependa kugeuza skrini ya mbele ili upige selfi?" "Tumia kamera ya nyuma ili upige picha pana iliyo na ubora wa juu." "✱ Skrini hii itajizima" - - - - + "Kifaa kinachokunjwa kikikunjuliwa" + "Kifaa kinachokunjwa kikigeuzwa" diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index fccd886cf4580..ef01766d24d4b 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -731,6 +731,8 @@ "வைஃபை முடக்கத்தில் உள்ளது" "புளூடூத் முடக்கத்தில் உள்ளது" "\"தொந்தரவு செய்ய வேண்டாம்\" முடக்கத்தில் உள்ளது" + + "\"தொந்தரவு செய்ய வேண்டாம்\" எனும் பயன்முறையை, தானியங்கு விதி (%s) இயக்கியுள்ளது." "\"தொந்தரவு செய்ய வேண்டாம்\" எனும் பயன்முறையை, ஆப்ஸ் (%s) இயக்கியுள்ளது." "\"தொந்தரவு செய்ய வேண்டாம்\" எனும் பயன்முறையை, தானியங்கு விதி அல்லது ஆப்ஸ் இயக்கியுள்ளது." @@ -1010,10 +1012,8 @@ "சிறந்த செல்ஃபிக்கு முன்புற டிஸ்பிளேவிற்கு மாற்றவா?" "அதிகத் தெளிவுத்திறனுடன் அகலக் கோணத்தில் படத்தை எடுப்பதற்குப் பின்பக்கக் கேமராவைப் பயன்படுத்துங்கள்." "✱ இந்தத் திரை ஆஃப் ஆகிவிடும்" - - - - + "மடக்கத்தக்க சாதனம் திறக்கப்படுகிறது" + "மடக்கத்தக்க சாதனம் ஃபிளிப் செய்யப்பட்டு திருப்பப்படுகிறது" diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index ca260edd51c56..2a2bba5ab92e8 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi ఆఫ్‌లో ఉంది" "బ్లూటూత్ ఆఫ్‌లో ఉంది" "అంతరాయం కలిగించవద్దు ఆఫ్‌లో ఉంది" + + "ఆటోమేటిక్‌ నియమం (%s) ద్వారా అంతరాయం కలిగించవద్దు ఆన్ చేయబడింది." "యాప్ (%s) ద్వారా అంతరాయం కలిగించవద్దు ఆన్ చేయబడింది." "ఆటోమేటిక్‌ నియమం లేదా యాప్ ద్వారా అంతరాయం కలిగించవద్దు ఆన్ చేయబడింది." diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 0caba4d9983ee..736bd68279189 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi ปิดอยู่" "บลูทูธปิดอยู่" "\"ห้ามรบกวน\" ปิดอยู่" + + "มีการเปิด \"ห้ามรบกวน\" โดยกฎอัตโนมัติ (%s)" "มีการเปิด \"ห้ามรบกวน\" โดยแอป (%s)" "มีการเปิด \"ห้ามรบกวน\" โดยกฎอัตโนมัติหรือแอป" diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 78cb17ab59e89..51e42dd602a76 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -731,6 +731,8 @@ "Naka-off ang Wi-Fi" "Naka-off ang Bluetooth" "Naka-off ang Huwag Istorbohin" + + "Na-on ang Huwag Istorbohin dahil sa isang awtomatikong panuntunan (%s)." "Na-on ang Huwag Istorbohin dahil sa isang app (%s)." "Na-on ang Huwag Istorbohin dahil sa isang awtomatikong panuntunan o app." diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 6f8f055be0c50..bb718ffd19edb 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -731,6 +731,8 @@ "Kablosuz bağlantı kapalı" "Bluetooth kapalı" "Rahatsız Etmeyin kapalı" + + "Rahatsız Etmeyin ayarı bir otomatik kural (%s) tarafından açıldı." "Rahatsız Etmeyin ayarı bir uygulama (%s) tarafından açıldı." "Rahatsız Etmeyin ayarı bir otomatik kural veya uygulama tarafından açıldı." diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index cf062d84d4ce4..4e30515277787 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi вимкнено" "Bluetooth вимкнено" "Режим \"Не турбувати\" вимкнено" + + "Автоматичне правило ввімкнуло режим \"Не турбувати\" (%s)." "Додаток увімкнув режим \"Не турбувати\" (%s)." "Автоматичне правило або додаток увімкнули режим \"Не турбувати\"." @@ -1010,10 +1012,8 @@ "Перемкнути на фронтальну камеру для кращого селфі?" "Використовуйте камеру на задній панелі, щоб зробити знімок із ширшим кутом і вищою роздільною здатністю." "✱ Цей екран вимкнеться" - - - - + "Розкладний пристрій у розкладеному стані" + "Розкладний пристрій обертається" diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 97fce68ac63ee..8b249ca37116e 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -731,6 +731,8 @@ "‏Wi-Fi آف ہے" "بلوٹوتھ آف ہے" "\'ڈسٹرب نہ کریں\' آف ہے" + + "\'ڈسٹرب نہ کریں\' کسی خودکار اصول (%s) کے ذریعہ آن ہو گیا تھا۔" "\'ڈسٹرب نہ کریں\' کسی ایپ (%s) کے ذریعہ آن ہو گیا تھا۔" "\'ڈسٹرب نہ کریں\' کسی خودکار اصول یا ایپ کے ذریعے آن ہو گیا تھا۔" diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index a063081fd2ebc..74f29e5233525 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi o‘chiq" "Bluetooth o‘chiq" "Bezovta qilinmasin rejimi o‘chiq" + + "Bezovta qilinmasin rejimi avtomatik qoida (%s) tomonidan yoqilgan." "Bezovta qilinmasin rejimi ilova (%s) tomonidan yoqilgan." "Bezovta qilinmasin rejimi ilova yoki avtomatik qoida tomonidan yoqilgan." diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 711fcb63d0cd5..94c814cc526f4 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi đang tắt" "Bluetooth tắt" "Không làm phiền tắt" + + "Không làm phiền đã được một quy tắc tự động (%s) bật." "Không làm phiền đã được một ứng dụng (%s) bật." "Không làm phiền đã được một quy tắc tự động hoặc ứng dụng bật." @@ -1010,10 +1012,8 @@ "Lật sang màn hình ngoài để tự chụp ảnh chân dung đẹp hơn?" "Sử dụng máy ảnh sau để chụp ảnh góc rộng hơn với độ phân giải cao hơn." "✱ Màn hình này sẽ tắt" - - - - + "Thiết bị có thể gập lại đang được mở ra" + "Thiết bị có thể gập lại đang được lật ngược" diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index b52c9a4a0bf6a..082cfb4fc896c 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -731,6 +731,8 @@ "WLAN 已关闭" "蓝牙已关闭" "“勿扰”模式已关闭" + + "某个自动规则(%s)已开启勿扰模式。" "某个应用(%s)已开启勿扰模式。" "某个自动规则或应用已开启勿扰模式。" diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 8edf32bfe98b0..092fe349fd72f 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi 已關閉" "藍牙已關閉" "「請勿騷擾」已關閉" + + "「%s」自動規則已開啟「請勿騷擾」功能。" "「%s」應用程式已開啟「請勿騷擾」功能。" "某個自動規則或應用程式已開啟「請勿騷擾」功能。" diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index e5ce5d7a1b067..e09888292060c 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -731,6 +731,8 @@ "Wi-Fi 已關閉" "藍牙已關閉" "零打擾模式已關閉" + + "「%s」自動規則已將零打擾模式開啟。" "「%s」應用程式已將零打擾模式開啟。" "某個自動規則或應用程式已將零打擾模式開啟。" diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 63777ca661044..0a2aa8b6ceb23 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -731,6 +731,8 @@ "I-Wi-Fi ivaliwe" "I-Bluetooth ivaliwe" "Ungaphazamisi kuvaliwe" + + "Okuthi ungaphazamisi kuvulwe umthetho ozenzakalelayo (%s)." "Okuthi ungaphazamisi kuvulwe uhlelo lokusebenza (%s)." "Okuthi ungaphazamisi kuvulwe umthetho ozenzakalelayo noma uhlelo lokusebenza." @@ -1010,10 +1012,8 @@ "Phendulela kwisibonisi sangaphambili ukuba nesithombe ozishuthe sona esingcono?" "Sebenzisa ikhamera ebheke ngemuva ukuze uthole isithombe esibanzi esinokucaca okuphezulu." "✱ Lesi sikrini sizovala" - - - - + "Idivayisi egoqekayo iyembulwa" + "Idivayisi egoqekayo iphendulwa nxazonke" From 688cc090e54be8c66c377027c553604eb6ff594d Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 19 Dec 2022 00:29:55 -0800 Subject: [PATCH 16/36] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ia2cfdba1de3fe0b69ead75f123558e1f2048b0c5 --- packages/SystemUI/res-keyguard/values-af/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-am/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ar/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-as/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-az/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-be/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-bg/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-bn/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-bs/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ca/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-cs/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-da/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-de/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-el/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-en-rAU/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-en-rCA/strings.xml | 2 +- packages/SystemUI/res-keyguard/values-en-rGB/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-en-rIN/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-en-rXC/strings.xml | 2 +- packages/SystemUI/res-keyguard/values-es-rUS/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-es/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-et/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-eu/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-fa/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-fi/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-fr/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-gl/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-gu/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-hi/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-hr/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-hu/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-hy/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-in/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-is/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-it/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-iw/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ja/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ka/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-kk/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-km/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-kn/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ko/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ky/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-lo/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-lt/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-lv/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-mk/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ml/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-mn/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-mr/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ms/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-my/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-nb/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ne/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-nl/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-or/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-pa/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-pl/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-pt/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ro/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ru/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-si/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-sk/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-sl/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-sq/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-sr/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-sv/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-sw/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ta/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-te/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-th/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-tl/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-tr/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-uk/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-ur/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-uz/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-vi/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml | 3 ++- packages/SystemUI/res-keyguard/values-zu/strings.xml | 3 ++- 85 files changed, 168 insertions(+), 85 deletions(-) diff --git a/packages/SystemUI/res-keyguard/values-af/strings.xml b/packages/SystemUI/res-keyguard/values-af/strings.xml index 25c7528b53f31..ea358f69f582d 100644 --- a/packages/SystemUI/res-keyguard/values-af/strings.xml +++ b/packages/SystemUI/res-keyguard/values-af/strings.xml @@ -30,7 +30,8 @@ "%s • Laai tans" "%s • Laai tans vinnig" "%s • Laai tans stadig" - "%s • Laaiproses is onderbreek om battery te beskerm" + + "Druk Kieslys om te ontsluit." "Netwerk is gesluit" "Geen SIM-kaart nie" diff --git a/packages/SystemUI/res-keyguard/values-am/strings.xml b/packages/SystemUI/res-keyguard/values-am/strings.xml index ab9f44e21dce7..8d1c9aa087def 100644 --- a/packages/SystemUI/res-keyguard/values-am/strings.xml +++ b/packages/SystemUI/res-keyguard/values-am/strings.xml @@ -30,7 +30,8 @@ "%s • ኃይል በመሙላት ላይ" "%s • በፍጥነት ኃይልን በመሙላት ላይ" "%s • በዝግታ ኃይልን በመሙላት ላይ" - "%s • ባትሪን ለመጠበቅ ኃይል መሙላት ባለበት ቆሟል" + + "ለመክፈት ምናሌ ተጫን።" "አውታረ መረብ ተቆልፏል" "ምንም ሲም ካርድ የለም" diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml index 5faabec30dae9..fe2e6e6bba73d 100644 --- a/packages/SystemUI/res-keyguard/values-ar/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml @@ -30,7 +30,8 @@ "%s • جارٍ الشحن" "%s • جارٍ الشحن سريعًا" "%s • جارٍ الشحن ببطء" - "%s • تم إيقاف الشحن مؤقتًا لحماية البطارية" + + "اضغط على \"القائمة\" لإلغاء التأمين." "الشبكة مؤمّنة" "‏ليست هناك شريحة SIM" diff --git a/packages/SystemUI/res-keyguard/values-as/strings.xml b/packages/SystemUI/res-keyguard/values-as/strings.xml index 60e7463f7328b..a2f7fc4d285f1 100644 --- a/packages/SystemUI/res-keyguard/values-as/strings.xml +++ b/packages/SystemUI/res-keyguard/values-as/strings.xml @@ -30,7 +30,8 @@ "%s • চ্চার্জ কৰি থকা হৈছে" "%s • দ্ৰুত গতিৰে চ্চাৰ্জ কৰি থকা হৈছে" "%s • লাহে লাহে চ্চাৰ্জ কৰি থকা হৈছে" - "%s • বেটাৰী সুৰক্ষিত কৰিবলৈ চাৰ্জিং পজ কৰা হৈছে" + + "আনলক কৰিবলৈ মেনু টিপক।" "নেটৱর্ক লক কৰা অৱস্থাত আছে" "কোনো ছিম কাৰ্ড নাই" diff --git a/packages/SystemUI/res-keyguard/values-az/strings.xml b/packages/SystemUI/res-keyguard/values-az/strings.xml index bc428ad029843..9b81c35a6f7a6 100644 --- a/packages/SystemUI/res-keyguard/values-az/strings.xml +++ b/packages/SystemUI/res-keyguard/values-az/strings.xml @@ -30,7 +30,8 @@ "%s • Enerji yığır" "%s • Sürətlə enerji yığır" "%s • Yavaş enerji yığır" - "%s • Batareyanı qorumaq üçün şarj durdurulub" + + "Kilidi açmaq üçün Menyu düyməsinə basın." "Şəbəkə kilidlidir" "SIM kart yoxdur." diff --git a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml index a1004c407ba15..01bd9078cac41 100644 --- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml @@ -30,7 +30,8 @@ "%s • Пуни се" "%s • Брзо се пуни" "%s • Споро се пуни" - "%s • Пуњење је паузирано да би се заштитила батерија" + + "Притисните Мени да бисте откључали." "Мрежа је закључана" "Нема SIM картице" diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml index 53ee20ff69a86..e5da6044f4d3b 100644 --- a/packages/SystemUI/res-keyguard/values-be/strings.xml +++ b/packages/SystemUI/res-keyguard/values-be/strings.xml @@ -30,7 +30,8 @@ "%s • Ідзе зарадка" "%s • Ідзе хуткая зарадка" "%s • Ідзе павольная зарадка" - "%s • Дзеля зберажэння акумулятара зарадка прыпынена" + + "Націсніце кнопку \"Меню\", каб разблакіраваць." "Сетка заблакіравана" "Няма SIM-карты" diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml index 2dbbb9aeb0daa..fcd6d57c52063 100644 --- a/packages/SystemUI/res-keyguard/values-bg/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml @@ -30,7 +30,8 @@ "%s • Зарежда се" "%s • Зарежда се бързо" "%s • Зарежда се бавно" - "%s • Зареждането е на пауза с цел запазване на батерията" + + "Натиснете „Меню“, за да отключите." "Мрежата е заключена" "Няма SIM карта" diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml index bde5d00498be5..1588f2143453a 100644 --- a/packages/SystemUI/res-keyguard/values-bn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml @@ -30,7 +30,8 @@ "%s • চার্জ হচ্ছে" "%s • দ্রুত চার্জ হচ্ছে" "%s • ধীরে চার্জ হচ্ছে" - "%s • ব্যাটারি সুরক্ষিত রাখতে চার্জিং পজ করা হয়েছে" + + "আনলক করতে মেনুতে টিপুন।" "নেটওয়ার্ক লক করা আছে" "কোনো সিম কার্ড নেই" diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml index 6b7f15b390699..6b88e8beb05e2 100644 --- a/packages/SystemUI/res-keyguard/values-bs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml @@ -30,7 +30,8 @@ "%s • Punjenje" "%s • Brzo punjenje" "%s • Sporo punjenje" - "%s • Punjenje je pauzirano radi zaštite baterije" + + "Pritisnite meni da otključate." "Mreža je zaključana" "Nema SIM kartice" diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml index 0d71e29789e31..0ccf1c1421e04 100644 --- a/packages/SystemUI/res-keyguard/values-ca/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml @@ -30,7 +30,8 @@ "%s • S\'està carregant" "%s • S\'està carregant ràpidament" "%s • S\'està carregant lentament" - "%s • La càrrega s\'ha posat en pausa per protegir la bateria" + + "Prem Menú per desbloquejar." "La xarxa està bloquejada" "No hi ha cap SIM" diff --git a/packages/SystemUI/res-keyguard/values-cs/strings.xml b/packages/SystemUI/res-keyguard/values-cs/strings.xml index b815328291393..d130a798cd243 100644 --- a/packages/SystemUI/res-keyguard/values-cs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-cs/strings.xml @@ -30,7 +30,8 @@ "%s • Nabíjení" "%s • Rychlé nabíjení" "%s • Pomalé nabíjení" - "%s • Nabíjení bylo kvůli ochraně baterie pozastaveno" + + "Klávesy odemknete stisknutím tlačítka nabídky." "Síť je blokována" "Chybí SIM karta" diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml index bb54fd7c525f0..1d65ad44a606e 100644 --- a/packages/SystemUI/res-keyguard/values-da/strings.xml +++ b/packages/SystemUI/res-keyguard/values-da/strings.xml @@ -30,7 +30,8 @@ "%s • Oplader" "%s • Oplader hurtigt" "%s • Oplader langsomt" - "%s • Opladning er sat på pause for at beskytte batteriet" + + "Tryk på menuen for at låse op." "Netværket er låst" "Intet SIM-kort" diff --git a/packages/SystemUI/res-keyguard/values-de/strings.xml b/packages/SystemUI/res-keyguard/values-de/strings.xml index 57a368e337d8c..21e330c1f89ea 100644 --- a/packages/SystemUI/res-keyguard/values-de/strings.xml +++ b/packages/SystemUI/res-keyguard/values-de/strings.xml @@ -30,7 +30,8 @@ "%s • Wird geladen" "%s • Wird schnell geladen" "%s • Wird langsam geladen" - "%s • Ladevorgang pausiert, um den Akku zu schonen" + + "Zum Entsperren die Menütaste drücken." "Netzwerk gesperrt" "Keine SIM-Karte" diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml index efa6e8e4f1bfc..3e6a9ad26bba0 100644 --- a/packages/SystemUI/res-keyguard/values-el/strings.xml +++ b/packages/SystemUI/res-keyguard/values-el/strings.xml @@ -30,7 +30,8 @@ "%s • Φόρτιση" "%s • Γρήγορη φόρτιση" "%s • Αργή φόρτιση" - "%s • Η φόρτιση τέθηκε σε παύση για την προστασία της μπαταρίας" + + "Πατήστε \"Μενού\" για ξεκλείδωμα." "Κλειδωμένο δίκτυο" "Δεν υπάρχει SIM" diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml index e9727e86de513..5852feff68c20 100644 --- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml @@ -30,7 +30,8 @@ "%s • Charging" "%s • Charging rapidly" "%s • Charging slowly" - "%s • Charging paused to protect battery" + + "Press Menu to unlock." "Network locked" "No SIM card" diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml index f00796428564b..ed5b5c385a1e6 100644 --- a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml @@ -30,7 +30,7 @@ "%s • Charging" "%s • Charging rapidly" "%s • Charging slowly" - "%s • Charging paused to protect battery" + "%s • Charging optimized to protect battery" "Press Menu to unlock." "Network locked" "No SIM card" diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml index e9727e86de513..5852feff68c20 100644 --- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml @@ -30,7 +30,8 @@ "%s • Charging" "%s • Charging rapidly" "%s • Charging slowly" - "%s • Charging paused to protect battery" + + "Press Menu to unlock." "Network locked" "No SIM card" diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml index e9727e86de513..5852feff68c20 100644 --- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml @@ -30,7 +30,8 @@ "%s • Charging" "%s • Charging rapidly" "%s • Charging slowly" - "%s • Charging paused to protect battery" + + "Press Menu to unlock." "Network locked" "No SIM card" diff --git a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml index cae6242ea787b..d25ff784ce0e9 100644 --- a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml @@ -30,7 +30,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ • Charging‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ • Charging rapidly‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ • Charging slowly‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ • Charging paused to protect battery‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ • Charging optimized to protect battery‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎Press Menu to unlock.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎Network locked‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎No SIM card‎‏‎‎‏‎" diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml index c80cf192a4672..c609687704c0e 100644 --- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml @@ -30,7 +30,8 @@ "%s • Cargando" "%s • Cargando rápidamente" "%s • Cargando lentamente" - "%s • Se detuvo la carga para proteger la batería" + + "Presiona Menú para desbloquear." "Bloqueada para la red" "Sin tarjeta SIM" diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml index f76610904baf7..bbff08cc5869b 100644 --- a/packages/SystemUI/res-keyguard/values-es/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es/strings.xml @@ -30,7 +30,8 @@ "%s • Cargando" "%s • Cargando rápidamente" "%s • Cargando lentamente" - "%s • Carga pausada para proteger la batería" + + "Pulsa el menú para desbloquear la pantalla." "Bloqueada para la red" "Falta la tarjeta SIM" diff --git a/packages/SystemUI/res-keyguard/values-et/strings.xml b/packages/SystemUI/res-keyguard/values-et/strings.xml index f9f32d9f39709..4570bd547c14e 100644 --- a/packages/SystemUI/res-keyguard/values-et/strings.xml +++ b/packages/SystemUI/res-keyguard/values-et/strings.xml @@ -30,7 +30,8 @@ "%s • Laadimine" "%s • Kiirlaadimine" "%s • Aeglane laadimine" - "%s • Laadimine on aku kaitsmiseks peatatud" + + "Vajutage avamiseks menüüklahvi." "Võrk on lukus" "SIM-kaarti pole" diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml index 2492e83e2aea3..eca4a36323ae0 100644 --- a/packages/SystemUI/res-keyguard/values-eu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml @@ -30,7 +30,8 @@ "%s • Kargatzen" "%s • Bizkor kargatzen" "%s • Mantso kargatzen" - "%s • Bateria babesteko pausatu da kargatze-prozesua" + + "Desblokeatzeko, sakatu Menua." "Sarea blokeatuta dago" "Ez dago SIM txartelik" diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml index c73b7362e388e..83e222d64e24f 100644 --- a/packages/SystemUI/res-keyguard/values-fa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml @@ -30,7 +30,8 @@ "%s • درحال شارژ شدن" "%s • درحال شارژ سریع" "%s • آهسته‌آهسته شارژ می‌شود" - "%s • برای محافظت از باتری، شارژ موقتاً متوقف شد" + + "برای باز کردن قفل روی «منو» فشار دهید." "شبکه قفل شد" "سیم‌کارت موجود نیست" diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml index 4df432bf3f023..d434dd38f91e6 100644 --- a/packages/SystemUI/res-keyguard/values-fi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml @@ -30,7 +30,8 @@ "%s • Ladataan" "%s • Ladataan nopeasti" "%s • Ladataan hitaasti" - "%s • Lataus keskeytetty akun suojaamiseksi" + + "Poista lukitus painamalla Valikkoa." "Verkko lukittu" "Ei SIM-korttia" diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml index 71ae6c0961189..252fea4b6b8f9 100644 --- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml @@ -30,7 +30,8 @@ "En recharge : %s" "En recharge rapide : %s" "En recharge lente : %s" - "%s • Charge interrompue pour protéger la pile" + + "Appuyez sur la touche Menu pour déverrouiller l\'appareil." "Réseau verrouillé" "Aucune carte SIM" diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml index b12169aa041a3..e112943ec34a5 100644 --- a/packages/SystemUI/res-keyguard/values-fr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml @@ -30,7 +30,8 @@ "%s • Recharge…" "%s • Recharge rapide…" "%s • Recharge lente" - "%s • Recharge suspendue pour protéger la batterie" + + "Appuyez sur \"Menu\" pour déverrouiller le clavier." "Réseau verrouillé" "Pas de carte SIM" diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml index 712df2395ef87..fad23f8097f8c 100644 --- a/packages/SystemUI/res-keyguard/values-gl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml @@ -30,7 +30,8 @@ "%s • Cargando" "%s • Cargando rapidamente" "%s • Cargando lentamente" - "%s • Carga en pausa para protexer a batería" + + "Preme Menú para desbloquear." "Bloqueada pola rede" "Sen tarxeta SIM" diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml index a9d110349b358..f85a6c30b6953 100644 --- a/packages/SystemUI/res-keyguard/values-gu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml @@ -30,7 +30,8 @@ "%s • ચાર્જિંગ" "%s • ઝડપથી ચાર્જિંગ" "%s • ધીમેથી ચાર્જિંગ" - "%s • બૅટરીની સુરક્ષા માટે ચાર્જિંગ થોભાવ્યું છે" + + "અનલૉક કરવા માટે મેનૂ દબાવો." "નેટવર્ક લૉક થયું" "કોઈ સિમ કાર્ડ નથી" diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml index 25f8278aebc90..879bab501b240 100644 --- a/packages/SystemUI/res-keyguard/values-hi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml @@ -30,7 +30,8 @@ "%s • चार्ज हो रहा है" "%s • तेज़ चार्ज हो रहा है" "%s • धीरे चार्ज हो रहा है" - "%s • बैटरी लाइफ़ को बढ़ाने के लिए, चार्जिंग रोक दी गई है" + + "लॉक खोलने के लिए मेन्यू दबाएं." "नेटवर्क लॉक किया हुआ है" "कोई सिम कार्ड नहीं है" diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml index 3fb8dbb996946..99fd8cb9f73cd 100644 --- a/packages/SystemUI/res-keyguard/values-hr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml @@ -30,7 +30,8 @@ "%s • punjenje" "%s • brzo punjenje" "%s • sporo punjenje" - "%s • Punjenje je pauzirano radi zaštite baterije" + + "Pritisnite Izbornik da biste otključali." "Mreža je zaključana" "Nema SIM kartice" diff --git a/packages/SystemUI/res-keyguard/values-hu/strings.xml b/packages/SystemUI/res-keyguard/values-hu/strings.xml index b4b57c6d84a18..070454521c456 100644 --- a/packages/SystemUI/res-keyguard/values-hu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hu/strings.xml @@ -30,7 +30,8 @@ "%s • Töltés" "%s • Gyors töltés" "%s • Lassú töltés" - "%s • Töltés szüneteltetve az akkumulátor védelme érdekében" + + "A feloldáshoz nyomja meg a Menü gombot." "Hálózat zárolva" "Nincs SIM-kártya" diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml index 8e58f0634614a..ddbb54ea57612 100644 --- a/packages/SystemUI/res-keyguard/values-hy/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml @@ -30,7 +30,8 @@ "%s • Լիցքավորում" "%s • Արագ լիցքավորում" "%s • Դանդաղ լիցքավորում" - "%s • Լիցքավորումը դադարեցվել է մարտկոցը պաշտպանելու համար" + + "Ապակողպելու համար սեղմեք Ընտրացանկը:" "Ցանցը կողպված է" "SIM քարտ չկա" diff --git a/packages/SystemUI/res-keyguard/values-in/strings.xml b/packages/SystemUI/res-keyguard/values-in/strings.xml index 12f96739071cf..bf1b86c835d7c 100644 --- a/packages/SystemUI/res-keyguard/values-in/strings.xml +++ b/packages/SystemUI/res-keyguard/values-in/strings.xml @@ -30,7 +30,8 @@ "%s • Mengisi daya" "%s • Mengisi daya dengan cepat" "%s • Mengisi daya dengan lambat" - "%s • Pengisian daya dijeda untuk melindungi baterai" + + "Tekan Menu untuk membuka kunci." "Jaringan terkunci" "Tidak ada kartu SIM" diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml index fd654a34d2cec..a6f6f7db31431 100644 --- a/packages/SystemUI/res-keyguard/values-is/strings.xml +++ b/packages/SystemUI/res-keyguard/values-is/strings.xml @@ -30,7 +30,8 @@ "%s • Í hleðslu" "%s • Hröð hleðsla" "%s • Hæg hleðsla" - "%s • Hlé gert á hleðslu til að vernda rafhlöðuna" + + "Ýttu á valmyndarhnappinn til að taka úr lás." "Net læst" "Ekkert SIM-kort" diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml index cacd216f01f9d..3b9349501d6d7 100644 --- a/packages/SystemUI/res-keyguard/values-it/strings.xml +++ b/packages/SystemUI/res-keyguard/values-it/strings.xml @@ -30,7 +30,8 @@ "%s • In carica" "%s • Ricarica veloce" "%s • Ricarica lenta" - "%s • Ricarica in pausa per proteggere la batteria" + + "Premi Menu per sbloccare." "Rete bloccata" "Nessuna SIM" diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml index 0879ead82c6d4..fbb42a675b1ca 100644 --- a/packages/SystemUI/res-keyguard/values-iw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml @@ -30,7 +30,8 @@ "%s • בטעינה" "%s • בטעינה מהירה" "%s • בטעינה איטית" - "%s • הטעינה הושהתה כדי להגן על הסוללה" + + "יש ללחוץ על \'תפריט\' כדי לבטל את הנעילה." "הרשת נעולה" "‏אין כרטיס SIM" diff --git a/packages/SystemUI/res-keyguard/values-ja/strings.xml b/packages/SystemUI/res-keyguard/values-ja/strings.xml index e2580a56a90fe..4d3a4e0a1ce88 100644 --- a/packages/SystemUI/res-keyguard/values-ja/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ja/strings.xml @@ -30,7 +30,8 @@ "%s • 充電中" "%s • 急速充電中" "%s • 低速充電中" - "%s • バッテリーを保護するために充電を一時停止しています" + + "メニューからロックを解除できます。" "ネットワークがロックされました" "SIM カードなし" diff --git a/packages/SystemUI/res-keyguard/values-ka/strings.xml b/packages/SystemUI/res-keyguard/values-ka/strings.xml index 7ead1a90c90f1..02d193583ab2c 100644 --- a/packages/SystemUI/res-keyguard/values-ka/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ka/strings.xml @@ -30,7 +30,8 @@ "%s • იტენება" "%s • სწრაფად იტენება" "%s • ნელა იტენება" - "%s • დატენვა დაპაუზებულია ბატარეის დასაცავად" + + "განსაბლოკად დააჭირეთ მენიუს." "ქსელი ჩაკეტილია" "SIM ბარ. არაა" diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml index 0d58a67fe294c..612430c6d89bc 100644 --- a/packages/SystemUI/res-keyguard/values-kk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml @@ -30,7 +30,8 @@ "%s • Зарядталуда" "%s • Жылдам зарядталуда" "%s • Баяу зарядталуда" - "%s • Батареяны қорғау үшін, зарядтау тоқтатылды" + + "Ашу үшін \"Мәзір\" пернесін басыңыз." "Желі құлыптаулы" "SIM картасы салынбаған" diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml index eaee3979801d4..f4c7bcb3f25f6 100644 --- a/packages/SystemUI/res-keyguard/values-km/strings.xml +++ b/packages/SystemUI/res-keyguard/values-km/strings.xml @@ -30,7 +30,8 @@ "%s • កំពុង​សាកថ្ម" "%s • កំពុង​សាកថ្មយ៉ាង​ឆាប់រហ័ស" "%s • កំពុង​សាកថ្មយឺត" - "%s • បានផ្អាក​ការសាកថ្ម​ ដើម្បីការពារ​ថ្ម" + + "ចុចម៉ឺនុយ ​ដើម្បី​ដោះ​សោ។" "បណ្ដាញ​ជាប់​សោ" "គ្មាន​ស៊ីម​កាត​ទេ" diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml index 8090c41ea062e..ee63b4bc92f33 100644 --- a/packages/SystemUI/res-keyguard/values-kn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml @@ -30,7 +30,8 @@ "%s • ಚಾರ್ಜ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ" "%s • ವೇಗವಾಗಿ ಚಾರ್ಜ್‌ಮಾಡಲಾಗುತ್ತಿದೆ" "%s • ನಿಧಾನವಾಗಿ ಚಾರ್ಜ್ ಮಾಡಲಾಗುತ್ತಿದೆ" - "%s • ಬ್ಯಾಟರಿಯನ್ನು ರಕ್ಷಿಸಲು ಚಾರ್ಜಿಂಗ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ" + + "ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಮೆನು ಒತ್ತಿರಿ." "ನೆಟ್‌ವರ್ಕ್ ಲಾಕ್ ಆಗಿದೆ" "ಸಿಮ್‌ ಕಾರ್ಡ್ ಇಲ್ಲ" diff --git a/packages/SystemUI/res-keyguard/values-ko/strings.xml b/packages/SystemUI/res-keyguard/values-ko/strings.xml index acb892be4c711..e284edc82b8b6 100644 --- a/packages/SystemUI/res-keyguard/values-ko/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ko/strings.xml @@ -30,7 +30,8 @@ "%s • 충전 중" "%s • 고속 충전 중" "%s • 저속 충전 중" - "%s • 배터리 보호를 위해 충전이 일시중지됨" + + "잠금 해제하려면 메뉴를 누르세요." "네트워크 잠김" "SIM 카드 없음" diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml index 084be7a81e993..61e1aac0f6817 100644 --- a/packages/SystemUI/res-keyguard/values-ky/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml @@ -30,7 +30,8 @@ "%s • Кубатталууда" "%s • Тез кубатталууда" "%s • Жай кубатталууда" - "%s • Батареяны коргоо үчүн кубаттоо тындырылды" + + "Кулпуну ачуу үчүн Менюну басыңыз." "Тармак кулпуланган" "SIM карта жок" diff --git a/packages/SystemUI/res-keyguard/values-lo/strings.xml b/packages/SystemUI/res-keyguard/values-lo/strings.xml index 4cc86c690891e..d40fa7fd133d1 100644 --- a/packages/SystemUI/res-keyguard/values-lo/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lo/strings.xml @@ -30,7 +30,8 @@ "%s • ກຳລັງສາກ" "%s • ກຳລັງສາກແບບດ່ວນ" "%s • ກຳລັງສາກແບບຊ້າ" - "%s • ຢຸດການສາກໄວ້ຊົ່ວຄາວເພື່ອປົກປ້ອງແບັດເຕີຣີແລ້ວ" + + "ກົດ \"ເມນູ\" ເພື່ອປົດລັອກ." "ເຄືອຂ່າຍຖືກລັອກ" "ບໍ່ມີຊິມກາດ" diff --git a/packages/SystemUI/res-keyguard/values-lt/strings.xml b/packages/SystemUI/res-keyguard/values-lt/strings.xml index 1e31248a0708b..9ae5462c1c648 100644 --- a/packages/SystemUI/res-keyguard/values-lt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lt/strings.xml @@ -30,7 +30,8 @@ "%s • Įkraunama" "%s • Greitai įkraunama" "%s • Lėtai įkraunama" - "%s • Įkrovimas pristabdytas siekiant apsaugoti akumuliatorių" + + "Paspauskite meniu, jei norite atrakinti." "Tinklas užrakintas" "Nėra SIM kortelės" diff --git a/packages/SystemUI/res-keyguard/values-lv/strings.xml b/packages/SystemUI/res-keyguard/values-lv/strings.xml index c7023a6a51b12..1e59a1ed94213 100644 --- a/packages/SystemUI/res-keyguard/values-lv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lv/strings.xml @@ -30,7 +30,8 @@ "%s • Notiek uzlāde" "%s • Notiek ātrā uzlāde" "%s • Notiek lēnā uzlāde" - "%s • Uzlāde apturēta, lai saudzētu akumulatoru" + + "Lai atbloķētu, nospiediet izvēlnes ikonu." "Tīkls ir bloķēts." "Nav SIM kartes." diff --git a/packages/SystemUI/res-keyguard/values-mk/strings.xml b/packages/SystemUI/res-keyguard/values-mk/strings.xml index 625cecfebfa9a..4f74412080d3f 100644 --- a/packages/SystemUI/res-keyguard/values-mk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mk/strings.xml @@ -30,7 +30,8 @@ "%s • Се полни" "%s • Брзо полнење" "%s • Бавно полнење" - "%s • Полнењето е паузирано за да се заштити батеријата" + + "Притиснете „Мени“ за отклучување." "Мрежата е заклучена" "Нема SIM-картичка" diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index da54161196797..f8098fbcc38a7 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -30,7 +30,8 @@ "%s • ചാർജ് ചെയ്യുന്നു" "%s • വേഗത്തിൽ ചാർജ് ചെയ്യുന്നു" "%s • പതുക്കെ ചാർജ് ചെയ്യുന്നു" - "%s • ബാറ്ററി പരിരക്ഷിക്കുന്നതിന്, ചാർജ് ചെയ്യൽ താൽക്കാലികമായി നിർത്തി" + + "അൺലോക്കുചെയ്യാൻ മെനു അമർത്തുക." "നെറ്റ്‌വർക്ക് ലോക്കുചെയ്‌തു" "സിം കാർഡില്ല" diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml index 9cf764cacf139..e4f8847501ab8 100644 --- a/packages/SystemUI/res-keyguard/values-mn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml @@ -30,7 +30,8 @@ "%s • Цэнэглэж байна" "%s • Хурдан цэнэглэж байна" "%s • Удаан цэнэглэж байна" - "%s • Батарейг хамгаалахын тулд цэнэглэхийг түр зогсоосон" + + "Түгжээг тайлах бол цэсийг дарна уу." "Сүлжээ түгжигдсэн" "SIM карт алга" diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml index 635a12b11ea9f..c7d4877411fb9 100644 --- a/packages/SystemUI/res-keyguard/values-mr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml @@ -30,7 +30,8 @@ "%s • चार्ज होत आहे" "%s • वेगाने चार्ज होत आहे" "%s • सावकाश चार्ज होत आहे" - "%s • बॅटरीचे संरक्षण करण्यासाठी चार्जिंग थांबवले" + + "अनलॉक करण्यासाठी मेनू दाबा." "नेटवर्क लॉक केले" "सिम कार्ड नाही" diff --git a/packages/SystemUI/res-keyguard/values-ms/strings.xml b/packages/SystemUI/res-keyguard/values-ms/strings.xml index 06e7d86ee61e7..70121458f15fd 100644 --- a/packages/SystemUI/res-keyguard/values-ms/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ms/strings.xml @@ -30,7 +30,8 @@ "%s • Mengecas" "%s • Mengecas dengan cepat" "%s • Mengecas dengan perlahan" - "%s • Pengecasan dijeda untuk melindungi bateri" + + "Tekan Menu untuk membuka kunci." "Rangkaian dikunci" "Tiada kad SIM" diff --git a/packages/SystemUI/res-keyguard/values-my/strings.xml b/packages/SystemUI/res-keyguard/values-my/strings.xml index ab9a6a0106ef9..7a742cb31fb14 100644 --- a/packages/SystemUI/res-keyguard/values-my/strings.xml +++ b/packages/SystemUI/res-keyguard/values-my/strings.xml @@ -30,7 +30,8 @@ "%s • အားသွင်းနေသည်" "%s • အမြန်အားသွင်းနေသည်" "%s • နှေးကွေးစွာ အားသွင်းနေသည်" - "%s • ဘက်ထရီကာကွယ်ရန် အားသွင်းခြင်း ခဏရပ်ထားသည်" + + "မီနူးကို နှိပ်၍ လော့ခ်ဖွင့်ပါ။" "ကွန်ရက်ကို လော့ခ်ချထားသည်" "ဆင်းမ်ကတ် မရှိပါ" diff --git a/packages/SystemUI/res-keyguard/values-nb/strings.xml b/packages/SystemUI/res-keyguard/values-nb/strings.xml index 00f52beb4c960..4e0ba4462d045 100644 --- a/packages/SystemUI/res-keyguard/values-nb/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nb/strings.xml @@ -30,7 +30,8 @@ "%s • Lader" "%s • Lader raskt" "%s • Lader sakte" - "%s • Ladingen er på pause for å beskytte batteriet" + + "Trykk på menyknappen for å låse opp." "Nettverket er låst" "SIM-kort mangler" diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml index aafd356a1284f..72d2c5bee1fd1 100644 --- a/packages/SystemUI/res-keyguard/values-ne/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml @@ -30,7 +30,8 @@ "%s • चार्ज गरिँदै" "%s • द्रुत गतिमा चार्ज गरिँदै छ" "%s • मन्द गतिमा चार्ज गरिँदै" - "%s • ब्याट्री जोगाउन चार्ज गर्ने प्रक्रिया पज गरिएको छ" + + "अनलक गर्न मेनु थिच्नुहोस्।" "नेटवर्क लक भएको छ" "SIM कार्ड छैन" diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml index 8004afdbf8c8a..141d735cfee89 100644 --- a/packages/SystemUI/res-keyguard/values-nl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml @@ -30,7 +30,8 @@ "%s • Opladen" "%s • Snel opladen" "%s • Langzaam opladen" - "%s • Opladen onderbroken om de batterij te beschermen" + + "Druk op Menu om te ontgrendelen." "Netwerk vergrendeld" "Geen simkaart" diff --git a/packages/SystemUI/res-keyguard/values-or/strings.xml b/packages/SystemUI/res-keyguard/values-or/strings.xml index d776e05f51133..dc17e3608d1e7 100644 --- a/packages/SystemUI/res-keyguard/values-or/strings.xml +++ b/packages/SystemUI/res-keyguard/values-or/strings.xml @@ -30,7 +30,8 @@ "%s • ଚାର୍ଜ ହେଉଛି" "%s • ଦ୍ରୁତ ଭାବେ ଚାର୍ଜ ହେଉଛି" "%s • ଧୀରେ ଚାର୍ଜ ହେଉଛି" - "%s • ବେଟେରୀକୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ ଚାର୍ଜିଂକୁ ବିରତ କରାଯାଇଛି" + + "ଅନଲକ୍‌ କରିବା ପାଇଁ ମେନୁକୁ ଦବାନ୍ତୁ।" "ନେଟୱର୍କକୁ ଲକ୍‌ କରାଯାଇଛି" "କୌଣସି SIM କାର୍ଡ ନାହିଁ" diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml index 01b3874110de5..3e05970398702 100644 --- a/packages/SystemUI/res-keyguard/values-pa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml @@ -30,7 +30,8 @@ "%s • ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ" "%s • ਤੇਜ਼ੀ ਨਾਲ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ" "%s • ਹੌਲੀ-ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ" - "%s • ਬੈਟਰੀ ਦੀ ਸੁਰੱਖਿਆ ਲਈ ਚਾਰਜਿੰਗ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ" + + "ਅਣਲਾਕ ਕਰਨ ਲਈ \"ਮੀਨੂ\" ਦਬਾਓ।" "ਨੈੱਟਵਰਕ ਲਾਕ ਕੀਤਾ ਗਿਆ" "ਕੋਈ ਸਿਮ ਕਾਰਡ ਨਹੀਂ" diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml index 70ceb3d96c2a2..4d3fe58752059 100644 --- a/packages/SystemUI/res-keyguard/values-pl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml @@ -30,7 +30,8 @@ "%s • Ładowanie" "%s • Szybkie ładowanie" "%s • Wolne ładowanie" - "%s • Wstrzymano ładowanie, aby chronić baterię" + + "Naciśnij Menu, aby odblokować." "Sieć zablokowana" "Brak karty SIM" diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml index 832858539c699..f61ee04920519 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml @@ -30,7 +30,8 @@ "%s • Carregando" "%s • Carregando rapidamente" "%s • Carregando lentamente" - "%s • Carregamento pausado para proteger a bateria" + + "Pressione Menu para desbloquear." "Rede bloqueada" "Sem chip" diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml index 37d034e1d066d..e8e21fa1e0e9b 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml @@ -30,7 +30,8 @@ "%s • A carregar…" "%s • A carregar rapidamente…" "%s • A carregar lentamente…" - "%s • Carregamento pausado para proteger a bateria" + + "Prima Menu para desbloquear." "Rede bloqueada" "Nenhum cartão SIM" diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml index 832858539c699..f61ee04920519 100644 --- a/packages/SystemUI/res-keyguard/values-pt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml @@ -30,7 +30,8 @@ "%s • Carregando" "%s • Carregando rapidamente" "%s • Carregando lentamente" - "%s • Carregamento pausado para proteger a bateria" + + "Pressione Menu para desbloquear." "Rede bloqueada" "Sem chip" diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml index de39b28885f26..073f5ed46ea61 100644 --- a/packages/SystemUI/res-keyguard/values-ro/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml @@ -30,7 +30,8 @@ "%s • Se încarcă" "%s • Se încarcă rapid" "%s • Se încarcă lent" - "%s • Încărcarea a fost întreruptă pentru a proteja bateria" + + "Apasă pe Meniu pentru a debloca." "Rețea blocată" "Niciun card SIM" diff --git a/packages/SystemUI/res-keyguard/values-ru/strings.xml b/packages/SystemUI/res-keyguard/values-ru/strings.xml index c27efa32168ed..4cd4174de89ef 100644 --- a/packages/SystemUI/res-keyguard/values-ru/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ru/strings.xml @@ -30,7 +30,8 @@ "Идет зарядка (%s)" "Идет быстрая зарядка (%s)" "Идет медленная зарядка (%s)" - "%s • Зарядка приостановлена для защиты батареи" + + "Для разблокировки нажмите \"Меню\"." "Сеть заблокирована" "Нет SIM-карты." diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml index eb742d378f154..6a9676f292f0f 100644 --- a/packages/SystemUI/res-keyguard/values-si/strings.xml +++ b/packages/SystemUI/res-keyguard/values-si/strings.xml @@ -30,7 +30,8 @@ "%s • ආරෝපණය වෙමින්" "%s • වේගයෙන් ආරෝපණය වෙමින්" "%s • සෙමින් ආරෝපණය වෙමින්" - "%s • බැටරිය ආරක්ෂා කිරීම සඳහා ආරෝපණය විරාම කරන ලදි" + + "අගුලු හැරීමට මෙනුව ඔබන්න." "ජාලය අගුළු දමා ඇත" "SIM පත නැත" diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml index 15410769ce3b9..6076198797c54 100644 --- a/packages/SystemUI/res-keyguard/values-sk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml @@ -30,7 +30,8 @@ "%s • Nabíja sa" "%s • Nabíja sa rýchlo" "%s • Nabíja sa pomaly" - "%s • Nabíjanie bolo pozastavené, aby sa chránila batéria" + + "Odomknete stlačením tlačidla ponuky." "Sieť je zablokovaná" "Žiadna SIM karta" diff --git a/packages/SystemUI/res-keyguard/values-sl/strings.xml b/packages/SystemUI/res-keyguard/values-sl/strings.xml index ce3af0406b8f1..9269bc76b3854 100644 --- a/packages/SystemUI/res-keyguard/values-sl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sl/strings.xml @@ -30,7 +30,8 @@ "%s • polnjenje" "%s • hitro polnjenje" "%s • počasno polnjenje" - "%s • Polnjenje je začasno zaustavljeno zaradi zaščite baterije" + + "Če želite odkleniti, pritisnite meni." "Omrežje je zaklenjeno" "Ni kartice SIM" diff --git a/packages/SystemUI/res-keyguard/values-sq/strings.xml b/packages/SystemUI/res-keyguard/values-sq/strings.xml index 93a028adaee21..9943955436966 100644 --- a/packages/SystemUI/res-keyguard/values-sq/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sq/strings.xml @@ -30,7 +30,8 @@ "%s • Po karikohet" "%s • Po karikohet me shpejtësi" "%s • Po karikohet ngadalë" - "%s • Karikimi u vendos në pauzë për të mbrojtur baterinë" + + "Shtyp \"Meny\" për të shkyçur." "Rrjeti është i kyçur" "Nuk ka kartë SIM" diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml index a1004c407ba15..01bd9078cac41 100644 --- a/packages/SystemUI/res-keyguard/values-sr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml @@ -30,7 +30,8 @@ "%s • Пуни се" "%s • Брзо се пуни" "%s • Споро се пуни" - "%s • Пуњење је паузирано да би се заштитила батерија" + + "Притисните Мени да бисте откључали." "Мрежа је закључана" "Нема SIM картице" diff --git a/packages/SystemUI/res-keyguard/values-sv/strings.xml b/packages/SystemUI/res-keyguard/values-sv/strings.xml index c4d14896bd3a0..ebba2e18cfe6c 100644 --- a/packages/SystemUI/res-keyguard/values-sv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sv/strings.xml @@ -30,7 +30,8 @@ "%s • Laddas" "%s • Laddas snabbt" "%s • Laddas långsamt" - "%s • Laddningen har pausats för att skydda batteriet" + + "Lås upp genom att trycka på Meny." "Nätverk låst" "Inget SIM-kort" diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml index 0756944dd2bfb..55f49347398c9 100644 --- a/packages/SystemUI/res-keyguard/values-sw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml @@ -30,7 +30,8 @@ "%s • Inachaji" "%s • Inachaji kwa kasi" "%s • Inachaji pole pole" - "%s • Imesitisha kuchaji ili kulinda betri" + + "Bonyeza Menyu ili kufungua." "Mtandao umefungwa" "Hakuna SIM kadi" diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml index 962cd76cf1e58..7a06971487017 100644 --- a/packages/SystemUI/res-keyguard/values-ta/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml @@ -30,7 +30,8 @@ "%s • சார்ஜாகிறது" "%s • வேகமாகச் சார்ஜாகிறது" "%s • மெதுவாகச் சார்ஜாகிறது" - "%s • பேட்டரியைப் பாதுகாக்க சார்ஜிங் நிறுத்தப்பட்டுள்ளது" + + "அன்லாக் செய்ய மெனுவை அழுத்தவும்." "நெட்வொர்க் பூட்டப்பட்டது" "சிம் கார்டு இல்லை" diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml index 07b12d4714687..20ca4b0013814 100644 --- a/packages/SystemUI/res-keyguard/values-te/strings.xml +++ b/packages/SystemUI/res-keyguard/values-te/strings.xml @@ -30,7 +30,8 @@ "%s • ఛార్జ్ అవుతోంది" "%s • వేగంగా ఛార్జ్ అవుతోంది" "%s • నెమ్మదిగా ఛార్జ్ అవుతోంది" - "%s • బ్యాటరీని రక్షించడానికి ఛార్జింగ్ పాజ్ చేయబడింది" + + "అన్‌లాక్ చేయడానికి మెనూను నొక్కండి." "నెట్‌వర్క్ లాక్ చేయబడింది" "SIM కార్డ్ లేదు" diff --git a/packages/SystemUI/res-keyguard/values-th/strings.xml b/packages/SystemUI/res-keyguard/values-th/strings.xml index 205075a337c5a..905dea649818d 100644 --- a/packages/SystemUI/res-keyguard/values-th/strings.xml +++ b/packages/SystemUI/res-keyguard/values-th/strings.xml @@ -30,7 +30,8 @@ "%s • กำลังชาร์จ" "%s • กำลังชาร์จอย่างเร็ว" "%s • กำลังชาร์จอย่างช้าๆ" - "%s • หยุดชาร์จชั่วคราวเพื่อยืดอายุแบตเตอรี่" + + "กด \"เมนู\" เพื่อปลดล็อก" "เครือข่ายถูกล็อก" "ไม่มีซิมการ์ด" diff --git a/packages/SystemUI/res-keyguard/values-tl/strings.xml b/packages/SystemUI/res-keyguard/values-tl/strings.xml index fd583528ead1b..3cd1be8df21a7 100644 --- a/packages/SystemUI/res-keyguard/values-tl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-tl/strings.xml @@ -30,7 +30,8 @@ "%s • Nagcha-charge" "%s • Mabilis na nagcha-charge" "%s • Mabagal na nagcha-charge" - "%s • Na-pause ang pag-charge para protektahan ang baterya" + + "Pindutin ang Menu upang i-unlock." "Naka-lock ang network" "Walang SIM card" diff --git a/packages/SystemUI/res-keyguard/values-tr/strings.xml b/packages/SystemUI/res-keyguard/values-tr/strings.xml index 7d718e9110322..81a49cbb126da 100644 --- a/packages/SystemUI/res-keyguard/values-tr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-tr/strings.xml @@ -30,7 +30,8 @@ "%s • Şarj oluyor" "%s • Hızlı şarj oluyor" "%s • Yavaş şarj oluyor" - "%s • Şarj işlemi, pili korumak için duraklatıldı" + + "Kilidi açmak için Menü\'ye basın." "Ağ kilitli" "SIM kart yok" diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml index 90023823e2645..0c2e8e1423466 100644 --- a/packages/SystemUI/res-keyguard/values-uk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml @@ -30,7 +30,8 @@ "%s • Заряджання" "%s • Швидке заряджання" "%s • Повільне заряджання" - "%s • Для захисту акумулятора заряджання призупинено" + + "Натисніть меню, щоб розблокувати." "Мережу заблоковано" "Немає SIM-карти" diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml index 944507a0ad325..24fa9555aee49 100644 --- a/packages/SystemUI/res-keyguard/values-ur/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml @@ -30,7 +30,8 @@ "%s • چارج ہو رہا ہے" "%s • تیزی سے چارج ہو رہا ہے" "%s • آہستہ چارج ہو رہا ہے" - "%s • بیٹری کی حفاظت کرنے کے لیے چارجنگ کو روک دیا گیا" + + "غیر مقفل کرنے کیلئے مینو دبائیں۔" "نیٹ ورک مقفل ہو گیا" "‏کوئی SIM کارڈ نہیں ہے" diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml index d3e65f59bdab8..7eab4ade5da9f 100644 --- a/packages/SystemUI/res-keyguard/values-uz/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml @@ -30,7 +30,8 @@ "%s • Quvvat olmoqda" "%s • Tezkor quvvat olmoqda" "%s • Sekin quvvat olmoqda" - "%s • Batareyaning ishlash muddatini uzaytirish uchun quvvatlash toʻxtatildi" + + "Qulfdan chiqarish uchun Menyu tugmasini bosing." "Tarmoq qulflangan" "SIM karta solinmagan" diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml index bedb4f63469b1..f52c880db5c5d 100644 --- a/packages/SystemUI/res-keyguard/values-vi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml @@ -30,7 +30,8 @@ "%s • Đang sạc" "%s • Đang sạc nhanh" "%s • Đang sạc chậm" - "%s • Đã tạm dừng sạc để bảo vệ pin" + + "Nhấn vào Menu để mở khóa." "Mạng đã bị khóa" "Không có thẻ SIM" diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml index 2c7d8294cf9ca..c96197542d0e5 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml @@ -30,7 +30,8 @@ "%s • 正在充电" "%s • 正在快速充电" "%s • 正在慢速充电" - "%s • 为保护电池,系统已暂停充电" + + "按“菜单”即可解锁。" "网络已锁定" "没有 SIM 卡" diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml index 4e8c5947c2c7a..eab0974c79609 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml @@ -30,7 +30,8 @@ "%s • 正在充電" "%s • 快速充電中" "%s • 慢速充電中" - "%s • 暫停充電以保護電池" + + "按下 [選單] 即可解鎖。" "網絡已鎖定" "沒有 SIM 卡" diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml index 231b10268c64d..31fffa5803cdc 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml @@ -30,7 +30,8 @@ "%s • 充電中" "%s • 快速充電中" "%s • 慢速充電中" - "%s • 暫停充電以保護電池" + + "按選單鍵解鎖。" "網路已鎖定" "沒有 SIM 卡" diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml index eccaf1370d508..145a8d1b53cc3 100644 --- a/packages/SystemUI/res-keyguard/values-zu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml @@ -30,7 +30,8 @@ "%s • Iyashaja" "%s • Ishaja kaningi" "%s • Ishaja kancane" - "%s • Ukushaja kumiswe okwesikhashana ukuvikela ibhethri" + + "Chofoza Menyu ukuvula." "Inethiwekhi ivaliwe" "Alikho ikhadi le-SIM." From 116103abfabdfcc12ce6481045721f51083dfa22 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 19 Dec 2022 01:05:27 -0800 Subject: [PATCH 17/36] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I2ee1de8478f84c1cde321ab03a17617647035aa7 --- packages/SettingsLib/HelpUtils/res/values-b+sr+Latn/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SettingsLib/HelpUtils/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/HelpUtils/res/values-b+sr+Latn/strings.xml index a917a7651b95b..ee550bc1acca8 100644 --- a/packages/SettingsLib/HelpUtils/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/HelpUtils/res/values-b+sr+Latn/strings.xml @@ -17,5 +17,5 @@ - "Pomoć i povratne informacije" + "Помоћ и повратне информације" From d3d9e965727e10139412dd4f2f420781ebfc0e95 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 19 Dec 2022 01:06:28 -0800 Subject: [PATCH 18/36] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ia82593fd3031192c5fff90122ba483f8e889cabe --- .../RestrictedLockUtils/res/values-b+sr+Latn/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-b+sr+Latn/strings.xml index e09afbfbbd634..9d006a7ef4ef7 100644 --- a/packages/SettingsLib/RestrictedLockUtils/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/RestrictedLockUtils/res/values-b+sr+Latn/strings.xml @@ -17,6 +17,6 @@ - "Administrator je omogućio" - "Administrator je onemogućio" + "Администратор је омогућио" + "Администратор је онемогућио" From b469f1f2c782226e5b9f621e4eb214dfc2a969cf Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 19 Dec 2022 01:07:30 -0800 Subject: [PATCH 19/36] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ib455a0ae671f9e5da7bd26c6301165392fe5b06c --- .../SettingsLib/SearchWidget/res/values-b+sr+Latn/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SettingsLib/SearchWidget/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/SearchWidget/res/values-b+sr+Latn/strings.xml index 112b2ea6f2194..81a7baf3e81a7 100644 --- a/packages/SettingsLib/SearchWidget/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/SearchWidget/res/values-b+sr+Latn/strings.xml @@ -17,5 +17,5 @@ - "Pretražite podešavanja" + "Претражите подешавања" From 48ed0a4481eca27e79e5c5453d8fcebb90652fbd Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 19 Dec 2022 01:09:58 -0800 Subject: [PATCH 20/36] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ia5d48e3466f616e34a68d76dbb23206a1195122c --- .../SettingsLib/res/values-af/strings.xml | 6 +- .../SettingsLib/res/values-am/strings.xml | 6 +- .../SettingsLib/res/values-ar/strings.xml | 6 +- .../SettingsLib/res/values-as/strings.xml | 6 +- .../SettingsLib/res/values-az/strings.xml | 6 +- .../res/values-b+sr+Latn/arrays.xml | 274 ++-- .../res/values-b+sr+Latn/strings.xml | 1196 +++++++++-------- .../SettingsLib/res/values-be/strings.xml | 6 +- .../SettingsLib/res/values-bg/strings.xml | 6 +- .../SettingsLib/res/values-bn/strings.xml | 6 +- .../SettingsLib/res/values-bs/strings.xml | 6 +- .../SettingsLib/res/values-ca/strings.xml | 6 +- .../SettingsLib/res/values-cs/strings.xml | 6 +- .../SettingsLib/res/values-da/strings.xml | 6 +- .../SettingsLib/res/values-de/strings.xml | 6 +- .../SettingsLib/res/values-el/strings.xml | 6 +- .../SettingsLib/res/values-en-rAU/strings.xml | 6 +- .../SettingsLib/res/values-en-rCA/strings.xml | 4 +- .../SettingsLib/res/values-en-rGB/strings.xml | 6 +- .../SettingsLib/res/values-en-rIN/strings.xml | 6 +- .../SettingsLib/res/values-en-rXC/strings.xml | 4 +- .../SettingsLib/res/values-es-rUS/strings.xml | 6 +- .../SettingsLib/res/values-es/strings.xml | 6 +- .../SettingsLib/res/values-et/strings.xml | 6 +- .../SettingsLib/res/values-eu/strings.xml | 6 +- .../SettingsLib/res/values-fa/strings.xml | 6 +- .../SettingsLib/res/values-fi/strings.xml | 6 +- .../SettingsLib/res/values-fr-rCA/strings.xml | 6 +- .../SettingsLib/res/values-fr/strings.xml | 6 +- .../SettingsLib/res/values-gl/strings.xml | 6 +- .../SettingsLib/res/values-gu/strings.xml | 6 +- .../SettingsLib/res/values-hi/strings.xml | 6 +- .../SettingsLib/res/values-hr/strings.xml | 6 +- .../SettingsLib/res/values-hu/strings.xml | 6 +- .../SettingsLib/res/values-hy/strings.xml | 6 +- .../SettingsLib/res/values-in/strings.xml | 6 +- .../SettingsLib/res/values-is/strings.xml | 6 +- .../SettingsLib/res/values-it/strings.xml | 6 +- .../SettingsLib/res/values-iw/strings.xml | 6 +- .../SettingsLib/res/values-ja/strings.xml | 6 +- .../SettingsLib/res/values-ka/strings.xml | 6 +- .../SettingsLib/res/values-kk/strings.xml | 6 +- .../SettingsLib/res/values-km/strings.xml | 6 +- .../SettingsLib/res/values-kn/strings.xml | 6 +- .../SettingsLib/res/values-ko/strings.xml | 6 +- .../SettingsLib/res/values-ky/strings.xml | 6 +- .../SettingsLib/res/values-lo/strings.xml | 6 +- .../SettingsLib/res/values-lt/strings.xml | 6 +- .../SettingsLib/res/values-lv/strings.xml | 6 +- .../SettingsLib/res/values-mk/strings.xml | 6 +- .../SettingsLib/res/values-ml/strings.xml | 6 +- .../SettingsLib/res/values-mn/strings.xml | 6 +- .../SettingsLib/res/values-mr/strings.xml | 6 +- .../SettingsLib/res/values-ms/strings.xml | 6 +- .../SettingsLib/res/values-my/strings.xml | 6 +- .../SettingsLib/res/values-nb/strings.xml | 6 +- .../SettingsLib/res/values-ne/strings.xml | 6 +- .../SettingsLib/res/values-nl/strings.xml | 6 +- .../SettingsLib/res/values-or/strings.xml | 6 +- .../SettingsLib/res/values-pa/strings.xml | 6 +- .../SettingsLib/res/values-pl/strings.xml | 6 +- .../SettingsLib/res/values-pt-rBR/strings.xml | 6 +- .../SettingsLib/res/values-pt-rPT/strings.xml | 6 +- .../SettingsLib/res/values-pt/strings.xml | 6 +- .../SettingsLib/res/values-ro/strings.xml | 6 +- .../SettingsLib/res/values-ru/strings.xml | 6 +- .../SettingsLib/res/values-si/strings.xml | 6 +- .../SettingsLib/res/values-sk/strings.xml | 6 +- .../SettingsLib/res/values-sl/strings.xml | 6 +- .../SettingsLib/res/values-sq/strings.xml | 6 +- .../SettingsLib/res/values-sr/strings.xml | 6 +- .../SettingsLib/res/values-sv/strings.xml | 6 +- .../SettingsLib/res/values-sw/strings.xml | 6 +- .../SettingsLib/res/values-ta/strings.xml | 6 +- .../SettingsLib/res/values-te/strings.xml | 10 +- .../SettingsLib/res/values-th/strings.xml | 6 +- .../SettingsLib/res/values-tl/strings.xml | 6 +- .../SettingsLib/res/values-tr/strings.xml | 6 +- .../SettingsLib/res/values-uk/strings.xml | 6 +- .../SettingsLib/res/values-ur/strings.xml | 6 +- .../SettingsLib/res/values-uz/strings.xml | 6 +- .../SettingsLib/res/values-vi/strings.xml | 6 +- .../SettingsLib/res/values-zh-rCN/strings.xml | 6 +- .../SettingsLib/res/values-zh-rHK/strings.xml | 6 +- .../SettingsLib/res/values-zh-rTW/strings.xml | 6 +- .../SettingsLib/res/values-zu/strings.xml | 6 +- 86 files changed, 1070 insertions(+), 904 deletions(-) diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index dce7a8501a82d..d11cd9e351e76 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s oor tot vol" "%1$s – %2$s oor tot vol" - "%1$s - Laaiproses is onderbreek" - "%1$s – Laai tot %2$s" + + + + "Onbekend" "Laai" "Laai tans vinnig" diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index 734cd1228f4c0..ec3942e24d027 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "እስኪሞላ ድረስ %1$s ይቀራል" "%1$s - እስኪሞላ ድረስ %2$s ይቀራል" - "%1$s - ኃይል መሙላት ባለበት ቆሟል" - "%1$s - እስከ %2$s ድረስ ኃይል መሙላት" + + + + "ያልታወቀ" "ኃይል በመሙላት ላይ" "ኃይል በፍጥነት በመሙላት ላይ" diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 0ec610da85f51..f451091705f27 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "يتبقّى %1$s حتى اكتمال شحن البطارية." "%1$s - يتبقّى %2$s حتى اكتمال شحن البطارية." - "%1$s - الشحن متوقّف مؤقتًا" - "%1$s - الشحن حتى %2$s" + + + + "غير معروف" "جارٍ الشحن" "جارٍ الشحن سريعًا" diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml index 1598fd1e37c79..27ea8cbccbdd8 100644 --- a/packages/SettingsLib/res/values-as/strings.xml +++ b/packages/SettingsLib/res/values-as/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "সম্পূৰ্ণ হ’বলৈ %1$s বাকী আছে" "সম্পূৰ্ণ হ’বলৈ %1$s - %2$s বাকী আছে" - "%1$s - চাৰ্জিং পজ কৰা হৈছে" - "%1$s - %2$sলৈ চাৰ্জিং" + + + + "অজ্ঞাত" "চাৰ্জ কৰি থকা হৈছে" "দ্ৰুততাৰে চাৰ্জ হৈছে" diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index e03fd584ac3eb..e167f6ab6a6db 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "Tam şarj edilənədək %1$s qalıb" "%1$s - tam şarj edilənədək %2$s qalıb" - "%1$s - Şarj durdurulub" - "%1$s - %2$s olana qədər şarj edilir" + + + + "Naməlum" "Enerji doldurma" "Sürətlə doldurulur" diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml index 63b08fa929636..a95e47b6b2b09 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml @@ -22,49 +22,49 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - "Skeniranje..." - "Povezivanje…" - "Potvrđuje se autentičnost..." - "Preuzimanje IP adrese..." - "Povezano" - "Obustavljeno" - "Prekidanje veze..." - "Veza je prekinuta" - "Neuspešno" - "Blokirano" - "Privremeno izbegavanje loše veze" + "Скенирање..." + "Повезивање…" + "Потврђује се аутентичност..." + "Преузимање IP адресе..." + "Повезано" + "Обустављено" + "Прекидање везе..." + "Веза је прекинута" + "Неуспешно" + "Блокирано" + "Привремено избегавање лоше везе" - "Skeniranje..." - "Povezivanje sa mrežom %1$s…" - "Proveravanje identiteta mreže %1$s..." - "Dobijanje IP adrese od mreže %1$s…" - "Povezano sa mrežom %1$s" - "Obustavljeno" - "Prekidanje veze sa mrežom %1$s…" - "Veza je prekinuta" - "Neuspešno" - "Blokirano" - "Privremeno izbegavanje loše veze" + "Скенирање..." + "Повезивање са мрежом %1$s…" + "Проверавање идентитета мреже %1$s..." + "Добијање IP адресе од мреже %1$s…" + "Повезано са мрежом %1$s" + "Обустављено" + "Прекидање везе са мрежом %1$s…" + "Веза је прекинута" + "Неуспешно" + "Блокирано" + "Привремено избегавање лоше везе" - "Nikad ne proveravaj" - "Potraži samo DRM sadržaj" - "Uvek proveravaj" + "Никад не проверавај" + "Потражи само DRM садржај" + "Увек проверавај" - "Nikada ne koristi HDCP proveru" - "Koristi HDCP proveru samo za DRM sadržaj" - "Uvek koristi HDCP proveru" + "Никада не користи HDCP проверу" + "Користи HDCP проверу само за DRM садржај" + "Увек користи HDCP проверу" - "Onemogućeno" - "Omogućeno filtrirano" - "Omogućeno" + "Онемогућено" + "Омогућено филтрирано" + "Омогућено" - "AVRCP 1.5 (podrazumevano)" + "AVRCP 1.5 (подразумевано)" "AVRCP 1.3" "AVRCP 1.4" "AVRCP 1.6" @@ -76,7 +76,7 @@ "avrcp16" - "MAP 1.2 (podrazumevano)" + "MAP 1.2 (подразумевано)" "MAP 1.3" "MAP 1.4" @@ -86,81 +86,81 @@ "map14" - "Koristi izbor sistema (podrazumevano)" + "Користи избор система (подразумевано)" "SBC" "AAC" - "Qualcomm® aptX™ audio" - "Qualcomm® aptX™ HD audio" + "Qualcomm® aptX™ аудио" + "Qualcomm® aptX™ HD аудио" "LDAC" "LC3" "Opus" - "Koristi izbor sistema (podrazumevano)" + "Користи избор система (подразумевано)" "SBC" "AAC" - "Qualcomm® aptX™ audio" - "Qualcomm® aptX™ HD audio" + "Qualcomm® aptX™ аудио" + "Qualcomm® aptX™ HD аудио" "LDAC" "LC3" "Opus" - "Koristi izbor sistema (podrazumevano)" + "Користи избор система (подразумевано)" "44,1 kHz" "48,0 kHz" "88,2 kHz" "96,0 kHz" - "Koristi izbor sistema (podrazumevano)" + "Користи избор система (подразумевано)" "44,1 kHz" "48,0 kHz" "88,2 kHz" "96,0 kHz" - "Koristi izbor sistema (podrazumevano)" - "16 bitova po uzorku" - "24 bita po uzorku" - "32 bita po uzorku" + "Користи избор система (подразумевано)" + "16 битова по узорку" + "24 бита по узорку" + "32 бита по узорку" - "Koristi izbor sistema (podrazumevano)" - "16 bitova po uzorku" - "24 bita po uzorku" - "32 bita po uzorku" + "Користи избор система (подразумевано)" + "16 битова по узорку" + "24 бита по узорку" + "32 бита по узорку" - "Koristi izbor sistema (podrazumevano)" - "Mono" - "Stereo" + "Користи избор система (подразумевано)" + "Моно" + "Стерео" - "Koristi izbor sistema (podrazumevano)" - "Mono" - "Stereo" + "Користи избор система (подразумевано)" + "Моно" + "Стерео" - "Optimizovano za kvalitet zvuka (990 kb/s/909 kb/s)" - "Ujednačen kvalitet zvuka i veze (660 kb/s/606 kb/s)" - "Optimizovano za kvalitet veze (330 kb/s/303 kb/s)" - "Najbolje moguće (prilagodljiva brzina prenosa)" + "Оптимизовано за квалитет звука (990 kb/s/909 kb/s)" + "Уједначен квалитет звука и везе (660 kb/s/606 kb/s)" + "Оптимизовано за квалитет везе (330 kb/s/303 kb/s)" + "Најбоље могуће (прилагодљива брзина преноса)" - "Optimizovano za kvalitet zvuka" - "Ujednačen kvalitet zvuka i veze" - "Optimizovano za kvalitet veze" - "Najbolje moguće (prilagodljiva brzina prenosa)" + "Оптимизовано за квалитет звука" + "Уједначен квалитет звука и везе" + "Оптимизовано за квалитет везе" + "Најбоље могуће (прилагодљива брзина преноса)" - ", aktivan" - ", aktivan (medijski)" - ", aktivan (telefon)" + ", активан" + ", активан (медијски)" + ", активан (телефон)" - "Isključeno" + "Искључено" "64 kB" "256 kB" "1 MB" @@ -168,107 +168,107 @@ "8 MB" - "Isključeno" + "Искључено" "64 kB" "256 kB" "1 MB" - "Isključeno" - "64 kB po međumemoriji evidencije" - "256 kB po međumemoriji evidencije" - "1 MB po međumemoriji evidencije" - "4 MB po međumemoriji evidencije" - "8 MB po međumemoriji evidencije" + "Искључено" + "64 kB по међумеморији евиденције" + "256 kB по међумеморији евиденције" + "1 MB по међумеморији евиденције" + "4 MB по међумеморији евиденције" + "8 MB по међумеморији евиденције" - "Isključeno" - "Sve" - "Sve sem radija" - "samo jezgro" + "Искључено" + "Све" + "Све сeм радија" + "само језгро" - "Isključeno" - "Sve međumemorije evidencija" - "Sve osim međumemorija evidencija za radio" - "samo međumemorija evidencije jezgra" + "Искључено" + "Све међумеморије евиденција" + "Све осим међумеморија евиденција за радио" + "само међумеморија евиденције језгра" - "Animacija je isključena" - "Razmera animacije 0,5x" - "Razmera animacije 1x" - "Razmera animacije 1,5x" - "Razmera animacije 2x" - "Razmera animacije 5x" - "Razmera animacije 10x" + "Анимација је искључена" + "Размера анимације 0,5x" + "Размера анимације 1x" + "Размера анимације 1,5x" + "Размера анимације 2x" + "Размера анимације 5x" + "Размера анимације 10x" - "Animacija je isključena" - "Razmera animacije 0,5x" - "Razmera animacije 1x" - "Razmera animacije 1,5x" - "Razmera animacije 2x" - "Razmera animacije 5x" - "Razmera animacije 10x" + "Анимација је искључена" + "Размера анимације 0,5x" + "Размера анимације 1x" + "Размера анимације 1,5x" + "Размера анимације 2x" + "Размера анимације 5x" + "Размера анимације 10x" - "Animacija je isključena" - "Razmera animacije 0,5x" - "Razmera animacije 1x" - "Razmera animacije 1,5x" - "Razmera animacije 2x" - "Razmera animacije 5x" - "Razmera animacije 10x" + "Анимација је искључена" + "Размера анимације 0,5x" + "Размера анимације 1x" + "Размера анимације 1,5x" + "Размера анимације 2x" + "Размера анимације 5x" + "Размера анимације 10x" - "Ništa" - "480 piksela" - "480 piksela (bezbedno)" - "720 piksela" - "720 piksela (bezbedno)" - "1080 piksela" - "1080 piksela (bezbedno)" + "Ништа" + "480 пиксела" + "480 пиксела (безбедно)" + "720 пиксела" + "720 пиксела (безбедно)" + "1080 пиксела" + "1080 пиксела (безбедно)" "4K" - "4K (bezbedno)" - "4K (uvećana rezolucija)" - "4K (uvećana rezolucija, bezbedno)" - "720 piksela, 1080 piks. (2 ekrana)" + "4K (безбедно)" + "4K (увећана резолуција)" + "4K (увећана резолуција, безбедно)" + "720 пиксела, 1080 пикс. (2 екрана)" - "Nijedan" + "Ниједан" "Logcat" - "Systrace (grafika)" - "Grupno pozivanje funkcije glGetError" + "Systrace (графика)" + "Групно позивање функције glGetError" - "Isključeno" - "Nacrtaj oblast za isecanje koja nije pravougaonog oblika plavom bojom" - "Istakni zelenom testirane komande za crtanje" + "Искључено" + "Нацртај област за исецање која није правоугаоног облика плавом бојом" + "Истакни зеленом тестиране команде за цртање" - "Isključeno" - "Na ekranu u vidu traka" - "U adb shell dumpsys gfxinfo" + "Искључено" + "На екрану у виду трака" + "У adb shell dumpsys gfxinfo" - "Isključi" - "Prikaži oblasti preklapanja" - "Prikaži oblasti za deuteranomaliju" + "Искључи" + "Прикажи области преклапања" + "Прикажи области за деутераномалију" - "Standardno ograničenje" - "Bez pozadinskih procesa" - "Najviše jedan proces" - "Najviše dva procesa" - "Najviše tri procesa" - "Najviše četiri procesa" + "Стандардно ограничење" + "Без позадинских процеса" + "Највише један процес" + "Највише два процеса" + "Највише три процеса" + "Највише четири процеса" - "Puni se" - "MTP (protokol za transfer medija)" - "PTP (protokol za prenos slika)" - "RNDIS (USB eternet)" - "Izvor zvuka" + "Пуни се" + "MTP (протокол за трансфер медија)" + "PTP (протокол за пренос слика)" + "RNDIS (USB етернет)" + "Извор звука" "MIDI" diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index ef6023ea012aa..68af01973d563 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -20,7 +20,7 @@ - "Nije moguće skenirati mreže" + "Није могуће скенирати мреже" "WEP" "WPA" "WPA2" @@ -30,10 +30,10 @@ "RSN-EAP" "WPA3" "WPA2/WPA3" - "Ništa/OWE" + "Ништа/OWE" "OWE" "Suite-B-192" - "Nema" + "Нема" "WEP" "WPA-Personal" "WPA2-Personal" @@ -46,591 +46,593 @@ "Passpoint" "WPA3-Personal" "WPA2/WPA3-Personal" - "Ništa/Enhanced Open" + "Ништа/Enhanced Open" "Enhanced Open" - "WPA3-Enterprise, 192-bitni" - "Sačuvano" - "Veza je prekinuta" - "Onemogućeno" - "IP konfiguracija je otkazala" - "Nije povezano zbog lošeg kvaliteta mreže" - "WiFi veza je otkazala" - "Problem sa potvrdom identiteta" - "Povezivanje nije uspelo" - "Povezivanje sa „%1$s“ nije uspelo" - "Proverite lozinku i probajte ponovo" - "Nije u opsegu" - "Automatsko povezivanje nije uspelo" - "Nema pristupa internetu" - "Sačuvao/la je %1$s" - "Povezani ste na mrežu sa ograničenjem" - "Automatski povezano preko %1$s" - "Automatski povezano preko dobavljača ocene mreže" - "Veza je uspostavljena preko pristupne tačke %1$s" - "Povezano preko: %1$s" - "Dostupna je preko pristupne tačke %1$s" - "Dodirnite da biste se registrovali" - "Nema interneta" - "Pristup privatnom DNS serveru nije uspeo" - "Ograničena veza" - "Nema interneta" - "Treba da se prijavite" - "Pristupna tačka je privremeno zauzeta" - "Povezano preko %1$s" - "Dostupno preko %1$s" - "Otvara se %1$s" - "Povezivanje nije uspelo" - "Registracija se dovršava…" - "Dovršavanje registracije nije uspelo. Dodirnite da biste probali ponovo." - "Registracija je dovršena. Povezuje se…" - "Veoma spora" - "Spora" - "Potvrdi" - "Srednja" - "Brza" - "Veoma brza" - "Isteklo" + "WPA3-Enterprise, 192-битни" + "Сачувано" + "Веза је прекинута" + "Онемогућено" + "IP конфигурација је отказала" + "Није повезано због лошег квалитета мреже" + "WiFi веза је отказала" + "Проблем са потврдом идентитета" + "Повезивање није успело" + "Повезивање са „%1$s“ није успело" + "Проверите лозинку и пробајте поново" + "Није у опсегу" + "Аутоматско повезивање није успело" + "Нема приступа интернету" + "Сачувао/ла је %1$s" + "Повезани сте на мрежу са ограничењем" + "Аутоматски повезано преко %1$s" + "Аутоматски повезано преко добављача оцене мреже" + "Веза је успостављена преко приступне тачке %1$s" + "Повезано преко: %1$s" + "Доступна је преко приступне тачке %1$s" + "Додирните да бисте се регистровали" + "Нема интернета" + "Приступ приватном DNS серверу није успео" + "Ограничена веза" + "Нема интернета" + "Треба да се пријавите" + "Приступна тачка је привремено заузета" + "Повезано преко %1$s" + "Доступно преко %1$s" + "Отвара се %1$s" + "Повезивање није успело" + "Регистрација се довршава…" + "Довршавање регистрације није успело. Додирните да бисте пробали поново." + "Регистрација је довршена. Повезује се…" + "Веома спора" + "Спора" + "Потврди" + "Средња" + "Брза" + "Веома брза" + "Истекло" "%1$s/%2$s" - "Veza je prekinuta" - "Prekidanje veze..." - "Povezivanje…" - "Povezano: %1$s" - "Uparivanje..." - "Povezano (bez telefona): %1$s" - "Povezano (bez medija): %1$s" - "Povezano je (bez pristupa porukama): %1$s" - "Povezano (bez telefona ili medija): %1$s" - "Povezano, nivo baterije je %1$s%2$s" - "Povezano (bez telefona), nivo baterije je %1$s%2$s" - "Povezano (bez medija), nivo baterije je %1$s%2$s" - "Povezano (bez telefona ili medija), nivo baterije je %1$s%2$s" - "Aktivan, nivo baterije je %1$s" - "Aktivno, L: %1$s baterije, D: %2$s baterije" - "Nivo baterije je %1$s" - "L: %1$s baterije, D: %2$s baterije" - "Aktivan" - "Aktivno, samo s leve strane" - "Aktivno, s desne strane" - "Aktivno, s leve i desne strane" - "Zvuk medija" - "Telefonski pozivi" - "Prenos datoteke" - "Ulazni uređaj" - "Pristup Internetu" - "Deljenje kontakata i istorije poziva" - "Koristite za deljenje kontakata i istorije poziva" - "Deljenje internet veze" - "SMS-ovi" - "Pristup SIM kartici" - "HD zvuk: %1$s" - "HD zvuk" - "Slušni aparati" + "Веза је прекинута" + "Прекидање везе..." + "Повезивање…" + "Повезано: %1$s" + "Упаривање..." + "Повезано (без телефона): %1$s" + "Повезано (без медија): %1$s" + "Повезано је (без приступа порукама): %1$s" + "Повезано (без телефона или медија): %1$s" + "Повезано, ниво батерије је %1$s%2$s" + "Повезано (без телефона), ниво батерије је %1$s%2$s" + "Повезано (без медија), ниво батерије је %1$s%2$s" + "Повезано (без телефона или медија), ниво батерије је %1$s%2$s" + "Активан, ниво батерије је %1$s" + "Активно, Л: %1$s батерије, Д: %2$s батерије" + "Ниво батерије је %1$s" + "Л: %1$s батерије, Д: %2$s батерије" + "Активан" + "Активно, само с леве стране" + "Активно, с десне стране" + "Активно, с леве и десне стране" + "Звук медија" + "Телефонски позиви" + "Пренос датотеке" + "Улазни уређај" + "Приступ Интернету" + "Дељење контаката и историје позива" + "Користите за дељење контаката и историје позива" + "Дељење интернет везе" + "SMS-ови" + "Приступ SIM картици" + "HD звук: %1$s" + "HD звук" + "Слушни апарати" "LE audio" - "Povezano sa slušnim aparatima" - "Povezano sa LE audio" - "Povezano sa zvukom medija" - "Povezano sa zvukom telefona" - "Povezano sa serverom za prenos datoteka" - "Povezano je sa mapom" - "Veza sa tačkom pristupa uslugama je uspostavljena" - "Nije povezano sa serverom za prenos datoteka" - "Povezan sa ulaznim uređajem" - "Povezano je sa uređajem radi pristupa internetu" - "Lokalna internet veza se deli sa uređajem" - "Koristi za pristup internetu" - "Koristi se za mapu" - "Koristi za pristup SIM kartici" - "Korišćenje za zvuk medija" - "Korišćenje za audio telefona" - "Korišćenje za prenos datoteka" - "Koristi za ulaz" - "Koristi za slušne aparate" - "Koristite za LE_AUDIO" - "Upari" - "UPARI" - "Otkaži" - "Uparivanje omogućava pristup kontaktima i istoriji poziva nakon povezivanja." - "Uparivanje sa uređajem %1$s nije moguće." - "Uparivanje sa uređajem %1$s nije moguće zbog netačnog PIN-a ili pristupnog koda." - "Nije moguće komunicirati sa uređajem %1$s." - "%1$s je odbio/la uparivanje" - "Računar" - "Naglavne slušalice" - "Pozovi" - "Obrada slika" - "Slušalice" - "Periferni uređaj za unos" + "Повезано са слушним апаратима" + "Повезано са LE audio" + "Повезано са звуком медија" + "Повезано са звуком телефона" + "Повезано са сервером за пренос датотека" + "Повезано је са мапом" + "Веза са тачком приступа услугама је успостављена" + "Није повезано са сервером за пренос датотека" + "Повезан са улазним уређајем" + "Повезано је са уређајем ради приступа интернету" + "Локална интернет веза се дели са уређајем" + "Користи за приступ интернету" + "Користи се за мапу" + "Користи за приступ SIM картици" + "Коришћење за звук медија" + "Коришћење за аудио телефона" + "Коришћење за пренос датотека" + "Користи за улаз" + "Користи за слушне апарате" + "Користите за LE_AUDIO" + "Упари" + "УПАРИ" + "Откажи" + "Упаривање омогућава приступ контактима и историји позива након повезивања." + "Упаривање са уређајем %1$s није могуће." + "Упаривање са уређајем %1$s није могуће због нетачног PIN-а или приступног кода." + "Није могуће комуницирати са уређајем %1$s." + "%1$s је одбио/ла упаривање" + "Рачунар" + "Наглавне слушалице" + "Позови" + "Обрада слика" + "Слушалице" + "Периферни уређај за унос" "Bluetooth" - "WiFi je isključen." - "WiFi veza je prekinuta." - "WiFi signal ima jednu crtu." - "WiFi signal ima dve crte." - "WiFi signal ima tri crte." - "WiFi signal je najjači." - "Otvorena mreža" - "Bezbedna mreža" - "Android OS" - "Uklonjene aplikacije" - "Uklonjene aplikacije i korisnici" - "Ažuriranja sistema" - "USB privezivanje" - "Prenosni hotspot" - "Bluetooth privezivanje" - "Privezivanje" - "Privezivanje i prenosni hotspot" - "Sve radne aplikacije" - "Nepoznato" - "Korisnik: %1$s" - "Podešene su neke podrazumevane vrednosti" - "Nisu podešene podrazumevane vrednosti" - "Podešavanja prelaska iz teksta u govor" - "Pretvaranje teksta u govor" - "Brzina govora" - "Brzina izgovaranja teksta" - "Nivo" - "Utiče na ton sintetizovanog govora" - "Jezik" - "Koristi jezik sistema" - "Jezik nije izabran" - "Podešava glas specifičan za jezik namenjen govornom tekstu" - "Poslušaj primer" - "Puštanje kratke demonstracije sinteze govora" - "Instaliraj glasovne podatke" - "Instaliranje govornih podataka potrebnih za sintezu govora" - "Ova tehnologija za sintezu govora možda može da prikuplja sav tekst koji će biti izgovoren, uključujući lične podatke kao što su lozinke i brojevi kreditnih kartica. To potiče iz tehnologije %s. Želite li da omogućite korišćenje ove tehnologije za sintezu govora?" - "Za ovaj jezik je potrebna ispravna mrežna veza za pretvaranje teksta u govor." - "Ovo je primer sinteze govora" - "Status podrazumevanog jezika" - "%1$s je podržan u potpunosti" - "%1$s zahteva vezu sa mrežom" - "%1$s nije podržan" - "Proverava se..." - "Podešavanja za %s" - "Pokreni podešavanja mašine" - "Željena mašina" - "Opšta" - "Resetujte visinu tona govora" - "Resetujte visinu tona kojom se tekst izgovara na podrazumevanu." + "WiFi је искључен." + "WiFi веза је прекинута." + "WiFi сигнал има једну црту." + "WiFi сигнал има две црте." + "WiFi сигнал има три црте." + "WiFi сигнал је најјачи." + "Отворена мрежа" + "Безбедна мрежа" + "Android ОС" + "Уклоњене апликације" + "Уклоњене апликације и корисници" + "Ажурирања система" + "USB привезивање" + "Преносни хотспот" + "Bluetooth привезивање" + "Привезивање" + "Привезивање и преносни хотспот" + "Све радне апликације" + "Непознато" + "Корисник: %1$s" + "Подешене су неке подразумеване вредности" + "Нису подешене подразумеване вредности" + "Подешавања преласка из текста у говор" + "Претварање текста у говор" + "Брзина говора" + "Брзина изговарања текста" + "Ниво" + "Утиче на тон синтетизованог говора" + "Језик" + "Користи језик система" + "Језик није изабран" + "Подешава глас специфичан за језик намењен говорном тексту" + "Послушај пример" + "Пуштање кратке демонстрације синтезе говора" + "Инсталирај гласовне податке" + "Инсталирање говорних података потребних за синтезу говора" + "Ова технологија за синтезу говора можда може да прикупља сав текст који ће бити изговорен, укључујући личне податке као што су лозинке и бројеви кредитних картица. То потиче из технологије %s. Желите ли да омогућите коришћење ове технологије за синтезу говора?" + "За овај језик је потребна исправна мрежна веза за претварање текста у говор." + "Ово је пример синтезе говора" + "Статус подразумеваног језика" + "%1$s је подржан у потпуности" + "%1$s захтева везу са мрежом" + "%1$s није подржан" + "Проверава се..." + "Подешавања за %s" + "Покрени подешавања машине" + "Жељена машина" + "Општа" + "Ресетујте висину тона говора" + "Ресетујте висину тона којом се текст изговара на подразумевану." - "Veoma sporo" - "Sporo" - "Normalno" - "Brzo" - "Brže" - "Veoma brzo" - "Ubrzano" - "Veoma ubrzano" - "Najbrže" + "Веома споро" + "Споро" + "Нормално" + "Брзо" + "Брже" + "Веома брзо" + "Убрзано" + "Веома убрзано" + "Најбрже" - "Izaberite profil" - "Lično" - "Posao" - "Opcije za programere" - "Omogući opcije za programere" - "Podešavanje opcija za programiranje aplikacije" - "Opcije za programere nisu dostupne za ovog korisnika" - "Podešavanja VPN-a nisu dostupna za ovog korisnika" - "Podešavanja privezivanja nisu dostupna za ovog korisnika" - "Podešavanja naziva pristupne tačke nisu dostupna za ovog korisnika" - "Otklanjanje USB grešaka" - "Režim otklanjanja grešaka kada je USB povezan" - "Opozivanje odobrenja za uklanjanje USB grešaka" - "Bežično otklanjanje grešaka" - "Režim za otklanjanje grešaka kada je Wi‑Fi povezan" - "Greška" - "Bežično otklanjanje grešaka" - "Da biste videli i koristili dostupne uređaje, uključite bežično otklanjanje grešaka" - "Uparite uređaj pomoću QR koda" - "Uparite nove uređaje pomoću čitača QR koda" - "Uparite uređaj pomoću koda za uparivanje" - "Uparite nove uređaje pomoću šestocifrenog koda" - "Upareni uređaji" - "Trenutno je povezano" - "Detalji o uređaju" - "Zaboravi" - "Otisak prsta na uređaju: %1$s" - "Povezivanje nije uspelo" - "Uverite se da je %1$s povezan sa odgovarajućom mrežom" - "Uparite sa uređajem" - "Kôd za uparivanje preko Wi‑Fi-ja" - "Uparivanje nije uspelo" - "Uverite se da je uređaj povezan na istu mrežu." - "Uparite uređaj pomoću Wi‑Fi mreže ili tako što ćete skenirati QR kôd" - "Uparuje se uređaj…" - "Uparivanje uređaja nije uspelo. QR kôd je pogrešan ili uređaj nije povezan sa istom mrežom." - "IP adresa i port" - "Skeniraj QR kôd" - "Uparite uređaj pomoću Wi‑Fi mreže tako što ćete skenirati QR kôd" - "Povežite se na WiFi mrežu" - "adb, otklanjanje grešaka, programer" - "Prečica za izveštaj o greškama" - "Prikazuje dugme u meniju dugmeta za uključivanje za pravljenje izveštaja o greškama" - "Ne zaključavaj" - "Ekran neće biti u režimu spavanja tokom punjenja" - "Omogući snoop evid. za Bluetooth HCI" - "Snimi Bluetooth pakete. (Uključite/isključite Bluetooth kada promenite ovo podešavanje)" - "Otključavanje OEM-a" - "Dozvoli otključavanje funkcije za pokretanje" - "Želite li da dozvolite otključavanje proizvođača originalne opreme (OEM)?" - "UPOZORENJE: Funkcije za zaštitu uređaja neće funkcionisati na ovom uređaju dok je ovo podešavanje uključeno." - "Izaberite aplikaciju za lažnu lokaciju" - "Aplikacija za lažnu lokaciju nije podešena" - "Aplikacija za lažnu lokaciju: %1$s" - "Umrežavanje" - "Sertifikacija bežičnog ekrana" - "Omogući detaljniju evidenciju za Wi‑Fi" - "Usporavanje WiFi skeniranja" - "Nasumično razvrstavanje MAC adresa po WiFi-ju sa prekidima" - "Mobilni podaci su uvek aktivni" - "Hardversko ubrzanje privezivanja" - "Prikaži Bluetooth uređaje bez naziva" - "Onemogući glavno podešavanje jačine zvuka" - "Omogući Gabeldorsche" - "Verzija Bluetooth AVRCP-a" - "Izaberite verziju Bluetooth AVRCP-a" - "Verzija Bluetooth MAP-a" - "Izaberite verziju Bluetooth MAP-a" - "Bluetooth audio kodek" - "Izaberite Bluetooth audio kodek\n" - "Brzina uzorkovanja za Bluetooth audio" - "Izaberite Bluetooth audio kodek:\n brzina uzorkovanja" - "Ako je neka stavka zasivljena, to znači da je telefon ili slušalice ne podržavaju" - "Bitova po uzorku za Bluetooth audio" - "Izaberite Bluetooth audio kodek:\n broj bitova po uzorku" - "Režim kanala za Bluetooth audio" - "Izaberite Bluetooth audio kodek:\n režim kanala" - "Bluetooth audio kodek LDAC: kvalitet reprodukcije" - "Izaberite Bluetooth audio LDAC kodek:\n kvalitet snimka" - "Strimovanje: %1$s" - "Privatni DNS" - "Izaberite režim privatnog DNS-a" - "Isključeno" - "Automatski" - "Ime hosta dobavljača usluge privatnog DNS-a" - "Unesite ime hosta dobavljača usluge DNS-a" - "Povezivanje nije uspelo" - "Prikazuje opcije za sertifikaciju bežičnog ekrana" - "Povećava nivo evidentiranja za Wi‑Fi. Prikaz po SSID RSSI-u u biraču Wi‑Fi mreže" - "Smanjuje potrošnju baterije i poboljšava učinak mreže" - "Kada je ovaj režim omogućen, MAC adresa ovog uređaja može da se promeni svaki put kada se poveže sa mrežom na kojoj je omogućeno nasumično razvrstavanje MAC adresa." - "Sa ograničenjem" - "Bez ograničenja" - "Veličine bafera podataka u programu za evidentiranje" - "Izaberite veličine po baferu evidencije" - "Želite li da obrišete stalni memorijski prostor programa za evidentiranje?" - "Kada ih više ne nadgledamo pomoću stalnog programa za evidentiranje, dužni smo da obrišemo podatke iz programa za evidentiranje koji su trajno smešteni na uređaju." - "Čuvaj evidentirane podatke na uređaju" - "Izaberite međumemorije evidencije koje ćete stalno čuvati na uređaju." - "Izaberite konfiguraciju USB-a" - "Izaberite konfiguraciju USB-a" - "Dozvoli lažne lokacije" - "Dozvoli lažne lokacije" - "Omogući proveru atributa za pregled" - "Mobilni podaci su uvek aktivni, čak i kada je Wi‑Fi aktivan (radi brze promene mreže)." - "Koristi se hardversko ubrzanje privezivanja ako je dostupno" - "Dozvoli otklanjanje USB grešaka?" - "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." - "Želite da dozvolite bežično otklanjanje grešaka?" - "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." - "Želite li da opozovete pristup otklanjanju USB grešaka sa svih računara koje ste prethodno odobrili?" - "Želite li da omogućite programerska podešavanja?" - "Ova podešavanja su namenjena samo za programiranje. Mogu da izazovu prestanak funkcionisanja ili neočekivano ponašanje uređaja i aplikacija na njemu." - "Verifikuj aplikacije preko USB-a" - "Proverava da li su aplikacije instalirane preko ADB-a/ADT-a štetne." - "Prikazuje Bluetooth uređaje bez naziva (samo MAC adrese)" - "Onemogućava glavno podešavanje jačine zvuka na Bluetooth uređaju u slučaju problema sa jačinom zvuka na daljinskim uređajima, kao što su izuzetno velika jačina zvuka ili nedostatak kontrole." - "Omogućava grupu Bluetooth Gabeldorsche funkcija." - "Omogućava funkciju Poboljšano povezivanje." - "Lokalni terminal" - "Omogući apl. terminala za pristup lokalnom komandnom okruženju" - "HDCP provera" - "Podešavanje ponašanja HDCP provere" - "Otklanjanje grešaka" - "Izaberite aplikaciju za otklanjanje grešaka" - "Nema podešenih aplikacija za otklanjanje grešaka" - "Aplikacija za otklanjanje grešaka: %1$s" - "Biranje aplikacije" - "Nijedna" - "Sačekaj program za otklanjanje grešaka" - "Aplikacija čeka program za otklanjanje grešaka da priloži pre izvršavanja" - "Unos" - "Crtanje" - "Hardverski ubrzano prikazivanje" - "Mediji" - "Nadgledanje" - "Omogućen je strogi režim" - "Ekran treperi kada aplikacije obavljaju duge operacije na glavnoj niti" - "Lokacija pokazivača" - "Preklopni element sa trenutnim podacima o dodiru" - "Prikazuj dodire" - "Prikazuje vizuelne povratne informacije za dodire" - "Prikaži ažuriranja površine" - "Osvetljava sve površine prozora kada se ažuriraju" - "Prikaži ažuriranja prikaza" - "Osvetljava prikaze u prozorima kada se crta" - "Prikaži ažuriranja hardverskih slojeva" - "Hardverski slojevi trepere zeleno kada se ažuriraju" - "Otkloni greške GPU preklapanja" - "Onemogući HW postavljene elemente" - "Uvek se koristi GPU za komponovanje ekrana" - "Simuliraj prostor boje" - "Omogući OpenGL tragove" - "Onemogući USB preusm. zvuka" - "Onemogućava automatsko preusmeravanje na USB audio periferne uređaje" - "Prikaži granice rasporeda" - "Prikazuje granice klipa, margine itd." - "Nametni smer rasporeda zdesna nalevo" - "Nameće smer rasporeda ekrana zdesna nalevo za sve lokalitete" - "Dozvoli zamagljenja prozora" - "Nametni 4x MSAA" - "Omogućava 4x MSAA u OpenGL ES 2.0 aplikacijama" - "Otkloni greške isecanja oblasti nepravougaonog oblika" - "Renderuj pomoću HWUI-a" - "Omogući slojeve za otklanjanje grešaka GPU-a" - "Učitava otklanjanje grešaka GPU-a u apl. za otklanjanje grešaka" - "Opširne evidencije prodavca" - "Uvrštava u izveštaje o greškama dodatne posebne evidencije prodavca za uređaje, koje mogu da sadrže privatne podatke, da troše više baterije i/ili da koriste više memorije." - "Razmera animacije prozora" - "Razmera animacije prelaza" - "Animatorova razmera trajanja" - "Simuliraj sekundarne ekrane" - "Aplikacije" - "Ne čuvaj aktivnosti" - "Uništava svaku aktivnost čim je korisnik napusti" - "Ograničenje pozadinskih procesa" - "Prikaži ANR-ove u pozadini" - "Prikazuje dijalog Aplikacija ne reaguje za aplikacije u pozadini" - "Prikazuj upozorenja zbog kanala za obaveštenja" - "Prikazuje upozorenje na ekranu kada aplikacija postavi obaveštenje bez važećeg kanala" - "Prinudno dozvoli aplikacije u spoljnoj" - "Omogućava upisivanje svih aplikacija u spoljnu memoriju, bez obzira na vrednosti manifesta" - "Prinudno omogući promenu veličine aktivnosti" - "Omogućava promenu veličine svih aktivnosti za režim sa više prozora, bez obzira na vrednosti manifesta." - "Omogući prozore proizvoljnog formata" - "Omogućava podršku za eksperimentalne prozore proizvoljnog formata." - "Režim za računare" - "Lozinka rezervne kopije za računar" - "Rezervne kopije čitavog sistema trenutno nisu zaštićene" - "Dodirnite da biste promenili ili uklonili lozinku za pravljenje rezervnih kopija čitavog sistema na računaru" - "Postavljena je nova lozinka rezervne kopije" - "Nova lozinka i njena potvrda se ne podudaraju" - "Postavljanje lozinke rezervne kopije nije uspelo" - "Učitava se…" + "Изаберите профил" + "Лично" + "Посао" + "Опције за програмере" + "Омогући опције за програмере" + "Подешавање опција за програмирање апликације" + "Опције за програмере нису доступне за овог корисника" + "Подешавања VPN-а нису доступна за овог корисника" + "Подешавања привезивања нису доступна за овог корисника" + "Подешавања назива приступне тачке нису доступна за овог корисника" + "Отклањање USB грешака" + "Режим отклањања грешака када је USB повезан" + "Опозивање одобрења за уклањање USB грешака" + "Бежично отклањање грешака" + "Режим за отклањање грешака када је Wi‑Fi повезан" + "Грешка" + "Бежично отклањање грешака" + "Да бисте видели и користили доступне уређаје, укључите бежично отклањање грешака" + "Упарите уређај помоћу QR кода" + "Упарите нове уређаје помоћу читача QR кода" + "Упарите уређај помоћу кода за упаривање" + "Упарите нове уређаје помоћу шестоцифреног кода" + "Упарени уређаји" + "Тренутно је повезано" + "Детаљи о уређају" + "Заборави" + "Отисак прста на уређају: %1$s" + "Повезивање није успело" + "Уверите се да је %1$s повезан са одговарајућом мрежом" + "Упарите са уређајем" + "Кôд за упаривање преко Wi‑Fi-ја" + "Упаривање није успело" + "Уверите се да је уређај повезан на исту мрежу." + "Упарите уређај помоћу Wi‑Fi мреже или тако што ћете скенирати QR кôд" + "Упарује се уређај…" + "Упаривање уређаја није успело. QR кôд је погрешан или уређај није повезан са истом мрежом." + "IP адреса и порт" + "Скенирај QR кôд" + "Упарите уређај помоћу Wi‑Fi мреже тако што ћете скенирати QR кôд" + "Повежите се на WiFi мрежу" + "adb, отклањање грешака, програмер" + "Пречица за извештај о грешкама" + "Приказује дугме у менију дугмета за укључивање за прављење извештаја о грешкама" + "Не закључавај" + "Екран неће бити у режиму спавања током пуњења" + "Омогући snoop евид. за Bluetooth HCI" + "Сними Bluetooth пакете. (Укључите/искључите Bluetooth када промените ово подешавање)" + "Откључавање OEM-a" + "Дозволи откључавање функције за покретање" + "Желите ли да дозволите откључавање произвођача оригиналне опреме (OEM)?" + "УПОЗОРЕЊЕ: Функције за заштиту уређаја неће функционисати на овом уређају док је ово подешавање укључено." + "Изаберите апликацију за лажну локацију" + "Апликација за лажну локацију није подешена" + "Апликација за лажну локацију: %1$s" + "Умрежавање" + "Сертификација бежичног екрана" + "Омогући детаљнију евиденцију за Wi‑Fi" + "Успоравање WiFi скенирања" + "Насумично разврставање MAC адреса по WiFi-ју са прекидима" + "Мобилни подаци су увек активни" + "Хардверско убрзање привезивања" + "Прикажи Bluetooth уређаје без назива" + "Онемогући главно подешавање јачине звука" + "Омогући Gabeldorsche" + "Верзија Bluetooth AVRCP-а" + "Изаберите верзију Bluetooth AVRCP-а" + "Верзија Bluetooth MAP-а" + "Изаберите верзију Bluetooth MAP-а" + "Bluetooth аудио кодек" + "Изаберите Bluetooth аудио кодек\n" + "Брзина узорковања за Bluetooth аудио" + "Изаберите Bluetooth аудио кодек:\n брзина узорковања" + "Ако је нека ставка засивљена, то значи да је телефон или слушалице не подржавају" + "Битова по узорку за Bluetooth аудио" + "Изаберите Bluetooth аудио кодек:\n број битова по узорку" + "Режим канала за Bluetooth аудио" + "Изаберите Bluetooth аудио кодек:\n режим канала" + "Bluetooth аудио кодек LDAC: квалитет репродукције" + "Изаберите Bluetooth аудио LDAC кодек:\n квалитет снимка" + "Стримовање: %1$s" + "Приватни DNS" + "Изаберите режим приватног DNS-а" + "Искључено" + "Аутоматски" + "Име хоста добављача услуге приватног DNS-а" + "Унесите име хоста добављача услуге DNS-а" + "Повезивање није успело" + "Приказује опције за сертификацију бежичног екрана" + "Повећава ниво евидентирања за Wi‑Fi. Приказ по SSID RSSI-у у бирачу Wi‑Fi мреже" + "Смањује потрошњу батерије и побољшава учинак мреже" + "Када је овај режим омогућен, MAC адреса овог уређаја може да се промени сваки пут када се повеже са мрежом на којој је омогућено насумично разврставање MAC адреса." + "Са ограничењем" + "Без ограничења" + "Величине бафера података у програму за евидентирање" + "Изаберите величине по баферу евиденције" + "Желите ли да обришете стални меморијски простор програма за евидентирање?" + "Када их више не надгледамо помоћу сталног програма за евидентирање, дужни смо да обришемо податке из програма за евидентирање који су трајно смештени на уређају." + "Чувај евидентиране податке на уређају" + "Изаберите међумеморије евиденције које ћете стално чувати на уређају." + "Изаберите конфигурацију USB-а" + "Изаберите конфигурацију USB-а" + "Дозволи лажне локације" + "Дозволи лажне локације" + "Омогући проверу атрибута за преглед" + "Мобилни подаци су увек активни, чак и када је Wi‑Fi активан (ради брзе промене мреже)." + "Користи се хардверско убрзање привезивања ако је доступно" + "Дозволи отклањање USB грешака?" + "Отклањање USB грешака намењено је само за сврхе програмирања. Користите га за копирање података са рачунара на уређај и обратно, инсталирање апликација на уређају без обавештења и читање података из евиденције." + "Желите да дозволите бежично отклањање грешака?" + "Бежично отклањање грешака намењено је само програмирању. Користите га за копирање података са рачунара на уређај и обратно, инсталирање апликација на уређају без обавештења и читање података из евиденције." + "Желите ли да опозовете приступ отклањању USB грешака са свих рачунара које сте претходно одобрили?" + "Желите ли да омогућите програмерска подешавања?" + "Ова подешавања су намењена само за програмирање. Могу да изазову престанак функционисања или неочекивано понашање уређаја и апликација на њему." + "Верификуј апликације преко USB-а" + "Проверава да ли су апликације инсталиране преко ADB-а/ADT-а штетне." + "Приказује Bluetooth уређаје без назива (само MAC адресе)" + "Онемогућава главно подешавање јачине звука на Bluetooth уређају у случају проблема са јачином звука на даљинским уређајима, као што су изузетно велика јачина звука или недостатак контроле." + "Омогућава групу Bluetooth Gabeldorsche функција." + "Омогућава функцију Побољшано повезивање." + "Локални терминал" + "Омогући апл. терминала за приступ локалном командном окружењу" + "HDCP провера" + "Подешавање понашања HDCP провере" + "Отклањање грешака" + "Изаберите апликацију за отклањање грешака" + "Нема подешених апликација за отклањање грешака" + "Апликација за отклањање грешака: %1$s" + "Бирање апликације" + "Ниједна" + "Сачекај програм за отклањање грешака" + "Апликација чека програм за отклањање грешака да приложи пре извршавања" + "Унос" + "Цртање" + "Хардверски убрзано приказивање" + "Медији" + "Надгледање" + "Омогућен је строги режим" + "Екран трепери када апликације обављају дуге операције на главној нити" + "Локација показивача" + "Преклопни елемент са тренутним подацима о додиру" + "Приказуј додире" + "Приказује визуелне повратне информације за додире" + "Прикажи ажурирања површине" + "Осветљава све површине прозора када се ажурирају" + "Прикажи ажурирања приказа" + "Осветљава приказе у прозорима када се црта" + "Прикажи ажурирања хардверских слојева" + "Хардверски слојеви трепере зелено када се ажурирају" + "Отклони грешке GPU преклапања" + "Онемогући HW постављене елементе" + "Увек се користи GPU за компоновање екрана" + "Симулирај простор боје" + "Омогући OpenGL трагове" + "Онемогући USB преусм. звука" + "Онемогућава аутоматско преусмеравање на USB аудио периферне уређаје" + "Прикажи границе распореда" + "Приказује границе клипа, маргине итд." + "Наметни смер распореда здесна налево" + "Намеће смер распореда екрана здесна налево за све локалитете" + "Дозволи замагљења прозора" + "Наметни 4x MSAA" + "Омогућава 4x MSAA у OpenGL ES 2.0 апликацијама" + "Отклони грешке исецања области неправоугаоног облика" + "Рендеруј помоћу HWUI-а" + "Омогући слојеве за отклањање грешака GPU-a" + "Учитава отклањање грешака GPU-a у апл. за отклањање грешака" + "Опширне евиденције продавца" + "Уврштава у извештаје о грешкама додатне посебне евиденције продавца за уређаје, које могу да садрже приватне податке, да троше више батерије и/или да користе више меморије." + "Размера анимације прозора" + "Размера анимације прелаза" + "Аниматорова размера трајања" + "Симулирај секундарне екране" + "Апликације" + "Не чувај активности" + "Уништава сваку активност чим је корисник напусти" + "Ограничење позадинских процеса" + "Прикажи ANR-ове у позадини" + "Приказује дијалог Апликација не реагује за апликације у позадини" + "Приказуј упозорења због канала за обавештења" + "Приказује упозорење на екрану када апликација постави обавештење без важећег канала" + "Принудно дозволи апликације у спољној" + "Омогућава уписивање свих апликација у спољну меморију, без обзира на вредности манифеста" + "Принудно омогући промену величине активности" + "Омогућава промену величине свих активности за режим са више прозора, без обзира на вредности манифеста." + "Омогући прозоре произвољног формата" + "Омогућава подршку за експерименталне прозоре произвољног формата." + "Режим за рачунаре" + "Лозинка резервне копије за рачунар" + "Резервне копије читавог система тренутно нису заштићене" + "Додирните да бисте променили или уклонили лозинку за прављење резервних копија читавог система на рачунару" + "Постављена је нова лозинка резервне копије" + "Нова лозинка и њена потврда се не подударају" + "Постављање лозинке резервне копије није успело" + "Учитава се…" - "Živopisan (podrazumevano)" - "Prirodan" - "Standardan" + "Живописан (подразумевано)" + "Природан" + "Стандардан" - "Poboljšane boje" - "Prirodne boje nalik onima koje registruje oko" - "Boje optimizovane za digitalni sadržaj" + "Побољшане боје" + "Природне боје налик онима које региструје око" + "Боје оптимизоване за дигитални садржај" - "Aplikacije u stanju pripravnosti" - "Neaktivna. Dodirnite da biste je aktivirali." - "Aktivna. Dodirnite da biste je deaktivirali." - "Stanje pripravnosti aplikacije: %s" - "Podešavanja transkodiranja medija" - "Zameni podrazumevana podešavanja transkodiranja" - "Omogući transkodiranje" - "Podrazumevaj da aplikacije podržavaju moderne formate" - "Prikazuj obaveštenja o transkodiranju" - "Onemogući keš transkodiranja" - "Pokrenute usluge" - "Prikaz i kontrola trenutno pokrenutih usluga" - "Primena WebView-a" - "Podesite primenu WebView-a" - "Ovaj izbor više nije važeći. Probajte ponovo." - "Režim boja slika" - "Koristi sRGB" - "Onemogućeno je" - "Jednobojnost" - "Deuteranomalija (crveno-zeleno)" - "Protanomalija (crveno-zeleno)" - "Tritanomalija (plavo-žuto)" - "Korekcija boja" - "Korekcija boja može da bude korisna kada želite:<br/> <ol> <li>&nbsp;Preciznije da vidite boje</li> <li>&nbsp;Da uklonite boje kako biste se fokusirali</li> </ol>" - "Zamenjuje ga %1$s" + "Апликације у стању приправности" + "Неактивна. Додирните да бисте је активирали." + "Активна. Додирните да бисте је деактивирали." + "Стање приправности апликације: %s" + "Подешавања транскодирања медија" + "Замени подразумевана подешавања транскодирања" + "Омогући транскодирање" + "Подразумевај да апликације подржавају модерне формате" + "Приказуј обавештења о транскодирању" + "Онемогући кеш транскодирања" + "Покренуте услуге" + "Приказ и контрола тренутно покренутих услуга" + "Примена WebView-а" + "Подесите примену WebView-а" + "Овај избор више није важећи. Пробајте поново." + "Режим боја слика" + "Користи sRGB" + "Онемогућено је" + "Једнобојност" + "Деутераномалија (црвено-зелено)" + "Протаномалија (црвено-зелено)" + "Тританомалија (плаво-жуто)" + "Корекција боја" + "Корекција боја може да буде корисна када желите:<br/> <ol> <li>&nbsp;Прецизније да видите боје</li> <li>&nbsp;Да уклоните боје како бисте се фокусирали</li> </ol>" + "Замењује га %1$s" "%1$s–%2$s" - "Preostalo je oko %1$s" - "Preostalo je oko %1$s (%2$s)" - "Preostalo je oko %1$s na osnovu korišćenja" - "Preostalo je oko %1$s na osnovu korišćenja (%2$s)" + "Преостало је око %1$s" + "Преостало је око %1$s (%2$s)" + "Преостало је око %1$s на основу коришћења" + "Преостало је око %1$s на основу коришћења (%2$s)" - "Trajaće približno do %1$s na osnovu korišćenja (%2$s)" - "Trajaće približno do %1$s na osnovu korišćenja" - "Trajaće približno do %1$s (%2$s)" - "Trajaće približno do %1$s" - "Do %1$s" - "Baterija će se možda isprazniti do %1$s" - "Još manje od %1$s" - "Još manje od %1$s (%2$s)" - "Još više od %1$s (%2$s)" - "Još više od %1$s" - "Telefon će se uskoro isključiti" - "Tablet će se uskoro isključiti" - "Uređaj će se uskoro isključiti" - "Telefon će se uskoro isključiti (%1$s)" - "Tablet će se uskoro isključiti (%1$s)" - "Uređaj će se uskoro isključiti (%1$s)" + "Трајаће приближно до %1$s на основу коришћења (%2$s)" + "Трајаће приближно до %1$s на основу коришћења" + "Трајаће приближно до %1$s (%2$s)" + "Трајаће приближно до %1$s" + "До %1$s" + "Батерија ће се можда испразнити до %1$s" + "Још мање од %1$s" + "Још мање од %1$s (%2$s)" + "Још више од %1$s (%2$s)" + "Још више од %1$s" + "Телефон ће се ускоро искључити" + "Таблет ће се ускоро искључити" + "Уређај ће се ускоро искључити" + "Телефон ће се ускоро искључити (%1$s)" + "Таблет ће се ускоро искључити (%1$s)" + "Уређај ће се ускоро искључити (%1$s)" "%1$s – %2$s" - "%1$s do kraja punjenja" - "%1$s – %2$s do kraja punjenja" - "%1$s – Punjenje je pauzirano" - "%1$s – punjenje do %2$s" - "Nepoznato" - "Puni se" - "Brzo se puni" - "Sporo se puni" - "Bežično punjenje" - "Punjenje" - "Ne puni se" - "Povezano, ne puni se" - "Napunjeno" - "Napunjeno do kraja" - "Kontroliše administrator" - "Kontrolišu ograničena podešavanja" - "Onemogućeno" - "Dozvoljeno" - "Nije dozvoljeno" - "Instaliranje nepoznatih aplikacija" - "Početna za Podešavanja" + "%1$s до краја пуњења" + "%1$s – %2$s до краја пуњења" + + + + + "Непознато" + "Пуни се" + "Брзо се пуни" + "Споро се пуни" + "Бежично пуњење" + "Пуњење" + "Не пуни се" + "Повезано, не пуни се" + "Напуњено" + "Напуњено до краја" + "Контролише администратор" + "Контролишу ограничена подешавања" + "Онемогућено" + "Дозвољено" + "Није дозвољено" + "Инсталирање непознатих апликација" + "Почетна за Подешавања" "0%" "50%" "100%" - "Pre %1$s" - "Još %1$s" - "Mali" - "Podrazumevano" - "Veliki" - "Veći" - "Najveći" - "Prilagođeni (%d)" - "Meni" - "Unesite lozinku da biste obavili resetovanje na fabrička podešavanja u režimu demonstracije" - "Dalje" - "Potrebna je lozinka" - "Metode aktivnog unosa" - "Koristi jezike sistema" - "Otvaranje podešavanja za aplikaciju %1$s nije uspelo" - "Ovaj metod unosa možda može da prikuplja sav tekst koji unosite, uključujući lične podatke, kao što su lozinke i brojevi kreditnih kartica. Potiče od aplikacije %1$s. Želite li da koristite ovaj metod unosa?" - "Napomena: Posle restartovanja ova aplikacija ne može da se pokrene dok ne otključate telefon" - "Status IMS registracije" - "Registrovan je" - "Nije registrovan" - "Nedostupno" - "MAC adresa je nasumično izabrana" - "{count,plural, =0{0 uređaja je povezano}=1{1 uređaj je povezan}one{# uređaj je povezan}few{# uređaja su povezana}other{# uređaja je povezano}}" - "Više vremena." - "Manje vremena." - "Otkaži" - "Potvrdi" - "Gotovo" - "Alarmi i podsetnici" - "Omogući podešavanje alarma i podsetnika" - "Alarmi i podsetnici" - "Omogućite ovoj aplikaciji da podešava alarme i zakazuje vremenski osetljive radnje. To omogućava da aplikacija bude pokrenuta u pozadini, što može da troši više baterije.\n\nAko je ova dozvola isključena, postojeći alarmi i događaji zasnovani na vremenu zakazani pomoću ove aplikacije neće raditi." - "zakazati, alarm, podsetnik, sat" - "Uključi" - "Uključite režim Ne uznemiravaj" - "Nikad" - "Samo prioritetni prekidi" + "Пре %1$s" + "Још %1$s" + "Мали" + "Подразумевано" + "Велики" + "Већи" + "Највећи" + "Прилагођени (%d)" + "Мени" + "Унесите лозинку да бисте обавили ресетовање на фабричка подешавања у режиму демонстрације" + "Даље" + "Потребна је лозинка" + "Методе активног уноса" + "Користи језике система" + "Отварање подешавања за апликацију %1$s није успело" + "Овај метод уноса можда може да прикупља сав текст који уносите, укључујући личне податке, као што су лозинке и бројеви кредитних картица. Потиче од апликације %1$s. Желите ли да користите овај метод уноса?" + "Напомена: После рестартовања ова апликација не може да се покрене док не откључате телефон" + "Статус IMS регистрације" + "Регистрован je" + "Није регистрован" + "Недоступно" + "MAC адреса је насумично изабрана" + "{count,plural, =0{0 уређаја је повезано}=1{1 уређај је повезан}one{# уређај је повезан}few{# уређаја су повезана}other{# уређаја је повезано}}" + "Више времена." + "Мање времена." + "Откажи" + "Потврди" + "Готово" + "Аларми и подсетници" + "Омогући подешавање аларма и подсетника" + "Аларми и подсетници" + "Омогућите овој апликацији да подешава аларме и заказује временски осетљиве радње. То омогућава да апликација буде покренута у позадини, што може да троши више батерије.\n\nАко је ова дозвола искључена, постојећи аларми и догађаји засновани на времену заказани помоћу ове апликације неће радити." + "заказати, аларм, подсетник, сат" + "Укључи" + "Укључите режим Не узнемиравај" + "Никад" + "Само приоритетни прекиди" "%1$s. %2$s" - "Nećete čuti sledeći alarm u %1$s ako ne isključite ovo pre toga" - "Nećete čuti sledeći alarm u %1$s" - "u %1$s" + "Нећете чути следећи аларм у %1$s ако не искључите ово пре тога" + "Нећете чути следећи аларм у %1$s" + "у %1$s" "%1$s" - "Trajanje" - "Pitaj svaki put" - "Dok ne isključite" - "Upravo" - "Ovaj telefon" - "Ovaj tablet" - "Ovaj telefon" - "Problem pri povezivanju. Isključite uređaj, pa ga ponovo uključite" - "Žičani audio uređaj" - "Pomoć i povratne informacije" - "Memorijski prostor" - "Deljeni podaci" - "Pregledajte i izmenite deljene podatke" - "Nema deljenih podataka za ovog korisnika." - "Došlo je do greške pri preuzimanju deljenih podataka. Probajte ponovo." - "ID deljenih podataka: %d" - "Ističe: %s" - "Došlo je do greške pri brisanju deljenih podataka." - "Nema kupljenih zakupa za ove deljene podatke. Želite li da ih izbrišete?" - "Aplikacije koje dele podatke" - "U aplikaciji nije naveden nijedan opis." - "Iznajmljivanje ističe: %s" - "Izbriši deljene podatke" - "Želite li stvarno da izbrišete ove deljene podatke?" - "Korisnici imaju sopstvene aplikacije i sadržaj" - "Možete da ograničite pristup na aplikacije i sadržaj sa naloga" - "Korisnik" - "Ograničeni profil" - "Dodajete novog korisnika?" - "Ovaj uređaj možete da delite sa drugim ljudima ako napravite još korisnika. Svaki korisnik ima sopstveni prostor, koji može da prilagođava pomoću aplikacija, pozadine i slično. Korisnici mogu da prilagođavaju i podešavanja uređaja koja utiču na svakoga, poput Wi‑Fi-ja.\n\nKada dodate novog korisnika, ta osoba treba da podesi sopstveni prostor.\n\nSvaki korisnik može da ažurira aplikacije za sve ostale korisnike. Podešavanja i usluge pristupačnosti ne mogu da se prenose na novog korisnika." - "Kada dodate novog korisnika, ta osoba treba da podesi sopstveni prostor.\n\nSvaki korisnik može da ažurira aplikacije za sve ostale korisnike." - "Podešavate korisnika?" - "Ta osoba treba da uzme uređaj i podesi svoj prostor" - "Želite li da odmah podesite profil?" - "Podesi" - "Ne sada" - "Dodavanje" - "Novi korisnik" - "Novi profil" - "Podaci o korisniku" - "Podaci o profilu" - "Da biste mogli da napravite ograničeni profil, treba da podesite zaključavanje ekrana da biste zaštitili aplikacije i lične podatke." - "Podesi zaključavanje" - "Pređi na korisnika %s" - "Pravi se novi korisnik…" - "Pravi se novi gost…" - "Pravljenje novog korisnika nije uspelo" - "Pravljenje novog gosta nije uspelo" - "Nadimak" - "Dodaj korisnika" - "Dodaj gosta" - "Ukloni gosta" - "Resetuj sesiju gosta" - "Želite li da resetujete sesiju gosta?" - "Želite da uklonite gosta?" - "Resetuj" - "Ukloni" - "Sesija gosta se resetuje…" - "Želite da resetujete sesiju gosta?" - "Time ćete pokrenuti novu sesiju gosta i izbrisati sve aplikacije i podatke iz aktuelne sesije" - "Izlazite iz režima gosta?" - "Time ćete izbrisati sve aplikacije i podatke iz aktuelne sesije gosta" - "Izađi" - "Sačuvaćete aktivnosti gosta?" - "Sačuvajte aktivnosti iz aktuelne sesije ili izbrišite sve aplikacije i podatke" - "Izbriši" - "Sačuvaj" - "Izađi iz režima gosta" - "Resetuj sesiju gosta" - "Zatvori režim gosta" - "Sve aktivnosti će biti izbrisane pri izlazu" - "Možete da sačuvate ili izbrišete aktivnosti pri izlazu" - "Resetujete za brisanje aktivnosti sesije, ili sačuvajte ili izbrišite aktivnosti pri izlazu" - "Slikaj" - "Odaberi sliku" - "Izaberite sliku" - "Previše netačnih pokušaja. Izbrisaćemo podatke sa ovog uređaja." - "Previše netačnih pokušaja. Izbrisaćemo ovog korisnika." - "Previše netačnih pokušaja. Izbrisaćemo ovaj poslovni profil i njegove podatke." - "Odbaci" - "Podrazumevano za uređaj" - "Onemogućeno" - "Omogućeno" - "Morate da restartujete uređaj da bi se ova promena primenila. Restartujte ga odmah ili otkažite." - "Žičane slušalice" - "Uključeno" - "Isključeno" - "Promena mreže mobilnog operatera" + "Трајање" + "Питај сваки пут" + "Док не искључите" + "Управо" + "Овај телефон" + "Овај таблет" + "Овај телефон" + "Проблем при повезивању. Искључите уређај, па га поново укључите" + "Жичани аудио уређај" + "Помоћ и повратне информације" + "Меморијски простор" + "Дељени подаци" + "Прегледајте и измените дељене податке" + "Нема дељених података за овог корисника." + "Дошло је до грешке при преузимању дељених података. Пробајте поново." + "ИД дељених података: %d" + "Истиче: %s" + "Дошло је до грешке при брисању дељених података." + "Нема купљених закупа за ове дељене податке. Желите ли да их избришете?" + "Апликације које деле податке" + "У апликацији није наведен ниједан опис." + "Изнајмљивање истиче: %s" + "Избриши дељене податке" + "Желите ли стварно да избришете ове дељене податке?" + "Корисници имају сопствене апликације и садржај" + "Можете да ограничите приступ на апликације и садржај са налога" + "Корисник" + "Ограничени профил" + "Додајете новог корисника?" + "Овај уређај можете да делите са другим људима ако направите још корисника. Сваки корисник има сопствени простор, који може да прилагођава помоћу апликација, позадине и слично. Корисници могу да прилагођавају и подешавања уређаја која утичу на свакога, попут Wi‑Fi-ја.\n\nКада додате новог корисника, та особа треба да подеси сопствени простор.\n\nСваки корисник може да ажурира апликације за све остале кориснике. Подешавања и услуге приступачности не могу да се преносе на новог корисника." + "Када додате новог корисника, та особа треба да подеси сопствени простор.\n\nСваки корисник може да ажурира апликације за све остале кориснике." + "Подешавате корисника?" + "Та особа треба да узме уређај и подеси свој простор" + "Желите ли да одмах подесите профил?" + "Подеси" + "Не сада" + "Додавање" + "Нови корисник" + "Нови профил" + "Подаци о кориснику" + "Подаци о профилу" + "Да бисте могли да направите ограничени профил, треба да подесите закључавање екрана да бисте заштитили апликације и личне податке." + "Подеси закључавање" + "Пређи на корисника %s" + "Прави се нови корисник…" + "Прави се нови гост…" + "Прављење новог корисника није успело" + "Прављење новог госта није успело" + "Надимак" + "Додај корисника" + "Додај госта" + "Уклони госта" + "Ресетуј сесију госта" + "Желите ли да ресетујете сесију госта?" + "Желите да уклоните госта?" + "Ресетуј" + "Уклони" + "Сесија госта се ресетује…" + "Желите да ресетујете сесију госта?" + "Тиме ћете покренути нову сесију госта и избрисати све апликације и податке из актуелне сесије" + "Излазите из режима госта?" + "Тиме ћете избрисати све апликације и податке из актуелне сесије госта" + "Изађи" + "Сачуваћете активности госта?" + "Сачувајте активности из актуелне сесије или избришите све апликације и податке" + "Избриши" + "Сачувај" + "Изађи из режима госта" + "Ресетуј сесију госта" + "Затвори режим госта" + "Све активности ће бити избрисане при излазу" + "Можете да сачувате или избришете активности при излазу" + "Ресетујете за брисање активности сесије, или сачувајте или избришите активности при излазу" + "Сликај" + "Одабери слику" + "Изаберите слику" + "Превише нетачних покушаја. Избрисаћемо податке са овог уређаја." + "Превише нетачних покушаја. Избрисаћемо овог корисника." + "Превише нетачних покушаја. Избрисаћемо овај пословни профил и његове податке." + "Одбаци" + "Подразумевано за уређај" + "Онемогућено" + "Омогућено" + "Морате да рестартујете уређај да би се ова промена применила. Рестартујте га одмах или откажите." + "Жичане слушалице" + "Укључено" + "Искључено" + "Промена мреже мобилног оператера" "3G" "EDGE" "1X" @@ -642,34 +644,34 @@ "LTE" "LTE+" "W+" - "Mobilni podaci su isključeni" - "Nije podešeno za korišćenje podataka" - "Nema telefona." - "Signal telefona ima jednu crtu." - "Signal telefona od dve crte." - "Signal telefona od tri crte." - "Signal telefona je pun." - "Nema podataka." - "Signal za podatke ima jednu crtu." - "Signal za podatke od dve crte." - "Signal za podatke od tri crte." - "Signal za podatke je najjači." - "Veza sa eternetom je prekinuta." - "Eternet." - "Bez pozivanja." - "Odaberite sliku profila" - "Podrazumevana ikona korisnika" - "Fizička tastatura" - "Odaberite raspored tastature" - "Podrazumevano" - "Uključite ekran" - "Dozvoli uključivanje ekrana" - "Dozvoljava aplikaciji da uključi ekran. Ako se omogući, aplikacija može da uključi ekran u bilo kom trenutku bez vaše eksplicitne namere." - "Želite da zaustavite emitovanje aplikacije %1$s?" - "Ako emitujete aplikaciju %1$s ili promenite izlaz, aktuelno emitovanje će se zaustaviti" - "Emitujte aplikaciju %1$s" - "Promenite izlaz" - "Animacije za pokret povratka sa predviđanjem" - "Omogućite animacije sistema za pokret povratka sa predviđanjem." - "Ovo podešavanje omogućava animacije sistema za pokret povratka sa predviđanjem. Zahteva podešavanje dozvole enableOnBackInvokedCallback po aplikaciji na true u fajlu manifesta." + "Мобилни подаци су искључени" + "Није подешено за коришћење података" + "Нема телефона." + "Сигнал телефона има једну црту." + "Сигнал телефона од две црте." + "Сигнал телефона од три црте." + "Сигнал телефона је пун." + "Нема података." + "Сигнал за податке има једну црту." + "Сигнал за податке од две црте." + "Сигнал за податке од три црте." + "Сигнал за податке је најјачи." + "Веза са етернетом је прекинута." + "Етернет." + "Без позивања." + "Одаберите слику профила" + "Подразумевана икона корисника" + "Физичка тастатура" + "Одаберите распоред тастатуре" + "Подразумевано" + "Укључите екран" + "Дозволи укључивање екрана" + "Дозвољава апликацији да укључи екран. Ако се омогући, апликација може да укључи екран у било ком тренутку без ваше експлицитне намере." + "Желите да зауставите емитовање апликације %1$s?" + "Ако емитујете апликацију %1$s или промените излаз, актуелно емитовање ће се зауставити" + "Емитујте апликацију %1$s" + "Промените излаз" + "Анимације за покрет повратка са предвиђањем" + "Омогућите анимације система за покрет повратка са предвиђањем." + "Ово подешавање омогућава анимације система за покрет повратка са предвиђањем. Захтева подешавање дозволе enableOnBackInvokedCallback по апликацији на true у фајлу манифеста." diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index 5203e17803c13..1fccad947cfe6 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Да поўнай зарадкі засталося %1$s" "%1$s – да поўнай зарадкі засталося: %2$s" - "%1$s - Зарадка прыпынена" - "%1$s – зарадка да %2$s" + + + + "Невядома" "Зарадка" "Хуткая зарадка" diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index ffe894a665b67..5ce9cba842a31 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Оставащо време до пълно зареждане: %1$s" "%1$s – Оставащо време до пълно зареждане: %2$s" - "%1$s – зареждането е на пауза" - "%1$s – зарежда се до %2$s" + + + + "Неизвестно" "Зарежда се" "Зарежда се бързо" diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 3613c61779f58..bca3eb1dbdccd 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s-এ ব্যাটারি পুরো চার্জ হয়ে যাবে" "%1$s - %2$s-এ ব্যাটারি পুরো চার্জ হয়ে যাবে" - "%1$s - চার্জিং পজ করা হয়েছে" - "%1$s - %2$s পর্যন্ত চার্জ হচ্ছে" + + + + "অজানা" "চার্জ হচ্ছে" "দ্রুত চার্জ হচ্ছে" diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index 90ff2c6950599..b5e75e4af8079 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s do potpune napunjenosti" "%1$s – %2$s do potpune napunjenosti" - "%1$s - Punjenje je pauzirano" - "%1$s – Punjenje do %2$s" + + + + "Nepoznato" "Punjenje" "Brzo punjenje" diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index b11d25128dea8..cff34e31050d1 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -477,8 +477,10 @@ "%1$s: %2$s" "%1$s per completar la càrrega" "%1$s: %2$s per completar la càrrega" - "%1$s: la càrrega s\'ha posat en pausa" - "%1$s: s\'està carregant fins al %2$s" + + + + "Desconegut" "S\'està carregant" "Carregant ràpidament" diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index a54d5d957bf91..f5b7600cc7c72 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s do úplného nabití" "%1$s – %2$s do úplného nabití" - "%1$s – Nabíjení pozastaveno" - "%1$s – nabíjení do %2$s" + + + + "Neznámé" "Nabíjí se" "Rychlé nabíjení" diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 49bb22c87a0f2..1f3d5f9eba077 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Fuldt opladet om %1$s" "%1$s – fuldt opladet om %2$s" - "%1$s – Opladning er sat på pause" - "%1$s – Oplader til %2$s" + + + + "Ukendt" "Oplader" "Oplader hurtigt" diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 752afbc9907a4..35e86379bffc2 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Voll in %1$s" "%1$s – voll in %2$s" - "%1$s – Laden pausiert" - "%1$s – Aufladung auf %2$s" + + + + "Unbekannt" "Wird aufgeladen" "Schnelles Aufladen" diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index bf43bf5d5f561..200c6409d0c63 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "Απομένουν %1$s για πλήρη φόρτιση" "%1$s - Απομένουν %2$s για πλήρη φόρτιση" - "%1$s - Φόρτιση σε παύση" - "%1$s - Φόρτιση έως το %2$s" + + + + "Άγνωστο" "Φόρτιση" "Ταχεία φόρτιση" diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index 859139b2fdff0..000cd8afa5688 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s left until full" "%1$s – %2$s left until full" - "%1$s – charging paused" - "%1$s – charging to %2$s" + + + + "Unknown" "Charging" "Charging rapidly" diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index 671143631e2e4..ae725734e452b 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -477,8 +477,8 @@ "%1$s - %2$s" "%1$s left until full" "%1$s - %2$s left until full" - "%1$s - Charging paused" - "%1$s - Charging to %2$s" + "%1$s - Charging optimized" + "%1$s - Charging optimized" "Unknown" "Charging" "Charging rapidly" diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index 859139b2fdff0..000cd8afa5688 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s left until full" "%1$s – %2$s left until full" - "%1$s – charging paused" - "%1$s – charging to %2$s" + + + + "Unknown" "Charging" "Charging rapidly" diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index 859139b2fdff0..000cd8afa5688 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s left until full" "%1$s – %2$s left until full" - "%1$s – charging paused" - "%1$s – charging to %2$s" + + + + "Unknown" "Charging" "Charging rapidly" diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml index d9afda1e76771..2e934645cd9cf 100644 --- a/packages/SettingsLib/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/res/values-en-rXC/strings.xml @@ -477,8 +477,8 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ left until full‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎ left until full‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ - Charging paused‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ - Charging to ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ - Charging optimized‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ - Charging optimized‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎Unknown‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎Charging‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎Charging rapidly‎‏‎‎‏‎" diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index c35dbe552bc47..d89aff6b03e9b 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -477,8 +477,10 @@ "%1$s: %2$s" "%1$s para completar" "%1$s - %2$s para completar" - "%1$s - Se pausó la carga" - "%1$s - Cargando hasta %2$s" + + + + "Desconocido" "Cargando" "Cargando rápidamente" diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index ca3818213901d..794d64fbaea8c 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s hasta la carga completa" "%1$s: %2$s hasta la carga completa" - "%1$s - Carga pausada" - "%1$s - Cargando hasta %2$s" + + + + "Desconocido" "Cargando" "Carga rápida" diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index 4a1f6c3685362..4204320c029a2 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Täislaadimiseks kulub %1$s" "%1$s – täislaadimiseks kulub %2$s" - "%1$s – laadimine peatati" - "%1$s – laadimine tasemeni %2$s" + + + + "Tundmatu" "Laadimine" "Kiirlaadimine" diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index ec492a80804eb..92eaf2b88d760 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s guztiz kargatu arte" "%1$s - %2$s guztiz kargatu arte" - "%1$s - Kargatze-prozesua pausatuta dago" - "%1$s - %2$s arte kargatzen" + + + + "Ezezaguna" "Kargatzen" "Bizkor kargatzen" diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 7320b23582ecd..6bdbc0e32f9ce 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -477,8 +477,10 @@ "%1$s - ‏%2$s" "%1$s تا شارژ کامل باقی مانده است" "%1$s - %2$s تا شارژ کامل باقی مانده است" - "%1$s - شارژ موقتاً متوقف شد" - "%1$s - درحال شارژ تا %2$s" + + + + "ناشناس" "در حال شارژ شدن" "درحال شارژ شدن سریع" diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index 3c0194f65f342..a6eb7365620b4 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s kunnes täynnä" "%1$s – %2$s kunnes täynnä" - "%1$s – Lataaminen keskeytetty" - "%1$s – Tavoite: %2$s" + + + + "Tuntematon" "Ladataan" "Nopea lataus" diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index d4dba9d6baa55..477e2de128bb9 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s jusqu\'à la recharge complète" "%1$s (%2$s jusqu\'à la recharge complète)" - "%1$s – Recharge interrompue" - "%1$s - En charge jusqu\'à %2$s" + + + + "Inconnu" "Charge en cours…" "Recharge rapide" diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index fad8e1e0984ac..fe1744e3f7e48 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Chargée à 100 %% dans %1$s" "%1$s - chargée à 100 %% dans %2$s" - "%1$s – Recharge interrompue" - "%1$s - Recharge jusqu\'à %2$s" + + + + "Inconnu" "Batterie en charge" "Charge rapide" diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 050e1dc005481..2f4eb5ba98d82 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s para completar a carga" "%1$s (%2$s para completar a carga)" - "%1$s: Carga en pausa" - "%1$s: Cargando ata o %2$s" + + + + "Descoñecido" "Cargando" "Cargando rapidamente" diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index 066c7abce8d5b..267c4684775d1 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "પૂર્ણ ચાર્જ થવામાં %1$s બાકી છે" "%1$s - પૂર્ણ ચાર્જ થવામાં %2$s બાકી છે" - "%1$s - ચાર્જિંગ થોભાવેલું છે" - "%1$s - %2$s સુધી ચાર્જિંગ" + + + + "અજાણ્યું" "ચાર્જ થઈ રહ્યું છે" "ઝડપથી ચાર્જ થાય છે" diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index f853785e69409..0ad754cf2ab2c 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s में बैटरी पूरी चार्ज हो जाएगी" "%1$s - %2$s में बैटरी पूरी चार्ज हो जाएगी" - "%1$s - चार्जिंग रोकी गई है" - "%1$s - %2$s तक चार्ज किया जा रहा है" + + + + "अज्ञात" "चार्ज हो रही है" "तेज़ चार्ज हो रही है" diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index f666302efaf11..34c82b14bf8ba 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s do napunjenosti" "%1$s – %2$s do napunjenosti" - "%1$s – punjenje pauzirano" - "%1$s – punjenje do %2$s" + + + + "Nepoznato" "Punjenje" "Brzo punjenje" diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index ac416545fcda1..2a43d1568c151 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s a teljes töltöttségig" "%1$s – %2$s a teljes töltöttségig" - "%1$s – Töltés szüneteltetve" - "%1$s – Töltés eddig: %2$s" + + + + "Ismeretlen" "Töltés" "Gyorstöltés" diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index 51b96ac98d93f..8442bf5e65493 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s մինչև լրիվ լիցքավորումը" "%1$s – %2$s մինչև լրիվ լիցքավորումը" - "%1$s – Լիցքավորումը դադարեցվել է" - "%1$s – Լիցքավորում մինչև %2$s" + + + + "Անհայտ" "Լիցքավորում" "Արագ լիցքավորում" diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 2cd8321eece72..d1e490f5d1a0b 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s lagi sampai penuh" "%1$s - %2$s lagi sampai penuh" - "%1$s - Pengisian daya dijeda" - "%1$s - Mengisi daya sampai %2$s" + + + + "Tidak diketahui" "Mengisi daya" "Mengisi daya cepat" diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index 5bfb2f1ba2c5f..b011b2d375887 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s fram að fullri hleðslu" "%1$s - %2$s fram að fullri hleðslu" - "%1$s - Hlé gert á hleðslu" - "%1$s - hleður upp að %2$s" + + + + "Óþekkt" "Í hleðslu" "Hröð hleðsla" diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index 1386fe915d707..b6594434834b2 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s alla ricarica completa" "%1$s - %2$s alla ricarica completa" - "%1$s - Ricarica in pausa" - "%1$s - Ricarica fino a %2$s" + + + + "Sconosciuta" "In carica" "Ricarica veloce" diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 65ff52bfc32d2..7303a2da3dff8 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -477,8 +477,10 @@ "%1$s‏ – %2$s" "הזמן הנותר לטעינה מלאה: %1$s" "%1$s – הזמן הנותר לטעינה מלאה: %2$s" - "%1$s – הטעינה מושהית" - "%1$s – טעינה עד מצב של %2$s" + + + + "לא ידוע" "בטעינה" "הסוללה נטענת מהר" diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index f2892a640dcd6..1f80d48c8fcc4 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "完了まであと %1$s" "%1$s - 完了まであと %2$s" - "%1$s - 充電を一時停止しています" - "%1$s - %2$s まで充電" + + + + "不明" "充電中" "急速充電中" diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index df420dcc15f46..fd37a86038160 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "სრულ დატენვამდე დარჩენილია %1$s" "%1$s — სრულ დატენვამდე დარჩენილია %2$s" - "%1$s - დატენვა დაპაუზებულია" - "%1$s – დატენვა შემდეგ ნიშნულამდე: %2$s" + + + + "უცნობი" "იტენება" "სწრაფად იტენება" diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index 45bd897bcac96..dea35701839dc 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "Толық зарядталғанға дейін %1$s қалды." "%1$s – толық зарядталғанға дейін %2$s қалды." - "%1$s – Зарядтау кідіртілді" - "%1$s – %2$s деңгейіне дейін зарядталады" + + + + "Белгісіз" "Зарядталуда" "Жылдам зарядталуда" diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index 83f041fd77b53..4ed095207cc84 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s ទៀតទើបពេញ" "%1$s - នៅសល់ %2$s ទៀតទើបពេញ" - "%1$s - បានផ្អាក​ការសាកថ្ម" - "%1$s - កំពុង​សាកថ្ម​ឱ្យដល់កម្រិត %2$s" + + + + "មិន​ស្គាល់" "កំពុងសាក​ថ្ម" "កំពុងសាកថ្មយ៉ាងឆាប់រហ័ស" diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 541f958f360c1..e18a3f1bb0cb6 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s - ಸಮಯದಲ್ಲಿ ಪೂರ್ತಿ ಚಾರ್ಜ್ ಆಗುತ್ತದೆ" "%1$s - %2$s ಸಮಯದಲ್ಲಿ ಪೂರ್ತಿ ಚಾರ್ಜ್ ಆಗುತ್ತದೆ" - "%1$s - ಚಾರ್ಜಿಂಗ್ ವಿರಾಮಗೊಂಡಿದೆ" - "%1$s - %2$s ವರೆಗೆ ಚಾರ್ಜ್ ಮಾಡಲಾಗುತ್ತಿದೆ" + + + + "ಅಪರಿಚಿತ" "ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ" "ವೇಗದ ಚಾರ್ಜಿಂಗ್" diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index d79ea183ad598..42ec09c94a8d8 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s 후 충전 완료" "%1$s: %2$s 후 충전 완료" - "%1$s - 충전 일시중지됨" - "%1$s - %2$s까지 충전" + + + + "알 수 없음" "충전 중" "고속 충전 중" diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index efdaf81daab31..1e3453bf40180 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s кийин толук кубатталат" "%1$s – %2$s кийин толук кубатталат" - "%1$s - Кубаттоо тындырылды" - "%1$s - %2$s чейин кубаттоо" + + + + "Белгисиз" "Кубатталууда" "Ыкчам кубатталууда" diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index d08ee27e4c85f..63ff4df43bf42 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "ຍັງເຫຼືອອີກ %1$s ຈຶ່ງຈະສາກເຕັມ" "ຍັງເຫຼືອອີກ %1$s - %2$s ຈຶ່ງຈະສາກເຕັມ" - "%1$s - ຢຸດການສາກໄວ້ຊົ່ວຄາວແລ້ວ" - "%1$s - ກຳລັງສາກຈົນເຖິງ %2$s" + + + + "ບໍ່ຮູ້ຈັກ" "ກຳລັງສາກໄຟ" "ກຳລັງສາກໄຟດ່ວນ" diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index 2516d5b968c3c..765fb10c35159 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Liko %1$s, kol bus visiškai įkrauta" "%1$s – liko %2$s, kol bus visiškai įkrauta" - "%1$s – įkrovimas pristabdytas" - "%1$s – įkraunama iki %2$s" + + + + "Nežinomas" "Kraunasi..." "Greitai įkraunama" diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index cac21e16861e7..222e41a047cb4 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -477,8 +477,10 @@ "%1$s — %2$s" "%1$s līdz pilnai uzlādei" "%1$s — %2$s līdz pilnai uzlādei" - "%1$s - Uzlāde ir apturēta" - "%1$s. Tiks uzlādēts līdz %2$s" + + + + "Nezināms" "Uzlāde" "Notiek ātrā uzlāde" diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index c83c23b7b31df..f672c60704442 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s до полна батерија" "%1$s - %2$s до полна батерија" - "%1$s - Полнењето е паузирано" - "%1$s - Се полни на %2$s" + + + + "Непознато" "Се полни" "Брзо полнење" diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index 2b85ed57c131d..e6ccc5a9e4a2f 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "പൂർണ്ണമാകാൻ %1$s ശേഷിക്കുന്നു" "%1$s - പൂർണ്ണമാകാൻ %2$s ശേഷിക്കുന്നു" - "%1$s - ചാർജ് ചെയ്യൽ താൽക്കാലികമായി നിർത്തി" - "%1$s - %2$s വരെ ചാർജ് ചെയ്യുന്നു" + + + + "അജ്ഞാതം" "ചാർജ് ചെയ്യുന്നു" "അതിവേഗ ചാർജിംഗ്" diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index a84410ab4dece..71630d49bf71a 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "Дүүрэх хүртэл %1$s үлдсэн" "%1$s - дүүрэх хүртэл %2$s үлдсэн" - "%1$s - Цэнэглэлтийг түр зогсоосон" - "%1$s - %2$s руу цэнэглэж байна" + + + + "Тодорхойгүй" "Цэнэглэж байна" "Хурдан цэнэглэж байна" diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index 9c04534c88c42..0493ffeb58c08 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "पूर्ण चार्ज होण्यासाठी %1$s शिल्लक आहेत" "%1$s - पूर्ण चार्ज होण्यासाठी %2$s शिल्लक आहे" - "%1$s - चार्ज करणे थांबवले" - "%1$s - %2$s वर चार्ज करत आहे" + + + + "अज्ञात" "चार्ज होत आहे" "वेगाने चार्ज होत आहे" diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 9a6eaf6c896e1..bb3b65b3f2ba2 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s lagi sebelum penuh" "%1$s - %2$s lagi sebelum penuh" - "%1$s - Pengecasan dijeda" - "%1$s - Mengecas kepada %2$s" + + + + "Tidak diketahui" "Mengecas" "Mengecas dgn cepat" diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index 6346b119fadb4..5bcaa273e9aef 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "အားပြည့်ရန် %1$s လိုသည်" "အားပြည့်ရန် %1$s - %2$s လိုသည်" - "%1$s - အားသွင်းမှု ခဏရပ်ထားသည်" - "%1$s - %2$s အထိ အားသွင်းရန်" + + + + "မသိ" "အားသွင်းနေပါသည်" "အမြန် အားသွင်းနေသည်" diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index a4431abfbeb46..e42e93979246c 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Fulladet om %1$s" "%1$s – Fulladet om %2$s" - "%1$s - Ladingen er satt på pause" - "%1$s – lader til %2$s" + + + + "Ukjent" "Lader" "Lader raskt" diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index bab48c2abaa35..8c5171b485c96 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "पूरा चार्ज हुन %1$s लाग्ने छ" "%1$s - पूरा चार्ज हुन %2$s लाग्ने छ" - "%1$s - चार्ज गर्ने प्रक्रिया पज गरिएको छ" - "%1$s - %2$s सम्म चार्ज हुने छ" + + + + "अज्ञात" "चार्ज हुँदै छ" "द्रुत गतिमा चार्ज गरिँदै छ" diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 8ad3a73487f6f..aa70f9b3d7a90 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "Vol over %1$s" "%1$s - vol over %2$s" - "%1$s - Opladen onderbroken" - "%1$s - Opladen tot %2$s" + + + + "Onbekend" "Opladen" "Snel opladen" diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index 0109527051b28..a39e0ec0a2fd6 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "ପୂର୍ଣ୍ଣ ହେବାକୁ ଆଉ %1$s ବାକି ଅଛି" "%1$s - ପୂର୍ଣ୍ଣ ହେବାକୁ ଆଉ %2$s ବାକି ଅଛି" - "%1$s - ଚାର୍ଜିଂ ବିରତ କରାଯାଇଛି" - "%1$s - %2$s ପର୍ଯ୍ୟନ୍ତ ଚାର୍ଜ ହେଉଛି" + + + + "ଅଜ୍ଞାତ" "ଚାର୍ଜ ହେଉଛି" "ଶୀଘ୍ର ଚାର୍ଜ ହେଉଛି" diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 1c956050caf8f..4a729c9a905f9 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "ਬੈਟਰੀ ਪੂਰੀ ਚਾਰਜ ਹੋਣ ਵਿੱਚ %1$s ਬਾਕੀ" "%1$s - ਬੈਟਰੀ ਪੂਰੀ ਚਾਰਜ ਹੋਣ ਵਿੱਚ %2$s ਬਾਕੀ" - "%1$s - ਬੈਟਰੀ ਦੀ ਚਾਰਜਿੰਗ ਨੂੰ ਰੋਕਿਆ ਗਿਆ" - "%1$s - %2$s ਤੱਕ ਚਾਰਜ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" + + + + "ਅਗਿਆਤ" "ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ" "ਤੇਜ਼ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ" diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 4b1c734017f97..935ac2d7a6cfc 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s do pełnego naładowania" "%1$s – %2$s do pełnego naładowania" - "%1$s – wstrzymano ładowanie" - "%1$s – Ładuję do %2$s" + + + + "Nieznane" "Ładowanie" "Szybkie ładowanie" diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index e704049637581..0ada85ce505a3 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s até a conclusão" "%1$s: %2$s até a conclusão" - "%1$s: carregamento pausado" - "%1$s: carregando até %2$s" + + + + "Desconhecido" "Carregando" "Carregando rápido" diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index 4a75c0bfa1ab7..fca397d4c1f46 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s até à carga máxima" "%1$s – %2$s até à carga máxima" - "%1$s – Carregamento em pausa" - "%1$s – A carregar até %2$s" + + + + "Desconhecido" "A carregar" "Carregamento rápido" diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index e704049637581..0ada85ce505a3 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s até a conclusão" "%1$s: %2$s até a conclusão" - "%1$s: carregamento pausado" - "%1$s: carregando até %2$s" + + + + "Desconhecido" "Carregando" "Carregando rápido" diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 90c08c350cfc2..0ce8f46a77009 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s până la finalizare" "%1$s – %2$s până la finalizare" - "%1$s – Încărcarea s-a întrerupt" - "%1$s – Se încarcă până la %2$s" + + + + "Necunoscut" "Se încarcă" "Se încarcă rapid" diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index b74363fd7618f..ac97cb8916a78 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s до полной зарядки" "%1$s – %2$s до полной зарядки" - "%1$s – зарядка приостановлена" - "%1$s – заряжается до %2$s" + + + + "Неизвестно" "Идет зарядка" "Быстрая зарядка" diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index b2251ed86c389..099202cd795a2 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "සම්පූර්ණ වීමට %1$sක් ඉතිරියි" "%1$s - සම්පූර්ණ වීමට %2$sක් ඉතිරියි" - "%1$s - ආරෝපණය විරාම කළා" - "%1$s - %2$s වෙත ආරෝපණය" + + + + "නොදනී" "ආරෝපණය වෙමින්" "ශීඝ්‍ර ආරෝපණය" diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index baeccad624f11..06e822eca47e0 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s do úplného nabitia" "%1$s – %2$s do úplného nabitia" - "%1$s – nabíjanie bolo pozastavené" - "%1$s – nabíja sa na úroveň %2$s" + + + + "Neznáme" "Nabíja sa" "Rýchle nabíjanie" diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index ec818b3fb3c0d..4e4d540211090 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Še %1$s do napolnjenosti" "%1$s – še %2$s do napolnjenosti" - "%1$s – polnjenje je začasno zaustavljeno" - "%1$s – polnjenje do %2$s" + + + + "Neznano" "Polnjenje" "Hitro polnjenje" diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index 74e81246b30d9..86aaf6addfc07 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s derisa të mbushet" "%1$s - %2$s derisa të mbushet" - "%1$s - Karikimi në pauzë" - "%1$s - Po karikohet deri në %2$s" + + + + "I panjohur" "Po karikohet" "Karikim i shpejtë" diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 4c7a9670824a6..68af01973d563 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s до краја пуњења" "%1$s – %2$s до краја пуњења" - "%1$s – Пуњење је паузирано" - "%1$s – пуњење до %2$s" + + + + "Непознато" "Пуни се" "Брзо се пуни" diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index 726bf5e968a9c..0b2939e80c1b2 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s kvar tills fulladdat" "%1$s – %2$s kvar tills fulladdat" - "%1$s – Laddningen har pausats" - "%1$s – Laddar till %2$s" + + + + "Okänd" "Laddar" "Laddas snabbt" diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index f287e4266e719..49486670cde9f 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "Zimesalia %1$s ijae chaji" "%1$s - %2$s zimesalia ijae chaji" - "%1$s - Imesitisha kuchaji" - "%1$s - Itachaji hadi %2$s" + + + + "Haijulikani" "Inachaji" "Inachaji kwa kasi" diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index a96a3ce91e5ce..9b229731781e9 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "முழுவதும் சார்ஜாக %1$s ஆகும்" "%1$s - முழுவதும் சார்ஜாக %2$s ஆகும்" - "%1$s - சார்ஜிங் இடைநிறுத்தப்பட்டது" - "%1$s - %2$s வரை சார்ஜ் செய்யப்படும்" + + + + "அறியப்படாத" "சார்ஜ் ஆகிறது" "வேகமாக சார்ஜாகிறது" diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index 730247dde2d57..311d3c96a47b0 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -396,7 +396,7 @@ "ఇతర డిస్‌ప్లేలను సిమ్యులేట్‌ చేయండి" "యాప్‌లు" "యాక్టివిటీస్‌ను ఉంచవద్దు" - "యూజర్ నిష్క్రమించాక పూర్తి యాక్టివిటీని తొలగించు" + "యూజర్ నిష్క్రమించాక పూర్తి యాక్టివిటీని తొలగించండి" "బ్యాక్‌గ్రౌండ్ ప్రాసెస్ పరిమితి" "బ్యాక్‌గ్రౌండ్ ANRలను చూపు" "బ్యాక్‌గ్రౌండ్ యాప్‌ల కోసం యాప్ ప్రతిస్పందించడం లేదు అనే డైలాగ్‌ను చూపు" @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$sలో పూర్తిగా ఛార్జ్ అవుతుంది" "%1$s - %2$sలో పూర్తిగా ఛార్జ్ అవుతుంది" - "%1$s - ఛార్జింగ్ పాజ్ చేయబడింది" - "%1$s - %2$s ఛార్జింగ్" + + + + "తెలియదు" "ఛార్జ్ అవుతోంది" "వేగవంతమైన ఛార్జింగ్" @@ -565,7 +567,7 @@ "యాప్‌ల షేరింగ్ డేటా" "యాప్ ద్వారా ఎలాంటి వివరణ అందించబడలేదు." "లీజు గడువు %sతో ముగుస్తుంది" - "షేర్ చేసిన డేటాను తొలగించు" + "షేర్ చేసిన డేటాను తొలగించండి" "మీరు ఖచ్చితంగా ఈ షేర్ చేసిన డేటాను తొలగించాలనుకుంటున్నారా?" "వినియోగదారులు వారి స్వంత యాప్‌లను మరియు కంటెంట్‌ను కలిగి ఉన్నారు" "మీరు మీ ఖాతా నుండి యాప్‌లకు మరియు కంటెంట్‌కు యాక్సెస్‌ను పరిమితం చేయవచ్చు" diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index 2388d70298a50..680e7d69fce7a 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "อีก %1$sจึงจะเต็ม" "%1$s - อีก %2$s จึงจะเต็ม" - "%1$s - หยุดชาร์จชั่วคราว" - "%1$s - กำลังชาร์จจนถึง %2$s" + + + + "ไม่ทราบ" "กำลังชาร์จ" "กำลังชาร์จอย่างเร็ว" diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index 8f0a4effdd55b..f4bf11d9299da 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s na lang bago mapuno" "%1$s - %2$s na lang bago mapuno" - "%1$s - Na-pause ang pag-charge" - "%1$s - China-charge hanggang %2$s" + + + + "Hindi Kilala" "Nagcha-charge" "Mabilis na charge" diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 4d1dc8d5cf7dc..74762a6db77e9 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "Tamamen şarj olmasına %1$s kaldı" "%1$s - Tamamen şarj olmasına %2$s kaldı" - "%1$s - Şarj işlemi duraklatıldı" - "%1$s - %2$s seviyesine kadar şarj ediliyor" + + + + "Bilinmiyor" "Şarj oluyor" "Hızlı şarj oluyor" diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index 3497b25b49537..19b2496569aaf 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "%1$s до повного заряду" "%1$s – %2$s до повного заряду" - "%1$s – заряджання призупинено" - "%1$s - Заряджання до %2$s" + + + + "Невідомо" "Заряджається" "Швидке заряджання" diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 31c0671a6d3ee..112217d7b0869 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -477,8 +477,10 @@ "‎%1$s - %2$s‎" "مکمل چارج ہونے میں %1$s باقی ہے" "مکمل چارج ہونے میں %1$s - %2$s باقی ہے" - "%1$s - چارجنگ موقوف کی گئی" - "%1$s - %2$s چارج کیا جائے گا" + + + + "نامعلوم" "چارج ہو رہا ہے" "تیزی سے چارج ہو رہا ہے" diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 48aa1942734fe..6ce70538c1acf 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -477,8 +477,10 @@ "%1$s – %2$s" "Toʻlishiga %1$s qoldi" "%1$s – Toʻlishiga %2$s qoldi" - "%1$s – Quvvatlash pauzada" - "%1$s, %2$s gacha quvvat oladi" + + + + "Noma’lum" "Quvvat olmoqda" "Tezkor quvvat olmoqda" diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index aa4eb69066024..b9121ab4695d4 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s nữa là pin đầy" "%1$s – %2$s nữa là pin đầy" - "%1$s – Đã tạm dừng sạc" - "%1$s – Sạc đến %2$s" + + + + "Không xác định" "Đang sạc" "Đang sạc nhanh" diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index c24bd9952b927..d59aba1d2c7b5 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "还需%1$s充满" "%1$s - 还需%2$s充满" - "%1$s - 已暂停充电" - "%1$s - 正在充到 %2$s" + + + + "未知" "正在充电" "正在快速充电" diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 6cd192c904c32..fd607226ce18c 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s後充滿電" "%1$s - %2$s後充滿電" - "%1$s - 已暫停充電" - "%1$s - 正在充電至 %2$s" + + + + "未知" "充電中" "快速充電中" diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 01951842f3eb3..3ae32b414f2d5 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s後充飽" "%1$s - %2$s後充飽" - "%1$s - 已暫停充電" - "%1$s - 正在充電至 %2$s" + + + + "不明" "充電中" "快速充電中" diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index 0bed0569ac36f..57de713d13b70 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -477,8 +477,10 @@ "%1$s - %2$s" "%1$s okusele kuze kugcwale" "%1$s - %2$s okusele kuze kugcwale" - "%1$s - Ukushaja kumiswe isikhashana" - "%1$s - Ishaja ku-%2$s" + + + + "Akwaziwa" "Iyashaja" "Ishaja ngokushesha" From 3216fcb0a0d2976a537715c825816995a807a2ba Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 19 Dec 2022 01:12:42 -0800 Subject: [PATCH 21/36] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ic4f51bdc47f53df89753b3ed84b82a798b74dd38 --- packages/SettingsProvider/res/values-b+sr+Latn/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/SettingsProvider/res/values-b+sr+Latn/strings.xml b/packages/SettingsProvider/res/values-b+sr+Latn/strings.xml index def4b68391439..4d0576212d9c5 100644 --- a/packages/SettingsProvider/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsProvider/res/values-b+sr+Latn/strings.xml @@ -19,7 +19,7 @@ - "Podešavanja skladišta" - "Podešavanja hotspota su promenjena" - "Dodirnite da biste videli detalje" + "Подешавања складишта" + "Подешавања хотспота су промењена" + "Додирните да бисте видели детаље" From 6f2ecace7f0cd45b8fa8ab2188d9a419f8407e45 Mon Sep 17 00:00:00 2001 From: Vania Januar Date: Wed, 7 Dec 2022 11:27:33 +0000 Subject: [PATCH 22/36] Detecting first stylus usage. A CoreStartable that uses internal battery events as a proxy for first stylus usage, and sets a boolean flag on InputManager. Bug: 251206662 Test: atest StylusFirstUsageListenerTest Change-Id: Iea616cde0f6ced7801ae258d66713b1d1dd1d7ee --- .../stylus/StylusFirstUsageListener.kt | 136 +++++++++ .../stylus/StylusFirstUsageListenerTest.kt | 289 ++++++++++++++++++ 2 files changed, 425 insertions(+) create mode 100644 packages/SystemUI/src/com/android/systemui/stylus/StylusFirstUsageListener.kt create mode 100644 packages/SystemUI/tests/src/com/android/systemui/stylus/StylusFirstUsageListenerTest.kt diff --git a/packages/SystemUI/src/com/android/systemui/stylus/StylusFirstUsageListener.kt b/packages/SystemUI/src/com/android/systemui/stylus/StylusFirstUsageListener.kt new file mode 100644 index 0000000000000..154c6e2e31584 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/stylus/StylusFirstUsageListener.kt @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.systemui.stylus + +import android.content.Context +import android.hardware.BatteryState +import android.hardware.input.InputManager +import android.os.Handler +import android.util.Log +import android.view.InputDevice +import androidx.annotation.VisibleForTesting +import com.android.systemui.CoreStartable +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Background +import com.android.systemui.flags.FeatureFlags +import com.android.systemui.flags.Flags +import java.util.concurrent.Executor +import javax.inject.Inject + +/** + * A listener that detects when a stylus has first been used, by detecting 1) the presence of an + * internal SOURCE_STYLUS with a battery, or 2) any added SOURCE_STYLUS device with a bluetooth + * address. + */ +@SysUISingleton +class StylusFirstUsageListener +@Inject +constructor( + private val context: Context, + private val inputManager: InputManager, + private val stylusManager: StylusManager, + private val featureFlags: FeatureFlags, + @Background private val executor: Executor, + @Background private val handler: Handler, +) : CoreStartable, StylusManager.StylusCallback, InputManager.InputDeviceBatteryListener { + + // Set must be only accessed from the background handler, which is the same handler that + // runs the StylusManager callbacks. + private val internalStylusDeviceIds: MutableSet = mutableSetOf() + @VisibleForTesting var hasStarted = false + + override fun start() { + if (true) return // TODO(b/261826950): remove on main + if (hasStarted) return + if (!featureFlags.isEnabled(Flags.TRACK_STYLUS_EVER_USED)) return + if (inputManager.isStylusEverUsed(context)) return + if (!hostDeviceSupportsStylusInput()) return + + hasStarted = true + inputManager.inputDeviceIds.forEach(this::onStylusAdded) + stylusManager.registerCallback(this) + stylusManager.startListener() + } + + override fun onStylusAdded(deviceId: Int) { + if (!hasStarted) return + + val device = inputManager.getInputDevice(deviceId) ?: return + if (device.isExternal || !device.supportsSource(InputDevice.SOURCE_STYLUS)) return + + try { + inputManager.addInputDeviceBatteryListener(deviceId, executor, this) + internalStylusDeviceIds += deviceId + } catch (e: SecurityException) { + Log.e(TAG, "$e: Failed to register battery listener for $deviceId ${device.name}.") + } + } + + override fun onStylusRemoved(deviceId: Int) { + if (!hasStarted) return + + if (!internalStylusDeviceIds.contains(deviceId)) return + try { + inputManager.removeInputDeviceBatteryListener(deviceId, this) + internalStylusDeviceIds.remove(deviceId) + } catch (e: SecurityException) { + Log.e(TAG, "$e: Failed to remove registered battery listener for $deviceId.") + } + } + + override fun onStylusBluetoothConnected(deviceId: Int, btAddress: String) { + if (!hasStarted) return + + onRemoteDeviceFound() + } + + override fun onBatteryStateChanged( + deviceId: Int, + eventTimeMillis: Long, + batteryState: BatteryState + ) { + if (!hasStarted) return + + if (batteryState.isPresent) { + onRemoteDeviceFound() + } + } + + private fun onRemoteDeviceFound() { + inputManager.setStylusEverUsed(context, true) + cleanupListeners() + } + + private fun cleanupListeners() { + stylusManager.unregisterCallback(this) + handler.post { + internalStylusDeviceIds.forEach { + inputManager.removeInputDeviceBatteryListener(it, this) + } + } + } + + private fun hostDeviceSupportsStylusInput(): Boolean { + return inputManager.inputDeviceIds + .asSequence() + .mapNotNull { inputManager.getInputDevice(it) } + .any { it.supportsSource(InputDevice.SOURCE_STYLUS) && !it.isExternal } + } + + companion object { + private val TAG = StylusFirstUsageListener::class.simpleName.orEmpty() + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusFirstUsageListenerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusFirstUsageListenerTest.kt new file mode 100644 index 0000000000000..8dd088f5760c0 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusFirstUsageListenerTest.kt @@ -0,0 +1,289 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.systemui.stylus + +import android.content.Context +import android.hardware.BatteryState +import android.hardware.input.InputManager +import android.os.Handler +import android.testing.AndroidTestingRunner +import android.view.InputDevice +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.flags.FeatureFlags +import com.android.systemui.flags.Flags +import com.android.systemui.util.concurrency.FakeExecutor +import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.whenever +import com.android.systemui.util.time.FakeSystemClock +import org.junit.Before +import org.junit.Ignore +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.never +import org.mockito.Mockito.times +import org.mockito.Mockito.verify +import org.mockito.Mockito.verifyNoMoreInteractions +import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.MockitoAnnotations + +@RunWith(AndroidTestingRunner::class) +@SmallTest +@Ignore("TODO(b/20579491): unignore on main") +class StylusFirstUsageListenerTest : SysuiTestCase() { + @Mock lateinit var context: Context + @Mock lateinit var inputManager: InputManager + @Mock lateinit var stylusManager: StylusManager + @Mock lateinit var featureFlags: FeatureFlags + @Mock lateinit var internalStylusDevice: InputDevice + @Mock lateinit var otherDevice: InputDevice + @Mock lateinit var externalStylusDevice: InputDevice + @Mock lateinit var batteryState: BatteryState + @Mock lateinit var handler: Handler + + private lateinit var stylusListener: StylusFirstUsageListener + + @Before + fun setUp() { + MockitoAnnotations.initMocks(this) + whenever(featureFlags.isEnabled(Flags.TRACK_STYLUS_EVER_USED)).thenReturn(true) + whenever(inputManager.isStylusEverUsed(context)).thenReturn(false) + + stylusListener = + StylusFirstUsageListener( + context, + inputManager, + stylusManager, + featureFlags, + EXECUTOR, + handler + ) + stylusListener.hasStarted = false + + whenever(handler.post(any())).thenAnswer { + (it.arguments[0] as Runnable).run() + true + } + + whenever(otherDevice.supportsSource(InputDevice.SOURCE_STYLUS)).thenReturn(false) + whenever(internalStylusDevice.supportsSource(InputDevice.SOURCE_STYLUS)).thenReturn(true) + whenever(internalStylusDevice.isExternal).thenReturn(false) + whenever(externalStylusDevice.supportsSource(InputDevice.SOURCE_STYLUS)).thenReturn(true) + whenever(externalStylusDevice.isExternal).thenReturn(true) + + whenever(inputManager.inputDeviceIds).thenReturn(intArrayOf()) + whenever(inputManager.getInputDevice(OTHER_DEVICE_ID)).thenReturn(otherDevice) + whenever(inputManager.getInputDevice(INTERNAL_STYLUS_DEVICE_ID)) + .thenReturn(internalStylusDevice) + whenever(inputManager.getInputDevice(EXTERNAL_STYLUS_DEVICE_ID)) + .thenReturn(externalStylusDevice) + } + + @Test + fun start_flagDisabled_doesNotRegister() { + whenever(featureFlags.isEnabled(Flags.TRACK_STYLUS_EVER_USED)).thenReturn(false) + + stylusListener.start() + + verify(stylusManager, never()).registerCallback(any()) + verify(inputManager, never()).setStylusEverUsed(context, true) + } + + @Test + fun start_toggleHasStarted() { + stylusListener.start() + + assert(stylusListener.hasStarted) + } + + @Test + fun start_hasStarted_doesNotRegister() { + stylusListener.hasStarted = true + + stylusListener.start() + + verify(stylusManager, never()).registerCallback(any()) + } + + @Test + fun start_hostDeviceDoesNotSupportStylus_doesNotRegister() { + whenever(inputManager.inputDeviceIds).thenReturn(intArrayOf(OTHER_DEVICE_ID)) + + stylusListener.start() + + verify(stylusManager, never()).registerCallback(any()) + verify(inputManager, never()).setStylusEverUsed(context, true) + } + + @Test + fun start_stylusEverUsed_doesNotRegister() { + whenever(inputManager.inputDeviceIds) + .thenReturn(intArrayOf(OTHER_DEVICE_ID, INTERNAL_STYLUS_DEVICE_ID)) + whenever(inputManager.isStylusEverUsed(context)).thenReturn(true) + + stylusListener.start() + + verify(stylusManager, never()).registerCallback(any()) + verify(inputManager, never()).setStylusEverUsed(context, true) + } + + @Test + fun start_hostDeviceSupportsStylus_registersListener() { + whenever(inputManager.inputDeviceIds) + .thenReturn(intArrayOf(OTHER_DEVICE_ID, INTERNAL_STYLUS_DEVICE_ID)) + + stylusListener.start() + + verify(stylusManager).registerCallback(any()) + verify(inputManager, never()).setStylusEverUsed(context, true) + } + + @Test + fun onStylusAdded_hasNotStarted_doesNotRegisterListener() { + stylusListener.hasStarted = false + + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + + verifyZeroInteractions(inputManager) + } + + @Test + fun onStylusAdded_internalStylus_registersListener() { + stylusListener.hasStarted = true + + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + + verify(inputManager, times(1)) + .addInputDeviceBatteryListener(INTERNAL_STYLUS_DEVICE_ID, EXECUTOR, stylusListener) + } + + @Test + fun onStylusAdded_externalStylus_doesNotRegisterListener() { + stylusListener.hasStarted = true + + stylusListener.onStylusAdded(EXTERNAL_STYLUS_DEVICE_ID) + + verify(inputManager, never()).addInputDeviceBatteryListener(any(), any(), any()) + } + + @Test + fun onStylusAdded_otherDevice_doesNotRegisterListener() { + stylusListener.onStylusAdded(OTHER_DEVICE_ID) + + verify(inputManager, never()).addInputDeviceBatteryListener(any(), any(), any()) + } + + @Test + fun onStylusRemoved_registeredDevice_unregistersListener() { + stylusListener.hasStarted = true + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + + stylusListener.onStylusRemoved(INTERNAL_STYLUS_DEVICE_ID) + + verify(inputManager, times(1)) + .removeInputDeviceBatteryListener(INTERNAL_STYLUS_DEVICE_ID, stylusListener) + } + + @Test + fun onStylusRemoved_hasNotStarted_doesNotUnregisterListener() { + stylusListener.hasStarted = false + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + + stylusListener.onStylusRemoved(INTERNAL_STYLUS_DEVICE_ID) + + verifyZeroInteractions(inputManager) + } + + @Test + fun onStylusRemoved_unregisteredDevice_doesNotUnregisterListener() { + stylusListener.hasStarted = true + + stylusListener.onStylusRemoved(INTERNAL_STYLUS_DEVICE_ID) + + verifyNoMoreInteractions(inputManager) + } + + @Test + fun onStylusBluetoothConnected_updateStylusFlagAndUnregisters() { + stylusListener.hasStarted = true + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + + stylusListener.onStylusBluetoothConnected(EXTERNAL_STYLUS_DEVICE_ID, "ANY") + + verify(inputManager).setStylusEverUsed(context, true) + verify(inputManager, times(1)) + .removeInputDeviceBatteryListener(INTERNAL_STYLUS_DEVICE_ID, stylusListener) + verify(stylusManager).unregisterCallback(stylusListener) + } + + @Test + fun onStylusBluetoothConnected_hasNotStarted_doesNoting() { + stylusListener.hasStarted = false + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + + stylusListener.onStylusBluetoothConnected(EXTERNAL_STYLUS_DEVICE_ID, "ANY") + + verifyZeroInteractions(inputManager) + verifyZeroInteractions(stylusManager) + } + + @Test + fun onBatteryStateChanged_batteryPresent_updateStylusFlagAndUnregisters() { + stylusListener.hasStarted = true + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + whenever(batteryState.isPresent).thenReturn(true) + + stylusListener.onBatteryStateChanged(0, 1, batteryState) + + verify(inputManager).setStylusEverUsed(context, true) + verify(inputManager, times(1)) + .removeInputDeviceBatteryListener(INTERNAL_STYLUS_DEVICE_ID, stylusListener) + verify(stylusManager).unregisterCallback(stylusListener) + } + + @Test + fun onBatteryStateChanged_batteryNotPresent_doesNotUpdateFlagOrUnregister() { + stylusListener.hasStarted = true + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + whenever(batteryState.isPresent).thenReturn(false) + + stylusListener.onBatteryStateChanged(0, 1, batteryState) + + verifyZeroInteractions(stylusManager) + verify(inputManager, never()) + .removeInputDeviceBatteryListener(INTERNAL_STYLUS_DEVICE_ID, stylusListener) + } + + @Test + fun onBatteryStateChanged_hasNotStarted_doesNothing() { + stylusListener.hasStarted = false + stylusListener.onStylusAdded(INTERNAL_STYLUS_DEVICE_ID) + whenever(batteryState.isPresent).thenReturn(false) + + stylusListener.onBatteryStateChanged(0, 1, batteryState) + + verifyZeroInteractions(inputManager) + verifyZeroInteractions(stylusManager) + } + + companion object { + private const val OTHER_DEVICE_ID = 0 + private const val INTERNAL_STYLUS_DEVICE_ID = 1 + private const val EXTERNAL_STYLUS_DEVICE_ID = 2 + private val EXECUTOR = FakeExecutor(FakeSystemClock()) + } +} From 6ddd0586cde96808f48fb55d66b6c2e52a83af0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wilczy=C5=84ski?= Date: Thu, 6 Oct 2022 13:46:30 +0000 Subject: [PATCH 23/36] Use a brightness sensor to determine the screen's initial brightness - Create a controller to listen to a brightness sensor when the screen is off - Estimate the ambient lux based on the sensor reading - Determine the brightness using the ambient lux estimate - Specify the sensor and the sensor value to lux mapping in the config Bug: 193224604 Test: Use the device in a bright room, turn the screen off, go to a dark room, turn the screen on, see that the screen doesn't start as too bright. Test: atest ScreenOffBrightnessSensorControllerTest Test: atest DisplayDeviceConfigTest Change-Id: Ib4c4d9e0d6b385b0d309be6b8c27b71af72d4ecc Merged-In: Ib4c4d9e0d6b385b0d309be6b8c27b71af72d4ecc --- .../server/display/DisplayDeviceConfig.java | 57 +++++++ .../display/DisplayPowerController.java | 52 +++++- .../ScreenOffBrightnessSensorController.java | 127 +++++++++++++++ .../display-device-config.xsd | 14 ++ .../display-device-config/schema/current.txt | 9 ++ .../display/DisplayDeviceConfigTest.java | 21 +++ ...reenOffBrightnessSensorControllerTest.java | 148 ++++++++++++++++++ .../com/android/server/display/TestUtils.java | 4 +- 8 files changed, 429 insertions(+), 3 deletions(-) create mode 100644 services/core/java/com/android/server/display/ScreenOffBrightnessSensorController.java create mode 100644 services/tests/servicestests/src/com/android/server/display/ScreenOffBrightnessSensorControllerTest.java diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index 401d184dd7fb9..5bdfa70096c05 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -46,6 +46,7 @@ import com.android.server.display.config.DisplayConfiguration; import com.android.server.display.config.DisplayQuirks; import com.android.server.display.config.HbmTiming; import com.android.server.display.config.HighBrightnessMode; +import com.android.server.display.config.IntegerArray; import com.android.server.display.config.NitsMap; import com.android.server.display.config.Point; import com.android.server.display.config.RefreshRateConfigs; @@ -213,6 +214,10 @@ import javax.xml.datatype.DatatypeConfigurationException; * android.sensor.light * 1234 Ambient Light Sensor * + * + * com.google.sensor.binned_brightness + * Binned Brightness 0 (wake-up) + * * * android.sensor.proximity * 1234 Proximity Sensor @@ -368,6 +373,13 @@ import javax.xml.datatype.DatatypeConfigurationException; * * * + * + * -1 + * 0 + * 5 + * 80 + * 1500 + * * * } * @@ -428,6 +440,9 @@ public class DisplayDeviceConfig { // The details of the ambient light sensor associated with this display. private final SensorData mAmbientLightSensor = new SensorData(); + // The details of the doze brightness sensor associated with this display. + private final SensorData mScreenOffBrightnessSensor = new SensorData(); + // The details of the proximity sensor associated with this display. private final SensorData mProximitySensor = new SensorData(); @@ -523,6 +538,9 @@ public class DisplayDeviceConfig { private float[] mAmbientDarkeningLevelsIdle = DEFAULT_AMBIENT_THRESHOLD_LEVELS; private float[] mAmbientDarkeningPercentagesIdle = DEFAULT_AMBIENT_DARKENING_THRESHOLDS; + // A mapping between screen off sensor values and lux values + private int[] mScreenOffBrightnessSensorValueToLux; + private Spline mBrightnessToBacklightSpline; private Spline mBacklightToBrightnessSpline; private Spline mBacklightToNitsSpline; @@ -1198,6 +1216,10 @@ public class DisplayDeviceConfig { return mAmbientLightSensor; } + SensorData getScreenOffBrightnessSensor() { + return mScreenOffBrightnessSensor; + } + SensorData getProximitySensor() { return mProximitySensor; } @@ -1321,6 +1343,14 @@ public class DisplayDeviceConfig { return mHighAmbientBrightnessThresholds; } + /** + * @return A mapping from screen off brightness sensor readings to lux values. This estimates + * the ambient lux when the screen is off to determine the initial brightness + */ + public int[] getScreenOffBrightnessSensorValueToLux() { + return mScreenOffBrightnessSensorValueToLux; + } + @Override public String toString() { return "DisplayDeviceConfig{" @@ -1399,6 +1429,7 @@ public class DisplayDeviceConfig { mScreenDarkeningPercentagesIdle) + "\n" + ", mAmbientLightSensor=" + mAmbientLightSensor + + ", mScreenOffBrightnessSensor=" + mScreenOffBrightnessSensor + ", mProximitySensor=" + mProximitySensor + ", mRefreshRateLimitations= " + Arrays.toString(mRefreshRateLimitations.toArray()) + ", mDensityMapping= " + mDensityMapping @@ -1421,6 +1452,9 @@ public class DisplayDeviceConfig { + Arrays.toString(mHighDisplayBrightnessThresholds) + ", mHighAmbientBrightnessThresholds= " + Arrays.toString(mHighAmbientBrightnessThresholds) + + "\n" + + ", mScreenOffBrightnessSensorValueToLux=" + Arrays.toString( + mScreenOffBrightnessSensorValueToLux) + "}"; } @@ -1474,11 +1508,13 @@ public class DisplayDeviceConfig { loadQuirks(config); loadBrightnessRamps(config); loadAmbientLightSensorFromDdc(config); + loadScreenOffBrightnessSensorFromDdc(config); loadProxSensorFromDdc(config); loadAmbientHorizonFromDdc(config); loadBrightnessChangeThresholds(config); loadAutoBrightnessConfigValues(config); loadRefreshRateSetting(config); + loadScreenOffBrightnessSensorValueToLuxFromDdc(config); } else { Slog.w(TAG, "DisplayDeviceConfig file is null"); } @@ -2175,6 +2211,14 @@ public class DisplayDeviceConfig { mProximitySensor.type = ""; } + private void loadScreenOffBrightnessSensorFromDdc(DisplayConfiguration config) { + final SensorDetails sensorDetails = config.getScreenOffBrightnessSensor(); + if (sensorDetails != null) { + mScreenOffBrightnessSensor.type = sensorDetails.getType(); + mScreenOffBrightnessSensor.name = sensorDetails.getName(); + } + } + private void loadProxSensorFromDdc(DisplayConfiguration config) { SensorDetails sensorDetails = config.getProxSensor(); if (sensorDetails != null) { @@ -2587,6 +2631,19 @@ public class DisplayDeviceConfig { && mDdcAutoBrightnessAvailable; } + private void loadScreenOffBrightnessSensorValueToLuxFromDdc(DisplayConfiguration config) { + IntegerArray sensorValueToLux = config.getScreenOffBrightnessSensorValueToLux(); + if (sensorValueToLux == null) { + return; + } + + List items = sensorValueToLux.getItem(); + mScreenOffBrightnessSensorValueToLux = new int[items.size()]; + for (int i = 0; i < items.size(); i++) { + mScreenOffBrightnessSensorValueToLux[i] = items.get(i).intValue(); + } + } + static class SensorData { public String type; public String name; diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 2fc6fd2254a76..24f39cbbd3b7d 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -411,7 +411,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call @Nullable private AutomaticBrightnessController mAutomaticBrightnessController; + // The controller for the sensor used to estimate ambient lux while the display is off. + @Nullable + private ScreenOffBrightnessSensorController mScreenOffBrightnessSensorController; + private Sensor mLightSensor; + private Sensor mScreenOffBrightnessSensor; // The mappers between ambient lux, display backlight values, and display brightness. // We will switch between the idle mapper and active mapper in AutomaticBrightnessController. @@ -1088,6 +1093,19 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessEventRingBuffer = new RingBuffer<>(BrightnessEvent.class, RINGBUFFER_MAX); + + loadScreenOffBrightnessSensor(); + int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux(); + if (mScreenOffBrightnessSensor != null && sensorValueToLux != null) { + mScreenOffBrightnessSensorController = new ScreenOffBrightnessSensorController( + mSensorManager, + mScreenOffBrightnessSensor, + mHandler, + SystemClock::uptimeMillis, + sensorValueToLux, + mInteractiveModeBrightnessMapper + ); + } } else { mUseSoftwareAutoBrightnessConfig = false; } @@ -1265,6 +1283,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } assert(state != Display.STATE_UNKNOWN); + if (mScreenOffBrightnessSensorController != null) { + mScreenOffBrightnessSensorController.setLightSensorEnabled(mUseAutoBrightness + && (state == Display.STATE_OFF || (state == Display.STATE_DOZE + && !mAllowAutoBrightnessWhileDozingConfig))); + } + boolean skipRampBecauseOfProximityChangeToNegative = false; // Apply the proximity sensor. if (mProximitySensor != null) { @@ -1442,6 +1466,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call updateScreenBrightnessSetting = mCurrentScreenBrightnessSetting != brightnessState; mAppliedAutoBrightness = true; mBrightnessReasonTemp.setReason(BrightnessReason.REASON_AUTOMATIC); + if (mScreenOffBrightnessSensorController != null) { + mScreenOffBrightnessSensorController.setLightSensorEnabled(false); + } } else { mAppliedAutoBrightness = false; } @@ -1469,6 +1496,19 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessReasonTemp.setReason(BrightnessReason.REASON_DOZE_DEFAULT); } + // The ALS is not available yet - use the screen off sensor to determine the initial + // brightness + if (Float.isNaN(brightnessState) && autoBrightnessEnabled + && mScreenOffBrightnessSensorController != null) { + brightnessState = mScreenOffBrightnessSensorController.getAutomaticScreenBrightness(); + if (isValidBrightnessValue(brightnessState)) { + brightnessState = clampScreenBrightness(brightnessState); + updateScreenBrightnessSetting = mCurrentScreenBrightnessSetting != brightnessState; + mBrightnessReasonTemp.setReason( + BrightnessReason.REASON_SCREEN_OFF_BRIGHTNESS_SENSOR); + } + } + // Apply manual brightness. if (Float.isNaN(brightnessState)) { brightnessState = clampScreenBrightness(mCurrentScreenBrightnessSetting); @@ -2038,6 +2078,14 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call fallbackType); } + private void loadScreenOffBrightnessSensor() { + DisplayDeviceConfig.SensorData screenOffBrightnessSensor = + mDisplayDeviceConfig.getScreenOffBrightnessSensor(); + mScreenOffBrightnessSensor = SensorUtils.findSensor(mSensorManager, + screenOffBrightnessSensor.type, screenOffBrightnessSensor.name, + SensorUtils.NO_FALLBACK); + } + private void loadProximitySensor() { if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { return; @@ -3186,7 +3234,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call static final int REASON_OVERRIDE = 7; static final int REASON_TEMPORARY = 8; static final int REASON_BOOST = 9; - static final int REASON_MAX = REASON_BOOST; + static final int REASON_SCREEN_OFF_BRIGHTNESS_SENSOR = 10; + static final int REASON_MAX = REASON_SCREEN_OFF_BRIGHTNESS_SENSOR; static final int MODIFIER_DIMMED = 0x1; static final int MODIFIER_LOW_POWER = 0x2; @@ -3296,6 +3345,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call case REASON_OVERRIDE: return "override"; case REASON_TEMPORARY: return "temporary"; case REASON_BOOST: return "boost"; + case REASON_SCREEN_OFF_BRIGHTNESS_SENSOR: return "screen_off_brightness_sensor"; default: return Integer.toString(reason); } } diff --git a/services/core/java/com/android/server/display/ScreenOffBrightnessSensorController.java b/services/core/java/com/android/server/display/ScreenOffBrightnessSensorController.java new file mode 100644 index 0000000000000..6f50dac07b99a --- /dev/null +++ b/services/core/java/com/android/server/display/ScreenOffBrightnessSensorController.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.display; + +import android.annotation.Nullable; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.os.Handler; +import android.os.PowerManager; +import android.util.IndentingPrintWriter; + +import com.android.internal.annotations.VisibleForTesting; + +import java.io.PrintWriter; + +/** + * Controls the light sensor when the screen is off. The sensor used here does not report lux values + * but an index that needs to be mapped to a lux value. + */ +public class ScreenOffBrightnessSensorController implements SensorEventListener { + private static final String TAG = "ScreenOffBrightnessSensorController"; + + private static final int SENSOR_INVALID_VALUE = -1; + private static final long SENSOR_VALUE_VALID_TIME_MILLIS = 1500; + + private final Handler mHandler; + private final Clock mClock; + private final SensorManager mSensorManager; + private final Sensor mLightSensor; + private final int[] mSensorValueToLux; + + private boolean mRegistered; + private int mLastSensorValue = SENSOR_INVALID_VALUE; + private long mSensorDisableTime = -1; + + // The mapper to translate ambient lux to screen brightness in the range [0, 1.0]. + @Nullable + private final BrightnessMappingStrategy mBrightnessMapper; + + public ScreenOffBrightnessSensorController( + SensorManager sensorManager, + Sensor lightSensor, + Handler handler, + Clock clock, + int[] sensorValueToLux, + BrightnessMappingStrategy brightnessMapper) { + mSensorManager = sensorManager; + mLightSensor = lightSensor; + mHandler = handler; + mClock = clock; + mSensorValueToLux = sensorValueToLux; + mBrightnessMapper = brightnessMapper; + } + + @Override + public void onSensorChanged(SensorEvent event) { + if (mRegistered) { + mLastSensorValue = (int) event.values[0]; + } + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + } + + void setLightSensorEnabled(boolean enabled) { + if (enabled && !mRegistered) { + // Wait until we get an event from the sensor indicating ready. + mRegistered = mSensorManager.registerListener(this, mLightSensor, + SensorManager.SENSOR_DELAY_NORMAL, mHandler); + mLastSensorValue = SENSOR_INVALID_VALUE; + } else if (!enabled && mRegistered) { + mSensorManager.unregisterListener(this); + mRegistered = false; + mSensorDisableTime = mClock.uptimeMillis(); + } + } + + float getAutomaticScreenBrightness() { + if (mLastSensorValue < 0 || mLastSensorValue >= mSensorValueToLux.length + || (!mRegistered + && mClock.uptimeMillis() - mSensorDisableTime > SENSOR_VALUE_VALID_TIME_MILLIS)) { + return PowerManager.BRIGHTNESS_INVALID_FLOAT; + } + + int lux = mSensorValueToLux[mLastSensorValue]; + if (lux < 0) { + return PowerManager.BRIGHTNESS_INVALID_FLOAT; + } + + return mBrightnessMapper.getBrightness(lux); + } + + /** Dump current state */ + public void dump(PrintWriter pw) { + pw.println("ScreenOffBrightnessSensorController:"); + IndentingPrintWriter idpw = new IndentingPrintWriter(pw); + idpw.increaseIndent(); + idpw.println("registered=" + mRegistered); + idpw.println("lastSensorValue=" + mLastSensorValue); + } + + /** Functional interface for providing time. */ + @VisibleForTesting + interface Clock { + /** + * Returns current time in milliseconds since boot, not counting time spent in deep sleep. + */ + long uptimeMillis(); + } +} diff --git a/services/core/xsd/display-device-config/display-device-config.xsd b/services/core/xsd/display-device-config/display-device-config.xsd index 7bc89313c75e3..f628fbad892d4 100644 --- a/services/core/xsd/display-device-config/display-device-config.xsd +++ b/services/core/xsd/display-device-config/display-device-config.xsd @@ -74,6 +74,9 @@ + + + @@ -109,6 +112,11 @@ + + + + @@ -485,4 +493,10 @@ + + + + + + diff --git a/services/core/xsd/display-device-config/schema/current.txt b/services/core/xsd/display-device-config/schema/current.txt index 6276edaf3ebc8..cb081791ffce0 100644 --- a/services/core/xsd/display-device-config/schema/current.txt +++ b/services/core/xsd/display-device-config/schema/current.txt @@ -98,6 +98,8 @@ package com.android.server.display.config { method public final java.math.BigInteger getScreenBrightnessRampIncreaseMaxMillis(); method public final java.math.BigDecimal getScreenBrightnessRampSlowDecrease(); method public final java.math.BigDecimal getScreenBrightnessRampSlowIncrease(); + method public final com.android.server.display.config.SensorDetails getScreenOffBrightnessSensor(); + method public final com.android.server.display.config.IntegerArray getScreenOffBrightnessSensorValueToLux(); method @NonNull public final com.android.server.display.config.ThermalThrottling getThermalThrottling(); method public final void setAmbientBrightnessChangeThresholds(@NonNull com.android.server.display.config.Thresholds); method public final void setAmbientBrightnessChangeThresholdsIdle(com.android.server.display.config.Thresholds); @@ -120,6 +122,8 @@ package com.android.server.display.config { method public final void setScreenBrightnessRampIncreaseMaxMillis(java.math.BigInteger); method public final void setScreenBrightnessRampSlowDecrease(java.math.BigDecimal); method public final void setScreenBrightnessRampSlowIncrease(java.math.BigDecimal); + method public final void setScreenOffBrightnessSensor(com.android.server.display.config.SensorDetails); + method public final void setScreenOffBrightnessSensorValueToLux(com.android.server.display.config.IntegerArray); method public final void setThermalThrottling(@NonNull com.android.server.display.config.ThermalThrottling); } @@ -160,6 +164,11 @@ package com.android.server.display.config { method public final void setTransitionPoint_all(@NonNull java.math.BigDecimal); } + public class IntegerArray { + ctor public IntegerArray(); + method public java.util.List getItem(); + } + public class NitsMap { ctor public NitsMap(); method public String getInterpolation(); diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java index 6b705aaf9721d..86c59379a61ef 100644 --- a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java @@ -161,6 +161,14 @@ public final class DisplayDeviceConfigTest { assertArrayEquals(new int[]{70, 80}, mDisplayDeviceConfig.getHighAmbientBrightnessThresholds()); + assertEquals("sensor_12345", + mDisplayDeviceConfig.getScreenOffBrightnessSensor().type); + assertEquals("Sensor 12345", + mDisplayDeviceConfig.getScreenOffBrightnessSensor().name); + + assertArrayEquals(new int[]{-1, 10, 20, 30, 40}, + mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux()); + // Todo(brup): Add asserts for BrightnessThrottlingData, DensityMapping, // HighBrightnessModeData AmbientLightSensor, RefreshRateLimitations and ProximitySensor. } @@ -232,6 +240,7 @@ public final class DisplayDeviceConfigTest { HIGH_BRIGHTNESS_THRESHOLD_OF_PEAK_REFRESH_RATE); assertArrayEquals(mDisplayDeviceConfig.getHighAmbientBrightnessThresholds(), HIGH_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE); + // Todo(brup): Add asserts for BrightnessThrottlingData, DensityMapping, // HighBrightnessModeData AmbientLightSensor, RefreshRateLimitations and ProximitySensor. } @@ -283,6 +292,10 @@ public final class DisplayDeviceConfigTest { + "light\n" + "false\n" + "\n" + + "\n" + + "sensor_12345\n" + + "Sensor 12345\n" + + "\n" + "\n" + "\n" + "10\n" @@ -467,6 +480,13 @@ public final class DisplayDeviceConfigTest { + "\n" + "\n" + "\n" + + "\n" + + "-1\n" + + "10\n" + + "20\n" + + "30\n" + + "40\n" + + "\n" + "\n"; } @@ -544,6 +564,7 @@ public final class DisplayDeviceConfigTest { when(mResources.getIntArray( R.array.config_highAmbientBrightnessThresholdsOfFixedRefreshRate)) .thenReturn(HIGH_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE); + mDisplayDeviceConfig = DisplayDeviceConfig.create(mContext, true); } diff --git a/services/tests/servicestests/src/com/android/server/display/ScreenOffBrightnessSensorControllerTest.java b/services/tests/servicestests/src/com/android/server/display/ScreenOffBrightnessSensorControllerTest.java new file mode 100644 index 0000000000000..ea04a193e5693 --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/display/ScreenOffBrightnessSensorControllerTest.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.display; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.hardware.Sensor; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.os.Handler; +import android.os.PowerManager; +import android.platform.test.annotations.Presubmit; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.server.testutils.OffsettableClock; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +@SmallTest +@Presubmit +@RunWith(AndroidJUnit4.class) +public class ScreenOffBrightnessSensorControllerTest { + + private static final int[] SENSOR_TO_LUX = new int[]{-1, 10, 20, 30, 40}; + + private ScreenOffBrightnessSensorController mController; + private OffsettableClock mClock; + private Sensor mLightSensor; + + @Mock SensorManager mSensorManager; + @Mock Handler mNoOpHandler; + @Mock BrightnessMappingStrategy mBrightnessMappingStrategy; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + + mClock = new OffsettableClock.Stopped(); + mLightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); + mController = new ScreenOffBrightnessSensorController( + mSensorManager, + mLightSensor, + mNoOpHandler, + mClock::now, + SENSOR_TO_LUX, + mBrightnessMappingStrategy + ); + } + + @Test + public void testBrightness() throws Exception { + when(mSensorManager.registerListener(any(SensorEventListener.class), eq(mLightSensor), + eq(SensorManager.SENSOR_DELAY_NORMAL), any(Handler.class))) + .thenReturn(true); + mController.setLightSensorEnabled(true); + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(SensorEventListener.class); + verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), + eq(SensorManager.SENSOR_DELAY_NORMAL), any(Handler.class)); + SensorEventListener listener = listenerCaptor.getValue(); + + listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); + assertEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT, + mController.getAutomaticScreenBrightness(), 0); + + int sensorValue = 1; + float brightness = 0.2f; + listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, sensorValue)); + when(mBrightnessMappingStrategy.getBrightness(SENSOR_TO_LUX[sensorValue])) + .thenReturn(brightness); + assertEquals(brightness, mController.getAutomaticScreenBrightness(), 0); + + sensorValue = 2; + brightness = 0.4f; + listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, sensorValue)); + when(mBrightnessMappingStrategy.getBrightness(SENSOR_TO_LUX[sensorValue])) + .thenReturn(brightness); + assertEquals(brightness, mController.getAutomaticScreenBrightness(), 0); + + sensorValue = 3; + brightness = 0.6f; + listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, sensorValue)); + when(mBrightnessMappingStrategy.getBrightness(SENSOR_TO_LUX[sensorValue])) + .thenReturn(brightness); + assertEquals(brightness, mController.getAutomaticScreenBrightness(), 0); + + sensorValue = 4; + brightness = 0.8f; + listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, sensorValue)); + when(mBrightnessMappingStrategy.getBrightness(SENSOR_TO_LUX[sensorValue])) + .thenReturn(brightness); + assertEquals(brightness, mController.getAutomaticScreenBrightness(), 0); + + sensorValue = 5; + listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, sensorValue)); + assertEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT, + mController.getAutomaticScreenBrightness(), 0); + } + + @Test + public void testSensorValueValidTime() throws Exception { + when(mSensorManager.registerListener(any(SensorEventListener.class), eq(mLightSensor), + eq(SensorManager.SENSOR_DELAY_NORMAL), any(Handler.class))) + .thenReturn(true); + mController.setLightSensorEnabled(true); + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(SensorEventListener.class); + verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), + eq(SensorManager.SENSOR_DELAY_NORMAL), any(Handler.class)); + SensorEventListener listener = listenerCaptor.getValue(); + + listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 1)); + mController.setLightSensorEnabled(false); + assertNotEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT, + mController.getAutomaticScreenBrightness(), 0); + + mClock.fastForward(2000); + mController.setLightSensorEnabled(false); + assertEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT, + mController.getAutomaticScreenBrightness(), 0); + } +} diff --git a/services/tests/servicestests/src/com/android/server/display/TestUtils.java b/services/tests/servicestests/src/com/android/server/display/TestUtils.java index 0454587bfefe6..f3f04b8bf5ec7 100644 --- a/services/tests/servicestests/src/com/android/server/display/TestUtils.java +++ b/services/tests/servicestests/src/com/android/server/display/TestUtils.java @@ -28,13 +28,13 @@ import java.lang.reflect.Method; public final class TestUtils { - public static SensorEvent createSensorEvent(Sensor sensor, int lux) throws Exception { + public static SensorEvent createSensorEvent(Sensor sensor, int value) throws Exception { final Constructor constructor = SensorEvent.class.getDeclaredConstructor(int.class); constructor.setAccessible(true); final SensorEvent event = constructor.newInstance(1); event.sensor = sensor; - event.values[0] = lux; + event.values[0] = value; event.timestamp = SystemClock.elapsedRealtimeNanos(); return event; } From b642af90a18f7da1a7413aebe819bdb67576025f Mon Sep 17 00:00:00 2001 From: Johannes Gallmann Date: Fri, 14 Oct 2022 09:58:09 +0000 Subject: [PATCH 24/36] Fix notification inline reply animation This CL fixes the animation for the appearance of the inline reply RemoteInputView, bringing it as close to the Direct spec (https://direct.googleplex.com/#/spec/283080003) as possible. Intentional deviations from the Direct specs are the following: 1. The animation duration is 360 ms instead of 500 ms (in order to be consistent with other notification shade resize animations) 2. The interpolator is FAST_IN_SLOW_OUT, which might differ slightly from the Direct specs "DECELERATE_WITH_EASING" interpolator. (same reason as for 1.) 3. The height of the notification is increased slightly more than in the Direct spec. (This is done in order to keep the paddings and margins as they currently are. It seems to me that if there was more text in the Direct visualization, the top margin of the inline reply EditText would be too small.) This CL does not fix the following related issues: 1. The collapsed heads up view does not allocate enough space to fit the RemoteInputView. This causes the top part of the notification to get shrunk (Icons jump up by a few pixels), when clicking the "Reply" button. It also affects the beginning of the RemoteInputView expand animation to be partly shifted out of the HeadsUp View. 2. When defocusing the RemoteInputView, the "Reply" button is clipped during the beginning of the animation. 3. When focusing the RemoteInputView, the notification shade is not scrolled correctly. (Keyboard is overlapping RemoteInputView) 4. The expand/collapse animation is broken while the RemoteInputView is visible. I will address these issues in seperate CLs. Bug: 174148361 Test: atest RemoteInputViewTest, Manual, i.e. posting various types of Notifications from the Notify2-RVC application with a reply action added to them. Then observing the animations visually and analyzing frames from screen recordings. Change-Id: I8b2e821b254d6d7fdfbca22426eceafff95d5322 --- .../notification_material_action_list.xml | 1 + packages/SystemUI/Android.bp | 1 + packages/SystemUI/res/layout/remote_input.xml | 1 + .../src/com/android/systemui/flags/Flags.kt | 5 + .../NotificationRemoteInputManager.java | 6 +- .../row/NotificationContentView.java | 2 +- .../statusbar/policy/RemoteInputView.java | 194 ++++++++++++++++-- .../policy/RemoteInputViewController.kt | 11 +- .../statusbar/policy/RemoteInputViewTest.java | 68 +++++- 9 files changed, 268 insertions(+), 21 deletions(-) diff --git a/core/res/res/layout/notification_material_action_list.xml b/core/res/res/layout/notification_material_action_list.xml index a5608af7a0819..7aef82a8aa3a6 100644 --- a/core/res/res/layout/notification_material_action_list.xml +++ b/core/res/res/layout/notification_material_action_list.xml @@ -27,6 +27,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="end" + android:layout_gravity="bottom" android:orientation="horizontal" android:background="@color/notification_action_list_background_color" > diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index e624441ca7771..25fb24a3417fc 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -221,6 +221,7 @@ android_library { "WindowManager-Shell", "LowLightDreamLib", "motion_tool_lib", + "androidx.core_core-animation-testing-nodeps", ], } diff --git a/packages/SystemUI/res/layout/remote_input.xml b/packages/SystemUI/res/layout/remote_input.xml index a5b2f80a31587..f4b0a45a8d326 100644 --- a/packages/SystemUI/res/layout/remote_input.xml +++ b/packages/SystemUI/res/layout/remote_input.xml @@ -20,6 +20,7 @@ setAttachment(null)); - LinearLayout contentView = findViewById(R.id.remote_input_content); - contentView.setBackground(mContentBackground); + mContentView = findViewById(R.id.remote_input_content); + mContentView.setBackground(mContentBackground); mEditText = findViewById(R.id.remote_input_text); mEditText.setInnerFocusable(false); // TextView initializes the spell checked when the view is attached to a window. @@ -398,20 +418,70 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene return true; } - private void onDefocus(boolean animate, boolean logClose) { + /** + * View will ensure to use at most the provided defocusTargetHeight, when defocusing animated. + * This is to ensure that the parent can resize itself to the targetHeight while the defocus + * animation of the RemoteInputView is running. + * + * @param defocusTargetHeight The target height the parent will resize itself to. If null, the + * RemoteInputView will not resize itself. + */ + public void setDefocusTargetHeight(Integer defocusTargetHeight) { + mDefocusTargetHeight = defocusTargetHeight; + } + + @VisibleForTesting + void onDefocus(boolean animate, boolean logClose) { mController.removeRemoteInput(mEntry, mToken); mEntry.remoteInputText = mEditText.getText(); // During removal, we get reattached and lose focus. Not hiding in that // case to prevent flicker. if (!mRemoved) { - if (animate && mRevealParams != null && mRevealParams.radius > 0) { - Animator reveal = mRevealParams.createCircularHideAnimator(this); - reveal.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN); - reveal.setDuration(StackStateAnimator.ANIMATION_DURATION_CLOSE_REMOTE_INPUT); - reveal.addListener(new AnimatorListenerAdapter() { + if (animate && mIsFocusAnimationFlagActive) { + Animator animator = getDefocusAnimator(); + + // When defocusing, the notification needs to shrink. Therefore, we need to free + // up the space that is needed for the RemoteInputView. This is done by setting + // a negative top margin of the height difference of the RemoteInputView and its + // sibling (the actions_container_layout containing the Reply button) + if (mDefocusTargetHeight != null && mDefocusTargetHeight < getHeight() + && mDefocusTargetHeight >= 0 + && getLayoutParams() instanceof FrameLayout.LayoutParams) { + int heightToShrink = getHeight() - mDefocusTargetHeight; + FrameLayout.LayoutParams layoutParams = + (FrameLayout.LayoutParams) getLayoutParams(); + layoutParams.topMargin = -heightToShrink; + setLayoutParams(layoutParams); + ((ViewGroup) getParent().getParent()).setClipChildren(false); + } + + animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { + //reset top margin after the animation + if (getLayoutParams() instanceof FrameLayout.LayoutParams) { + FrameLayout.LayoutParams layoutParams = + (FrameLayout.LayoutParams) getLayoutParams(); + layoutParams.topMargin = 0; + setLayoutParams(layoutParams); + ((ViewGroup) getParent().getParent()).setClipChildren(true); + } + setVisibility(GONE); + if (mWrapper != null) { + mWrapper.setRemoteInputVisible(false); + } + } + }); + animator.start(); + + } else if (animate && mRevealParams != null && mRevealParams.radius > 0) { + android.animation.Animator reveal = mRevealParams.createCircularHideAnimator(this); + reveal.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN); + reveal.setDuration(StackStateAnimator.ANIMATION_DURATION_CLOSE_REMOTE_INPUT); + reveal.addListener(new android.animation.AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(android.animation.Animator animation) { setVisibility(GONE); if (mWrapper != null) { mWrapper.setRemoteInputVisible(false); @@ -533,12 +603,29 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene mEditText.setText(editTextContent); } - public void focusAnimated() { - if (getVisibility() != VISIBLE && mRevealParams != null) { - Animator animator = mRevealParams.createCircularRevealAnimator(this); + /** + * Sets whether the feature flag for the updated inline reply animation is active or not. + * @param active + */ + public void setIsFocusAnimationFlagActive(boolean active) { + mIsFocusAnimationFlagActive = active; + } + + /** + * Focuses the RemoteInputView and animates its appearance + * + * @param crossFadeView view that will be crossfaded during the appearance animation + */ + public void focusAnimated(View crossFadeView) { + if (!mIsFocusAnimationFlagActive && getVisibility() != VISIBLE + && mRevealParams != null) { + android.animation.Animator animator = mRevealParams.createCircularRevealAnimator(this); animator.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD); animator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); animator.start(); + } else if (mIsFocusAnimationFlagActive && getVisibility() != VISIBLE) { + setAlpha(0f); + getFocusAnimator(crossFadeView).start(); } focus(); } @@ -737,6 +824,81 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene mOnSendListeners.remove(listener); } + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + if (mIsFocusAnimationFlagActive) setPivotY(getMeasuredHeight()); + if (mContentBackgroundBounds != null) { + mContentBackground.setBounds(mContentBackgroundBounds); + } + } + + private Animator getFocusAnimator(View crossFadeView) { + final Animator alphaAnimator = ObjectAnimator.ofFloat(this, View.ALPHA, 0f, 1f); + alphaAnimator.setStartDelay(FOCUS_ANIMATION_FADE_IN_DELAY); + alphaAnimator.setDuration(FOCUS_ANIMATION_FADE_IN_DURATION); + alphaAnimator.setInterpolator(InterpolatorsAndroidX.LINEAR); + + ValueAnimator scaleAnimator = ValueAnimator.ofFloat(FOCUS_ANIMATION_MIN_SCALE, 1f); + scaleAnimator.addUpdateListener(valueAnimator -> { + setFocusAnimationScaleY((float) scaleAnimator.getAnimatedValue()); + }); + scaleAnimator.setDuration(FOCUS_ANIMATION_TOTAL_DURATION); + scaleAnimator.setInterpolator(InterpolatorsAndroidX.FAST_OUT_SLOW_IN); + + final Animator crossFadeViewAlphaAnimator = + ObjectAnimator.ofFloat(crossFadeView, View.ALPHA, 1f, 0f); + crossFadeViewAlphaAnimator.setDuration(FOCUS_ANIMATION_CROSSFADE_DURATION); + crossFadeViewAlphaAnimator.setInterpolator(InterpolatorsAndroidX.LINEAR); + alphaAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation, boolean isReverse) { + crossFadeView.setAlpha(1f); + } + }); + + final AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether(alphaAnimator, scaleAnimator, crossFadeViewAlphaAnimator); + return animatorSet; + } + + private Animator getDefocusAnimator() { + final Animator alphaAnimator = ObjectAnimator.ofFloat(this, View.ALPHA, 1f, 0f); + alphaAnimator.setDuration(FOCUS_ANIMATION_CROSSFADE_DURATION); + alphaAnimator.setInterpolator(InterpolatorsAndroidX.LINEAR); + + ValueAnimator scaleAnimator = ValueAnimator.ofFloat(1f, FOCUS_ANIMATION_MIN_SCALE); + scaleAnimator.addUpdateListener(valueAnimator -> { + setFocusAnimationScaleY((float) scaleAnimator.getAnimatedValue()); + }); + scaleAnimator.setDuration(FOCUS_ANIMATION_TOTAL_DURATION); + scaleAnimator.setInterpolator(InterpolatorsAndroidX.FAST_OUT_SLOW_IN); + scaleAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation, boolean isReverse) { + setFocusAnimationScaleY(1f); + } + }); + + final AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether(alphaAnimator, scaleAnimator); + return animatorSet; + } + + /** + * Sets affected view properties for a vertical scale animation + * + * @param scaleY desired vertical view scale + */ + private void setFocusAnimationScaleY(float scaleY) { + int verticalBoundOffset = (int) ((1f - scaleY) * 0.5f * mContentView.getHeight()); + mContentBackgroundBounds = new Rect(0, verticalBoundOffset, mContentView.getWidth(), + mContentView.getHeight() - verticalBoundOffset); + mContentBackground.setBounds(mContentBackgroundBounds); + mContentView.setBackground(mContentBackground); + setTranslationY(verticalBoundOffset); + } + /** Handler for button click on send action in IME. */ private class EditorActionHandler implements TextView.OnEditorActionListener { @@ -991,11 +1153,11 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene this.radius = radius; } - Animator createCircularHideAnimator(View view) { + android.animation.Animator createCircularHideAnimator(View view) { return ViewAnimationUtils.createCircularReveal(view, centerX, centerY, radius, 0); } - Animator createCircularRevealAnimator(View view) { + android.animation.Animator createCircularRevealAnimator(View view) { return ViewAnimationUtils.createCircularReveal(view, centerX, centerY, 0, radius); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt index f8451017b367b..22b4c9d81d256 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt @@ -30,6 +30,8 @@ import android.util.Log import android.view.View import com.android.internal.logging.UiEventLogger import com.android.systemui.R +import com.android.systemui.flags.FeatureFlags +import com.android.systemui.flags.Flags.NOTIFICATION_INLINE_REPLY_ANIMATION import com.android.systemui.statusbar.NotificationRemoteInputManager import com.android.systemui.statusbar.RemoteInputController import com.android.systemui.statusbar.notification.collection.NotificationEntry @@ -61,6 +63,8 @@ interface RemoteInputViewController { var revealParams: RevealParams? + val isFocusAnimationFlagActive: Boolean + /** * Sets the smart reply that should be inserted in the remote input, or `null` if the user is * not editing a smart reply. @@ -117,7 +121,8 @@ class RemoteInputViewControllerImpl @Inject constructor( private val remoteInputQuickSettingsDisabler: RemoteInputQuickSettingsDisabler, private val remoteInputController: RemoteInputController, private val shortcutManager: ShortcutManager, - private val uiEventLogger: UiEventLogger + private val uiEventLogger: UiEventLogger, + private val mFlags: FeatureFlags ) : RemoteInputViewController { private val onSendListeners = ArraySet() @@ -149,6 +154,9 @@ class RemoteInputViewControllerImpl @Inject constructor( override val isActive: Boolean get() = view.isActive + override val isFocusAnimationFlagActive: Boolean + get() = mFlags.isEnabled(NOTIFICATION_INLINE_REPLY_ANIMATION) + override fun bind() { if (isBound) return isBound = true @@ -159,6 +167,7 @@ class RemoteInputViewControllerImpl @Inject constructor( view.setSupportedMimeTypes(it.allowedDataTypes) } view.setRevealParameters(revealParams) + view.setIsFocusAnimationFlagActive(isFocusAnimationFlagActive) view.addOnEditTextFocusChangedListener(onFocusChangeListener) view.addOnSendRemoteInputListener(onSendRemoteInputListener) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java index 915e999c2646f..1fe2008d2abea 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy; import static android.view.ContentInfo.SOURCE_CLIPBOARD; +import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_STANDARD; + import static com.google.common.truth.Truth.assertThat; import static junit.framework.Assert.assertEquals; @@ -57,6 +59,7 @@ import android.window.OnBackInvokedDispatcher; import android.window.WindowOnBackInvokedDispatcher; import androidx.annotation.NonNull; +import androidx.core.animation.AnimatorTestRule; import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; @@ -64,15 +67,19 @@ import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; +import com.android.systemui.flags.FakeFeatureFlags; +import com.android.systemui.flags.Flags; import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.RemoteInputController; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.NotificationTestHelper; +import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.phone.LightBarController; import org.junit.After; import org.junit.Before; +import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -99,6 +106,9 @@ public class RemoteInputViewTest extends SysuiTestCase { private BlockingQueueIntentReceiver mReceiver; private final UiEventLoggerFake mUiEventLoggerFake = new UiEventLoggerFake(); + @ClassRule + public static AnimatorTestRule mAnimatorTestRule = new AnimatorTestRule(); + @Before public void setUp() throws Exception { allowTestableLooperAsMainThread(); @@ -294,6 +304,9 @@ public class RemoteInputViewTest extends SysuiTestCase { /* invoke the captured callback */ onBackInvokedCallbackCaptor.getValue().onBackInvoked(); + /* wait for RemoteInputView disappear animation to finish */ + mAnimatorTestRule.advanceTimeBy(StackStateAnimator.ANIMATION_DURATION_STANDARD); + /* verify that the RemoteInputView goes away */ assertEquals(view.getVisibility(), View.GONE); } @@ -363,19 +376,70 @@ public class RemoteInputViewTest extends SysuiTestCase { mUiEventLoggerFake.eventId(1)); } + @Test + public void testFocusAnimation() throws Exception { + NotificationTestHelper helper = new NotificationTestHelper( + mContext, + mDependency, + TestableLooper.get(this)); + ExpandableNotificationRow row = helper.createRow(); + RemoteInputView view = RemoteInputView.inflate(mContext, null, row.getEntry(), mController); + bindController(view, row.getEntry()); + view.setVisibility(View.GONE); + + View crossFadeView = new View(mContext); + + // Start focus animation + view.focusAnimated(crossFadeView); + + // fast forward to end of animation + mAnimatorTestRule.advanceTimeBy(ANIMATION_DURATION_STANDARD); + + // assert that crossFadeView's alpha is reset to 1f after the animation (hidden behind + // RemoteInputView) + assertEquals(1f, crossFadeView.getAlpha()); + assertEquals(View.VISIBLE, view.getVisibility()); + assertEquals(1f, view.getAlpha()); + } + + @Test + public void testDefocusAnimation() throws Exception { + NotificationTestHelper helper = new NotificationTestHelper( + mContext, + mDependency, + TestableLooper.get(this)); + ExpandableNotificationRow row = helper.createRow(); + RemoteInputView view = RemoteInputView.inflate(mContext, null, row.getEntry(), mController); + bindController(view, row.getEntry()); + + // Start defocus animation + view.onDefocus(true, false); + assertEquals(View.VISIBLE, view.getVisibility()); + + // fast forward to end of animation + mAnimatorTestRule.advanceTimeBy(ANIMATION_DURATION_STANDARD); + + // assert that RemoteInputView is no longer visible + assertEquals(View.GONE, view.getVisibility()); + } + // NOTE: because we're refactoring the RemoteInputView and moving logic into the - // RemoteInputViewController, it's easiest to just test the system of the two classes together. + // RemoteInputViewController, it's easiest to just test the system of the two classes together. @NonNull private RemoteInputViewController bindController( RemoteInputView view, NotificationEntry entry) { + FakeFeatureFlags fakeFeatureFlags = new FakeFeatureFlags(); + fakeFeatureFlags.set(Flags.NOTIFICATION_INLINE_REPLY_ANIMATION, true); RemoteInputViewControllerImpl viewController = new RemoteInputViewControllerImpl( view, entry, mRemoteInputQuickSettingsDisabler, mController, mShortcutManager, - mUiEventLoggerFake); + mUiEventLoggerFake, + fakeFeatureFlags + ); viewController.bind(); return viewController; } From 4b01e37db52f5668e2d032e5016507d9a5c5dd08 Mon Sep 17 00:00:00 2001 From: Johannes Gallmann Date: Mon, 14 Nov 2022 09:54:49 +0100 Subject: [PATCH 25/36] Fix headsup notification RemoteInputView appearance animation This CL fixes a bug where the appearance animation of the RemoteInputView in a headsup collapsed notification was slightly broken. The RemoteInputView would do its appearance animation partly outside (below) the notification boundaries. This was because the RemoteInputView was prevented to overlap the hint during the expand animation. Bug: 174148361 Test: atest RemoteInputViewTest, Manual, i.e. posting various types of Notifications from the Notify2-RVC application with a reply action added to them. Then observing the animations visually and analyzing frames from screen recordings. Change-Id: I90a637e9b57dea0e365699cef9e088a562301f55 --- .../inflation/NotificationRowBinderImpl.java | 9 ++++++++- .../row/ExpandableNotificationRow.java | 11 ++++++++++- .../notification/row/NotificationContentView.java | 7 +++++++ .../statusbar/policy/RemoteInputView.java | 15 ++++++++++++++- .../statusbar/policy/RemoteInputViewTest.java | 5 +++++ 5 files changed, 44 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java index 47cdde444dbda..56eb4b13dcde0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.notification.collection.inflation; +import static com.android.systemui.flags.Flags.NOTIFICATION_INLINE_REPLY_ANIMATION; import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_CONTRACTED; import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_EXPANDED; import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_PUBLIC; @@ -30,6 +31,7 @@ import android.view.ViewGroup; import com.android.internal.util.NotificationMessagingUtil; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.flags.FeatureFlags; import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationRemoteInputManager; @@ -71,6 +73,7 @@ public class NotificationRowBinderImpl implements NotificationRowBinder { private NotificationListContainer mListContainer; private BindRowCallback mBindRowCallback; private NotificationClicker mNotificationClicker; + private FeatureFlags mFeatureFlags; @Inject public NotificationRowBinderImpl( @@ -82,7 +85,8 @@ public class NotificationRowBinderImpl implements NotificationRowBinder { RowContentBindStage rowContentBindStage, Provider rowInflaterTaskProvider, ExpandableNotificationRowComponent.Builder expandableNotificationRowComponentBuilder, - IconManager iconManager) { + IconManager iconManager, + FeatureFlags featureFlags) { mContext = context; mNotifBindPipeline = notifBindPipeline; mRowContentBindStage = rowContentBindStage; @@ -92,6 +96,7 @@ public class NotificationRowBinderImpl implements NotificationRowBinder { mRowInflaterTaskProvider = rowInflaterTaskProvider; mExpandableNotificationRowComponentBuilder = expandableNotificationRowComponentBuilder; mIconManager = iconManager; + mFeatureFlags = featureFlags; } /** @@ -176,6 +181,8 @@ public class NotificationRowBinderImpl implements NotificationRowBinder { entry.setRow(row); mNotifBindPipeline.manageRow(entry, row); mBindRowCallback.onBindRow(row); + row.setInlineReplyAnimationFlagEnabled( + mFeatureFlags.isEnabled(NOTIFICATION_INLINE_REPLY_ANIMATION)); } /** 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 c7c1634ea1055..c271f0990e88b 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 @@ -284,6 +284,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView private View.OnClickListener mOnAppClickListener; private View.OnClickListener mOnFeedbackClickListener; private Path mExpandingClipPath; + private boolean mIsInlineReplyAnimationFlagEnabled = false; // Listener will be called when receiving a long click event. // Use #setLongPressPosition to optionally assign positional data with the long press. @@ -3073,6 +3074,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView return 0; } + public void setInlineReplyAnimationFlagEnabled(boolean isEnabled) { + mIsInlineReplyAnimationFlagEnabled = isEnabled; + } + @Override public void setActualHeight(int height, boolean notifyListeners) { boolean changed = height != getActualHeight(); @@ -3092,7 +3097,11 @@ public class ExpandableNotificationRow extends ActivatableNotificationView } int contentHeight = Math.max(getMinHeight(), height); for (NotificationContentView l : mLayouts) { - l.setContentHeight(contentHeight); + if (mIsInlineReplyAnimationFlagEnabled) { + l.setContentHeight(height); + } else { + l.setContentHeight(contentHeight); + } } if (mIsSummaryWithChildren) { mChildrenContainer.setActualHeight(height); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java index 83d6abb4d9770..e46bf522acff6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java @@ -627,6 +627,13 @@ public class NotificationContentView extends FrameLayout implements Notification int hint; if (mHeadsUpChild != null && isVisibleOrTransitioning(VISIBLE_TYPE_HEADSUP)) { hint = getViewHeight(VISIBLE_TYPE_HEADSUP); + if (mHeadsUpRemoteInput != null && mHeadsUpRemoteInput.isAnimatingAppearance() + && mHeadsUpRemoteInputController.isFocusAnimationFlagActive()) { + // While the RemoteInputView is animating its appearance, it should be allowed + // to overlap the hint, therefore no space is reserved for the hint during the + // appearance animation of the RemoteInputView + hint = 0; + } } else if (mExpandedChild != null) { hint = getViewHeight(VISIBLE_TYPE_EXPANDED); } else if (mContractedChild != null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java index 9f5ad1c5fddcd..d8a8c5de90d70 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java @@ -143,6 +143,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene private NotificationViewWrapper mWrapper; private Integer mDefocusTargetHeight = null; + private boolean mIsAnimatingAppearance = false; // TODO(b/193539698): remove this; views shouldn't have access to their controller, and places @@ -418,6 +419,10 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene return true; } + public boolean isAnimatingAppearance() { + return mIsAnimatingAppearance; + } + /** * View will ensure to use at most the provided defocusTargetHeight, when defocusing animated. * This is to ensure that the parent can resize itself to the targetHeight while the defocus @@ -624,8 +629,16 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene animator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); animator.start(); } else if (mIsFocusAnimationFlagActive && getVisibility() != VISIBLE) { + mIsAnimatingAppearance = true; setAlpha(0f); - getFocusAnimator(crossFadeView).start(); + Animator focusAnimator = getFocusAnimator(crossFadeView); + focusAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation, boolean isReverse) { + mIsAnimatingAppearance = false; + } + }); + focusAnimator.start(); } focus(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java index 1fe2008d2abea..2c472049cddaf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java @@ -21,7 +21,9 @@ import static com.android.systemui.statusbar.notification.stack.StackStateAnimat import static com.google.common.truth.Truth.assertThat; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; @@ -392,12 +394,15 @@ public class RemoteInputViewTest extends SysuiTestCase { // Start focus animation view.focusAnimated(crossFadeView); + assertTrue(view.isAnimatingAppearance()); + // fast forward to end of animation mAnimatorTestRule.advanceTimeBy(ANIMATION_DURATION_STANDARD); // assert that crossFadeView's alpha is reset to 1f after the animation (hidden behind // RemoteInputView) assertEquals(1f, crossFadeView.getAlpha()); + assertFalse(view.isAnimatingAppearance()); assertEquals(View.VISIBLE, view.getVisibility()); assertEquals(1f, view.getAlpha()); } From 843ea1cfd982600cf9f70add0af70bc0976e8890 Mon Sep 17 00:00:00 2001 From: Matt Casey Date: Mon, 19 Dec 2022 15:05:18 +0000 Subject: [PATCH 26/36] Add dismiss button to work profile first run No animation or persisting to storage yet. Flag: Entire UI is protected by SCREENSHOT_WORK_PROFILE_POLICY flag (teamfood) Test: Manual invocation and dismissal Bug: 254245929 Change-Id: I0ba081f030068f24546e77139d6756b24c142819 --- .../SystemUI/res/layout/screenshot_static.xml | 20 ++++++++++++++++++- packages/SystemUI/res/values/strings.xml | 2 ++ .../systemui/screenshot/ScreenshotView.java | 6 ++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/res/layout/screenshot_static.xml b/packages/SystemUI/res/layout/screenshot_static.xml index 65983b79570eb..efd683f1a97b0 100644 --- a/packages/SystemUI/res/layout/screenshot_static.xml +++ b/packages/SystemUI/res/layout/screenshot_static.xml @@ -166,6 +166,7 @@ android:paddingEnd="4dp" android:src="@drawable/ic_work_app_badge" app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/screenshot_message_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> @@ -177,7 +178,24 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@id/screenshot_message_icon" - app:layout_constraintEnd_toEndOf="parent"/> + app:layout_constraintEnd_toStartOf="@id/message_dismiss_button"/> + + + + diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 643f831c7f94e..431e72c073425 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -227,6 +227,8 @@ Capture more Dismiss screenshot + + Dismiss work profile message Screenshot preview diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java index 9c7718d0e0013..e8ceb521b6b06 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java @@ -289,6 +289,9 @@ public class ScreenshotView extends FrameLayout implements mDismissButton.getBoundsOnScreen(tmpRect); swipeRegion.op(tmpRect, Region.Op.UNION); + mMessageContainer.findViewById(R.id.message_dismiss_button).getBoundsOnScreen(tmpRect); + swipeRegion.op(tmpRect, Region.Op.UNION); + return swipeRegion; } @@ -353,6 +356,9 @@ public class ScreenshotView extends FrameLayout implements mMessageContent.setText( mContext.getString(R.string.screenshot_work_profile_notification, appName)); mMessageContainer.setVisibility(VISIBLE); + mMessageContainer.findViewById(R.id.message_dismiss_button).setOnClickListener((v) -> { + mMessageContainer.setVisibility(View.GONE); + }); } @Override // View From b4b8279892b6fda350d6cfa3e58adc15cd875384 Mon Sep 17 00:00:00 2001 From: Vania Januar Date: Mon, 19 Dec 2022 16:26:42 +0000 Subject: [PATCH 27/36] Allow non-IPC processes to setStylusEverUsed in InputManager Bug: 253013763 Test: atest StylusListenerTest Change-Id: Ib9bc1c4a613c1b1a79cd7e37c5c0593a0313273f --- core/java/android/hardware/input/InputManager.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java index d8ed12410b485..baf8836c5af58 100644 --- a/core/java/android/hardware/input/InputManager.java +++ b/core/java/android/hardware/input/InputManager.java @@ -30,7 +30,6 @@ import android.app.ActivityThread; import android.compat.annotation.ChangeId; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; -import android.content.pm.PackageManager; import android.hardware.BatteryState; import android.hardware.SensorManager; import android.hardware.lights.Light; @@ -1910,11 +1909,6 @@ public final class InputManager { */ @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) public void setStylusEverUsed(@NonNull Context context, boolean stylusEverUsed) { - if (context.checkCallingPermission(Manifest.permission.WRITE_SECURE_SETTINGS) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException("You need WRITE_SECURE_SETTINGS permission " - + "to set stylus ever used."); - } Settings.Global.putInt(context.getContentResolver(), Settings.Global.STYLUS_EVER_USED, stylusEverUsed ? 1 : 0); } From c08a545ad47439d31313365e02eccc21afe75253 Mon Sep 17 00:00:00 2001 From: Andrew Solovay Date: Fri, 16 Dec 2022 19:46:36 +0000 Subject: [PATCH 28/36] docs: Remove duplicated phrase Doc had duplicated the phrase "for some reason", removing it. Docs-only change. Change-Id: I4cda97bfcfd5f1ef8609741443e1c07afe17109b Bug: 255896378 Test: [built docs with go/abtd] --- core/java/android/service/quicksettings/Tile.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/java/android/service/quicksettings/Tile.java b/core/java/android/service/quicksettings/Tile.java index 40c0ac00a5a9a..d1a8eba3bbc5a 100644 --- a/core/java/android/service/quicksettings/Tile.java +++ b/core/java/android/service/quicksettings/Tile.java @@ -39,8 +39,8 @@ public final class Tile implements Parcelable { /** * An unavailable state indicates that for some reason this tile is not currently - * available to the user for some reason, and will have no click action. The tile's - * icon will be tinted differently to reflect this state. + * available to the user, and will have no click action. The tile's icon will be + * tinted differently to reflect this state. */ public static final int STATE_UNAVAILABLE = 0; From 8d43f766e1bcaea17fdbfd0bf51337b1f59d0037 Mon Sep 17 00:00:00 2001 From: George Lin Date: Fri, 16 Dec 2022 02:50:30 +0000 Subject: [PATCH 29/36] [framework] Modify scalePreview in WallpaperService Modified the implementation of scalePreview to call setFixedSize instead This function is used by the wallpaper picker to resolve the scaling issue. A TODO b/262750854 is created to later have a holistic fix. Bug: 204844104 Bug: 240291366 Test: Manuel Change-Id: Idd45eaac34db69d7e2bdd5450678b7d7e86d4629 --- .../service/wallpaper/IWallpaperEngine.aidl | 2 +- .../service/wallpaper/WallpaperService.java | 25 +++++++------------ 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/core/java/android/service/wallpaper/IWallpaperEngine.aidl b/core/java/android/service/wallpaper/IWallpaperEngine.aidl index 93d4def2180ef..1a00acf475e3d 100644 --- a/core/java/android/service/wallpaper/IWallpaperEngine.aidl +++ b/core/java/android/service/wallpaper/IWallpaperEngine.aidl @@ -42,7 +42,7 @@ interface IWallpaperEngine { @UnsupportedAppUsage oneway void destroy(); oneway void setZoomOut(float scale); - oneway void scalePreview(in Rect positionInWindow); + oneway void resizePreview(in Rect positionInWindow); oneway void removeLocalColorsAreas(in List regions); oneway void addLocalColorsAreas(in List regions); SurfaceControl mirrorSurfaceControl(); diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 2175859d9de62..2d1a41e92a99a 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -163,7 +163,7 @@ public abstract class WallpaperService extends Service { private static final int MSG_TOUCH_EVENT = 10040; private static final int MSG_REQUEST_WALLPAPER_COLORS = 10050; private static final int MSG_ZOOM = 10100; - private static final int MSG_SCALE_PREVIEW = 10110; + private static final int MSG_RESIZE_PREVIEW = 10110; private static final int MSG_REPORT_SHOWN = 10150; private static final int MSG_UPDATE_DIMMING = 10200; private static final List PROHIBITED_STEPS = Arrays.asList(0f, Float.POSITIVE_INFINITY, @@ -323,7 +323,7 @@ public abstract class WallpaperService extends Service { @Override public void setFixedSize(int width, int height) { - if (!mFixedSizeAllowed) { + if (!mFixedSizeAllowed && !mIWallpaperEngine.mIsPreview) { // Regular apps can't do this. It can only work for // certain designs of window animations, so you can't // rely on it. @@ -1372,16 +1372,9 @@ public abstract class WallpaperService extends Service { } } - private void scalePreview(Rect position) { - if (isPreview() && mPreviewSurfacePosition == null && position != null - || mPreviewSurfacePosition != null - && !mPreviewSurfacePosition.equals(position)) { - mPreviewSurfacePosition = position; - if (mSurfaceControl.isValid()) { - reposition(); - } else { - updateSurface(false, false, false); - } + private void resizePreview(Rect position) { + if (position != null) { + mSurfaceHolder.setFixedSize(position.width(), position.height()); } } @@ -2295,8 +2288,8 @@ public abstract class WallpaperService extends Service { mCaller.sendMessage(msg); } - public void scalePreview(Rect position) { - Message msg = mCaller.obtainMessageO(MSG_SCALE_PREVIEW, position); + public void resizePreview(Rect position) { + Message msg = mCaller.obtainMessageO(MSG_RESIZE_PREVIEW, position); mCaller.sendMessage(msg); } @@ -2383,8 +2376,8 @@ public abstract class WallpaperService extends Service { case MSG_UPDATE_DIMMING: mEngine.updateWallpaperDimming(Float.intBitsToFloat(message.arg1)); break; - case MSG_SCALE_PREVIEW: - mEngine.scalePreview((Rect) message.obj); + case MSG_RESIZE_PREVIEW: + mEngine.resizePreview((Rect) message.obj); break; case MSG_VISIBILITY_CHANGED: if (DEBUG) Log.v(TAG, "Visibility change in " + mEngine From d94a83eabec0bbe9895e109a0ab03ca806ea658f Mon Sep 17 00:00:00 2001 From: Lyn Han Date: Mon, 12 Dec 2022 12:20:21 -0800 Subject: [PATCH 30/36] Add FSI view Bug: 243421660 Test: visual Change-Id: Ibb3f15cdba8c139235d3f43572f1a6844c7cdbb6 --- .../res-keyguard/layout/fsi_chrome_view.xml | 49 +++++++++++ packages/SystemUI/res/values/dimens.xml | 3 + .../notification/fsi/FsiChromeView.kt | 83 +++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 packages/SystemUI/res-keyguard/layout/fsi_chrome_view.xml create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/notification/fsi/FsiChromeView.kt diff --git a/packages/SystemUI/res-keyguard/layout/fsi_chrome_view.xml b/packages/SystemUI/res-keyguard/layout/fsi_chrome_view.xml new file mode 100644 index 0000000000000..4ff2967b5ddfd --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/fsi_chrome_view.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + +