From c29777f4059da03ac663c3cc5b61d0f011aac8bb Mon Sep 17 00:00:00 2001 From: Jeff DeCew Date: Wed, 8 Jun 2022 19:11:50 +0000 Subject: Fix squished notifications on the lockscreen. This fixes a stale state caused when stack height is not recalculated after being frozen. NSSL uses shouldSkipHeightUpdate() to prevent the stack height from being recalculated during various animations and gestures, but we didn't correctly trigger a recalculation after that 'freeze', so this CL adds the necessary recalculation at those transition points to prevent the old stack height from persisting until the next update. This also fixes a visual jump when unfreezing the stack height if it was frozen while the appear fraction was still changing. This jump is fixed by allowing the appear fraction to continue to apply and update the stackHeight (from the stackEndHeight) even while the stackEndHeight is frozen. Fixes: 235366457 Bug: 234824085 Test: drag shade up during aod->ls transition Change-Id: Ice6de1149b05564294e5c51308e962112cf4eda7 (cherry picked from commit 82596c5c5dd6c11da61000a17488615bfe12b01d) --- .../stack/NotificationStackScrollLayout.java | 28 ++++++++ .../NotificationStackScrollLayoutController.java | 4 ++ .../phone/NotificationPanelViewController.java | 4 +- .../stack/NotificationStackScrollLayoutTest.java | 76 ++++++++++++++++++++-- 4 files changed, 106 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index c9d70d1ad44c..e2ed1d83530b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -1323,10 +1323,24 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable if (mOnStackYChanged != null) { mOnStackYChanged.accept(listenerNeedsAnimation); } + updateStackEndHeightAndStackHeight(fraction); + } + + @VisibleForTesting + public void updateStackEndHeightAndStackHeight(float fraction) { + final float oldStackHeight = mAmbientState.getStackHeight(); if (mQsExpansionFraction <= 0 && !shouldSkipHeightUpdate()) { final float endHeight = updateStackEndHeight( getHeight(), getEmptyBottomMargin(), mTopPadding); updateStackHeight(endHeight, fraction); + } else { + // Always updateStackHeight to prevent jumps in the stack height when this fraction + // suddenly reapplies after a freeze. + final float endHeight = mAmbientState.getStackEndHeight(); + updateStackHeight(endHeight, fraction); + } + if (oldStackHeight != mAmbientState.getStackHeight()) { + requestChildrenUpdate(); } } @@ -1343,6 +1357,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable return stackEndHeight; } + @VisibleForTesting public void updateStackHeight(float endHeight, float fraction) { // During the (AOD<=>LS) transition where dozeAmount is changing, // apply dozeAmount to stack height instead of expansionFraction @@ -5041,6 +5056,19 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) public void setUnlockHintRunning(boolean running) { mAmbientState.setUnlockHintRunning(running); + if (!running) { + // re-calculate the stack height which was frozen while running this animation + updateStackPosition(); + } + } + + @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) + public void setPanelFlinging(boolean flinging) { + mAmbientState.setIsFlinging(flinging); + if (!flinging) { + // re-calculate the stack height which was frozen while flinging + updateStackPosition(); + } } @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index 2493ccbe5a48..010e6cf90817 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -1190,6 +1190,10 @@ public class NotificationStackScrollLayoutController { mView.setUnlockHintRunning(running); } + public void setPanelFlinging(boolean flinging) { + mView.setPanelFlinging(flinging); + } + public boolean isFooterViewNotGone() { return mView.isFooterViewNotGone(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index 2cac0017db9c..3580fe6cdbc5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -1782,14 +1782,14 @@ public class NotificationPanelViewController extends PanelViewController { mHeadsUpTouchHelper.notifyFling(!expand); mKeyguardStateController.notifyPanelFlingStart(!expand /* flingingToDismiss */); setClosingWithAlphaFadeout(!expand && !isOnKeyguard() && getFadeoutAlpha() == 1.0f); - mAmbientState.setIsFlinging(true); + mNotificationStackScrollLayoutController.setPanelFlinging(true); super.flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing); } @Override protected void onFlingEnd(boolean cancelled) { super.onFlingEnd(cancelled); - mAmbientState.setIsFlinging(false); + mNotificationStackScrollLayoutController.setPanelFlinging(false); } private boolean onQsIntercept(MotionEvent event) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index f5fe6f3a1a5f..b83743c90623 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -39,6 +39,7 @@ import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -122,12 +123,12 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { allowTestableLooperAsMainThread(); // Interact with real instance of AmbientState. - mAmbientState = new AmbientState( + mAmbientState = spy(new AmbientState( mContext, mDumpManager, mNotificationSectionsManager, mBypassController, - mStatusBarKeyguardViewManager); + mStatusBarKeyguardViewManager)); // Inject dependencies before initializing the layout mDependency.injectTestDependency(SysuiStatusBarStateController.class, mBarState); @@ -190,7 +191,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { endHeight, dozeAmount); mStackScroller.updateStackHeight(endHeight, expansionFraction); - assertTrue(mAmbientState.getStackHeight() == expected); + assertThat(mAmbientState.getStackHeight()).isEqualTo(expected); } @Test @@ -205,7 +206,74 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { endHeight, expansionFraction); mStackScroller.updateStackHeight(endHeight, expansionFraction); - assertTrue(mAmbientState.getStackHeight() == expected); + assertThat(mAmbientState.getStackHeight()).isEqualTo(expected); + } + + @Test + public void updateStackEndHeightAndStackHeight_normallyUpdatesBoth() { + final float expansionFraction = 0.5f; + mAmbientState.setStatusBarState(StatusBarState.KEYGUARD); + + // Validate that by default we update everything + clearInvocations(mAmbientState); + mStackScroller.updateStackEndHeightAndStackHeight(expansionFraction); + verify(mAmbientState).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + } + + @Test + public void updateStackEndHeightAndStackHeight_onlyUpdatesStackHeightDuringSwipeUp() { + final float expansionFraction = 0.5f; + mAmbientState.setStatusBarState(StatusBarState.KEYGUARD); + mAmbientState.setSwipingUp(true); + + // Validate that when the gesture is in progress, we update only the stackHeight + clearInvocations(mAmbientState); + mStackScroller.updateStackEndHeightAndStackHeight(expansionFraction); + verify(mAmbientState, never()).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + } + + @Test + public void setPanelFlinging_updatesStackEndHeightOnlyOnFinish() { + final float expansionFraction = 0.5f; + mAmbientState.setStatusBarState(StatusBarState.KEYGUARD); + mAmbientState.setSwipingUp(true); + mStackScroller.setPanelFlinging(true); + mAmbientState.setSwipingUp(false); + + // Validate that when the animation is running, we update only the stackHeight + clearInvocations(mAmbientState); + mStackScroller.updateStackEndHeightAndStackHeight(expansionFraction); + verify(mAmbientState, never()).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + + // Validate that when the animation ends the stackEndHeight is recalculated immediately + clearInvocations(mAmbientState); + mStackScroller.setPanelFlinging(false); + verify(mAmbientState).setIsFlinging(eq(false)); + verify(mAmbientState).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + } + + @Test + public void setUnlockHintRunning_updatesStackEndHeightOnlyOnFinish() { + final float expansionFraction = 0.5f; + mAmbientState.setStatusBarState(StatusBarState.KEYGUARD); + mStackScroller.setUnlockHintRunning(true); + + // Validate that when the animation is running, we update only the stackHeight + clearInvocations(mAmbientState); + mStackScroller.updateStackEndHeightAndStackHeight(expansionFraction); + verify(mAmbientState, never()).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + + // Validate that when the animation ends the stackEndHeight is recalculated immediately + clearInvocations(mAmbientState); + mStackScroller.setUnlockHintRunning(false); + verify(mAmbientState).setUnlockHintRunning(eq(false)); + verify(mAmbientState).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); } @Test -- cgit v1.2.3 From 87fd506129631225581de641c4dd9956a15aa0ab Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Mon, 27 Jun 2022 14:01:16 -0700 Subject: Stop crashing the system on hitting the alarm limit Exempting the system as a runtime restart is not clearly better than extreme memory and computation pressure that can result from the originating spam. Callers in the system should guard against any spammy requests that lead them to create a lot of alarms. Test: Builds, boots and existing tests should pass. atest CtsAlarmManagerTestCases:UidCapTests atest FrameworksMockingServicesTests:AlarmManagerServiceTest Bug: 234441463 Change-Id: Id5e94d44ac9ab24870a8213ec7583da0f592a5ff (cherry picked from commit 3b9f3f4a0f5a661be65e287996cae8a4481a1453) Merged-In: Id5e94d44ac9ab24870a8213ec7583da0f592a5ff --- .../service/java/com/android/server/alarm/AlarmManagerService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java index 95728081bdb9..d1e3481b1107 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -104,6 +104,7 @@ import android.text.TextUtils; import android.text.format.DateFormat; import android.util.ArrayMap; import android.util.ArraySet; +import android.util.EventLog; import android.util.IndentingPrintWriter; import android.util.Log; import android.util.LongArrayQueue; @@ -2031,7 +2032,11 @@ public class AlarmManagerService extends SystemService { + " reached for uid: " + UserHandle.formatUid(callingUid) + ", callingPackage: " + callingPackage; Slog.w(TAG, errorMsg); - throw new IllegalStateException(errorMsg); + if (callingUid != Process.SYSTEM_UID) { + throw new IllegalStateException(errorMsg); + } else { + EventLog.writeEvent(0x534e4554, "234441463", -1, errorMsg); + } } setImplLocked(type, triggerAtTime, triggerElapsed, windowLength, interval, operation, directReceiver, listenerTag, flags, workSource, alarmClock, callingUid, -- cgit v1.2.3 From 2100d275644575214a8e74457bb973b44a3bacff Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Mon, 27 Jun 2022 14:01:16 -0700 Subject: Stop crashing the system on hitting the alarm limit Exempting the system as a runtime restart is not clearly better than extreme memory and computation pressure that can result from the originating spam. Callers in the system should guard against any spammy requests that lead them to create a lot of alarms. Test: Builds, boots and existing tests should pass. atest CtsAlarmManagerTestCases:UidCapTests atest FrameworksMockingServicesTests:AlarmManagerServiceTest Bug: 234441463 Change-Id: Id5e94d44ac9ab24870a8213ec7583da0f592a5ff (cherry picked from commit 3b9f3f4a0f5a661be65e287996cae8a4481a1453) Merged-In: Id5e94d44ac9ab24870a8213ec7583da0f592a5ff --- .../service/java/com/android/server/alarm/AlarmManagerService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java index 0de0a1cf9c8e..d6b246a9e2e3 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -112,6 +112,7 @@ import android.text.TextUtils; import android.text.format.DateFormat; import android.util.ArrayMap; import android.util.ArraySet; +import android.util.EventLog; import android.util.IndentingPrintWriter; import android.util.Log; import android.util.LongArrayQueue; @@ -2299,7 +2300,11 @@ public class AlarmManagerService extends SystemService { + " reached for uid: " + UserHandle.formatUid(callingUid) + ", callingPackage: " + callingPackage; Slog.w(TAG, errorMsg); - throw new IllegalStateException(errorMsg); + if (callingUid != Process.SYSTEM_UID) { + throw new IllegalStateException(errorMsg); + } else { + EventLog.writeEvent(0x534e4554, "234441463", -1, errorMsg); + } } setImplLocked(type, triggerAtTime, triggerElapsed, windowLength, interval, operation, directReceiver, listenerTag, flags, workSource, alarmClock, callingUid, -- cgit v1.2.3 From c231302191e6eaafe889d88f5160dffec31a3c50 Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Wed, 6 Jul 2022 14:20:31 +0800 Subject: Fix TaskFragmentTrustedModeTest The condition was inverted, and led to #reparentChildren didn't work. This CL also removes some minimum dimension checks because it is covered in TaskFragment#isAllowedToEmbedActivity(ActivityRecord). Test: atest TaskFragmentTrustedModeTest TaskFragmentOrganizerTest Test: atest TaskFragmentOrganizerPolicyTest SplitActivityLifecycleTest Fixes: 238054859 Bug: 233578672 Merged-In: Ic58edee8e239e94b9986f06b499281487a9a973d Change-Id: Ic58edee8e239e94b9986f06b499281487a9a973d --- .../android/server/wm/WindowOrganizerController.java | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index 64a5deb32fcb..aee66faa8faa 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -759,7 +759,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub } if (parent.isAllowedToEmbedActivity(activity) != EMBEDDING_ALLOWED) { final Throwable exception = new SecurityException( - "The task fragment is not trusted to embed the given activity."); + "The task fragment is not allowed to embed the given activity."); sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception); break; } @@ -769,11 +769,6 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception); break; } - if (parent.smallerThanMinDimension(activity)) { - sendMinimumDimensionViolation(parent, activity.getMinDimensions(), - errorCallbackToken, "reparentActivityToTask"); - break; - } activity.reparent(parent, POSITION_TOP); effects |= TRANSACT_EFFECTS_LIFECYCLE; @@ -1583,10 +1578,10 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub // We are reparenting activities to a new embedded TaskFragment, this operation is only // allowed if the new parent is trusted by all reparent activities. final boolean isEmbeddingDisallowed = oldParent.forAllActivities(activity -> - newParentTF.isAllowedToEmbedActivity(activity) == EMBEDDING_ALLOWED); + newParentTF.isAllowedToEmbedActivity(activity) != EMBEDDING_ALLOWED); if (isEmbeddingDisallowed) { final Throwable exception = new SecurityException( - "The new parent is not trusted to embed the activities."); + "The new parent is not allowed to embed the activities."); sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception); return; } @@ -1603,14 +1598,6 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception); return; } - final Point minDimensions = oldParent.calculateMinDimension(); - final Rect newParentBounds = newParentTF.getBounds(); - if (newParentBounds.width() < minDimensions.x - || newParentBounds.height() < minDimensions.y) { - sendMinimumDimensionViolation(newParentTF, minDimensions, errorCallbackToken, - "reparentTaskFragment"); - return; - } while (oldParent.hasChild()) { oldParent.getChildAt(0).reparent(newParentTF, POSITION_TOP); } -- cgit v1.2.3 From 48b83a0025d2e85c8f22bd94bf6cd7f8ae51254c Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 1 Jul 2022 09:49:12 -0400 Subject: Limit the number of concurrently snoozed notifications Test: atest FrameworksUiServicesTests Bug: 234441463 Change-Id: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 (cherry picked from commit 7c38394ae9c69620499a87e629edae4fe0ac4edc) --- .../notification/NotificationManagerService.java | 19 +++-- .../android/server/notification/SnoozeHelper.java | 11 +++ .../NotificationManagerServiceTest.java | 85 +++++++++++++++++++--- .../server/notification/SnoozeHelperTest.java | 17 +++++ 4 files changed, 117 insertions(+), 15 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index d1e0b0474b61..88f543260871 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -7030,6 +7030,7 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { + final List recordsToSnooze = new ArrayList<>(); if (r.getSbn().isGroup()) { final List groupNotifications = findCurrentAndSnoozedGroupNotificationsLocked( @@ -7038,8 +7039,8 @@ public class NotificationManagerService extends SystemService { if (r.getNotification().isGroupSummary()) { // snooze all children for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } else { @@ -7049,8 +7050,8 @@ public class NotificationManagerService extends SystemService { if (groupNotifications.size() == 2) { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } @@ -7058,7 +7059,15 @@ public class NotificationManagerService extends SystemService { } } // snooze the notification - snoozeNotificationLocked(r); + recordsToSnooze.add(r); + + if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { + for (int i = 0; i < recordsToSnooze.size(); i++) { + snoozeNotificationLocked(recordsToSnooze.get(i)); + } + } else { + Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); + } } diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index 7f265df3f416..15d7c1e7a210 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -62,6 +62,8 @@ import java.util.Set; public class SnoozeHelper { public static final int XML_SNOOZED_NOTIFICATION_VERSION = 1; + static final int CONCURRENT_SNOOZE_LIMIT = 500; + protected static final String XML_TAG_NAME = "snoozed-notifications"; private static final String XML_SNOOZED_NOTIFICATION = "notification"; @@ -135,6 +137,15 @@ public class SnoozeHelper { } } + protected boolean canSnooze(int numberToSnooze) { + synchronized (mLock) { + if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { + return false; + } + } + return true; + } + @NonNull protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) { Long time = null; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 22721a1bcc92..b1b323b734bd 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -3380,39 +3380,98 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { + public void testSnoozeRunnable_tooManySnoozed_singleNotification() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); mService.addNotification(notification); - when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(1)).thenReturn(false); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); + notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(1); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 1, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(2)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notificationChild.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(2); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 12, "group", false); + final NotificationRecord notificationChild2 = generateNotificationRecord( + mTestNotificationChannel, 13, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + mService.addNotification(notificationChild2); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(3)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(3); + } + + @Test + public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, null, true); + mService.addNotification(notification); + when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); + snoozeNotificationRunnable.run(); // snooze twice verify(mSnoozeHelper, times(2)).snooze(any(NotificationRecord.class), anyLong()); } @Test - public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception { + public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, "group", true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -3430,6 +3489,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mSnoozeHelper.getNotification(any())).thenReturn(notification); when(mSnoozeHelper.getNotifications( anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>()); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3439,8 +3499,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2))); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); + notification2.getKey(), 100, null); + snoozeNotificationRunnable2.run(); // snooze twice verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong()); @@ -3454,6 +3514,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3483,6 +3544,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3504,6 +3566,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3529,6 +3592,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3556,6 +3620,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 2ae2ef7162a5..8bead5774548 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,6 +15,7 @@ */ package com.android.server.notification; +import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; import static com.android.server.notification.SnoozeHelper.EXTRA_KEY; import static junit.framework.Assert.assertEquals; @@ -280,6 +281,22 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey())); } + @Test + public void testSnoozeLimit() { + for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { + NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); + + assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); + + if (i % 2 == 0) { + mSnoozeHelper.snooze(r, null); + } else { + mSnoozeHelper.snooze(r, 9000); + } + } + assertFalse(mSnoozeHelper.canSnooze(1)); + } + @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); -- cgit v1.2.3 From e61de0648abdd37883aed7851d7cf1f2463f448a Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 1 Jul 2022 09:49:12 -0400 Subject: Limit the number of concurrently snoozed notifications Test: atest FrameworksUiServicesTests Bug: 234441463 Change-Id: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 (cherry picked from commit 7c38394ae9c69620499a87e629edae4fe0ac4edc) --- .../notification/NotificationManagerService.java | 19 +++-- .../android/server/notification/SnoozeHelper.java | 11 +++ .../NotificationManagerServiceTest.java | 85 +++++++++++++++++++--- .../server/notification/SnoozeHelperTest.java | 17 +++++ 4 files changed, 117 insertions(+), 15 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 1effe8a12c27..03544eff4f21 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -6694,6 +6694,7 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { + final List recordsToSnooze = new ArrayList<>(); if (r.getSbn().isGroup()) { final List groupNotifications = findCurrentAndSnoozedGroupNotificationsLocked( @@ -6702,8 +6703,8 @@ public class NotificationManagerService extends SystemService { if (r.getNotification().isGroupSummary()) { // snooze all children for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } else { @@ -6713,8 +6714,8 @@ public class NotificationManagerService extends SystemService { if (groupNotifications.size() == 2) { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } @@ -6722,7 +6723,15 @@ public class NotificationManagerService extends SystemService { } } // snooze the notification - snoozeNotificationLocked(r); + recordsToSnooze.add(r); + + if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { + for (int i = 0; i < recordsToSnooze.size(); i++) { + snoozeNotificationLocked(recordsToSnooze.get(i)); + } + } else { + Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); + } } diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index 4500bbcd250f..2e08a9cbf844 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -62,6 +62,8 @@ import java.util.Set; public class SnoozeHelper { public static final int XML_SNOOZED_NOTIFICATION_VERSION = 1; + static final int CONCURRENT_SNOOZE_LIMIT = 500; + protected static final String XML_TAG_NAME = "snoozed-notifications"; private static final String XML_SNOOZED_NOTIFICATION = "notification"; @@ -134,6 +136,15 @@ public class SnoozeHelper { } } + protected boolean canSnooze(int numberToSnooze) { + synchronized (mLock) { + if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { + return false; + } + } + return true; + } + @NonNull protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) { Long time = null; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 9a221a8f2bf9..be760036c141 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -2799,39 +2799,98 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { + public void testSnoozeRunnable_tooManySnoozed_singleNotification() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); mService.addNotification(notification); - when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(1)).thenReturn(false); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); + notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(1); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 1, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(2)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notificationChild.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(2); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 12, "group", false); + final NotificationRecord notificationChild2 = generateNotificationRecord( + mTestNotificationChannel, 13, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + mService.addNotification(notificationChild2); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(3)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(3); + } + + @Test + public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, null, true); + mService.addNotification(notification); + when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); + snoozeNotificationRunnable.run(); // snooze twice verify(mSnoozeHelper, times(2)).snooze(any(NotificationRecord.class), anyLong()); } @Test - public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception { + public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, "group", true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -2849,6 +2908,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mSnoozeHelper.getNotification(any())).thenReturn(notification); when(mSnoozeHelper.getNotifications( anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>()); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2858,8 +2918,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2))); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); + notification2.getKey(), 100, null); + snoozeNotificationRunnable2.run(); // snooze twice verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong()); @@ -2873,6 +2933,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2902,6 +2963,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2923,6 +2985,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2948,6 +3011,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2975,6 +3039,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 2ae2ef7162a5..8bead5774548 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,6 +15,7 @@ */ package com.android.server.notification; +import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; import static com.android.server.notification.SnoozeHelper.EXTRA_KEY; import static junit.framework.Assert.assertEquals; @@ -280,6 +281,22 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey())); } + @Test + public void testSnoozeLimit() { + for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { + NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); + + assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); + + if (i % 2 == 0) { + mSnoozeHelper.snooze(r, null); + } else { + mSnoozeHelper.snooze(r, 9000); + } + } + assertFalse(mSnoozeHelper.canSnooze(1)); + } + @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); -- cgit v1.2.3 From bc808de2f8a88e76fde0b6d033b4a232aebff8cb Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 1 Jul 2022 09:49:12 -0400 Subject: Limit the number of concurrently snoozed notifications Test: atest FrameworksUiServicesTests Bug: 234441463 Change-Id: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 Merged-In: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 (cherry picked from commit 7c38394ae9c69620499a87e629edae4fe0ac4edc) --- .../notification/NotificationManagerService.java | 19 +++-- .../android/server/notification/SnoozeHelper.java | 11 +++ .../NotificationManagerServiceTest.java | 83 +++++++++++++++++++--- .../server/notification/SnoozeHelperTest.java | 17 +++++ 4 files changed, 116 insertions(+), 14 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 970f70e19321..a2b04bd6a4d3 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -6286,6 +6286,7 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { + final List recordsToSnooze = new ArrayList<>(); if (r.getSbn().isGroup()) { final List groupNotifications = findCurrentAndSnoozedGroupNotificationsLocked( @@ -6294,8 +6295,8 @@ public class NotificationManagerService extends SystemService { if (r.getNotification().isGroupSummary()) { // snooze all children for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } else { @@ -6305,8 +6306,8 @@ public class NotificationManagerService extends SystemService { if (groupNotifications.size() == 2) { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } @@ -6314,7 +6315,15 @@ public class NotificationManagerService extends SystemService { } } // snooze the notification - snoozeNotificationLocked(r); + recordsToSnooze.add(r); + + if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { + for (int i = 0; i < recordsToSnooze.size(); i++) { + snoozeNotificationLocked(recordsToSnooze.get(i)); + } + } else { + Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); + } } diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index da472be81156..a29ac131f94c 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -60,6 +60,8 @@ import java.util.Set; public class SnoozeHelper { public static final String XML_SNOOZED_NOTIFICATION_VERSION = "1"; + static final int CONCURRENT_SNOOZE_LIMIT = 500; + protected static final String XML_TAG_NAME = "snoozed-notifications"; private static final String XML_SNOOZED_NOTIFICATION = "notification"; @@ -132,6 +134,15 @@ public class SnoozeHelper { } } + protected boolean canSnooze(int numberToSnooze) { + synchronized (mLock) { + if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { + return false; + } + } + return true; + } + @NonNull protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) { Long time = null; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index bd7c37da0707..b85acc26f8a5 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -2795,20 +2795,81 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { assertFalse(mService.hasCompanionDevice(mListener)); } + @Test + public void testSnoozeRunnable_tooManySnoozed_singleNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, null, true); + mService.addNotification(notification); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(1)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(1, mService.getNotificationRecordCount()); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 1, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(2)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notificationChild.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(2, mService.getNotificationRecordCount()); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 12, "group", false); + final NotificationRecord notificationChild2 = generateNotificationRecord( + mTestNotificationChannel, 13, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + mService.addNotification(notificationChild2); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(3)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(3, mService.getNotificationRecordCount()); + } + @Test public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -2816,19 +2877,17 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception { + public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, "group", true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -2846,6 +2905,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mSnoozeHelper.getNotification(any())).thenReturn(notification); when(mSnoozeHelper.getNotifications( anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>()); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2855,8 +2915,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2))); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); + notification2.getKey(), 100, null); + snoozeNotificationRunnable2.run(); // snooze twice verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong()); @@ -2870,6 +2930,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2899,6 +2960,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2920,6 +2982,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2945,6 +3008,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2972,6 +3036,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index c2ead5f15ceb..83ba7108af7f 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,6 +15,7 @@ */ package com.android.server.notification; +import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; import static com.android.server.notification.SnoozeHelper.EXTRA_KEY; import static junit.framework.Assert.assertEquals; @@ -278,6 +279,22 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey())); } + @Test + public void testSnoozeLimit() { + for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { + NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); + + assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); + + if (i % 2 == 0) { + mSnoozeHelper.snooze(r, null); + } else { + mSnoozeHelper.snooze(r, 9000); + } + } + assertFalse(mSnoozeHelper.canSnooze(1)); + } + @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); -- cgit v1.2.3 From 455a525421ea3748172d84a2529b9d993491a28f Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 1 Jul 2022 09:49:12 -0400 Subject: Limit the number of concurrently snoozed notifications Test: atest FrameworksUiServicesTests Bug: 234441463 Change-Id: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 Merged-In: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 (cherry picked from commit 7c38394ae9c69620499a87e629edae4fe0ac4edc) --- .../notification/NotificationManagerService.java | 19 +++-- .../android/server/notification/SnoozeHelper.java | 11 +++ .../NotificationManagerServiceTest.java | 83 +++++++++++++++++++--- .../server/notification/SnoozeHelperTest.java | 17 +++++ 4 files changed, 116 insertions(+), 14 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 78da61648d8c..454b0e2ef160 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -6274,6 +6274,7 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { + final List recordsToSnooze = new ArrayList<>(); if (r.getSbn().isGroup()) { final List groupNotifications = findCurrentAndSnoozedGroupNotificationsLocked( @@ -6282,8 +6283,8 @@ public class NotificationManagerService extends SystemService { if (r.getNotification().isGroupSummary()) { // snooze all children for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } else { @@ -6293,8 +6294,8 @@ public class NotificationManagerService extends SystemService { if (groupNotifications.size() == 2) { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } @@ -6302,7 +6303,15 @@ public class NotificationManagerService extends SystemService { } } // snooze the notification - snoozeNotificationLocked(r); + recordsToSnooze.add(r); + + if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { + for (int i = 0; i < recordsToSnooze.size(); i++) { + snoozeNotificationLocked(recordsToSnooze.get(i)); + } + } else { + Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); + } } diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index da472be81156..a29ac131f94c 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -60,6 +60,8 @@ import java.util.Set; public class SnoozeHelper { public static final String XML_SNOOZED_NOTIFICATION_VERSION = "1"; + static final int CONCURRENT_SNOOZE_LIMIT = 500; + protected static final String XML_TAG_NAME = "snoozed-notifications"; private static final String XML_SNOOZED_NOTIFICATION = "notification"; @@ -132,6 +134,15 @@ public class SnoozeHelper { } } + protected boolean canSnooze(int numberToSnooze) { + synchronized (mLock) { + if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { + return false; + } + } + return true; + } + @NonNull protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) { Long time = null; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index e12eda92ef2b..39e5e4881092 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -2772,20 +2772,81 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { assertFalse(mService.hasCompanionDevice(mListener)); } + @Test + public void testSnoozeRunnable_tooManySnoozed_singleNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, null, true); + mService.addNotification(notification); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(1)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(1, mService.getNotificationRecordCount()); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 1, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(2)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notificationChild.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(2, mService.getNotificationRecordCount()); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 12, "group", false); + final NotificationRecord notificationChild2 = generateNotificationRecord( + mTestNotificationChannel, 13, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + mService.addNotification(notificationChild2); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(3)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(3, mService.getNotificationRecordCount()); + } + @Test public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -2793,19 +2854,17 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception { + public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, "group", true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -2823,6 +2882,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mSnoozeHelper.getNotification(any())).thenReturn(notification); when(mSnoozeHelper.getNotifications( anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>()); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2832,8 +2892,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2))); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); + notification2.getKey(), 100, null); + snoozeNotificationRunnable2.run(); // snooze twice verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong()); @@ -2847,6 +2907,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2876,6 +2937,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2897,6 +2959,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2922,6 +2985,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2949,6 +3013,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index c2ead5f15ceb..83ba7108af7f 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,6 +15,7 @@ */ package com.android.server.notification; +import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; import static com.android.server.notification.SnoozeHelper.EXTRA_KEY; import static junit.framework.Assert.assertEquals; @@ -278,6 +279,22 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey())); } + @Test + public void testSnoozeLimit() { + for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { + NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); + + assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); + + if (i % 2 == 0) { + mSnoozeHelper.snooze(r, null); + } else { + mSnoozeHelper.snooze(r, 9000); + } + } + assertFalse(mSnoozeHelper.canSnooze(1)); + } + @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); -- cgit v1.2.3 From 7d2960633d5fa1456c60bf514d86bb8d15944443 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 1 Jul 2022 09:49:12 -0400 Subject: Limit the number of concurrently snoozed notifications Test: atest FrameworksUiServicesTests Bug: 234441463 Change-Id: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 Merged-In: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 (cherry picked from commit 7c38394ae9c69620499a87e629edae4fe0ac4edc) --- .../notification/NotificationManagerService.java | 19 +++-- .../android/server/notification/SnoozeHelper.java | 11 +++ .../NotificationManagerServiceTest.java | 83 +++++++++++++++++++--- .../server/notification/SnoozeHelperTest.java | 17 +++++ 4 files changed, 116 insertions(+), 14 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index ba8a4d4a0b35..32cb42ff4592 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -6815,6 +6815,7 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { + final List recordsToSnooze = new ArrayList<>(); if (r.getSbn().isGroup()) { final List groupNotifications = findCurrentAndSnoozedGroupNotificationsLocked( @@ -6823,8 +6824,8 @@ public class NotificationManagerService extends SystemService { if (r.getNotification().isGroupSummary()) { // snooze all children for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } else { @@ -6834,8 +6835,8 @@ public class NotificationManagerService extends SystemService { if (groupNotifications.size() == 2) { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } @@ -6843,7 +6844,15 @@ public class NotificationManagerService extends SystemService { } } // snooze the notification - snoozeNotificationLocked(r); + recordsToSnooze.add(r); + + if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { + for (int i = 0; i < recordsToSnooze.size(); i++) { + snoozeNotificationLocked(recordsToSnooze.get(i)); + } + } else { + Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); + } } diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index 4500bbcd250f..2e08a9cbf844 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -62,6 +62,8 @@ import java.util.Set; public class SnoozeHelper { public static final int XML_SNOOZED_NOTIFICATION_VERSION = 1; + static final int CONCURRENT_SNOOZE_LIMIT = 500; + protected static final String XML_TAG_NAME = "snoozed-notifications"; private static final String XML_SNOOZED_NOTIFICATION = "notification"; @@ -134,6 +136,15 @@ public class SnoozeHelper { } } + protected boolean canSnooze(int numberToSnooze) { + synchronized (mLock) { + if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { + return false; + } + } + return true; + } + @NonNull protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) { Long time = null; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index e20efbbe044e..564ace201658 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -2814,20 +2814,81 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { any(NotificationManagerService.SnoozeNotificationRunnable.class)); } + @Test + public void testSnoozeRunnable_tooManySnoozed_singleNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, null, true); + mService.addNotification(notification); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(1)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(1); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 1, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(2)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notificationChild.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(2); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 12, "group", false); + final NotificationRecord notificationChild2 = generateNotificationRecord( + mTestNotificationChannel, 13, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + mService.addNotification(notificationChild2); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(3)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(3); + } + @Test public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -2835,19 +2896,17 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception { + public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, "group", true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -2865,6 +2924,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mSnoozeHelper.getNotification(any())).thenReturn(notification); when(mSnoozeHelper.getNotifications( anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>()); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2874,8 +2934,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2))); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); + notification2.getKey(), 100, null); + snoozeNotificationRunnable2.run(); // snooze twice verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong()); @@ -2889,6 +2949,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2918,6 +2979,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2939,6 +3001,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2964,6 +3027,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2991,6 +3055,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 2ae2ef7162a5..8bead5774548 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,6 +15,7 @@ */ package com.android.server.notification; +import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; import static com.android.server.notification.SnoozeHelper.EXTRA_KEY; import static junit.framework.Assert.assertEquals; @@ -280,6 +281,22 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey())); } + @Test + public void testSnoozeLimit() { + for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { + NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); + + assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); + + if (i % 2 == 0) { + mSnoozeHelper.snooze(r, null); + } else { + mSnoozeHelper.snooze(r, 9000); + } + } + assertFalse(mSnoozeHelper.canSnooze(1)); + } + @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); -- cgit v1.2.3 From c38cc3e355718577192da8f544d21fd0be5f6be2 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 1 Jul 2022 09:49:12 -0400 Subject: DO NOT MERGE Limit the number of concurrently snoozed notifications Test: atest FrameworksUiServicesTests Bug: 234441463 Change-Id: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 Merged-In: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 (cherry picked from commit 7c38394ae9c69620499a87e629edae4fe0ac4edc) --- .../notification/NotificationManagerService.java | 25 ++++++-- .../android/server/notification/SnoozeHelper.java | 9 +++ .../NotificationManagerServiceTest.java | 68 ++++++++++++++++++++++ .../server/notification/SnoozeHelperTest.java | 18 ++++++ 4 files changed, 116 insertions(+), 4 deletions(-) mode change 100644 => 100755 services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 55f890dd3ffc..46e7b211fd6e 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -5294,13 +5294,17 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { + final List recordsToSnooze = new ArrayList<>(); if (r.sbn.isGroup()) { - final List groupNotifications = findGroupNotificationsLocked( - r.sbn.getPackageName(), r.sbn.getGroupKey(), r.sbn.getUserId()); + final List groupNotifications = + findGroupNotificationsLocked(r.sbn.getPackageName(), + r.sbn.getGroupKey(), r.sbn.getUserId()); if (r.getNotification().isGroupSummary()) { // snooze summary and all children for (int i = 0; i < groupNotifications.size(); i++) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); + } } } else { // if there is a valid summary for this group, and we are snoozing the only @@ -5311,7 +5315,9 @@ public class NotificationManagerService extends SystemService { } else { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); + } } } } else { @@ -5322,6 +5328,17 @@ public class NotificationManagerService extends SystemService { // just snooze the one notification snoozeNotificationLocked(r); } + + // snooze the notification + recordsToSnooze.add(r); + + if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { + for (int i = 0; i < recordsToSnooze.size(); i++) { + snoozeNotificationLocked(recordsToSnooze.get(i)); + } + } else { + Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); + } } @GuardedBy("mNotificationLock") diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index 037cc6066518..ba1f1e91ec45 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -57,6 +57,8 @@ import java.util.Set; * NotificationManagerService helper for handling snoozed notifications. */ public class SnoozeHelper { + static final int CONCURRENT_SNOOZE_LIMIT = 500; + private static final String TAG = "SnoozeHelper"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final String INDENT = " "; @@ -91,6 +93,13 @@ public class SnoozeHelper { mUserProfiles = userProfiles; } + protected boolean canSnooze(int numberToSnooze) { + if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { + return false; + } + return true; + } + protected boolean isSnoozed(int userId, String pkg, String key) { return mSnoozedNotifications.containsKey(userId) && mSnoozedNotifications.get(userId).containsKey(pkg) diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java old mode 100644 new mode 100755 index 200e83da3800..9f24bfd2707f --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -2249,6 +2249,69 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { assertFalse(mService.hasCompanionDevice(mListener)); } + @Test + public void testSnoozeRunnable_tooManySnoozed_singleNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, null, true); + mService.addNotification(notification); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(1)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(1, mService.getNotificationRecordCount()); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 1, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(2)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notificationChild.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(2, mService.getNotificationRecordCount()); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 12, "group", false); + final NotificationRecord notificationChild2 = generateNotificationRecord( + mTestNotificationChannel, 13, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + mService.addNotification(notificationChild2); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(3)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertEquals(3, mService.getNotificationRecordCount()); + } + @Test public void testSnoozeRunnable_snoozeNonGrouped() throws Exception { final NotificationRecord nonGrouped = generateNotificationRecord( @@ -2257,6 +2320,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2279,6 +2343,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2300,6 +2365,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2319,6 +2385,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -2334,6 +2401,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 2141ecc95bb8..3c389bb35535 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,6 +15,8 @@ */ package com.android.server.notification; +import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; + import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; @@ -103,6 +105,22 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); } + @Test + public void testSnoozeLimit() { + for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { + NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); + + assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); + + if (i % 2 == 0) { + mSnoozeHelper.snooze(r, 1000); + } else { + mSnoozeHelper.snooze(r, 9000); + } + } + assertFalse(mSnoozeHelper.canSnooze(1)); + } + @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); -- cgit v1.2.3 From de7b0f6dd071617724e4ac3a1c1451d05054008f Mon Sep 17 00:00:00 2001 From: Evan Severson Date: Mon, 11 Jul 2022 13:28:39 -0700 Subject: DO NOT MERGE: Revert "Make CheckOp return allowed if any attr tag for a package is excluded" This reverts commit 25f1b6a1ac5c71ebafe4b9235829aa3a79d1dd21. Revert "Allow system server uid to bypass location restriction" This reverts commit 1dddfe1f703cab6e159fafad45f51e8bad207dba. Revert "Disallow privileged apps to bypass location restriction" This reverts commit 807f4cfc80728313d04f95343e5aea14691aceb0. Ice55cbe9524e6d3526210861ad9c431df7255d99 isn't ready in sc Bug: 231496105 Change-Id: I2a0bd4f2ae75ef300eaf77953baad4ebdae6e189 --- core/java/android/app/AppOpsManager.java | 23 +++++++----------- .../com/android/server/appop/AppOpsService.java | 28 +++++++--------------- 2 files changed, 18 insertions(+), 33 deletions(-) diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index fc89e1395073..d932a29beca6 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -2463,8 +2463,8 @@ public class AppOpsManager { * restriction} for a certain app-op. */ private static RestrictionBypass[] sOpAllowSystemRestrictionBypass = new RestrictionBypass[] { - new RestrictionBypass(true, false, false), //COARSE_LOCATION - new RestrictionBypass(true, false, false), //FINE_LOCATION + new RestrictionBypass(true, false), //COARSE_LOCATION + new RestrictionBypass(true, false), //FINE_LOCATION null, //GPS null, //VIBRATE null, //READ_CONTACTS @@ -2473,7 +2473,7 @@ public class AppOpsManager { null, //WRITE_CALL_LOG null, //READ_CALENDAR null, //WRITE_CALENDAR - new RestrictionBypass(false, true, false), //WIFI_SCAN + new RestrictionBypass(true, false), //WIFI_SCAN null, //POST_NOTIFICATION null, //NEIGHBORING_CELLS null, //CALL_PHONE @@ -2487,10 +2487,10 @@ public class AppOpsManager { null, //READ_ICC_SMS null, //WRITE_ICC_SMS null, //WRITE_SETTINGS - new RestrictionBypass(false, true, false), //SYSTEM_ALERT_WINDOW + new RestrictionBypass(true, false), //SYSTEM_ALERT_WINDOW null, //ACCESS_NOTIFICATIONS null, //CAMERA - new RestrictionBypass(false, false, true), //RECORD_AUDIO + new RestrictionBypass(false, true), //RECORD_AUDIO null, //PLAY_AUDIO null, //READ_CLIPBOARD null, //WRITE_CLIPBOARD @@ -2508,7 +2508,7 @@ public class AppOpsManager { null, //MONITOR_HIGH_POWER_LOCATION null, //GET_USAGE_STATS null, //MUTE_MICROPHONE - new RestrictionBypass(false, true, false), //TOAST_WINDOW + new RestrictionBypass(true, false), //TOAST_WINDOW null, //PROJECT_MEDIA null, //ACTIVATE_VPN null, //WALLPAPER @@ -2540,7 +2540,7 @@ public class AppOpsManager { null, // ACCEPT_HANDOVER null, // MANAGE_IPSEC_HANDOVERS null, // START_FOREGROUND - new RestrictionBypass(false, true, false), // BLUETOOTH_SCAN + new RestrictionBypass(true, false), // BLUETOOTH_SCAN null, // USE_BIOMETRIC null, // ACTIVITY_RECOGNITION null, // SMS_FINANCIAL_TRANSACTIONS @@ -3105,9 +3105,6 @@ public class AppOpsManager { * @hide */ public static class RestrictionBypass { - /** Does the app need to be system uid to bypass the restriction */ - public boolean isSystemUid; - /** Does the app need to be privileged to bypass the restriction */ public boolean isPrivileged; @@ -3117,14 +3114,12 @@ public class AppOpsManager { */ public boolean isRecordAudioRestrictionExcept; - public RestrictionBypass(boolean isSystemUid, boolean isPrivileged, - boolean isRecordAudioRestrictionExcept) { - this.isSystemUid = isSystemUid; + public RestrictionBypass(boolean isPrivileged, boolean isRecordAudioRestrictionExcept) { this.isPrivileged = isPrivileged; this.isRecordAudioRestrictionExcept = isRecordAudioRestrictionExcept; } - public static RestrictionBypass UNRESTRICTED = new RestrictionBypass(false, true, true); + public static RestrictionBypass UNRESTRICTED = new RestrictionBypass(true, true); } /** diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 3808e0c93a38..6d29c379d1b1 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -3242,7 +3242,7 @@ public class AppOpsService extends IAppOpsService.Stub { return AppOpsManager.MODE_IGNORED; } synchronized (this) { - if (isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass, true)) { + if (isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass)) { return AppOpsManager.MODE_IGNORED; } code = AppOpsManager.opToSwitch(code); @@ -3459,7 +3459,7 @@ public class AppOpsService extends IAppOpsService.Stub { final int switchCode = AppOpsManager.opToSwitch(code); final UidState uidState = ops.uidState; - if (isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass, false)) { + if (isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass)) { attributedOp.rejected(uidState.state, flags); scheduleOpNotedIfNeededLocked(code, uid, packageName, attributionTag, flags, AppOpsManager.MODE_IGNORED); @@ -3973,8 +3973,7 @@ public class AppOpsService extends IAppOpsService.Stub { final Op op = getOpLocked(ops, code, uid, true); final AttributedOp attributedOp = op.getOrCreateAttribution(op, attributionTag); final UidState uidState = ops.uidState; - isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass, - false); + isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass); final int switchCode = AppOpsManager.opToSwitch(code); // If there is a non-default per UID policy (we set UID op mode only if // non-default) it takes over, otherwise use the per package policy. @@ -4503,9 +4502,8 @@ public class AppOpsService extends IAppOpsService.Stub { * @return The restriction matching the package */ private RestrictionBypass getBypassforPackage(@NonNull AndroidPackage pkg) { - return new RestrictionBypass(pkg.getUid() == Process.SYSTEM_UID, pkg.isPrivileged(), - mContext.checkPermission(android.Manifest.permission - .EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS, -1, pkg.getUid()) + return new RestrictionBypass(pkg.isPrivileged(), mContext.checkPermission( + android.Manifest.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS, -1, pkg.getUid()) == PackageManager.PERMISSION_GRANTED); } @@ -4765,7 +4763,7 @@ public class AppOpsService extends IAppOpsService.Stub { } private boolean isOpRestrictedLocked(int uid, int code, String packageName, - String attributionTag, @Nullable RestrictionBypass appBypass, boolean isCheckOp) { + String attributionTag, @Nullable RestrictionBypass appBypass) { int restrictionSetCount = mOpGlobalRestrictions.size(); for (int i = 0; i < restrictionSetCount; i++) { @@ -4782,15 +4780,11 @@ public class AppOpsService extends IAppOpsService.Stub { // For each client, check that the given op is not restricted, or that the given // package is exempt from the restriction. ClientUserRestrictionState restrictionState = mOpUserRestrictions.valueAt(i); - if (restrictionState.hasRestriction(code, packageName, attributionTag, userHandle, - isCheckOp)) { + if (restrictionState.hasRestriction(code, packageName, attributionTag, userHandle)) { RestrictionBypass opBypass = opAllowSystemBypassRestriction(code); if (opBypass != null) { // If we are the system, bypass user restrictions for certain codes synchronized (this) { - if (opBypass.isSystemUid && appBypass != null && appBypass.isSystemUid) { - return false; - } if (opBypass.isPrivileged && appBypass != null && appBypass.isPrivileged) { return false; } @@ -7143,7 +7137,7 @@ public class AppOpsService extends IAppOpsService.Stub { } public boolean hasRestriction(int restriction, String packageName, String attributionTag, - int userId, boolean isCheckOp) { + int userId) { if (perUserRestrictions == null) { return false; } @@ -7162,9 +7156,6 @@ public class AppOpsService extends IAppOpsService.Stub { return true; } - if (isCheckOp) { - return !perUserExclusions.includes(packageName); - } return !perUserExclusions.contains(packageName, attributionTag); } @@ -7331,8 +7322,7 @@ public class AppOpsService extends IAppOpsService.Stub { int numRestrictions = mOpUserRestrictions.size(); for (int i = 0; i < numRestrictions; i++) { if (mOpUserRestrictions.valueAt(i) - .hasRestriction(code, pkg, attributionTag, user.getIdentifier(), - false)) { + .hasRestriction(code, pkg, attributionTag, user.getIdentifier())) { number++; } } -- cgit v1.2.3 From 8b7f68d4efdcbf7d150bb6f56f33c458c6b495cf Mon Sep 17 00:00:00 2001 From: Andrew Solovay Date: Wed, 13 Jul 2022 23:41:29 +0000 Subject: docs: Typo fix ("Poicly" -> "Policy"). Bug: 178958617 Change-Id: I0144af1f11f742d197aa38074b8c59be19cbdeb7 Test: (Built docs with go/abtd - go/abort-ui/run/L19100000955473218) --- telephony/java/android/telephony/euicc/EuiccManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java index a673807a3f97..1252dc178cb9 100644 --- a/telephony/java/android/telephony/euicc/EuiccManager.java +++ b/telephony/java/android/telephony/euicc/EuiccManager.java @@ -769,7 +769,7 @@ public class EuiccManager { public static final int ERROR_INSTALL_PROFILE = 10009; /** - * Failed to load profile onto eUICC due to Profile Poicly Rules. + * Failed to load profile onto eUICC due to Profile Policy Rules. * @see #EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE for details */ public static final int ERROR_DISALLOWED_BY_PPR = 10010; -- cgit v1.2.3 From b8b24467b0c8ccac0a635592237128ca9261617e Mon Sep 17 00:00:00 2001 From: Xiao Ma Date: Thu, 14 Jul 2022 05:59:30 +0000 Subject: Remove unused net-module-utils-srcs filegroup. Bug: 238960524 Test: m Change-Id: I7c8a123729dc249eaf8ea1e4354f2f26411850aa --- services/net/Android.bp | 1 - 1 file changed, 1 deletion(-) diff --git a/services/net/Android.bp b/services/net/Android.bp index 886a397c87e6..980ba06953ae 100644 --- a/services/net/Android.bp +++ b/services/net/Android.bp @@ -18,7 +18,6 @@ java_library_static { name: "services.net", defaults: ["platform_service_defaults"], srcs: [ - ":net-module-utils-srcs", ":services.net-sources", ], static_libs: [ -- cgit v1.2.3 From 178a1f9add2d6f2c60025ad2db1cfad8b07a4c16 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 13 Jul 2022 23:09:11 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ia6c5320ff43e9c4363cc838c68a3f215bd844e38 --- core/res/res/values-am/strings.xml | 2 +- core/res/res/values-de/strings.xml | 2 +- core/res/res/values-fr/strings.xml | 2 +- core/res/res/values-hi/strings.xml | 6 +++--- core/res/res/values-in/strings.xml | 2 +- core/res/res/values-it/strings.xml | 4 ++-- core/res/res/values-ja/strings.xml | 2 +- core/res/res/values-mr/strings.xml | 2 +- core/res/res/values-or/strings.xml | 22 +++++++++++----------- core/res/res/values-pa/strings.xml | 2 +- core/res/res/values-sk/strings.xml | 2 +- core/res/res/values-sv/strings.xml | 2 +- core/res/res/values-te/strings.xml | 4 ++-- 13 files changed, 27 insertions(+), 27 deletions(-) diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 8c6db331798f..2d5b0f7eddcd 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -421,7 +421,7 @@ "መተግበሪያው በእርስዎ ስልክ ላይ ስለተከማቹ እውቂያዎችዎ ያለ ውሂብን እንዲቀይር ያስችለዋል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብን እንዲሰርዙ ያስችላቸዋል።" "የጥሪ ምዝግብ ማስታወሻን ያንብቡ" "ይህ መተግበሪያ የእርስዎን የጥሪ ታሪክ ማንበብ ይችላል።" - "የጥሪ ምዝግብ ማስታወሻን ፃፍ" + "የጥሪ ምዝግብ ማስታወሻን ጻፍ" "ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የጡባዊተኮህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።" "መተግበሪያው ስለገቢ እና ወጪ ጥሪዎች ያለ ውሂብም ጨምሮ የእርስዎ Android TV መሣሪያ ምዝግብ ማስታወሻ እንዲቀይር ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ይህን ተጠቅመው የስልክዎን ምዝግብ ማስታወሻ ሊደመስሱ ወይም ሊቀይሩ ይችላሉ።" "ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የስልክህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።" diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index fae9dd7e617c..d6846d3c9285 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -1625,7 +1625,7 @@ "Integrierter Bildschirm" "HDMI-Bildschirm" "Overlay-Nr. %1$d" - "%1$s: %2$d x %3$d, %4$d dpi" + "%1$s: %2$d × %3$d, %4$d dpi" ", sicher" "Muster vergessen" "Falsches Muster" diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 06813e6c9ea3..0f79218f949b 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -628,7 +628,7 @@ "Appuyez pour supprimer votre empreinte faciale, puis ajoutez de nouveau votre visage" "Configurer le déverrouillage par reconnaissance faciale" "Déverrouillez votre téléphone en le regardant" - "Pour utiliser Face Unlock, activez ""Accès à l\'appareil photo"" dans Paramètres > Confidentialité" + "Pour utiliser le déverrouillage par reconnaissance faciale, activez ""Accès à l\'appareil photo"" dans Paramètres > Confidentialité" "Configurer d\'autres méthodes de déverrouillage" "Appuyez pour ajouter une empreinte digitale" "Déverrouillage par empreinte digitale" diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 4e0a695cb914..806133b67d2b 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -307,9 +307,9 @@ "मैसेज (एसएमएस) भेजें और देखें" "फ़ाइलें" "अपने डिवाइस में मौजूद फ़ाइलों का ऐक्सेस दें" - "संगीत और ऑडियो को ऐक्सेस करने की अनुमति" + "संगीत और ऑडियो के ऐक्सेस" "आपके डिवाइस पर संगीत और ऑडियो को ऐक्सेस करने की अनुमति" - "फ़ोटो और वीडियो को ऐक्सेस करने की अनुमति" + "फ़ोटो और वीडियो के ऐक्सेस" "आपके डिवाइस पर फ़ोटो और वीडियो को ऐक्सेस करने की अनुमति" "माइक्रोफ़ोन" "ऑडियो रिकॉर्ड करें" @@ -555,7 +555,7 @@ "अपना स्‍क्रीन लॉक अक्षम करें" "ऐप्स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा बंद करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल पाते समय फ़ोन, कीलॉक को बंद कर देता है, फिर कॉल खत्म होने पर कीलॉक को फिर से चालू कर देता है." "जानें कि स्क्रीन लॉक कितना मुश्किल बनाया गया है" - "यह मंज़ूरी मिलने के बाद ऐप्लिकेशन जान पाता है कि स्क्रीन लॉक कितना मुश्किल (बहुत ज़्यादा, मध्यम, कम या बिल्कुल नहीं) है. इस स्तर से यह पता चलता है कि स्क्रीन लॉक कितना लंबा या किस तरह का है. ऐप्लिकेशन उपयोगकर्ताओं को यह सुझाव भी दे सकता है कि वे स्क्रीन लॉक को एक तय लेवल तक अपडेट करें. लेकिन उपयोगकर्ता इसे बेझिझक अनदेखा करके छोड़ सकते हैं. ध्यान दें कि स्क्रीन लॉक को सादे टेक्स्ट में सेव नहीं किया जाता है इसलिए ऐप्लिकेशन को सटीक पासवर्ड पता नहीं होता है." + "यह मंज़ूरी मिलने के बाद ऐप्लिकेशन जान पाता है कि स्क्रीन लॉक कितना मुश्किल (बहुत ज़्यादा, मध्यम, कम या बिलकुल नहीं) है. इस स्तर से यह पता चलता है कि स्क्रीन लॉक कितना लंबा या किस तरह का है. ऐप्लिकेशन उपयोगकर्ताओं को यह सुझाव भी दे सकता है कि वे स्क्रीन लॉक को एक तय लेवल तक अपडेट करें. लेकिन उपयोगकर्ता इसे बेझिझक अनदेखा करके छोड़ सकते हैं. ध्यान दें कि स्क्रीन लॉक को सादे टेक्स्ट में सेव नहीं किया जाता है इसलिए ऐप्लिकेशन को सटीक पासवर्ड पता नहीं होता है." "सूचनाएं दिखाएं" "ऐप्लिकेशन को सूचनाएं दिखाने की अनुमति दें" "बायोमीट्रिक हार्डवेयर इस्तेमाल करने दें" diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 314f6e22380d..8596a9c90623 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -745,7 +745,7 @@ "Mengizinkan pemegang memulai layar untuk meninjau keputusan izin. Tidak pernah dibutuhkan untuk aplikasi normal." "mulai lihat fitur aplikasi" "Memungkinkan pemegang mulai melihat info fitur untuk aplikasi." - "mengakses data sensor pada frekuensi pengambilan sampel yang tinggi" + "mengakses data sensor pada frekuensi sampling yang tinggi" "Mengizinkan aplikasi mengambil sampel data sensor pada frekuensi yang lebih besar dari 200 Hz" "Setel aturan sandi" "Mengontrol panjang dan karakter yang diizinkan dalam sandi dan PIN kunci layar." diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index bdc813c6cad9..01f43a73274c 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -1916,11 +1916,11 @@ "Consentire a %1$s di creare un nuovo utente con l\'account %2$s?" "Aggiungi utente supervisionato" "Aggiungi una lingua" - "Area geografica preferita" + "Regione preferita" "Digita nome lingua" "Suggerite" "Tutte le lingue" - "Tutte le aree geografiche" + "Tutte le regioni" "Cerca" "App non disponibile" "%1$s non è al momento disponibile. Viene gestita tramite %2$s." diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 1d8a29ed1a68..bcb31b64b3fd 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -1443,7 +1443,7 @@ "メディア出力を他の外部デバイスにルーティングすることをアプリに許可します。" "インストールセッションの読み取り" "インストールセッションの読み取りをアプリに許可します。これにより、アプリはアクティブパッケージのインストールに関する詳細情報を参照できるようになります。" - "インストールパッケージのリクエスト" + "request install packages" "パッケージのインストールをリクエストすることをアプリケーションに許可します。" "パッケージの削除のリクエスト" "パッケージの削除をリクエストすることをアプリに許可します。" diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index db40cb1314be..c48d86260fe0 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -48,7 +48,7 @@ "4 ते 8 अंकांचा पिन टाइप करा." "8 अंकांचा किंवा मोठा PUK टाइप करा." "तुमचे सिम कार्ड PUK-लॉक केलेले आहे. ते अनलॉक करण्यासाठी PUK कोड टाइप करा." - "सिम कार्ड अनावरोधित करण्यासाठी PUK2 टाइप करा." + "सिम कार्ड अनब्लॉक करण्यासाठी PUK2 टाइप करा." "अयशस्वी, सिम/RUIM लॉक सुरू करा." सिम लॉक होण्यापूर्वी आपल्याकडे %d प्रयत्न उर्वरित आहेत. diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 6e20087f43e6..2a14396f5c22 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -1151,9 +1151,9 @@ "%1$s ଚାଲୁଛି" "ଅଧିକ ସୂଚନା ପାଇଁ କିମ୍ବା ଆପ୍‍ ବନ୍ଦ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।" "ଠିକ୍‍ ଅଛି" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଠିକ୍‍ ଅଛି" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଧ୍ୟାନଦିଅନ୍ତୁ" "ଲୋଡ୍ କରାଯାଉଛି…" "ଚାଲୁ" @@ -1174,9 +1174,9 @@ "%1$s ମାଧ୍ୟମରେ ଲିଙ୍କ୍‍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ" "%2$s ମାଧ୍ୟମରେ %1$s ଲିଙ୍କ୍‍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ" "ଆକ୍ସେସ୍‌ ଦିଅନ୍ତୁ" - "ସହିତ ଏଡିଟ୍‌ କରନ୍ତୁ" - "%1$sରେ ସଂଶୋଧନ କରନ୍ତୁ" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ସହିତ ଏଡିଟ କରନ୍ତୁ" + "%1$sରେ ଏଡିଟ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ସେୟାର୍ କରନ୍ତୁ" "%1$s ସହିତ ସେୟାର୍‌ କରନ୍ତୁ" "ସେୟାର୍‌ କରନ୍ତୁ" @@ -1318,7 +1318,7 @@ "ଏହା ଦ୍ୱାରା "" ଆପଣଙ୍କ ମୋବାଇଲ୍ ଆକାଉଣ୍ଟରୁ ପଇସା କଟିପାରେ। " " ଆପଣଙ୍କ ମୋବାଇଲ୍ ଆକାଉଣ୍ଟରୁ ପଇସା କଟିପାରେ। " "ପଠାନ୍ତୁ" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ମୋ ପସନ୍ଦ ମନେରଖନ୍ତୁ" "ଏହାକୁ ଆପଣ ସେଟିଙ୍ଗ ଓ ଆପ୍‍ରେ ପରବର୍ତ୍ତୀ ସମୟରେ ବଦଳାଇପାରିବେ" "ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ" @@ -1355,7 +1355,7 @@ "ଯୋଡ଼ାଯାଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି। ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" "ଆନାଲଗ୍‍ ଅଡିଓ ଆକ୍ସେସରୀ ଚିହ୍ନଟ ହେଲା" "ଏହି ଫୋନ୍‌ରେ କନେକ୍ଟ ଥିବା ଡିଭାଇସ୍‍ କମ୍ପାଟିବଲ୍‍ ନୁହେଁ। ଅଧିକ ଜାଣିବା ପାଇଁ ଟାପ୍‌ କରନ୍ତୁ।" - "USB ଡିବଗିଂ ସଂଯୁକ୍ତ ହୋଇଛି" + "USB ଡିବଗିଂ କନେକ୍ଟ କରାଯାଇଛି" "USB ଡିବଗିଂକୁ ବନ୍ଦ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ" "USB ଡିବଗିଙ୍ଗକୁ ଅକ୍ଷମ କରିବା ପାଇଁ ଚୟନ କରନ୍ତୁ।" "ୱାୟାରଲେସ୍ ଡିବଗିଂ ସଂଯୋଗ କରାଯାଇଛି" @@ -1541,7 +1541,7 @@ "ପୂର୍ବ ମାସ" "ପରବର୍ତ୍ତୀ ମାସ" "ALT" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଡିଲିଟ୍‍ କରନ୍ତୁ" "ହୋଇଗଲା" "ମୋଡ୍‍ ପରିବର୍ତ୍ତନ" @@ -1564,7 +1564,7 @@ "USB ଡ୍ରାଇଭ୍‍" "%s USB ଡ୍ରାଇଭ୍‍" "USB ଷ୍ଟୋରେଜ୍‌" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ଡାଟା ଚେତାବନୀ" "ଆପଣ %s ଡାଟା ବ୍ୟବହାର କରିସାରିଛନ୍ତି" "ମୋବାଇଲ୍ ଡାଟା ଧାର୍ଯ୍ୟ ସୀମାରେ ପହଞ୍ଚିଲା" @@ -1690,7 +1690,7 @@ "ଆକ୍ସେସିବିଲିଟୀ ବଟନ୍ ସହିତ ବ୍ୟବହାର କରିବାକୁ ଫିଚରଗୁଡ଼ିକ ବାଛନ୍ତୁ" "ଭଲ୍ୟୁମ୍ କୀ ସର୍ଟକଟ୍ ସହିତ ବ୍ୟବହାର କରିବାକୁ ଫିଚରଗୁଡ଼ିକ ବାଛନ୍ତୁ" "%s ବନ୍ଦ ହୋଇଯାଇଛି" - "ସର୍ଟକଟଗୁଡ଼ିକୁ ସମ୍ପାଦନ କରନ୍ତୁ" + "ସର୍ଟକଟଗୁଡ଼ିକୁ ଏଡିଟ କରନ୍ତୁ" "ହୋଇଗଲା" "ଶର୍ଟକଟ୍‍ ବନ୍ଦ କରନ୍ତୁ" "ଶର୍ଟକଟ୍‍ ବ୍ୟବହାର କରନ୍ତୁ" @@ -2043,7 +2043,7 @@ "ଆପଣଙ୍କ ଡିଭାଇସରେ ଯାହା ହୁଏ ତାହା ଡିଭାଇସ ଲଗଗୁଡ଼ିକ ରେକର୍ଡ କରେ। ସମସ୍ୟାଗୁଡ଼ିକୁ ଖୋଜି ସମାଧାନ କରିବାକୁ ଆପ୍ସ ଏହି ଲଗଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ।\n\nକିଛି ଲଗରେ ସମ୍ବେଦନଶୀଳ ସୂଚନା ଥାଇପାରେ, ତେଣୁ ସମସ୍ତ ଡିଭାଇସ ଲଗକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଆପଣ ବିଶ୍ୱାସ କରୁଥିବା ଆପ୍ସକୁ ହିଁ ଅନୁମତି ଦିଅନ୍ତୁ। \n\nଯଦି ଆପଣ ସମସ୍ତ ଡିଭାଇସ ଲଗକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦିଅନ୍ତି ନାହିଁ, ତେବେ ବି ଏହା ନିଜର ଡିଭାଇସ ଲଗଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିପାରିବ। ଆପଣଙ୍କ ଡିଭାଇସର ନିର୍ମାତା ଏବେ ବି ଆପଣଙ୍କର ଡିଭାଇସରେ କିଛି ଲଗ କିମ୍ବା ସୂଚନାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ସକ୍ଷମ ହୋଇପାରନ୍ତି। ଅଧିକ ଜାଣନ୍ତୁ" "ପୁଣି ଦେଖାନ୍ତୁ ନାହିଁ" "%1$s, %2$s ସ୍ଲାଇସ୍‌କୁ ଦେଖାଇବା ପାଇଁ ଚାହେଁ" - "ଏଡିଟ୍ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "କଲ୍ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଭାଇବ୍ରେଟ୍ ହେବ" "କଲ୍ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ନିଃଶବ୍ଦ କରିଦିଆଯିବ" "ସିଷ୍ଟମ୍‌ରେ ପରିବର୍ତ୍ତନ" diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 852d0f5f0244..f595dba67643 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -1267,7 +1267,7 @@ "ਰਿੰਗਰ ਵੌਲਿਊਮ" "ਮੀਡੀਆ ਦੀ ਅਵਾਜ਼" "Bluetooth ਰਾਹੀਂ ਪਲੇ ਕਰ ਰਿਹਾ ਹੈ" - "ਖਾਮੋਸ਼ ਰਿੰਗਟੋਨ ਸੈੱਟ ਕੀਤੀ" + "ਸ਼ਾਂਤ ਰਿੰਗਟੋਨ ਸੈੱਟ ਕੀਤੀ" "ਇਨ-ਕਾਲ ਅਵਾਜ਼" "ਬਲੂਟੁੱਥ ਇਨ-ਕਾਲ ਅਵਾਜ਼" "ਅਲਾਰਮ ਦੀ ਅਵਾਜ਼" diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 8a468fbc9a7a..2d144e4643a8 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -2060,7 +2060,7 @@ "Zavrieť" "Systém" "Nastavenia" - "Fotoaparát" + "Kamera" "Mikrofón" "sa zobrazuje cez ďalšie aplikácie na obrazovke" "Poskytnúť spätnú väzbu" diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index a25649413503..6c77cef787a4 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -2265,7 +2265,7 @@ "Återaktivera enhetens mikrofon" "Återaktivera enhetens kamera" "För <b>%s</b> och alla appar och tjänster" - "Återaktivera" + "Avblockera" "Sensorintegritet" "Appikon" "Appens varumärkesbild" diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 6b7d947d9da9..3a8a7ff990a0 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -1684,7 +1684,7 @@ "స్క్రీన్‌పై ఉండే కంటెంట్‌ మొత్తాన్ని చదవగలుగుతుంది మరియు ఇతర యాప్‌లలో కూడా ఈ కంటెంట్‌ను ప్రదర్శిస్తుంది." "చర్యలను చూసి, అమలు చేయగలగడం" "మీరు ఒక యాప్‌‌తో చేసే ఇంటరాక్షన్‌లను లేదా హార్డ్‌వేర్ సెన్సార్‌ను ట్రాక్ చేస్తూ మీ త‌ర‌ఫున యాప్‌లతో ఇంటరాక్ట్ చేయగలదు." - "అనుమతించు" + "అనుమతించండి" "నిరాకరించు" "ఫీచర్‌ని ఉపయోగించడం ప్రారంభించడానికి, దాన్ని ట్యాప్ చేయండి:" "యాక్సెసిబిలిటీ బటన్‌తో ఉపయోగించడానికి ఫీచర్లను ఎంచుకోండి" @@ -1970,7 +1970,7 @@ "సాధనం చిట్కా" "గేమ్‌లు" "సంగీతం & ఆడియో" - "చలనచిత్రాలు & వీడియో" + "సినిమాలు & వీడియో" "ఫోటోలు, ఇమేజ్‌లు" "సామాజికం & కమ్యూనికేషన్" "వార్తలు & వార్తాపత్రికలు" -- cgit v1.2.3 From 1a97e30ef6545c052e0e4b70e4a7f35fd705e575 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 13 Jul 2022 23:32:01 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I365550ebc021c6eb7b2f2858590eba6089c9f058 --- core/res/res/values-am/strings.xml | 2 +- core/res/res/values-de/strings.xml | 2 +- core/res/res/values-fr/strings.xml | 2 +- core/res/res/values-hi/strings.xml | 6 +++--- core/res/res/values-in/strings.xml | 2 +- core/res/res/values-it/strings.xml | 4 ++-- core/res/res/values-ja/strings.xml | 2 +- core/res/res/values-mr/strings.xml | 2 +- core/res/res/values-or/strings.xml | 22 +++++++++++----------- core/res/res/values-pa/strings.xml | 2 +- core/res/res/values-sk/strings.xml | 2 +- core/res/res/values-sv/strings.xml | 2 +- core/res/res/values-te/strings.xml | 4 ++-- 13 files changed, 27 insertions(+), 27 deletions(-) diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 8c6db331798f..2d5b0f7eddcd 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -421,7 +421,7 @@ "መተግበሪያው በእርስዎ ስልክ ላይ ስለተከማቹ እውቂያዎችዎ ያለ ውሂብን እንዲቀይር ያስችለዋል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብን እንዲሰርዙ ያስችላቸዋል።" "የጥሪ ምዝግብ ማስታወሻን ያንብቡ" "ይህ መተግበሪያ የእርስዎን የጥሪ ታሪክ ማንበብ ይችላል።" - "የጥሪ ምዝግብ ማስታወሻን ፃፍ" + "የጥሪ ምዝግብ ማስታወሻን ጻፍ" "ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የጡባዊተኮህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።" "መተግበሪያው ስለገቢ እና ወጪ ጥሪዎች ያለ ውሂብም ጨምሮ የእርስዎ Android TV መሣሪያ ምዝግብ ማስታወሻ እንዲቀይር ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ይህን ተጠቅመው የስልክዎን ምዝግብ ማስታወሻ ሊደመስሱ ወይም ሊቀይሩ ይችላሉ።" "ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የስልክህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።" diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index fae9dd7e617c..d6846d3c9285 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -1625,7 +1625,7 @@ "Integrierter Bildschirm" "HDMI-Bildschirm" "Overlay-Nr. %1$d" - "%1$s: %2$d x %3$d, %4$d dpi" + "%1$s: %2$d × %3$d, %4$d dpi" ", sicher" "Muster vergessen" "Falsches Muster" diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 06813e6c9ea3..0f79218f949b 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -628,7 +628,7 @@ "Appuyez pour supprimer votre empreinte faciale, puis ajoutez de nouveau votre visage" "Configurer le déverrouillage par reconnaissance faciale" "Déverrouillez votre téléphone en le regardant" - "Pour utiliser Face Unlock, activez ""Accès à l\'appareil photo"" dans Paramètres > Confidentialité" + "Pour utiliser le déverrouillage par reconnaissance faciale, activez ""Accès à l\'appareil photo"" dans Paramètres > Confidentialité" "Configurer d\'autres méthodes de déverrouillage" "Appuyez pour ajouter une empreinte digitale" "Déverrouillage par empreinte digitale" diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 4e0a695cb914..806133b67d2b 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -307,9 +307,9 @@ "मैसेज (एसएमएस) भेजें और देखें" "फ़ाइलें" "अपने डिवाइस में मौजूद फ़ाइलों का ऐक्सेस दें" - "संगीत और ऑडियो को ऐक्सेस करने की अनुमति" + "संगीत और ऑडियो के ऐक्सेस" "आपके डिवाइस पर संगीत और ऑडियो को ऐक्सेस करने की अनुमति" - "फ़ोटो और वीडियो को ऐक्सेस करने की अनुमति" + "फ़ोटो और वीडियो के ऐक्सेस" "आपके डिवाइस पर फ़ोटो और वीडियो को ऐक्सेस करने की अनुमति" "माइक्रोफ़ोन" "ऑडियो रिकॉर्ड करें" @@ -555,7 +555,7 @@ "अपना स्‍क्रीन लॉक अक्षम करें" "ऐप्स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा बंद करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल पाते समय फ़ोन, कीलॉक को बंद कर देता है, फिर कॉल खत्म होने पर कीलॉक को फिर से चालू कर देता है." "जानें कि स्क्रीन लॉक कितना मुश्किल बनाया गया है" - "यह मंज़ूरी मिलने के बाद ऐप्लिकेशन जान पाता है कि स्क्रीन लॉक कितना मुश्किल (बहुत ज़्यादा, मध्यम, कम या बिल्कुल नहीं) है. इस स्तर से यह पता चलता है कि स्क्रीन लॉक कितना लंबा या किस तरह का है. ऐप्लिकेशन उपयोगकर्ताओं को यह सुझाव भी दे सकता है कि वे स्क्रीन लॉक को एक तय लेवल तक अपडेट करें. लेकिन उपयोगकर्ता इसे बेझिझक अनदेखा करके छोड़ सकते हैं. ध्यान दें कि स्क्रीन लॉक को सादे टेक्स्ट में सेव नहीं किया जाता है इसलिए ऐप्लिकेशन को सटीक पासवर्ड पता नहीं होता है." + "यह मंज़ूरी मिलने के बाद ऐप्लिकेशन जान पाता है कि स्क्रीन लॉक कितना मुश्किल (बहुत ज़्यादा, मध्यम, कम या बिलकुल नहीं) है. इस स्तर से यह पता चलता है कि स्क्रीन लॉक कितना लंबा या किस तरह का है. ऐप्लिकेशन उपयोगकर्ताओं को यह सुझाव भी दे सकता है कि वे स्क्रीन लॉक को एक तय लेवल तक अपडेट करें. लेकिन उपयोगकर्ता इसे बेझिझक अनदेखा करके छोड़ सकते हैं. ध्यान दें कि स्क्रीन लॉक को सादे टेक्स्ट में सेव नहीं किया जाता है इसलिए ऐप्लिकेशन को सटीक पासवर्ड पता नहीं होता है." "सूचनाएं दिखाएं" "ऐप्लिकेशन को सूचनाएं दिखाने की अनुमति दें" "बायोमीट्रिक हार्डवेयर इस्तेमाल करने दें" diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 314f6e22380d..8596a9c90623 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -745,7 +745,7 @@ "Mengizinkan pemegang memulai layar untuk meninjau keputusan izin. Tidak pernah dibutuhkan untuk aplikasi normal." "mulai lihat fitur aplikasi" "Memungkinkan pemegang mulai melihat info fitur untuk aplikasi." - "mengakses data sensor pada frekuensi pengambilan sampel yang tinggi" + "mengakses data sensor pada frekuensi sampling yang tinggi" "Mengizinkan aplikasi mengambil sampel data sensor pada frekuensi yang lebih besar dari 200 Hz" "Setel aturan sandi" "Mengontrol panjang dan karakter yang diizinkan dalam sandi dan PIN kunci layar." diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index bdc813c6cad9..01f43a73274c 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -1916,11 +1916,11 @@ "Consentire a %1$s di creare un nuovo utente con l\'account %2$s?" "Aggiungi utente supervisionato" "Aggiungi una lingua" - "Area geografica preferita" + "Regione preferita" "Digita nome lingua" "Suggerite" "Tutte le lingue" - "Tutte le aree geografiche" + "Tutte le regioni" "Cerca" "App non disponibile" "%1$s non è al momento disponibile. Viene gestita tramite %2$s." diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 1d8a29ed1a68..bcb31b64b3fd 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -1443,7 +1443,7 @@ "メディア出力を他の外部デバイスにルーティングすることをアプリに許可します。" "インストールセッションの読み取り" "インストールセッションの読み取りをアプリに許可します。これにより、アプリはアクティブパッケージのインストールに関する詳細情報を参照できるようになります。" - "インストールパッケージのリクエスト" + "request install packages" "パッケージのインストールをリクエストすることをアプリケーションに許可します。" "パッケージの削除のリクエスト" "パッケージの削除をリクエストすることをアプリに許可します。" diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index db40cb1314be..c48d86260fe0 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -48,7 +48,7 @@ "4 ते 8 अंकांचा पिन टाइप करा." "8 अंकांचा किंवा मोठा PUK टाइप करा." "तुमचे सिम कार्ड PUK-लॉक केलेले आहे. ते अनलॉक करण्यासाठी PUK कोड टाइप करा." - "सिम कार्ड अनावरोधित करण्यासाठी PUK2 टाइप करा." + "सिम कार्ड अनब्लॉक करण्यासाठी PUK2 टाइप करा." "अयशस्वी, सिम/RUIM लॉक सुरू करा." सिम लॉक होण्यापूर्वी आपल्याकडे %d प्रयत्न उर्वरित आहेत. diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 6e20087f43e6..2a14396f5c22 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -1151,9 +1151,9 @@ "%1$s ଚାଲୁଛି" "ଅଧିକ ସୂଚନା ପାଇଁ କିମ୍ବା ଆପ୍‍ ବନ୍ଦ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।" "ଠିକ୍‍ ଅଛି" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଠିକ୍‍ ଅଛି" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଧ୍ୟାନଦିଅନ୍ତୁ" "ଲୋଡ୍ କରାଯାଉଛି…" "ଚାଲୁ" @@ -1174,9 +1174,9 @@ "%1$s ମାଧ୍ୟମରେ ଲିଙ୍କ୍‍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ" "%2$s ମାଧ୍ୟମରେ %1$s ଲିଙ୍କ୍‍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ" "ଆକ୍ସେସ୍‌ ଦିଅନ୍ତୁ" - "ସହିତ ଏଡିଟ୍‌ କରନ୍ତୁ" - "%1$sରେ ସଂଶୋଧନ କରନ୍ତୁ" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ସହିତ ଏଡିଟ କରନ୍ତୁ" + "%1$sରେ ଏଡିଟ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ସେୟାର୍ କରନ୍ତୁ" "%1$s ସହିତ ସେୟାର୍‌ କରନ୍ତୁ" "ସେୟାର୍‌ କରନ୍ତୁ" @@ -1318,7 +1318,7 @@ "ଏହା ଦ୍ୱାରା "" ଆପଣଙ୍କ ମୋବାଇଲ୍ ଆକାଉଣ୍ଟରୁ ପଇସା କଟିପାରେ। " " ଆପଣଙ୍କ ମୋବାଇଲ୍ ଆକାଉଣ୍ଟରୁ ପଇସା କଟିପାରେ। " "ପଠାନ୍ତୁ" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ମୋ ପସନ୍ଦ ମନେରଖନ୍ତୁ" "ଏହାକୁ ଆପଣ ସେଟିଙ୍ଗ ଓ ଆପ୍‍ରେ ପରବର୍ତ୍ତୀ ସମୟରେ ବଦଳାଇପାରିବେ" "ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ" @@ -1355,7 +1355,7 @@ "ଯୋଡ଼ାଯାଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି। ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" "ଆନାଲଗ୍‍ ଅଡିଓ ଆକ୍ସେସରୀ ଚିହ୍ନଟ ହେଲା" "ଏହି ଫୋନ୍‌ରେ କନେକ୍ଟ ଥିବା ଡିଭାଇସ୍‍ କମ୍ପାଟିବଲ୍‍ ନୁହେଁ। ଅଧିକ ଜାଣିବା ପାଇଁ ଟାପ୍‌ କରନ୍ତୁ।" - "USB ଡିବଗିଂ ସଂଯୁକ୍ତ ହୋଇଛି" + "USB ଡିବଗିଂ କନେକ୍ଟ କରାଯାଇଛି" "USB ଡିବଗିଂକୁ ବନ୍ଦ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ" "USB ଡିବଗିଙ୍ଗକୁ ଅକ୍ଷମ କରିବା ପାଇଁ ଚୟନ କରନ୍ତୁ।" "ୱାୟାରଲେସ୍ ଡିବଗିଂ ସଂଯୋଗ କରାଯାଇଛି" @@ -1541,7 +1541,7 @@ "ପୂର୍ବ ମାସ" "ପରବର୍ତ୍ତୀ ମାସ" "ALT" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଡିଲିଟ୍‍ କରନ୍ତୁ" "ହୋଇଗଲା" "ମୋଡ୍‍ ପରିବର୍ତ୍ତନ" @@ -1564,7 +1564,7 @@ "USB ଡ୍ରାଇଭ୍‍" "%s USB ଡ୍ରାଇଭ୍‍" "USB ଷ୍ଟୋରେଜ୍‌" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ଡାଟା ଚେତାବନୀ" "ଆପଣ %s ଡାଟା ବ୍ୟବହାର କରିସାରିଛନ୍ତି" "ମୋବାଇଲ୍ ଡାଟା ଧାର୍ଯ୍ୟ ସୀମାରେ ପହଞ୍ଚିଲା" @@ -1690,7 +1690,7 @@ "ଆକ୍ସେସିବିଲିଟୀ ବଟନ୍ ସହିତ ବ୍ୟବହାର କରିବାକୁ ଫିଚରଗୁଡ଼ିକ ବାଛନ୍ତୁ" "ଭଲ୍ୟୁମ୍ କୀ ସର୍ଟକଟ୍ ସହିତ ବ୍ୟବହାର କରିବାକୁ ଫିଚରଗୁଡ଼ିକ ବାଛନ୍ତୁ" "%s ବନ୍ଦ ହୋଇଯାଇଛି" - "ସର୍ଟକଟଗୁଡ଼ିକୁ ସମ୍ପାଦନ କରନ୍ତୁ" + "ସର୍ଟକଟଗୁଡ଼ିକୁ ଏଡିଟ କରନ୍ତୁ" "ହୋଇଗଲା" "ଶର୍ଟକଟ୍‍ ବନ୍ଦ କରନ୍ତୁ" "ଶର୍ଟକଟ୍‍ ବ୍ୟବହାର କରନ୍ତୁ" @@ -2043,7 +2043,7 @@ "ଆପଣଙ୍କ ଡିଭାଇସରେ ଯାହା ହୁଏ ତାହା ଡିଭାଇସ ଲଗଗୁଡ଼ିକ ରେକର୍ଡ କରେ। ସମସ୍ୟାଗୁଡ଼ିକୁ ଖୋଜି ସମାଧାନ କରିବାକୁ ଆପ୍ସ ଏହି ଲଗଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ।\n\nକିଛି ଲଗରେ ସମ୍ବେଦନଶୀଳ ସୂଚନା ଥାଇପାରେ, ତେଣୁ ସମସ୍ତ ଡିଭାଇସ ଲଗକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଆପଣ ବିଶ୍ୱାସ କରୁଥିବା ଆପ୍ସକୁ ହିଁ ଅନୁମତି ଦିଅନ୍ତୁ। \n\nଯଦି ଆପଣ ସମସ୍ତ ଡିଭାଇସ ଲଗକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦିଅନ୍ତି ନାହିଁ, ତେବେ ବି ଏହା ନିଜର ଡିଭାଇସ ଲଗଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିପାରିବ। ଆପଣଙ୍କ ଡିଭାଇସର ନିର୍ମାତା ଏବେ ବି ଆପଣଙ୍କର ଡିଭାଇସରେ କିଛି ଲଗ କିମ୍ବା ସୂଚନାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ସକ୍ଷମ ହୋଇପାରନ୍ତି। ଅଧିକ ଜାଣନ୍ତୁ" "ପୁଣି ଦେଖାନ୍ତୁ ନାହିଁ" "%1$s, %2$s ସ୍ଲାଇସ୍‌କୁ ଦେଖାଇବା ପାଇଁ ଚାହେଁ" - "ଏଡିଟ୍ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "କଲ୍ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଭାଇବ୍ରେଟ୍ ହେବ" "କଲ୍ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ନିଃଶବ୍ଦ କରିଦିଆଯିବ" "ସିଷ୍ଟମ୍‌ରେ ପରିବର୍ତ୍ତନ" diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 852d0f5f0244..f595dba67643 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -1267,7 +1267,7 @@ "ਰਿੰਗਰ ਵੌਲਿਊਮ" "ਮੀਡੀਆ ਦੀ ਅਵਾਜ਼" "Bluetooth ਰਾਹੀਂ ਪਲੇ ਕਰ ਰਿਹਾ ਹੈ" - "ਖਾਮੋਸ਼ ਰਿੰਗਟੋਨ ਸੈੱਟ ਕੀਤੀ" + "ਸ਼ਾਂਤ ਰਿੰਗਟੋਨ ਸੈੱਟ ਕੀਤੀ" "ਇਨ-ਕਾਲ ਅਵਾਜ਼" "ਬਲੂਟੁੱਥ ਇਨ-ਕਾਲ ਅਵਾਜ਼" "ਅਲਾਰਮ ਦੀ ਅਵਾਜ਼" diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 8a468fbc9a7a..2d144e4643a8 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -2060,7 +2060,7 @@ "Zavrieť" "Systém" "Nastavenia" - "Fotoaparát" + "Kamera" "Mikrofón" "sa zobrazuje cez ďalšie aplikácie na obrazovke" "Poskytnúť spätnú väzbu" diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index a25649413503..6c77cef787a4 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -2265,7 +2265,7 @@ "Återaktivera enhetens mikrofon" "Återaktivera enhetens kamera" "För <b>%s</b> och alla appar och tjänster" - "Återaktivera" + "Avblockera" "Sensorintegritet" "Appikon" "Appens varumärkesbild" diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 6b7d947d9da9..3a8a7ff990a0 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -1684,7 +1684,7 @@ "స్క్రీన్‌పై ఉండే కంటెంట్‌ మొత్తాన్ని చదవగలుగుతుంది మరియు ఇతర యాప్‌లలో కూడా ఈ కంటెంట్‌ను ప్రదర్శిస్తుంది." "చర్యలను చూసి, అమలు చేయగలగడం" "మీరు ఒక యాప్‌‌తో చేసే ఇంటరాక్షన్‌లను లేదా హార్డ్‌వేర్ సెన్సార్‌ను ట్రాక్ చేస్తూ మీ త‌ర‌ఫున యాప్‌లతో ఇంటరాక్ట్ చేయగలదు." - "అనుమతించు" + "అనుమతించండి" "నిరాకరించు" "ఫీచర్‌ని ఉపయోగించడం ప్రారంభించడానికి, దాన్ని ట్యాప్ చేయండి:" "యాక్సెసిబిలిటీ బటన్‌తో ఉపయోగించడానికి ఫీచర్లను ఎంచుకోండి" @@ -1970,7 +1970,7 @@ "సాధనం చిట్కా" "గేమ్‌లు" "సంగీతం & ఆడియో" - "చలనచిత్రాలు & వీడియో" + "సినిమాలు & వీడియో" "ఫోటోలు, ఇమేజ్‌లు" "సామాజికం & కమ్యూనికేషన్" "వార్తలు & వార్తాపత్రికలు" -- cgit v1.2.3 From 85d0c95b5f1401bf52f3b00a77ec039b8863961c Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 01:05:27 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I4ef38bb9519146f39ed04412b7805d5fe975a2eb --- packages/SettingsLib/res/values-or/strings.xml | 8 ++++---- packages/SettingsLib/res/values-te/arrays.xml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index b7d95689710a..7432de17bce8 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -115,7 +115,7 @@ "ଶ୍ରବଣ ଯନ୍ତ୍ର ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ" "ପେୟାର୍‌" "ପେୟାର୍‌" - "ବାତିଲ୍‌ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ପେୟାରିଂ ଫଳରେ ସଂଯୁକ୍ତ ଥିବା ବେଳେ ଆପଣଙ୍କ ସମ୍ପର୍କଗୁଡ଼ିକୁ ଏବଂ କଲ୍‌ର ଇତିବୃତିକୁ ଆକସେସ୍‌ ମଞ୍ଜୁର ହୁଏ।" "%1$s ସହ ପେୟାର୍‌ କରିହେଲା ନାହିଁ।" "ଏକ ଭୁଲ୍‌ PIN କିମ୍ବା ପାସକୀ କାରଣରୁ %1$s ସହ ପେୟାର୍‌ କରିପାରିଲା ନାହିଁ।" @@ -277,7 +277,7 @@ "ବ୍ୟକ୍ତିଗତ DNS" "ବ୍ୟକ୍ତିଗତ DNS ମୋଡ୍‌ ବାଛନ୍ତୁ" "ବନ୍ଦ" - "ସ୍ଵଚାଳିତ" + "ଅଟୋମେଟିକ" "ବ୍ୟକ୍ତିଗତ DNS ପ୍ରଦାତା ହୋଷ୍ଟନାମ" "DNS ପ୍ରଦାନକାରୀଙ୍କ ହୋଷ୍ଟନାମ ଲେଖନ୍ତୁ" "କନେକ୍ଟ କରିହେଲା ନାହିଁ" @@ -502,7 +502,7 @@ "ଅଧିକ ସମୟ।" "କମ୍ ସମୟ।" - "ବାତିଲ୍" + "ବାତିଲ" "ଠିକ୍‌ ଅଛି" "ଆଲାରାମ୍ ଏବଂ ରିମାଇଣ୍ଡରଗୁଡ଼ିକ" "ଆଲାରାମ ଓ ରିମାଇଣ୍ଡରଗୁଡ଼ିକ ସେଟ କରିବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ" @@ -577,7 +577,7 @@ "ଡିଭାଇସ୍ ଡିଫଲ୍ଟ" "ଅକ୍ଷମ କରାଯାଇଛି" "ସକ୍ଷମ କରାଯାଇଛି" - "ଏହି ପରିବର୍ତ୍ତନ ଲାଗୁ କରିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ନିଶ୍ଚିତ ରୂପେ ରିବୁଟ୍ କରାଯିବା ଆବଶ୍ୟକ। ବର୍ତ୍ତମାନ ରିବୁଟ୍ କରନ୍ତୁ କିମ୍ବା ବାତିଲ୍ କରନ୍ତୁ।" + "ଏହି ପରିବର୍ତ୍ତନ ଲାଗୁ କରିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ନିଶ୍ଚିତ ରୂପେ ରିବୁଟ୍ କରାଯିବା ଆବଶ୍ୟକ। ବର୍ତ୍ତମାନ ରିବୁଟ୍ କରନ୍ତୁ କିମ୍ବା ବାତିଲ କରନ୍ତୁ।" "ତାରଯୁକ୍ତ ହେଡଫୋନ୍" "ଚାଲୁ ଅଛି" "ବନ୍ଦ ଅଛି" diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml index fbf3b6fd8223..f44e4d7b97d4 100644 --- a/packages/SettingsLib/res/values-te/arrays.xml +++ b/packages/SettingsLib/res/values-te/arrays.xml @@ -50,8 +50,8 @@ "ఎప్పటికీ తనిఖీ చేయవద్దు" - "DRM కంటెంట్‌కు మాత్రమే తనిఖీ చేయండి" - "ఎల్లప్పుడూ తనిఖీ చేయండి" + "DRM కంటెంట్‌కు మాత్రమే చెక్ చేయండి" + "ఎల్లప్పుడూ చెక్ చేయండి" "ఎప్పటికీ HDCP తనిఖీని ఉపయోగించవద్దు" -- cgit v1.2.3 From 555491bf0155b976b3b8075b0d9e6d01a94bdac6 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 01:50:24 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ibd5bf6a261f47ad8496171c962cd0b7eff3983b0 --- packages/CompanionDeviceManager/res/values-ja/strings.xml | 2 +- packages/CompanionDeviceManager/res/values-te/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/CompanionDeviceManager/res/values-ja/strings.xml b/packages/CompanionDeviceManager/res/values-ja/strings.xml index 97bc56d629c0..5b282f0a0967 100644 --- a/packages/CompanionDeviceManager/res/values-ja/strings.xml +++ b/packages/CompanionDeviceManager/res/values-ja/strings.xml @@ -16,7 +16,7 @@ - "コンパニオン デバイス マネージャ" + "コンパニオン デバイス マネージャー" "<strong>%1$s</strong> に <strong>%2$s</strong> へのアクセスを許可" "ウォッチ" "<strong>%2$s</strong> の管理対象となる%1$sの選択" diff --git a/packages/CompanionDeviceManager/res/values-te/strings.xml b/packages/CompanionDeviceManager/res/values-te/strings.xml index 7bb383fc5f9c..d0fa24d3e665 100644 --- a/packages/CompanionDeviceManager/res/values-te/strings.xml +++ b/packages/CompanionDeviceManager/res/values-te/strings.xml @@ -38,7 +38,7 @@ "మీ పరికరాల మధ్య యాప్‌లను స్ట్రీమ్ చేయడానికి %1$s మీ %2$s తరపున అనుమతిని రిక్వెస్ట్ చేస్తోంది" "పరికరం" - "అనుమతించు" + "అనుమతించండి" "అనుమతించవద్దు" "వెనుకకు" "మీ వాచ్‌కు యాప్ అనుమతులను బదిలీ చేయండి" -- cgit v1.2.3 From e868264c2b861f7873fdeec7d70734436a82001e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 02:45:31 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I33494f2dc7b021bac8a320c50b2cefab933bc07e --- packages/DynamicSystemInstallationService/res/values-or/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/DynamicSystemInstallationService/res/values-or/strings.xml b/packages/DynamicSystemInstallationService/res/values-or/strings.xml index 05b9016d45b0..b5ec29259f7c 100644 --- a/packages/DynamicSystemInstallationService/res/values-or/strings.xml +++ b/packages/DynamicSystemInstallationService/res/values-or/strings.xml @@ -7,7 +7,7 @@ "ଇନଷ୍ଟଲ୍ କରିବା ବିଫଳ ହୋଇଛି" "ଇମେଜ୍ ବୈଧକରଣ ବିଫଳ ହୋଇଛି। ଇନଷ୍ଟଲେସନ୍ ରଦ୍ଦ କରନ୍ତୁ।" "ବର୍ତ୍ତମାନ ଏକ ଡାଇନାମିକ୍ ସିଷ୍ଟମ୍ ଚାଲୁଛି। ମୂଳ Android ସଂସ୍କରଣ ବ୍ୟବହାର କରିବାକୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ।" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଖାରଜ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" -- cgit v1.2.3 From 492eec1a343459ca3be02b671b10b2ae565768fa Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 02:49:00 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ic9ef87e6cca8c706f767bb4f3723b78b5cc5cbb5 --- packages/DynamicSystemInstallationService/res/values-or/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/DynamicSystemInstallationService/res/values-or/strings.xml b/packages/DynamicSystemInstallationService/res/values-or/strings.xml index 05b9016d45b0..b5ec29259f7c 100644 --- a/packages/DynamicSystemInstallationService/res/values-or/strings.xml +++ b/packages/DynamicSystemInstallationService/res/values-or/strings.xml @@ -7,7 +7,7 @@ "ଇନଷ୍ଟଲ୍ କରିବା ବିଫଳ ହୋଇଛି" "ଇମେଜ୍ ବୈଧକରଣ ବିଫଳ ହୋଇଛି। ଇନଷ୍ଟଲେସନ୍ ରଦ୍ଦ କରନ୍ତୁ।" "ବର୍ତ୍ତମାନ ଏକ ଡାଇନାମିକ୍ ସିଷ୍ଟମ୍ ଚାଲୁଛି। ମୂଳ Android ସଂସ୍କରଣ ବ୍ୟବହାର କରିବାକୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ।" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଖାରଜ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" -- cgit v1.2.3 From a7cbd6a7db08e71c6bbb4384124a7e4ebc55b413 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 03:00:14 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I500eb2364c92a2e6a667a0ba36d869f246d9674e --- packages/InputDevices/res/values-zu/strings.xml | 64 ++++++++++++------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/InputDevices/res/values-zu/strings.xml b/packages/InputDevices/res/values-zu/strings.xml index 2c53626e55f8..88d55f2ff32a 100644 --- a/packages/InputDevices/res/values-zu/strings.xml +++ b/packages/InputDevices/res/values-zu/strings.xml @@ -3,51 +3,51 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Amadivayisi wokufaka" "Ikhibhodi ye-Android" - "I-English (UK)" - "I-English (US)" - "I-English (US), isitayela sakwamanye amazwe" - "I-English (US), isitayela se-Colemak" - "I-English (US), isitayela se-Dvorak" - "I-English (US), isitayela sokusebenza" - "Isi-German" - "Isi-French" - "Isi-French (Canada)" + "English (UK)" + "English (US)" + "English (US), isitayela sakwamanye amazwe" + "English (US), isitayela se-Colemak" + "English (US), isitayela se-Dvorak" + "English (US), isitayela sokusebenza" + "German" + "French" + "French (Canada)" "Isi-Russian" "Isi-Russian, isitayela se-Mac" - "Isi-Spanish" + "Spanish" "Isi-Swiss French" "Isi-Swiss German" "Isi-Belgian" "Isi-Bulgarian" "Isi-Bulgarian, Ifonetiki" - "Isi-Italian" - "Isi-Danish" - "Isi-Norwegian" - "Isi-Swedish" - "Isi-Finnish" + "Italian" + "Danish" + "Norwegian" + "Swedish" + "Finnish" "Isi-Croatian" - "Isi-Czech" + "Czech" "Isitayela se-Czech QWERTY" "Isi-Estonian" - "Isi-Hungarian" - "Isi-Icelandic" + "Hungarian" + "Icelandic" "Isi-Brazilian" - "Isi-Portuguese" + "Portuguese" "Isi-Slovak" - "Isi-Slovenian" - "Isi-Turkish" + "Slovenian" + "Turkish" "I-Turkish-F" "Isi-Ukrainian" - "Isi-Arabic" - "Isi-Greek" - "Isi-Hebrew" - "Isi-Lithuanian" - "Isi-Spanish (Latin)" - "Isi-Latvian" - "Isi-Persian" - "Isi-Azebhayijani" - "Isi-Polish" - "Isi-Belarusian" + "Arabic" + "Greek" + "Hebrew" + "Lithuanian" + "Spanish (Latin)" + "Latvian" + "Persian" + "Azerbaijani" + "Polish" + "Belarusian" "isi-Mongolian" - "Okwesi-Georgian" + "Georgian" -- cgit v1.2.3 From 50eb13da24109f2d8c04388c18eb4bfda83d2d18 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 03:54:32 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I4a0c38ff6e3647a11e6c8947e3fe4bea628990fc --- packages/PackageInstaller/res/values-eu/strings.xml | 4 ++-- packages/PackageInstaller/res/values-or/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/PackageInstaller/res/values-eu/strings.xml b/packages/PackageInstaller/res/values-eu/strings.xml index fac338bca0a8..fe6edcea8dd8 100644 --- a/packages/PackageInstaller/res/values-eu/strings.xml +++ b/packages/PackageInstaller/res/values-eu/strings.xml @@ -85,8 +85,8 @@ "Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telebista honetan. Hori aldatzeko, joan Ezarpenak atalera." "Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telefono honetan. Hori aldatzeko, joan Ezarpenak atalera." "Baliteke telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telefonoari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea." - "Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik tabletak jasan ditzakeen kalteen edo datu-galeren erantzulea." - "Telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telebistak jasan ditzakeen kalteen edo datu-galeren erantzulea." + "Baliteke tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu hura erabiltzeagatik tabletari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela." + "Baliteke telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu hura erabiltzeagatik telebistari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela." "Egin aurrera" "Ezarpenak" "Wear aplikazioak instalatzea/desinstalatzea" diff --git a/packages/PackageInstaller/res/values-or/strings.xml b/packages/PackageInstaller/res/values-or/strings.xml index 4bc5bec46543..75d5d2ddb1ce 100644 --- a/packages/PackageInstaller/res/values-or/strings.xml +++ b/packages/PackageInstaller/res/values-or/strings.xml @@ -20,7 +20,7 @@ "ଇନଷ୍ଟଲ୍‍ କରନ୍ତୁ" "ଅପଡେଟ୍ କରନ୍ତୁ" "ହୋଇଗଲା" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଇନଷ୍ଟଲ୍‌ କରାଯାଉଛି…" "%1$s ଇନଷ୍ଟଲ୍‌ କରାଯାଉଛି…" "ଆପ ଇନଷ୍ଟଲ ହୋଇଗଲା।" -- cgit v1.2.3 From 929d4a52e61bb74e99968a0e6bfa4b8a3d42ceb8 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 03:58:16 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I8b417cb6ac71f09f54cdc468b78dfefb7d9f9eaa --- packages/PackageInstaller/res/values-eu/strings.xml | 4 ++-- packages/PackageInstaller/res/values-or/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/PackageInstaller/res/values-eu/strings.xml b/packages/PackageInstaller/res/values-eu/strings.xml index fac338bca0a8..fe6edcea8dd8 100644 --- a/packages/PackageInstaller/res/values-eu/strings.xml +++ b/packages/PackageInstaller/res/values-eu/strings.xml @@ -85,8 +85,8 @@ "Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telebista honetan. Hori aldatzeko, joan Ezarpenak atalera." "Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telefono honetan. Hori aldatzeko, joan Ezarpenak atalera." "Baliteke telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telefonoari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea." - "Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik tabletak jasan ditzakeen kalteen edo datu-galeren erantzulea." - "Telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telebistak jasan ditzakeen kalteen edo datu-galeren erantzulea." + "Baliteke tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu hura erabiltzeagatik tabletari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela." + "Baliteke telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu hura erabiltzeagatik telebistari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela." "Egin aurrera" "Ezarpenak" "Wear aplikazioak instalatzea/desinstalatzea" diff --git a/packages/PackageInstaller/res/values-or/strings.xml b/packages/PackageInstaller/res/values-or/strings.xml index 4bc5bec46543..75d5d2ddb1ce 100644 --- a/packages/PackageInstaller/res/values-or/strings.xml +++ b/packages/PackageInstaller/res/values-or/strings.xml @@ -20,7 +20,7 @@ "ଇନଷ୍ଟଲ୍‍ କରନ୍ତୁ" "ଅପଡେଟ୍ କରନ୍ତୁ" "ହୋଇଗଲା" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଇନଷ୍ଟଲ୍‌ କରାଯାଉଛି…" "%1$s ଇନଷ୍ଟଲ୍‌ କରାଯାଉଛି…" "ଆପ ଇନଷ୍ଟଲ ହୋଇଗଲା।" -- cgit v1.2.3 From 0b823fc57e221b555bfb7e467ba7944e8d6503aa Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 04:03:12 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I7d364323b28a62188abdad029871b2baf92d1234 --- packages/PrintSpooler/res/values-or/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/PrintSpooler/res/values-or/strings.xml b/packages/PrintSpooler/res/values-or/strings.xml index fa10909b92ed..6f215d3af18b 100644 --- a/packages/PrintSpooler/res/values-or/strings.xml +++ b/packages/PrintSpooler/res/values-or/strings.xml @@ -83,7 +83,7 @@ "%1$s ବାତିଲ୍‍ କରାଯାଉଛି" "%1$s ପ୍ରିଣ୍ଟର୍‍ ତ୍ରୁଟି" "ପ୍ରିଣ୍ଟର୍‍ ଦ୍ୱାରା ରୋକାଯାଇଥିବା %1$s" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" "ପ୍ରିଣ୍ଟର୍‍କୁ କୌଣସି ସଂଯୋଗ ନାହିଁ" "ଅଜଣା" -- cgit v1.2.3 From 314cb91e729ceaafb2fcde458915895f7641a8df Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 04:07:22 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I22c6d67ca888d14ff4c7789926eb0c5f2f6e6dd7 --- packages/PrintSpooler/res/values-or/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/PrintSpooler/res/values-or/strings.xml b/packages/PrintSpooler/res/values-or/strings.xml index fa10909b92ed..6f215d3af18b 100644 --- a/packages/PrintSpooler/res/values-or/strings.xml +++ b/packages/PrintSpooler/res/values-or/strings.xml @@ -83,7 +83,7 @@ "%1$s ବାତିଲ୍‍ କରାଯାଉଛି" "%1$s ପ୍ରିଣ୍ଟର୍‍ ତ୍ରୁଟି" "ପ୍ରିଣ୍ଟର୍‍ ଦ୍ୱାରା ରୋକାଯାଇଥିବା %1$s" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" "ପ୍ରିଣ୍ଟର୍‍କୁ କୌଣସି ସଂଯୋଗ ନାହିଁ" "ଅଜଣା" -- cgit v1.2.3 From e5332052879b115c55aa04a358d6c658a389ed58 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 04:12:27 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Iad1e2cd660b04ef7aac98a72c822e5653142b63c --- packages/SimAppDialog/res/values-fa/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SimAppDialog/res/values-fa/strings.xml b/packages/SimAppDialog/res/values-fa/strings.xml index 7eb87dddf41d..74e81a42e675 100644 --- a/packages/SimAppDialog/res/values-fa/strings.xml +++ b/packages/SimAppDialog/res/values-fa/strings.xml @@ -21,6 +21,6 @@ "سرویس دستگاه همراه را فعال کنید" "برای اینکه سیم‌کارت جدیدتان به‌درستی کار کند، باید برنامه %1$s را نصب کنید" "برای اینکه سیم‌کارت جدیدتان به‌درستی کار کند، باید برنامه شرکت مخابراتی را نصب کنید" - "الآن نه" + "حالا نه" "بارگیری برنامه" -- cgit v1.2.3 From 968aaa2add8e140ae20fd3ca6153e1c6aad24398 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 04:26:41 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ib70c4ee044273b9c4f72e5174504c667240ce231 --- packages/Shell/res/values-pa/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Shell/res/values-pa/strings.xml b/packages/Shell/res/values-pa/strings.xml index daeac3cf0b04..57ad5e25fb8f 100644 --- a/packages/Shell/res/values-pa/strings.xml +++ b/packages/Shell/res/values-pa/strings.xml @@ -39,7 +39,7 @@ "ਸਕ੍ਰੀਨਸ਼ਾਟ ਸਫਲਤਾਪੂਰਵਕ ਲਿਆ ਗਿਆ।" "ਸਕ੍ਰੀਨਸ਼ਾਟ ਨਹੀਂ ਲਿਆ ਜਾ ਸਕਿਆ।" "ਬੱਗ ਰਿਪੋਰਟ #%d ਵੇਰਵੇ" - "ਫ਼ਾਈਲ ਨਾਮ" + "ਫ਼ਾਈਲ ਦਾ ਨਾਮ" "ਬੱਗ ਸਿਰਲੇਖ" "ਬੱਗ ਸਾਰਾਂਸ਼" "ਰੱਖਿਅਤ ਕਰੋ" -- cgit v1.2.3 From 54984a9f88fb63abeccd3e85c66a33f3596186f9 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 04:35:32 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I4285c141d8a804d72c95263a3bca425ddc2fcb8f --- packages/SystemUI/res/values-am/strings.xml | 2 +- packages/SystemUI/res/values-bg/strings.xml | 4 ++-- packages/SystemUI/res/values-bs/strings.xml | 6 +++--- packages/SystemUI/res/values-cs/strings.xml | 2 +- packages/SystemUI/res/values-da/strings.xml | 2 +- packages/SystemUI/res/values-el/strings.xml | 2 +- packages/SystemUI/res/values-es/strings.xml | 2 +- packages/SystemUI/res/values-fa/strings.xml | 6 +++--- packages/SystemUI/res/values-fr-rCA/strings.xml | 2 +- packages/SystemUI/res/values-ja/strings.xml | 2 +- packages/SystemUI/res/values-ky/strings.xml | 6 +++--- packages/SystemUI/res/values-mn/strings.xml | 8 ++++---- packages/SystemUI/res/values-nb/strings.xml | 10 +++++----- packages/SystemUI/res/values-nl/strings.xml | 2 +- packages/SystemUI/res/values-or/strings.xml | 16 ++++++++-------- packages/SystemUI/res/values-pa/strings.xml | 2 +- packages/SystemUI/res/values-pt-rBR/strings.xml | 2 +- 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-sk/strings.xml | 2 +- packages/SystemUI/res/values-te/strings.xml | 12 ++++++------ packages/SystemUI/res/values-zh-rHK/strings.xml | 2 +- 23 files changed, 49 insertions(+), 49 deletions(-) diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index f2d56b2c3c84..fe7218b3753c 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -552,7 +552,7 @@ "ግራ" "ቀኝ" "መሃል" - "ትር" + "Tab" "ክፍተት" "አስገባ" "የኋሊት መደምሰሻ" diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 6e1b68ca7d5f..812ef917e921 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -280,8 +280,8 @@ "Включване, когато стане време за сън" "До края на времето за сън" "NFC" - "КБП е деактивирана" - "КБП е активирана" + "NFC е деактивирана" + "NFC е активирана" "Запис на екрана" "Старт" "Стоп" diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 992a88f44799..699e87d7f6e8 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -376,11 +376,11 @@ "%1$s upravlja ovim uređajem i može nadzirati mrežni saobraćaj" "Ovaj uređaj pruža %s" "Ovaj uređaj pripada vašoj organizaciji i povezan je s internetom putem aplikacije %1$s" - "Ovaj uređaj pripada organizaciji %1$s i povezan je na internet putem aplikacije %2$s" + "Ovaj uređaj pripada organizaciji %1$s i povezan je s internetom putem aplikacije %2$s" "Ovaj uređaj pripada vašoj organizaciji" "Ovaj uređaj pripada organizaciji %1$s" - "Ovaj uređaj pripada vašoj organizaciji i povezan je na internet putem VPN-ova" - "Ovaj uređaj pripada organizaciji %1$s i povezan je na internet putem VPN-ova" + "Ovaj uređaj pripada vašoj organizaciji i povezan je s internetom putem VPN-ova" + "Ovaj uređaj pripada organizaciji %1$s i povezan je s internetom putem VPN-ova" "Vaša organizacija može pratiti mrežni saobraćaj na vašem profilu." "%1$s može pratiti mrežni saobraćaj na vašem radnom profilu" "Mrežna aktivnost radnog profila je vidljiva vašem IT administratoru" diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index f46f82ab2eba..a9a3dc12d11a 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -379,7 +379,7 @@ "Toto zařízení spravuje organizace %1$s, která může sledovat síťový provoz" "Toto zařízení poskytuje %s" "Toto zařízení patří vaší organizaci a je připojeno k internetu prostřednictvím aplikace %1$s" - "Toto zařízení patří organizaci %1$s a je připojeno k internetu prostřednictvím aplikace %2$s" + "Zařízení patří organizaci %1$s a je připojeno k internetu pomocí aplikace %2$s" "Toto zařízení patří vaší organizaci" "Toto zařízení patří organizaci %1$s" "Toto zařízení patří vaší organizaci a je připojeno k internetu prostřednictvím sítí VPN" diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index dbbd74f8d889..02b82b190bbe 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -373,7 +373,7 @@ "%1$s ejer denne enhed og overvåger muligvis netværkstrafikken" "Denne enhed er leveret af %s" "Denne enhed tilhører din organisation, og den har forbindelse til internettet via %1$s" - "Denne enhed tilhører %1$s, og den har forbindelse til nettet via %2$s" + "Denne enhed tilhører %1$s, og den har forbindelse til internettet via %2$s" "Denne enhed tilhører din organisation" "Denne enhed tilhører %1$s" "Denne enhed tilhører din organisation, og den har forbindelse til nettet via VPN-forbindelser" diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 631aa8151506..67d18fcc0814 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -373,7 +373,7 @@ "Ο οργανισμός %1$s κατέχει αυτήν τη συσκευή και μπορεί να παρακολουθεί την επισκεψιμότητα δικτύου." "Αυτή η συσκευή παρέχεται από τον οργανισμό %s" "Αυτή η συσκευή ανήκει στον οργανισμό σας και συνδέεται στο διαδίκτυο μέσω της εφαρμογής %1$s" - "Αυτή η συσκευή ανήκει στον οργανισμό %1$s και συνδέεται στο διαδίκτυο μέσω της εφαρμογής %2$s" + "Αυτή η συσκευή ανήκει σε %1$s και συνδέεται στο διαδίκτυο μέσω %2$s" "Αυτή η συσκευή ανήκει στον οργανισμό σας." "Αυτή η συσκευή ανήκει στον οργανισμό %1$s" "Αυτή η συσκευή ανήκει στον οργανισμό σας και συνδέεται στο διαδίκτυο μέσω VPN" diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 9b79f71a4d88..c75fa56e4291 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -401,7 +401,7 @@ "Se ha instalado una entidad de certificación en este dispositivo. Es posible que se supervise o se modifique tu tráfico de red seguro." "El administrador ha activado el registro de la red para supervisar el tráfico en tu dispositivo." "Tu administrador ha activado el registro de la red, por lo que se monitorizará el tráfico de tu perfil de trabajo, aunque no el de tu perfil personal." - "Este dispositivo está conectado a Internet a través de %1$s. Tu actividad de red, como los correos electrónicos y los datos de navegación, es visible para tu administrador de TI." + "Este dispositivo está conectado a Internet a través de %1$s. Tu actividad en esta red, como tus correos electrónicos y tus datos de navegación, es visible para tu administrador de TI." "Este dispositivo está conectado a Internet a través de %1$s y %2$s. Tu actividad de red, como los correos electrónicos y los datos de navegación, es visible para tu administrador de TI." "Tus aplicaciones de trabajo están conectadas a Internet a través de %1$s. Tu actividad de red en las aplicaciones de trabajo, incluidos los correos electrónicos y los datos de navegación, es visible para tu administrador de TI y tu proveedor de VPN." "Tus aplicaciones personales están conectadas a Internet a través de %1$s. Tu actividad de red, como los correos electrónicos y los datos de navegación, es visible para tu proveedor de VPN." diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index d64e1d868542..378ee0814870 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -295,9 +295,9 @@ "میکروفن مسدود شده است" "دوربین مسدود شده است" "میکروفون و دوربین مسدود شده‌اند" - "برای لغو انسداد، کلید حریم‌خصوصی روی دستگاه را به موقعیت میکروفون روشن ببرید تا دسترسی به میکروفون مجاز شود. برای پیدا کردن کلید حریم‌خصوصی روی دستگاه، به دفترچه راهنمای دستگاه مراجعه کنید." - "برای لغو انسداد، کلید حریم‌خصوصی روی دستگاه را به موقعیت دوربین روشن ببرید تا دسترسی به دوربین مجاز شود. برای پیدا کردن کلید حریم‌خصوصی روی دستگاه، به دفترچه راهنمای دستگاه مراجعه کنید." - "برای لغو انسداد آن، کلید حریم‌خصوصی روی دستگاه را به موقعیت لغو انسداد ببرید تا دسترسی مجاز شود. برای پیدا کردن کلید حریم‌خصوصی روی دستگاه، به دفترچه راهنمای دستگاه مراجعه کنید." + "برای لغو انسداد، کلید حریم خصوصی روی دستگاه را به موقعیت میکروفون روشن ببرید تا دسترسی به میکروفون مجاز شود. برای پیدا کردن کلید حریم خصوصی روی دستگاه، به دفترچه راهنمای دستگاه مراجعه کنید." + "برای لغو انسداد، کلید حریم خصوصی روی دستگاه را به موقعیت دوربین روشن ببرید تا دسترسی به دوربین مجاز شود. برای پیدا کردن کلید حریم خصوصی روی دستگاه، به دفترچه راهنمای دستگاه مراجعه کنید." + "برای لغو انسداد آن، کلید حریم خصوصی روی دستگاه را به موقعیت لغو انسداد ببرید تا دسترسی مجاز شود. برای پیدا کردن کلید حریم خصوصی روی دستگاه، به دفترچه راهنمای دستگاه مراجعه کنید." "میکروفون دردسترس است" "دوربین دردسترس است" "میکروفون و دوربین دردسترس‌اند" diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index db37f776688b..c7619efe5a24 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -373,7 +373,7 @@ "%1$s possède cet appareil et peut contrôler le trafic réseau" "Cet appareil est fourni par %s" "Cet appareil appartient à votre organisation et est connecté à Internet par l\'intermédiaire de %1$s" - "Cet appareil appartient à %1$s et est connecté à Internet par l\'intermédiaire de %2$s" + "Cet appareil appartient à %1$s et est connecté à Internet par %2$s" "Cet appareil appartient à votre organisation" "Cet appareil appartient à %1$s" "Cet appareil appartient à votre organisation et est connecté à Internet par l\'intermédiaire de RPV" diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 5324ec50f2cd..629b5cfea01b 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -373,7 +373,7 @@ "これは %1$s が所有するデバイスで、ネットワーク トラフィックが監視されることもあります" "このデバイスは %s から提供されています" "これは組織が所有するデバイスで、%1$sを介してインターネットに接続しています" - "これは %1$s が所有するデバイスで、%2$sを介してインターネットに接続しています" + "このデバイスは %1$s が所有し、%2$s を介してインターネットに接続されています" "これは組織が所有するデバイスです" "これは %1$s が所有するデバイスです" "これは組織が所有するデバイスで、VPN を介してインターネットに接続しています" diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 35d50d184bf6..51c4d1582600 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -50,7 +50,7 @@ "USB аркылуу жөндөөгө уруксат берилсинби?" "Компүтердин RSA ачкычынын контролдук суммасы:\n%1$s" "Бул компүтерден дайыма уруксат берилсин" - "Уруксат берүү" + "Ооба" "USB мүчүлүштүктөрүн оңдоого уруксат жок" "Учурда бул аккаунтта USB аркылуу мүчүлүштүктөрдү аныктоо функциясын иштетүүгө болбойт. Негизги колдонуучунун аккаунтуна кириңиз." "Тутум тилин %1$s тилине өзгөртөсүзбү?" @@ -60,7 +60,7 @@ "Ушул тармакта мүчүлүштүктөрдү Wi-Fi аркылуу аныктоого уруксат бересизби?" "Тармактын аталышы (SSID)\n%1$s\n\nWi‑Fi дареги (BSSID)\n%2$s" "Бул тармакта ар дайым уруксат берилсин" - "Уруксат берүү" + "Ооба" "Мүчүлүштүктөрдү Wi-Fi аркылуу оңдоого уруксат берилген жок" "Учурда бул түзмөккө кирген колдонуучу мүчүлүштүктөрдү Wi-Fi аркылуу оңдоо функциясын күйгүзө албайт. Бул функцияны колдонуу үчүн негизги колдонуучунун аккаунтуна которулуңуз." "USB порту өчүрүлдү" @@ -469,7 +469,7 @@ "Жаңырууда" "Колдонуу үчүн кулпусун ачыңыз" "Кыйытмаларды алууда ката кетти. Бир аздан кийин кайталап көрүңүз." - "Кулпуланган экран жөндөөлөрү" + "Экранды кулпулоо параметрлери" "QR кодун скандоо" "Жумуш профили" "Учак режими" diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 2fa1640a7aba..4f6661d06f9f 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -170,7 +170,7 @@ "Идэвхгүй" "Нислэгийн горим" "VPN асаалттай байна." - "Батерей %d хувьтай." + "Батарей %d хувьтай." "Батарей %1$s хувьтай байна. Таны хэрэглээнд тулгуурлан ойролцоогоор %2$s үлдсэн" "Батарейг цэнэглэж байна, %d%%." "Бүх мэдэгдлийг харах" @@ -214,7 +214,7 @@ "Бүү саад бол" "Bluetooth" "Хослуулсан төхөөрөмж байхгүй" - "%s батерей" + "%s батарей" "Аудио" "Чихэвч" "Оролт" @@ -247,7 +247,7 @@ "Дууссан" "Хаах" "Холбогдсон" - "Холбогдсон, батерей %1$s" + "Холбогдсон, батарей %1$s" "Холбогдож байна..." "Сүлжээний цэг" "Асааж байна…" @@ -710,7 +710,7 @@ "Апп (%s) Бүү саад бол горимыг асаасан." "Автомат дүрэм эсвэл апп Бүү саад бол горимыг асаасан." "Цаана ажиллаж буй апп" - "Батерей, дата ашиглалтын талаар дэлгэрэнгүйг харахын тулд товшино уу" + "Батарей, дата ашиглалтын талаар дэлгэрэнгүйг харахын тулд товшино уу" "Мобайл датаг унтраах уу?" "Та %s-р дата эсвэл интернэтэд хандах боломжгүй болно. Интернэтэд зөвхөн Wi-Fi-р холбогдох боломжтой болно." "таны оператор компани" diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index e6324f416ae9..a581fc94653a 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -136,7 +136,7 @@ "Ansiktet er autentisert" "Bekreftet" "Trykk på Bekreft for å fullføre" - "Låst opp med ansiktet. Trykk på lås opp-ikon for å fortsette" + "Låst opp med ansiktet. Trykk på lås opp-ikonet for å fortsette" "Autentisert" "Bruk PIN-kode" "Bruk mønster" @@ -249,7 +249,7 @@ "Tilkoblet" "Tilkoblet, batterinivå %1$s" "Kobler til …" - "Wi-Fi-sone" + "Wifi-sone" "Slår på …" "Datasparing er på" @@ -312,7 +312,7 @@ "Trykk igjen" "Sveip opp for å åpne" "Trykk på lås opp-ikonet for å åpne" - "Låst opp med ansiktet. Trykk på lås opp-ikon for å fortsette" + "Låst opp med ansiktet. Trykk på lås opp-ikonet for å fortsette" "Flytt til venstre" "Flytt ned" @@ -476,7 +476,7 @@ "Du hører ikke neste innstilte alarm %1$s" "kl. %1$s" "%1$s" - "Wi-Fi-sone" + "Wifi-sone" "Work-profil" "Gøy for noen – ikke for alle" "Med System UI Tuner har du flere måter å justere og tilpasse Android-brukergrensesnittet på. Disse eksperimentelle funksjonene kan endres, avbrytes eller fjernes i fremtidige utgivelser. Fortsett med forbehold." @@ -919,7 +919,7 @@ "Wi-Fi kobles ikke til automatisk inntil videre" "Se alle" "For å bytte nettverk, koble fra Ethernet" - "For å forbedre brukeropplevelsen på enheten kan apper og tjenester søke etter Wi-Fi-nettverk når som helst – også når Wi-Fi er slått av. Du kan endre dette i innstillingene for Wi-Fi-skanning. ""Endre" + "For å forbedre brukeropplevelsen på enheten kan apper og tjenester søke etter Wi-Fi-nettverk når som helst – også når Wi-Fi er slått av. Du kan endre dette i innstillingene for wifi-skanning. ""Endre" "Slå av flymodus" "%1$s vil legge til denne brikken i Hurtiginnstillinger" "Legg til brikke" diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index eaa4ca168e9c..cf1b573eee08 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -373,7 +373,7 @@ "%1$s is eigenaar van dit apparaat en kan het netwerkverkeer bijhouden" "Dit apparaat wordt geleverd door %s" "Dit apparaat is eigendom van je organisatie en heeft verbinding met internet via %1$s" - "Dit apparaat is eigendom van %1$s en heeft verbinding met internet via %2$s" + "Dit apparaat is eigendom van %1$s en heeft internetverbinding via %2$s" "Dit apparaat is eigendom van je organisatie" "Dit apparaat is eigendom van %1$s" "Dit apparaat is eigendom van je organisatie en heeft verbinding met internet via VPN\'s" diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 99243d2e447d..844e8829ccb7 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -79,8 +79,8 @@ "ସ୍କ୍ରିନସଟକୁ ସେଭ୍ କରାଯାଇପାରିବ ନାହିଁ" "ଆପ୍‍ କିମ୍ବା ସଂସ୍ଥା ଦ୍ୱାରା ସ୍କ୍ରୀନଶଟ୍‍ ନେବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" "ସ୍କ୍ରିନସଟଗୁଡ଼ିକ ନେବା ଆପଣଙ୍କ IT ଆଡମିନଙ୍କ ଦ୍ୱାରା ବ୍ଲକ କରାଯାଇଛି" - "ଏଡିଟ୍ କରନ୍ତୁ" - "ସ୍କ୍ରିନସଟ୍ ଏଡିଟ୍ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" + "ସ୍କ୍ରିନସଟ୍ ଏଡିଟ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟ ସେୟାର କରନ୍ତୁ" "ଅଧିକ କ୍ୟାପଚର୍ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟ୍ ଖାରଜ କରନ୍ତୁ" @@ -127,10 +127,10 @@ "ଫୋନ୍‌ ଖୋଲନ୍ତୁ" "ଭଏସ୍‍ ସହାୟକ ଖୋଲନ୍ତୁ" "କ୍ୟାମେରା ଖୋଲନ୍ତୁ" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ନିଶ୍ଚିତ କରନ୍ତୁ" "ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" - "ପ୍ରାମାଣିକତା ବାତିଲ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" + "ପ୍ରାମାଣିକତା ବାତିଲ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" "ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" "ଆପଣଙ୍କର ମୁହଁକୁ ପ୍ରମାଣ କରୁଛି" "ମୁହଁ ପ୍ରାମାଣିକତା ହୋଇଛି" @@ -627,7 +627,7 @@ "ଟାଇଲ୍‍ ପୁଣି ସଜାଇବାକୁ ଦାବିଧରି ଟାଣନ୍ତୁ" "ବାହାର କରିବାକୁ ଏଠାକୁ ଡ୍ରାଗ୍‍ କରନ୍ତୁ" "ଆପଣଙ୍କର ଅତିକମ୍‌ରେ %1$dଟି ଟାଇଲ୍ ଆବଶ୍ୟକ" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ସମୟ" "ଘଣ୍ଟା, ମିନିଟ୍‍ ଏବଂ ସେକେଣ୍ଡ ଦେଖାନ୍ତୁ" @@ -659,7 +659,7 @@ "ଉପଯୋଗକର୍ତ୍ତା ବାଛନ୍ତୁ" "କୌଣସି ଇଣ୍ଟରନେଟ୍‌ କନେକ୍ସନ୍ ନାହିଁ" "%s ସେଟିଙ୍ଗ ଖୋଲନ୍ତୁ।" - "ସେଟିଙ୍ଗର କ୍ରମ ସଂଶୋଧନ କରନ୍ତୁ।" + "ସେଟିଂସର କ୍ରମ ଏଡିଟ କରନ୍ତୁ।" "ପାୱାର ମେନୁ" "ପୃଷ୍ଠା %1$d ମୋଟ %2$d" "ଲକ୍‌ ସ୍କ୍ରୀନ୍‌" @@ -833,7 +833,7 @@ "ସ୍ଥିତି ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ" "ତ୍ରୁଟି ହୋଇଛି, ପୁଣି ଚେଷ୍ଟା କର" "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଯୋଗ କରନ୍ତୁ" - "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଏଡିଟ୍ କରନ୍ତୁ" + "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଏଡିଟ କରନ୍ତୁ" "ଆଉଟପୁଟ୍ ଯୋଗ କରନ୍ତୁ" "ଗୋଷ୍ଠୀ" "1ଟି ଡିଭାଇସ୍ ଚୟନ କରାଯାଇଛି" @@ -948,7 +948,7 @@ "କ୍ଲିପବୋର୍ଡ ଏଡିଟର" "କ୍ଲିପବୋର୍ଡ" "ଇମେଜ ପ୍ରିଭ୍ୟୁ" - "ଏଡିଟ" + "ଏଡିଟ କରନ୍ତୁ" "ଯୋଗ କରନ୍ତୁ" "ଉପଯୋଗକର୍ତ୍ତାମାନଙ୍କୁ ପରିଚାଳନା କରନ୍ତୁ" "ଏହି ବିଜ୍ଞପ୍ତି ସ୍ପ୍ଲିଟସ୍କ୍ରିନକୁ ଡ୍ରାଗ କରିବାକୁ ସମର୍ଥନ କରେ ନାହିଁ।" diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index a40a04839a92..99685f5339ee 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -364,7 +364,7 @@ "ਸ਼ਾਂਤ" "ਸੂਚਨਾਵਾਂ" "ਗੱਲਾਂਬਾਤਾਂ" - "ਸਾਰੀਆਂ ਖਾਮੋਸ਼ ਸੂਚਨਾਵਾਂ ਕਲੀਅਰ ਕਰੋ" + "ਸਾਰੀਆਂ ਸ਼ਾਂਤ ਸੂਚਨਾਵਾਂ ਕਲੀਅਰ ਕਰੋ" "\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵੱਲੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਰੋਕਿਆ ਗਿਆ" "ਹੁਣੇ ਸ਼ੁਰੂ ਕਰੋ" "ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ" diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 09591cb82d8c..0bcd0c65800f 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -373,7 +373,7 @@ "A organização %1$s é dona deste dispositivo e pode monitorar o tráfego de rede" "Este dispositivo é fornecido pela %s" "Este dispositivo pertence à sua organização e está conectado à Internet usando o %1$s." - "Este dispositivo pertence à organização %1$s e está conectado à Internet usando o %2$s" + "Este dispositivo pertence a %1$s e está conectado à Internet usando o %2$s" "Este dispositivo pertence à sua organização" "Este dispositivo pertence à organização %1$s" "Este dispositivo pertence à sua organização e está conectado à Internet usando VPNs" diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 09591cb82d8c..0bcd0c65800f 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -373,7 +373,7 @@ "A organização %1$s é dona deste dispositivo e pode monitorar o tráfego de rede" "Este dispositivo é fornecido pela %s" "Este dispositivo pertence à sua organização e está conectado à Internet usando o %1$s." - "Este dispositivo pertence à organização %1$s e está conectado à Internet usando o %2$s" + "Este dispositivo pertence a %1$s e está conectado à Internet usando o %2$s" "Este dispositivo pertence à sua organização" "Este dispositivo pertence à organização %1$s" "Este dispositivo pertence à sua organização e está conectado à Internet usando VPNs" diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 27793b83383c..a3b4ca55974e 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -376,7 +376,7 @@ "%1$s deține acest dispozitiv și poate monitoriza traficul din rețea" "Acest dispozitiv este oferit de %s" "Acest dispozitiv aparține organizației dvs. și este conectat la internet prin aplicația %1$s." - "Acest dispozitiv aparține organizației %1$s și este conectat la internet prin aplicația %2$s." + "Acest dispozitiv aparține organizației %1$s și e conectat la internet prin %2$s." "Dispozitivul aparține organizației dvs." "Acest dispozitiv aparține organizației %1$s" "Acest dispozitiv aparține organizației dvs. și este conectat la internet prin rețele VPN." diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index bd907ef52165..2482cf969ab3 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -379,7 +379,7 @@ "Организация \"%1$s\" управляет этим устройством и может отслеживать сетевой трафик" "Устройство предоставлено компанией \"%s\"." "Это устройство принадлежит вашей организации и подключено к интернету через сервис \"%1$s\"" - "Это устройство принадлежит организации \"%1$s\" и подключено к интернету через сервис \"%2$s\"" + "Это устр-во принадлежит организации \"%1$s\" и подключено к интернету через сервис \"%2$s\"" "Это устройство принадлежит вашей организации" "Это устройство принадлежит организации \"%1$s\"" "Это устройство принадлежит вашей организации и подключено к интернету через сети VPN" diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 5c5f69bef499..7115053f58b0 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -379,7 +379,7 @@ "%1$s vlastní toto zariadenie a môže sledovať sieťovú premávku" "Toto zariadenie poskytuje %s" "Toto zariadenie patrí vašej organizácii a k internetu je pripojené prostredníctvom aplikácie %1$s" - "Toto zariadenie patrí organizácii %1$s a k internetu je pripojené prostredníctvom aplikácie %2$s" + "Zariadenie patrí organizácii %1$s a k internetu je pripojené cez aplikáciu %2$s" "Toto zariadenie patrí vašej organizácii" "Toto zariadení patrí organizácii %1$s" "Toto zariadenie patrí vašej organizácii a k internetu je pripojené prostredníctvom sietí VPN" diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 9d667d789278..31c2d957d499 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -50,7 +50,7 @@ "USB డీబగ్గింగ్‌ను అనుమతించాలా?" "ఇది కంప్యూటర్ యొక్క RSA కీ వేలిముద్ర:\n%1$s" "ఈ కంప్యూటర్ నుండి ఎల్లప్పుడూ అనుమతించు" - "అనుమతించు" + "అనుమతించండి" "USB డీబగ్గింగ్‌కి అనుమతి లేదు" "ఈ పరికరానికి ప్రస్తుతం సైన్ ఇన్ చేసిన వినియోగదారు USB డీబగ్గింగ్ ఆన్ చేయలేరు. ఈ ఫీచర్ ఉపయోగించడానికి, ప్రాథమిక వినియోగదారుకి మారాలి." "మీరు సిస్టమ్ భాషను %1$s భాషకు మార్చాలనుకుంటున్నారా?" @@ -60,7 +60,7 @@ "ఈ నెట్‌వర్క్ ద్వారా వైర్‌లెస్ డీబగ్గింగ్‌ను అనుమతించాలా?" "నెట్‌వర్క్ పేరు (SSID)\n%1$s\n\nWi‑Fi అడ్రస్ (BSSID)\n%2$s" "ఈ నెట్‌వర్క్ నుండి ఎల్లప్పుడూ అనుమతించు" - "అనుమతించు" + "అనుమతించండి" "వైర్‌లెస్ డీబగ్గింగ్‌కి అనుమతి లేదు" "ఈ పరికరానికి ప్రస్తుతం సైన్ ఇన్ చేసిన యూజర్, వైర్‌లెస్ డీబగ్గింగ్ ఆన్ చేయలేరు. ఈ ఫీచర్ ఉపయోగించడానికి, ప్రాథమిక యూజర్ కి స్విచ్ అవ్వండి." "USB పోర్ట్‌ నిలిపివేయబడింది" @@ -479,7 +479,7 @@ "హాట్‌స్పాట్" "ఆఫీస్ ప్రొఫైల్‌" "కొందరికి సరదాగా ఉంటుంది కానీ అందరికీ అలాగే ఉండదు" - "సిస్టమ్ UI ట్యూనర్ Android వినియోగదారు ఇంటర్‌ఫేస్‌ను మెరుగుపరచడానికి మరియు అనుకూలీకరించడానికి మీకు మరిన్ని మార్గాలను అందిస్తుంది. ఈ ప్రయోగాత్మక లక్షణాలు భవిష్యత్తు విడుదలల్లో మార్పుకు లోనవ్వచ్చు, తాత్కాలికంగా లేదా పూర్తిగా నిలిపివేయవచ్చు. జాగ్రత్తగా కొనసాగండి." + "సిస్టమ్ UI ట్యూనర్ Android వినియోగదారు ఇంటర్‌ఫేస్‌ను మెరుగుపరచడానికి మరియు అనుకూలంగా మార్చడానికి మీకు మరిన్ని మార్గాలను అందిస్తుంది. ఈ ప్రయోగాత్మక లక్షణాలు భవిష్యత్తు విడుదలల్లో మార్పుకు లోనవ్వచ్చు, తాత్కాలికంగా లేదా పూర్తిగా నిలిపివేయవచ్చు. జాగ్రత్తగా కొనసాగండి." "ఈ ప్రయోగాత్మక లక్షణాలు భవిష్యత్తు విడుదలల్లో మార్పుకు లోనవ్వచ్చు, తాత్కాలికంగా లేదా పూర్తిగా నిలిపివేయవచ్చు. జాగ్రత్తగా కొనసాగండి." "అర్థమైంది" "అభినందనలు! సెట్టింగ్‌లకు సిస్టమ్ UI ట్యూనర్ జోడించబడింది" @@ -719,7 +719,7 @@ "- ఇది %1$s నుండి సమాచారాన్ని చదువుతుంది" "- ఇది %1$s లోపల చర్యలు తీసుకుంటుంది" "ఏ యాప్ నుండి అయినా స్లైస్‌లను చూపించడానికి %1$sని అనుమతించండి" - "అనుమతించు" + "అనుమతించండి" "తిరస్కరించు" "బ్యాటరీ సేవర్‌ని షెడ్యూల్ చేయడానికి నొక్కండి" "బ్యాటరీ ఛార్జింగ్ పూర్తిగా అయిపోతున్న తరుణంలో ఆన్ చేస్తుంది" @@ -754,7 +754,7 @@ "ఫుల్ స్క్రీన్‌ను మ్యాగ్నిఫై చేయండి" "స్క్రీన్‌లో భాగాన్ని మాగ్నిఫై చేయండి" "స్విచ్ చేయి" - "యాక్సెసిబిలిటీ ఫీచర్‌లను తెరవడానికి ట్యాప్ చేయండి. సెట్టింగ్‌లలో ఈ బటన్‌ను అనుకూలీకరించండి లేదా రీప్లేస్ చేయండి.\n\n""వీక్షణ సెట్టింగ్‌లు" + "యాక్సెసిబిలిటీ ఫీచర్‌లను తెరవడానికి ట్యాప్ చేయండి. సెట్టింగ్‌లలో ఈ బటన్‌ను అనుకూలంగా మార్చండి లేదా రీప్లేస్ చేయండి.\n\n""వీక్షణ సెట్టింగ్‌లు" "తాత్కాలికంగా దానిని దాచడానికి బటన్‌ను చివరకు తరలించండి" "ఎగువ ఎడమ వైపునకు తరలించు" "ఎగువ కుడి వైపునకు తరలించు" @@ -828,7 +828,7 @@ "ఇన్‌యాక్టివ్, యాప్ చెక్ చేయండి" "కనుగొనబడలేదు" "కంట్రోల్ అందుబాటులో లేదు" - "%1$sను యాక్సెస్ చేయడం సాధ్యపడలేదు. %2$s యాప్‌ను తనిఖీ చేసి, కంట్రోల్ ఇప్పటికీ అందుబాటులో ఉందని, యాప్ సెట్టింగ్‌లు మారలేదని నిర్ధారించుకోండి." + "%1$sను యాక్సెస్ చేయడం సాధ్యపడలేదు. %2$s యాప్‌ను చెక్ చేసి, కంట్రోల్ ఇప్పటికీ అందుబాటులో ఉందని, యాప్ సెట్టింగ్‌లు మారలేదని నిర్ధారించుకోండి." "యాప్‌ను తెరువు" "స్టేటస్ లోడ్ చేయడం సాధ్యపడలేదు" "ఎర్రర్, మళ్లీ ప్రయత్నించండి" diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 6fe0123005f4..373de6f7162f 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -373,7 +373,7 @@ "「%1$s」擁有此裝置,並可能會監察網絡流量" "此裝置由 %s 提供" "此裝置屬於您的機構,並已透過「%1$s」連接至互聯網" - "此裝置屬於「%1$s」,並已透過「%2$s」連接至互聯網" + "此裝置由「%1$s」所有,並透過「%2$s」連接至互聯網" "此裝置屬於您的機構" "此裝置屬於「%1$s」" "此裝置屬於您的機構,並已透過 VPN 連接至互聯網" -- cgit v1.2.3 From cbc1c1bc9aeb03b9cec8cad48f0bd15e95728f6e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 04:37:11 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Id8849efde3deb90e21ad80697380ec7d1aee4119 --- packages/SystemUI/res/values-es/tiles_states_strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/res/values-es/tiles_states_strings.xml b/packages/SystemUI/res/values-es/tiles_states_strings.xml index 78c7669cbb47..7d8be488c5c5 100644 --- a/packages/SystemUI/res/values-es/tiles_states_strings.xml +++ b/packages/SystemUI/res/values-es/tiles_states_strings.xml @@ -59,7 +59,7 @@ "No disponible" "Desactivada" - "Activada" + "Activado" "No disponible" @@ -88,7 +88,7 @@ "No disponible" - "Desactivada" + "Desactivado" "Activado" -- cgit v1.2.3 From 17bec64f9a47d9a69a05d2549824c63d94910fe5 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 04:42:54 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I9acaf261b90574b14b9c6cc5dd19c88f34a5d355 --- packages/SystemUI/res-keyguard/values-fa/strings.xml | 2 +- packages/SystemUI/res-keyguard/values-fr/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml index 9d77608739f3..11e401e40b33 100644 --- a/packages/SystemUI/res-keyguard/values-fa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml @@ -90,7 +90,7 @@ "دستگاه توسط سرپرست سیستم قفل شده است" "دستگاه به‌صورت دستی قفل شده است" "شناسایی نشد" - "‏برای استفاده از «قفل‌گشایی با چهره»، ""دسترسی به دوربین"" را در «تنظیمات > حریم‌خصوصی» روشن کنید" + "‏برای استفاده از «قفل‌گشایی با چهره»، ""دسترسی به دوربین"" را در «تنظیمات > حریم خصوصی» روشن کنید" پین سیم‌کارت را وارد کنید. %d تلاش دیگری باقی مانده است. پین سیم‌کارت را وارد کنید. %d تلاش دیگری باقی مانده است. diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml index b34ae8ca8c57..e1cde72a0239 100644 --- a/packages/SystemUI/res-keyguard/values-fr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml @@ -90,7 +90,7 @@ "Appareil verrouillé par l\'administrateur" "Appareil verrouillé manuellement" "Non reconnu" - "Pour utiliser Face Unlock, activez ""Accès à l\'appareil photo"" dans Paramètres > Confidentialité" + "Pour utiliser le déverrouillage par reconnaissance faciale, activez ""Accès à l\'appareil photo"" dans Paramètres > Confidentialité" Saisissez le code de la carte SIM. %d tentative restante. Saisissez le code de la carte SIM. %d tentatives restantes. -- cgit v1.2.3 From 46ff275b92675b951a696150f6c0b8a29fc6ed5e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 04:50:28 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I9cd2b707e7f9a62a427e7ea536cb0fb2d360bbda --- packages/SystemUI/res/values-nb/strings.xml | 4 ++-- packages/SystemUI/res/values-or/strings.xml | 16 ++++++++-------- packages/SystemUI/res/values-pa/strings.xml | 2 +- packages/SystemUI/res/values-te/strings.xml | 8 ++++---- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index fbf0f6116d85..a581fc94653a 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -136,7 +136,7 @@ "Ansiktet er autentisert" "Bekreftet" "Trykk på Bekreft for å fullføre" - "Låst opp med ansiktet. Trykk på lås opp-ikon for å fortsette" + "Låst opp med ansiktet. Trykk på lås opp-ikonet for å fortsette" "Autentisert" "Bruk PIN-kode" "Bruk mønster" @@ -312,7 +312,7 @@ "Trykk igjen" "Sveip opp for å åpne" "Trykk på lås opp-ikonet for å åpne" - "Låst opp med ansiktet. Trykk på lås opp-ikon for å fortsette" + "Låst opp med ansiktet. Trykk på lås opp-ikonet for å fortsette" "Flytt til venstre" "Flytt ned" diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 99243d2e447d..844e8829ccb7 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -79,8 +79,8 @@ "ସ୍କ୍ରିନସଟକୁ ସେଭ୍ କରାଯାଇପାରିବ ନାହିଁ" "ଆପ୍‍ କିମ୍ବା ସଂସ୍ଥା ଦ୍ୱାରା ସ୍କ୍ରୀନଶଟ୍‍ ନେବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" "ସ୍କ୍ରିନସଟଗୁଡ଼ିକ ନେବା ଆପଣଙ୍କ IT ଆଡମିନଙ୍କ ଦ୍ୱାରା ବ୍ଲକ କରାଯାଇଛି" - "ଏଡିଟ୍ କରନ୍ତୁ" - "ସ୍କ୍ରିନସଟ୍ ଏଡିଟ୍ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" + "ସ୍କ୍ରିନସଟ୍ ଏଡିଟ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟ ସେୟାର କରନ୍ତୁ" "ଅଧିକ କ୍ୟାପଚର୍ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟ୍ ଖାରଜ କରନ୍ତୁ" @@ -127,10 +127,10 @@ "ଫୋନ୍‌ ଖୋଲନ୍ତୁ" "ଭଏସ୍‍ ସହାୟକ ଖୋଲନ୍ତୁ" "କ୍ୟାମେରା ଖୋଲନ୍ତୁ" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ନିଶ୍ଚିତ କରନ୍ତୁ" "ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" - "ପ୍ରାମାଣିକତା ବାତିଲ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" + "ପ୍ରାମାଣିକତା ବାତିଲ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" "ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" "ଆପଣଙ୍କର ମୁହଁକୁ ପ୍ରମାଣ କରୁଛି" "ମୁହଁ ପ୍ରାମାଣିକତା ହୋଇଛି" @@ -627,7 +627,7 @@ "ଟାଇଲ୍‍ ପୁଣି ସଜାଇବାକୁ ଦାବିଧରି ଟାଣନ୍ତୁ" "ବାହାର କରିବାକୁ ଏଠାକୁ ଡ୍ରାଗ୍‍ କରନ୍ତୁ" "ଆପଣଙ୍କର ଅତିକମ୍‌ରେ %1$dଟି ଟାଇଲ୍ ଆବଶ୍ୟକ" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ସମୟ" "ଘଣ୍ଟା, ମିନିଟ୍‍ ଏବଂ ସେକେଣ୍ଡ ଦେଖାନ୍ତୁ" @@ -659,7 +659,7 @@ "ଉପଯୋଗକର୍ତ୍ତା ବାଛନ୍ତୁ" "କୌଣସି ଇଣ୍ଟରନେଟ୍‌ କନେକ୍ସନ୍ ନାହିଁ" "%s ସେଟିଙ୍ଗ ଖୋଲନ୍ତୁ।" - "ସେଟିଙ୍ଗର କ୍ରମ ସଂଶୋଧନ କରନ୍ତୁ।" + "ସେଟିଂସର କ୍ରମ ଏଡିଟ କରନ୍ତୁ।" "ପାୱାର ମେନୁ" "ପୃଷ୍ଠା %1$d ମୋଟ %2$d" "ଲକ୍‌ ସ୍କ୍ରୀନ୍‌" @@ -833,7 +833,7 @@ "ସ୍ଥିତି ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ" "ତ୍ରୁଟି ହୋଇଛି, ପୁଣି ଚେଷ୍ଟା କର" "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଯୋଗ କରନ୍ତୁ" - "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଏଡିଟ୍ କରନ୍ତୁ" + "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଏଡିଟ କରନ୍ତୁ" "ଆଉଟପୁଟ୍ ଯୋଗ କରନ୍ତୁ" "ଗୋଷ୍ଠୀ" "1ଟି ଡିଭାଇସ୍ ଚୟନ କରାଯାଇଛି" @@ -948,7 +948,7 @@ "କ୍ଲିପବୋର୍ଡ ଏଡିଟର" "କ୍ଲିପବୋର୍ଡ" "ଇମେଜ ପ୍ରିଭ୍ୟୁ" - "ଏଡିଟ" + "ଏଡିଟ କରନ୍ତୁ" "ଯୋଗ କରନ୍ତୁ" "ଉପଯୋଗକର୍ତ୍ତାମାନଙ୍କୁ ପରିଚାଳନା କରନ୍ତୁ" "ଏହି ବିଜ୍ଞପ୍ତି ସ୍ପ୍ଲିଟସ୍କ୍ରିନକୁ ଡ୍ରାଗ କରିବାକୁ ସମର୍ଥନ କରେ ନାହିଁ।" diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index a40a04839a92..99685f5339ee 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -364,7 +364,7 @@ "ਸ਼ਾਂਤ" "ਸੂਚਨਾਵਾਂ" "ਗੱਲਾਂਬਾਤਾਂ" - "ਸਾਰੀਆਂ ਖਾਮੋਸ਼ ਸੂਚਨਾਵਾਂ ਕਲੀਅਰ ਕਰੋ" + "ਸਾਰੀਆਂ ਸ਼ਾਂਤ ਸੂਚਨਾਵਾਂ ਕਲੀਅਰ ਕਰੋ" "\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵੱਲੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਰੋਕਿਆ ਗਿਆ" "ਹੁਣੇ ਸ਼ੁਰੂ ਕਰੋ" "ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ" diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index e87af0527543..31c2d957d499 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -50,7 +50,7 @@ "USB డీబగ్గింగ్‌ను అనుమతించాలా?" "ఇది కంప్యూటర్ యొక్క RSA కీ వేలిముద్ర:\n%1$s" "ఈ కంప్యూటర్ నుండి ఎల్లప్పుడూ అనుమతించు" - "అనుమతించు" + "అనుమతించండి" "USB డీబగ్గింగ్‌కి అనుమతి లేదు" "ఈ పరికరానికి ప్రస్తుతం సైన్ ఇన్ చేసిన వినియోగదారు USB డీబగ్గింగ్ ఆన్ చేయలేరు. ఈ ఫీచర్ ఉపయోగించడానికి, ప్రాథమిక వినియోగదారుకి మారాలి." "మీరు సిస్టమ్ భాషను %1$s భాషకు మార్చాలనుకుంటున్నారా?" @@ -60,7 +60,7 @@ "ఈ నెట్‌వర్క్ ద్వారా వైర్‌లెస్ డీబగ్గింగ్‌ను అనుమతించాలా?" "నెట్‌వర్క్ పేరు (SSID)\n%1$s\n\nWi‑Fi అడ్రస్ (BSSID)\n%2$s" "ఈ నెట్‌వర్క్ నుండి ఎల్లప్పుడూ అనుమతించు" - "అనుమతించు" + "అనుమతించండి" "వైర్‌లెస్ డీబగ్గింగ్‌కి అనుమతి లేదు" "ఈ పరికరానికి ప్రస్తుతం సైన్ ఇన్ చేసిన యూజర్, వైర్‌లెస్ డీబగ్గింగ్ ఆన్ చేయలేరు. ఈ ఫీచర్ ఉపయోగించడానికి, ప్రాథమిక యూజర్ కి స్విచ్ అవ్వండి." "USB పోర్ట్‌ నిలిపివేయబడింది" @@ -719,7 +719,7 @@ "- ఇది %1$s నుండి సమాచారాన్ని చదువుతుంది" "- ఇది %1$s లోపల చర్యలు తీసుకుంటుంది" "ఏ యాప్ నుండి అయినా స్లైస్‌లను చూపించడానికి %1$sని అనుమతించండి" - "అనుమతించు" + "అనుమతించండి" "తిరస్కరించు" "బ్యాటరీ సేవర్‌ని షెడ్యూల్ చేయడానికి నొక్కండి" "బ్యాటరీ ఛార్జింగ్ పూర్తిగా అయిపోతున్న తరుణంలో ఆన్ చేస్తుంది" @@ -828,7 +828,7 @@ "ఇన్‌యాక్టివ్, యాప్ చెక్ చేయండి" "కనుగొనబడలేదు" "కంట్రోల్ అందుబాటులో లేదు" - "%1$sను యాక్సెస్ చేయడం సాధ్యపడలేదు. %2$s యాప్‌ను తనిఖీ చేసి, కంట్రోల్ ఇప్పటికీ అందుబాటులో ఉందని, యాప్ సెట్టింగ్‌లు మారలేదని నిర్ధారించుకోండి." + "%1$sను యాక్సెస్ చేయడం సాధ్యపడలేదు. %2$s యాప్‌ను చెక్ చేసి, కంట్రోల్ ఇప్పటికీ అందుబాటులో ఉందని, యాప్ సెట్టింగ్‌లు మారలేదని నిర్ధారించుకోండి." "యాప్‌ను తెరువు" "స్టేటస్ లోడ్ చేయడం సాధ్యపడలేదు" "ఎర్రర్, మళ్లీ ప్రయత్నించండి" -- cgit v1.2.3 From 8cc4c9ce3676b0f949e94d2cb134f9b894446c3e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 05:22:06 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I207e0f2ebc33353f7975158d486ca5b875f9a9dd --- packages/SystemUI/res-keyguard/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml index b34ae8ca8c57..e1cde72a0239 100644 --- a/packages/SystemUI/res-keyguard/values-fr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml @@ -90,7 +90,7 @@ "Appareil verrouillé par l\'administrateur" "Appareil verrouillé manuellement" "Non reconnu" - "Pour utiliser Face Unlock, activez ""Accès à l\'appareil photo"" dans Paramètres > Confidentialité" + "Pour utiliser le déverrouillage par reconnaissance faciale, activez ""Accès à l\'appareil photo"" dans Paramètres > Confidentialité" Saisissez le code de la carte SIM. %d tentative restante. Saisissez le code de la carte SIM. %d tentatives restantes. -- cgit v1.2.3 From b583f45d966821815c7660838b12f5c8fb2a2f16 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 11:27:51 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I817ae6d751ecd6af910f6d10edd1f0a8915e9a7c --- core/res/res/values-am/strings.xml | 2 +- core/res/res/values-de/strings.xml | 2 +- core/res/res/values-eu/strings.xml | 4 ++-- core/res/res/values-gl/strings.xml | 2 +- core/res/res/values-hi/strings.xml | 2 +- core/res/res/values-in/strings.xml | 2 +- core/res/res/values-it/strings.xml | 4 ++-- core/res/res/values-ja/strings.xml | 2 +- core/res/res/values-mr/strings.xml | 2 +- core/res/res/values-or/strings.xml | 24 ++++++++++++------------ core/res/res/values-pa/strings.xml | 2 +- core/res/res/values-sk/strings.xml | 2 +- core/res/res/values-sv/strings.xml | 2 +- core/res/res/values-te/strings.xml | 18 +++++++++--------- 14 files changed, 35 insertions(+), 35 deletions(-) diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 9ab2f1939c84..18c9be0e838f 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -420,7 +420,7 @@ "መተግበሪያው በእርስዎ ስልክ ላይ ስለተከማቹ እውቂያዎችዎ ያለ ውሂብን እንዲቀይር ያስችለዋል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብን እንዲሰርዙ ያስችላቸዋል።" "የጥሪ ምዝግብ ማስታወሻን ያንብቡ" "ይህ መተግበሪያ የእርስዎን የጥሪ ታሪክ ማንበብ ይችላል።" - "የጥሪ ምዝግብ ማስታወሻን ፃፍ" + "የጥሪ ምዝግብ ማስታወሻን ጻፍ" "ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የጡባዊተኮህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።" "መተግበሪያው ስለገቢ እና ወጪ ጥሪዎች ያለ ውሂብም ጨምሮ የእርስዎ Android TV መሣሪያ ምዝግብ ማስታወሻ እንዲቀይር ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ይህን ተጠቅመው የስልክዎን ምዝግብ ማስታወሻ ሊደመስሱ ወይም ሊቀይሩ ይችላሉ።" "ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የስልክህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።" diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index d1ef5c9882c8..3c09abd10dbf 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -1641,7 +1641,7 @@ "Integrierter Bildschirm" "HDMI-Bildschirm" "Overlay-Nr. %1$d" - "%1$s: %2$d x %3$d, %4$d dpi" + "%1$s: %2$d × %3$d, %4$d dpi" ", sicher" "Muster vergessen" "Falsches Muster" diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index 5d2fd5a52cf3..eea600d2ffec 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -610,7 +610,7 @@ "Hatz-markaren ikonoa" - "Aurpegi bidez desblokeatzeko eginbidea" + "Aurpegi bidez desblokeatzea" "Arazoak ditugu aurpegi bidez desblokeatzeko eginbidearekin" "Sakatu hau aurpegi-eredua ezabatzeko eta, gero, gehitu aurpegia berriro" "Konfiguratu aurpegi bidez desblokeatzeko eginbidea" @@ -958,7 +958,7 @@ "Zabaldu desblokeatzeko eremua." "Hatza lerratuta desblokeatzea." "Ereduaren bidez desblokeatzea." - "Aurpegi bidez desblokeatzeko eginbidea." + "Aurpegi bidez desblokeatzea." "PIN kodearen bidez desblokeatzea." "SIMa desblokeatzeko PINa." "SIM txartela desblokeatzeko PUK kodea." diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index c1ba3fe9702c..bf601e3a8741 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -2109,7 +2109,7 @@ "A tableta non ten suficiente batería. Xa non se restrinxirán as funcións." "O dispositivo non ten suficiente batería. Xa non se restrinxirán as funcións." "Cartafol" - "Aplicación Android" + "Aplicación para Android" "Ficheiro" "Ficheiro %1$s" "Audio" diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 8ed2433cd811..7b9945e47bb6 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -548,7 +548,7 @@ "अपना स्‍क्रीन लॉक अक्षम करें" "ऐप्स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा बंद करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल पाते समय फ़ोन, कीलॉक को बंद कर देता है, फिर कॉल खत्म होने पर कीलॉक को फिर से चालू कर देता है." "जानें कि स्क्रीन लॉक कितना मुश्किल बनाया गया है" - "यह मंज़ूरी मिलने के बाद ऐप्लिकेशन जान पाता है कि स्क्रीन लॉक कितना मुश्किल (बहुत ज़्यादा, मध्यम, कम या बिल्कुल नहीं) है. इस स्तर से यह पता चलता है कि स्क्रीन लॉक कितना लंबा या किस तरह का है. ऐप्लिकेशन उपयोगकर्ताओं को यह सुझाव भी दे सकता है कि वे स्क्रीन लॉक को एक तय लेवल तक अपडेट करें. लेकिन उपयोगकर्ता इसे बेझिझक अनदेखा करके छोड़ सकते हैं. ध्यान दें कि स्क्रीन लॉक को सादे टेक्स्ट में सेव नहीं किया जाता है इसलिए ऐप्लिकेशन को सटीक पासवर्ड पता नहीं होता है." + "यह मंज़ूरी मिलने के बाद ऐप्लिकेशन जान पाता है कि स्क्रीन लॉक कितना मुश्किल (बहुत ज़्यादा, मध्यम, कम या बिलकुल नहीं) है. इस स्तर से यह पता चलता है कि स्क्रीन लॉक कितना लंबा या किस तरह का है. ऐप्लिकेशन उपयोगकर्ताओं को यह सुझाव भी दे सकता है कि वे स्क्रीन लॉक को एक तय लेवल तक अपडेट करें. लेकिन उपयोगकर्ता इसे बेझिझक अनदेखा करके छोड़ सकते हैं. ध्यान दें कि स्क्रीन लॉक को सादे टेक्स्ट में सेव नहीं किया जाता है इसलिए ऐप्लिकेशन को सटीक पासवर्ड पता नहीं होता है." "बायोमीट्रिक हार्डवेयर इस्तेमाल करने दें" "पुष्टि के लिए, ऐप्लिकेशन को बायोमीट्रिक हार्डवेयर इस्तेमाल करने की मंज़ूरी दें" "फ़िंगरप्रिंट हार्डवेयर को प्रबंधित करें" diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index e6e8a20def6e..f487aed506bc 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -720,7 +720,7 @@ "Mengizinkan aplikasi membaca dan menulis konfigurasi status Jangan Ganggu." "mulai melihat penggunaan izin" "Memungkinkan pemegang memulai penggunaan izin untuk aplikasi. Tidak diperlukan untuk aplikasi normal." - "mengakses data sensor pada frekuensi pengambilan sampel yang tinggi" + "mengakses data sensor pada frekuensi sampling yang tinggi" "Mengizinkan aplikasi mengambil sampel data sensor pada frekuensi yang lebih besar dari 200 Hz" "Setel aturan sandi" "Mengontrol panjang dan karakter yang diizinkan dalam sandi dan PIN kunci layar." diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 8a4d0a7e067f..21e89b422145 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -1967,11 +1967,11 @@ "Consentire a %1$s di creare un nuovo utente con l\'account %2$s (esiste già un utente con questo account)?" "Consentire a %1$s di creare un nuovo utente con l\'account %2$s?" "Aggiungi una lingua" - "Area geografica preferita" + "Regione preferita" "Digita nome lingua" "Suggerite" "Tutte le lingue" - "Tutte le aree geografiche" + "Tutte le regioni" "Cerca" "App non disponibile" "%1$s non è al momento disponibile. Viene gestita tramite %2$s." diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 33ae3c43b497..5b62bfc9f683 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -1456,7 +1456,7 @@ "メディア出力を他の外部デバイスにルーティングすることをアプリに許可します。" "インストールセッションの読み取り" "インストールセッションの読み取りをアプリに許可します。これにより、アプリはアクティブパッケージのインストールに関する詳細情報を参照できるようになります。" - "インストールパッケージのリクエスト" + "request install packages" "パッケージのインストールをリクエストすることをアプリケーションに許可します。" "パッケージの削除のリクエスト" "パッケージの削除をリクエストすることをアプリに許可します。" diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index ac5e840aab8d..dd6edfaeadb4 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -48,7 +48,7 @@ "4 ते 8 अंकांचा पिन टाइप करा." "8 अंकांचा किंवा मोठा PUK टाइप करा." "तुमचे सिम कार्ड PUK-लॉक केलेले आहे. ते अनलॉक करण्यासाठी PUK कोड टाइप करा." - "सिम कार्ड अनावरोधित करण्यासाठी PUK2 टाइप करा." + "सिम कार्ड अनब्लॉक करण्यासाठी PUK2 टाइप करा." "अयशस्वी, सिम/RUIM लॉक सुरू करा." सिम लॉक होण्यापूर्वी आपल्याकडे %d प्रयत्न उर्वरित आहेत. diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 49744b6bc017..c9a3c5003c30 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -1171,9 +1171,9 @@ "%1$s ଚାଲୁଛି" "ଅଧିକ ସୂଚନା ପାଇଁ କିମ୍ବା ଆପ୍‍ ବନ୍ଦ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।" "ଠିକ୍‍ ଅଛି" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଠିକ୍‍ ଅଛି" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଧ୍ୟାନଦିଅନ୍ତୁ" "ଲୋଡ୍ କରାଯାଉଛି…" "ଚାଲୁ" @@ -1193,9 +1193,9 @@ "%1$s ମାଧ୍ୟମରେ ଲିଙ୍କ୍‍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ" "%2$s ମାଧ୍ୟମରେ %1$s ଲିଙ୍କ୍‍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ" "ଆକ୍ସେସ୍‌ ଦିଅନ୍ତୁ" - "ସହିତ ଏଡିଟ୍‌ କରନ୍ତୁ" - "%1$sରେ ସଂଶୋଧନ କରନ୍ତୁ" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ସହିତ ଏଡିଟ କରନ୍ତୁ" + "%1$sରେ ଏଡିଟ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ସେୟାର୍ କରନ୍ତୁ" "%1$s ସହିତ ସେୟାର୍‌ କରନ୍ତୁ" "ସେୟାର୍‌ କରନ୍ତୁ" @@ -1263,7 +1263,7 @@ "ସ୍କ୍ରିନ୍ ବନ୍ଦ କରିବେ?" "ଆପଣଙ୍କ ଟିପଚିହ୍ନ ସେଟ୍ ଅପ୍ କରିବା ସମୟରେ, ଆପଣ ପାୱାର ବଟନ୍ ଦବାଇଛନ୍ତି।\n\nଏହା ସାଧାରଣତଃ ଆପଣଙ୍କ ସ୍କ୍ରିନକୁ ବନ୍ଦ କରେ।" "ବନ୍ଦ କରନ୍ତୁ" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "%1$s ଚାଲୁଛି" "ଗେମ୍‌କୁ ଫେରିଆସିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ" "ଗେମ୍ ଚୟନ କରନ୍ତୁ" @@ -1333,7 +1333,7 @@ "ଏହା ଦ୍ୱାରା "" ଆପଣଙ୍କ ମୋବାଇଲ୍ ଆକାଉଣ୍ଟରୁ ପଇସା କଟିପାରେ। " " ଆପଣଙ୍କ ମୋବାଇଲ୍ ଆକାଉଣ୍ଟରୁ ପଇସା କଟିପାରେ। " "ପଠାନ୍ତୁ" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ମୋ ପସନ୍ଦ ମନେରଖନ୍ତୁ" "ଏହାକୁ ଆପଣ ସେଟିଙ୍ଗ ଓ ଆପ୍‍ରେ ପରବର୍ତ୍ତୀ ସମୟରେ ବଦଳାଇପାରିବେ" "ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ" @@ -1370,7 +1370,7 @@ "ଯୋଡ଼ାଯାଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି। ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" "ଆନାଲଗ୍‍ ଅଡିଓ ଆକ୍ସେସରୀ ଚିହ୍ନଟ ହେଲା" "ଏହି ଫୋନ୍‌ରେ କନେକ୍ଟ ଥିବା ଡିଭାଇସ୍‍ କମ୍ପାଟିବଲ୍‍ ନୁହେଁ। ଅଧିକ ଜାଣିବା ପାଇଁ ଟାପ୍‌ କରନ୍ତୁ।" - "USB ଡିବଗିଂ ସଂଯୁକ୍ତ ହୋଇଛି" + "USB ଡିବଗିଂ କନେକ୍ଟ କରାଯାଇଛି" "USB ଡିବଗିଂକୁ ବନ୍ଦ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ" "USB ଡିବଗିଙ୍ଗକୁ ଅକ୍ଷମ କରିବା ପାଇଁ ଚୟନ କରନ୍ତୁ।" "ୱାୟାରଲେସ୍ ଡିବଗିଂ ସଂଯୋଗ କରାଯାଇଛି" @@ -1557,7 +1557,7 @@ "ପୂର୍ବ ମାସ" "ପରବର୍ତ୍ତୀ ମାସ" "ALT" - "ବାତିଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଡିଲିଟ୍‍ କରନ୍ତୁ" "ହୋଇଗଲା" "ମୋଡ୍‍ ପରିବର୍ତ୍ତନ" @@ -1580,7 +1580,7 @@ "USB ଡ୍ରାଇଭ୍‍" "%s USB ଡ୍ରାଇଭ୍‍" "USB ଷ୍ଟୋରେଜ୍‌" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ଡାଟା ଚେତାବନୀ" "ଆପଣ %s ଡାଟା ବ୍ୟବହାର କରିସାରିଛନ୍ତି" "ମୋବାଇଲ୍ ଡାଟା ଧାର୍ଯ୍ୟ ସୀମାରେ ପହଞ୍ଚିଲା" @@ -1711,7 +1711,7 @@ "ଆକ୍ସେସିବିଲିଟୀ ବଟନ୍ ସହିତ ବ୍ୟବହାର କରିବାକୁ ଫିଚରଗୁଡ଼ିକ ବାଛନ୍ତୁ" "ଭଲ୍ୟୁମ୍ କୀ ସର୍ଟକଟ୍ ସହିତ ବ୍ୟବହାର କରିବାକୁ ଫିଚରଗୁଡ଼ିକ ବାଛନ୍ତୁ" "%s ବନ୍ଦ ହୋଇଯାଇଛି" - "ସର୍ଟକଟଗୁଡ଼ିକୁ ସମ୍ପାଦନ କରନ୍ତୁ" + "ସର୍ଟକଟଗୁଡ଼ିକୁ ଏଡିଟ କରନ୍ତୁ" "ହୋଇଗଲା" "ଶର୍ଟକଟ୍‍ ବନ୍ଦ କରନ୍ତୁ" "ଶର୍ଟକଟ୍‍ ବ୍ୟବହାର କରନ୍ତୁ" @@ -2075,7 +2075,7 @@ "କୌଣସିମତେ ଖୋଲନ୍ତୁ" "ହାନିକାରକ ଆପ୍‌ ଚିହ୍ନଟ ହୋଇଛି" "%1$s, %2$s ସ୍ଲାଇସ୍‌କୁ ଦେଖାଇବା ପାଇଁ ଚାହେଁ" - "ଏଡିଟ୍ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "କଲ୍ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଭାଇବ୍ରେଟ୍ ହେବ" "କଲ୍ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ନିଃଶବ୍ଦ କରିଦିଆଯିବ" "ସିଷ୍ଟମ୍‌ରେ ପରିବର୍ତ୍ତନ" diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 7a347bb61110..d1ec5ae2d0b2 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -1282,7 +1282,7 @@ "ਰਿੰਗਰ ਵੌਲਿਊਮ" "ਮੀਡੀਆ ਦੀ ਅਵਾਜ਼" "Bluetooth ਰਾਹੀਂ ਪਲੇ ਕਰ ਰਿਹਾ ਹੈ" - "ਖਾਮੋਸ਼ ਰਿੰਗਟੋਨ ਸੈੱਟ ਕੀਤੀ" + "ਸ਼ਾਂਤ ਰਿੰਗਟੋਨ ਸੈੱਟ ਕੀਤੀ" "ਇਨ-ਕਾਲ ਅਵਾਜ਼" "ਬਲੂਟੁੱਥ ਇਨ-ਕਾਲ ਅਵਾਜ਼" "ਅਲਾਰਮ ਦੀ ਅਵਾਜ਼" diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index a0519df37c1c..e897645e8c46 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -2152,7 +2152,7 @@ "Klepnutím skontrolujete, čo je blokované." "Systém" "Nastavenia" - "Fotoaparát" + "Kamera" "Mikrofón" "sa zobrazuje cez ďalšie aplikácie na obrazovke" "Poskytnúť spätnú väzbu" diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 0f74b1bcf232..62b40b93a89d 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -2290,7 +2290,7 @@ "Återaktivera enhetens mikrofon" "Återaktivera enhetens kamera" "För <b>%s</b> och alla appar och tjänster" - "Återaktivera" + "Avblockera" "Sensorintegritet" "Appikon" "Appens varumärkesbild" diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index db9ce49ee381..e16b522627b9 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -932,7 +932,7 @@ "సైన్ ఇన్ చేయండి" "వినియోగదారు పేరు లేదా పాస్‌వర్డ్ చెల్లదు." "మీ వినియోగదారు పేరు లేదా పాస్‌వర్డ్‌ను మర్చిపోయారా?\n""google.com/accounts/recovery""ని సందర్శించండి." - "తనిఖీ చేస్తోంది..." + "చెక్ చేస్తోంది..." "అన్‌లాక్ చేయండి" "ధ్వని ఆన్‌లో ఉంది" "ధ్వని ఆఫ్‌లో ఉంది" @@ -1379,7 +1379,7 @@ "పరీక్ష నియంత్రణ మోడ్ ప్రారంభించబడింది" "పరీక్ష నియంత్రణ మోడ్‌ను నిలిపివేయడానికి ఫ్యాక్టరీ రీసెట్‍‌ను అమలు చేయండి." "సీరియల్ కన్సోల్ ప్రారంభించబడింది" - "పని తీరు ప్రభావితమైంది. నిలిపివేయడానికి, బూట్‌లోడర్‌ను తనిఖీ చేయండి." + "పని తీరు ప్రభావితమైంది. నిలిపివేయడానికి, బూట్‌లోడర్‌ను చెక్ చేయండి." "USB పోర్ట్‌లో ద్రవ లేదా వ్యర్థ పదార్థాలు ఉన్నాయి" "USB పోర్ట్ ఆటోమేటిక్‌గా నిలిపివేయబడింది. మరింత తెలుసుకోవడానికి నొక్కండి." "USB పోర్ట్‌ను ఉపయోగించడం సురక్షితం" @@ -1402,7 +1402,7 @@ "%s ఇతర యాప్‌లలో చూపబడుతోంది" "%s ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్‌లను తెరవడానికి ట్యాప్ చేసి, దీన్ని ఆఫ్ చేయండి." "ఆఫ్ చేయి" - "%sని తనిఖీ చేస్తోంది…" + "%sని చెక్ చేస్తోంది…" "ప్రస్తుత కంటెంట్ సమీక్షించబడుతోంది" "మీడియా స్టోరేజ్‌ను విశ్లేషిస్తోంది" "కొత్త %s" @@ -1442,7 +1442,7 @@ "కంటెంట్‌ని తరలించడానికి మళ్లీ ప్రయత్నించండి" "తీసివేయబడింది" "తొలగించబడింది" - "తనిఖీ చేస్తోంది..." + "చెక్ చేస్తోంది..." "సిద్ధంగా ఉంది" "చదవడానికి మాత్రమే" "అసురక్షితంగా తీసివేయబడింది" @@ -1671,7 +1671,7 @@ "సైన్ ఇన్ చేయండి" "చెల్లని వినియోగదారు పేరు లేదా పాస్‌వర్డ్." "మీ వినియోగదారు పేరు లేదా పాస్‌వర్డ్‌ను మర్చిపోయారా?\n""google.com/accounts/recovery""ని సందర్శించండి." - "ఖాతాను తనిఖీ చేస్తోంది…" + "ఖాతాను చెక్ చేస్తోంది…" "మీరు మీ పిన్‌ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి." "మీరు మీ పాస్‌వర్డ్‌ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి." "మీరు మీ అన్‌లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి." @@ -1705,7 +1705,7 @@ "స్క్రీన్‌పై ఉండే కంటెంట్‌ మొత్తాన్ని చదవగలుగుతుంది మరియు ఇతర యాప్‌లలో కూడా ఈ కంటెంట్‌ను ప్రదర్శిస్తుంది." "చర్యలను చూసి, అమలు చేయగలగడం" "మీరు ఒక యాప్‌‌తో చేసే ఇంటరాక్షన్‌లను లేదా హార్డ్‌వేర్ సెన్సార్‌ను ట్రాక్ చేస్తూ మీ త‌ర‌ఫున యాప్‌లతో ఇంటరాక్ట్ చేయగలదు." - "అనుమతించు" + "అనుమతించండి" "నిరాకరించు" "ఫీచర్‌ని ఉపయోగించడం ప్రారంభించడానికి, దాన్ని ట్యాప్ చేయండి:" "యాక్సెసిబిలిటీ బటన్‌తో ఉపయోగించడానికి ఫీచర్లను ఎంచుకోండి" @@ -1982,7 +1982,7 @@ "ఆన్ చేయి" "యాప్ అందుబాటులో లేదు" "%1$s ప్రస్తుతం అందుబాటులో లేదు." - "ఈ యాప్ పాత వెర్షన్ Android కోసం రూపొందించబడింది మరియు అది సరిగ్గా పని చేయకపోవచ్చు. అప్‌డేట్‌ల కోసం తనిఖీ చేయడానికి ప్రయత్నించండి లేదా డెవలపర్‌ని సంప్రదించండి." + "ఈ యాప్ పాత వెర్షన్ Android కోసం రూపొందించబడింది మరియు అది సరిగ్గా పని చేయకపోవచ్చు. అప్‌డేట్‌ల కోసం చెక్ చేయడానికి ప్రయత్నించండి లేదా డెవలపర్‌ని సంప్రదించండి." "అప్‌డేట్ కోసం చెక్ చేయండి" "మీకు కొత్త మెసేజ్‌లు ఉన్నాయి" "వీక్షించడానికి SMS యాప్‌ను తెరవండి" @@ -2004,7 +2004,7 @@ "సాధనం చిట్కా" "గేమ్‌లు" "సంగీతం & ఆడియో" - "చలనచిత్రాలు & వీడియో" + "సినిమాలు & వీడియో" "ఫోటోలు, ఇమేజ్‌లు" "సామాజికం & కమ్యూనికేషన్" "వార్తలు & వార్తాపత్రికలు" @@ -2083,7 +2083,7 @@ "కొత్తది: అంతరాయం కలిగించవద్దు నోటిఫికేషన్‌లను దాస్తోంది" "మరింత తెలుసుకోవడానికి మరియు మార్చడానికి నొక్కండి." "అంతరాయం కలిగించవద్దు మార్చబడింది" - "బ్లాక్ చేయబడిన దాన్ని తనిఖీ చేయడానికి నొక్కండి." + "బ్లాక్ చేయబడిన దాన్ని చెక్ చేయడానికి నొక్కండి." "సిస్టమ్" "సెట్టింగ్‌లు" "కెమెరా" -- cgit v1.2.3 From bf0e86ff351aaca8e04bd3cc4058bb9eb455b6c9 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 12:16:40 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: If80f25f9a77dbcdddca68fc6ecef578c38c5c139 --- packages/DynamicSystemInstallationService/res/values-or/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/DynamicSystemInstallationService/res/values-or/strings.xml b/packages/DynamicSystemInstallationService/res/values-or/strings.xml index 05b9016d45b0..b5ec29259f7c 100644 --- a/packages/DynamicSystemInstallationService/res/values-or/strings.xml +++ b/packages/DynamicSystemInstallationService/res/values-or/strings.xml @@ -7,7 +7,7 @@ "ଇନଷ୍ଟଲ୍ କରିବା ବିଫଳ ହୋଇଛି" "ଇମେଜ୍ ବୈଧକରଣ ବିଫଳ ହୋଇଛି। ଇନଷ୍ଟଲେସନ୍ ରଦ୍ଦ କରନ୍ତୁ।" "ବର୍ତ୍ତମାନ ଏକ ଡାଇନାମିକ୍ ସିଷ୍ଟମ୍ ଚାଲୁଛି। ମୂଳ Android ସଂସ୍କରଣ ବ୍ୟବହାର କରିବାକୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ।" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଖାରଜ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" -- cgit v1.2.3 From 3d6fa953277fad773148e1d2b136213aa9bb8379 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 12:27:28 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: If1754467badc76bf9ff71131054a9650f110766e --- packages/SettingsLib/res/values-am/strings.xml | 2 +- packages/SettingsLib/res/values-fa/strings.xml | 2 +- packages/SettingsLib/res/values-fi/strings.xml | 2 +- packages/SettingsLib/res/values-mn/strings.xml | 12 ++++++------ packages/SettingsLib/res/values-my/strings.xml | 6 +++--- packages/SettingsLib/res/values-or/strings.xml | 8 ++++---- packages/SettingsLib/res/values-pt-rPT/strings.xml | 10 +++++----- packages/SettingsLib/res/values-te/arrays.xml | 10 +++++----- packages/SettingsLib/res/values-te/strings.xml | 18 +++++++++--------- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index b5982ae533dd..74844fc79428 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -651,7 +651,7 @@ "ነባሪ" "ማያ ገጽን ያብሩ" "ማያ ገጹን ማብራት ይፍቀዱ" - "አንድ መተግበሪያ ማያ ገጹን እንዲያበራ ይፍቀዱለት። ከተሰጠ፣ መተግበሪያው ያለእርስዎ ግልጽ ሐሳብ በማንኛውም ጊዜ ማያ ገጹን ሊያበራ ይችላል።" + "አንድ መተግበሪያ ማያ ገጹን እንዲያበራ ይፍቀዱለት። ከተሰጠ፣ መተግበሪያው ያለእርስዎ ግልፅ ሐሳብ በማንኛውም ጊዜ ማያ ገጹን ሊያበራ ይችላል።" "%1$sን ማሰራጨት ይቁም?" "%1$sን ካሰራጩ ወይም ውፅዓትን ከቀየሩ የአሁኑ ስርጭትዎ ይቆማል" "%1$s ያሰራጩ" diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index b1aeebecbfec..76fe50189670 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -575,7 +575,7 @@ "مطمئن شوید شخص در دسترس است تا دستگاه را بگیرد و فضایش را تنظیم کند" "اکنون نمایه را تنظیم می‌کنید؟" "اکنون تنظیم شود" - "اکنون نه" + "حالا نه" "افزودن" "کاربر جدید" "نمایه جدید" diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index b643784cbbe2..2ff1cfb5ac5f 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -649,7 +649,7 @@ "Fyysinen näppäimistö" "Valitse näppäimistöasettelu" "Oletus" - "Käynnistä näyttö" + "Näytön käynnistys" "Salli näytön käynnistäminen" "Salli sovelluksen käynnistää näyttö. Jos sovellus saa luvan, se voi käynnistää näytön itsenäisesti milloin tahansa." "Lopetetaanko %1$s-sovelluksen lähettäminen?" diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 5dc88cd3637a..76a6b66b3b3c 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -100,13 +100,13 @@ "Холбогдсон (медиа байхгүй)%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%2$s" + "Холбогдсон (медиа байхгүй), батарей %1$s%2$s" + "Холбогдсон (утас эсвэл медиа байхгүй), батарей %1$s%2$s" + "Идэвхтэй, батарей %1$s" "Идэвхтэй, Зүүн: Батарей %1$s, Баруун: Батарей %2$s" - "Батерей %1$s" + "Батарей %1$s" "Зүүн: Батарей %1$s, Баруун: Батарей %2$s" "Идэвхтэй" "Идэвхтэй, зөвхөн зүүн тал" diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index 2514eff82333..e7824d1696d4 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -183,8 +183,8 @@ "အသုံးပြုသူ- %1$s" "မူရင်းအချို့ သတ်မှတ်ပြီး" "မူရင်း သတ်မှတ်မထားပါ။" - "စာသားမှစကားပြောပြောင်း ဆက်တင်များ" - "စာသားမှ စကားပြောသို့ အထွက်" + "စာ-မှ-စကားပြောင်းခြင်း ဆက်တင်များ" + "စာ-မှ-စကားသို့ အထွက်" "စကားပြောနှုန်း" "စာတမ်းအားပြောဆိုသော အမြန်နှုန်း" "အသံအနိမ့်အမြင့်" @@ -198,7 +198,7 @@ "အသံဒေတာများကို ထည့်သွင်းခြင်း" "စကားသံပေါင်းစပ်မှုအတွက်လိုအပ်သောအသံဒေတာအား ထည့်သွင်းမည်" "ဤစကားသံပေါင်းစပ်စနစ်အားအသုံးပြုရာရာတွင် သင့်ကိုယ်ရေးအချက်အလက်များဖြစ်သော စကားဝှက်များနှင့် ကရက်ဒစ်ကတ်နံပါတ်စသည်တို့အပါအဝင် သင်ပြောဆိုသောစာသားများအားလုံးကို ရယူသွားမည်ဖြစ်သည်။ ဤစနစ်သည် %s မှ လာပါသည်။ ဤစကားသံပေါင်းစပ်စနစ်ကို အသုံးပြုမလား။" - "ဤဘာသာစကားသည် စာသားမှ အသံထွက်ရန် အလုပ်လုပ်သော ကွန်ရက်ချိတ်ဆက်မှု လိုအပ်သည်။" + "ဤဘာသာစကားသည် စာ-မှ-စကား ပြောင်းရန် အလုပ်လုပ်သော ကွန်ရက်ချိတ်ဆက်မှု လိုအပ်သည်။" "ဤသည်မှာ အသံတုလုပ်ခြင်း ၏ နမူနာတစ်ခုဖြစ်သည်။" "လက်ရှိဘာသာစကားအခြေအနေ" "%1$s သည်အပြည့်အ၀ အထောက်အကူပြုသည်။" diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index fa57c63e8ce9..e7a80f3a486c 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -148,7 +148,7 @@ "LE_AUDIO ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ" "ପେୟାର୍‌" "ପେୟାର୍‌" - "ବାତିଲ୍‌ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ପେୟାରିଂ ଫଳରେ ସଂଯୁକ୍ତ ଥିବା ବେଳେ ଆପଣଙ୍କ ସମ୍ପର୍କଗୁଡ଼ିକୁ ଏବଂ କଲ୍‌ର ଇତିବୃତିକୁ ଆକସେସ୍‌ ମଞ୍ଜୁର ହୁଏ।" "%1$s ସହ ପେୟାର୍‌ କରିହେଲା ନାହିଁ।" "ଏକ ଭୁଲ୍‌ PIN କିମ୍ବା ପାସକୀ କାରଣରୁ %1$s ସହ ପେୟାର୍‌ କରିପାରିଲା ନାହିଁ।" @@ -305,7 +305,7 @@ "ବ୍ୟକ୍ତିଗତ DNS" "ବ୍ୟକ୍ତିଗତ DNS ମୋଡ୍‌ ବାଛନ୍ତୁ" "ବନ୍ଦ" - "ସ୍ଵଚାଳିତ" + "ଅଟୋମେଟିକ" "ବ୍ୟକ୍ତିଗତ DNS ପ୍ରଦାତା ହୋଷ୍ଟନାମ" "DNS ପ୍ରଦାନକାରୀଙ୍କ ହୋଷ୍ଟନାମ ଲେଖନ୍ତୁ" "କନେକ୍ଟ କରିହେଲା ନାହିଁ" @@ -523,7 +523,7 @@ "{count,plural, =0{0ଟି ଡିଭାଇସ ସଂଯୁକ୍ତ ହୋଇଛି}=1{1ଟି ଡିଭାଇସ ସଂଯୁକ୍ତ ହୋଇଛି}other{#ଟି ଡିଭାଇସ ସଂଯୁକ୍ତ ହୋଇଛି}}" "ଅଧିକ ସମୟ।" "କମ୍ ସମୟ।" - "ବାତିଲ୍" + "ବାତିଲ" "ଠିକ୍‌ ଅଛି" "ହୋଇଗଲା" "ଆଲାରାମ୍ ଏବଂ ରିମାଇଣ୍ଡରଗୁଡ଼ିକ" @@ -608,7 +608,7 @@ "ଡିଭାଇସ୍ ଡିଫଲ୍ଟ" "ଅକ୍ଷମ କରାଯାଇଛି" "ସକ୍ଷମ କରାଯାଇଛି" - "ଏହି ପରିବର୍ତ୍ତନ ଲାଗୁ କରିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ନିଶ୍ଚିତ ରୂପେ ରିବୁଟ୍ କରାଯିବା ଆବଶ୍ୟକ। ବର୍ତ୍ତମାନ ରିବୁଟ୍ କରନ୍ତୁ କିମ୍ବା ବାତିଲ୍ କରନ୍ତୁ।" + "ଏହି ପରିବର୍ତ୍ତନ ଲାଗୁ କରିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ନିଶ୍ଚିତ ରୂପେ ରିବୁଟ୍ କରାଯିବା ଆବଶ୍ୟକ। ବର୍ତ୍ତମାନ ରିବୁଟ୍ କରନ୍ତୁ କିମ୍ବା ବାତିଲ କରନ୍ତୁ।" "ତାରଯୁକ୍ତ ହେଡଫୋନ୍" "ଚାଲୁ ଅଛି" "ବନ୍ଦ ଅଛି" diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index ab0da74cba10..af12d853de29 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -184,7 +184,7 @@ "Algumas predefinições definidas" "Nenhuma predefinição definida" "Definições de texto para voz" - "Saída de síntese de voz" + "Saída de conversão de texto em voz" "Taxa de voz" "Velocidade a que o texto é falado" "Tonalidade" @@ -194,12 +194,12 @@ "Idioma não selecionado" "Define a voz do idioma específico para o texto lido" "Ouvir um exemplo" - "Reproduzir uma breve demonstração de síntese de voz" + "Reproduzir uma breve demonstração de conversão de texto em voz" "Instalar dados de voz" - "Instalar os dados de voz necessários para a síntese de voz" + "Instalar os dados de voz necessários para a conversão de texto em voz" "Este motor de síntese de discurso pode permitir a recolha de todo o texto que será falado, incluindo dados pessoais, como palavras-passe e números de cartão de crédito. O serviço é fornecido com o motor %s. Permitir a utilização deste motor de síntese de discurso?" - "Este idioma requer uma ligação de rede ativa para uma saída de síntese de voz." - "Exemplo de síntese de voz." + "Este idioma requer uma ligação de rede ativa para uma saída de conversão de texto em voz." + "Exemplo de conversão de texto em voz." "Estado do idioma predefinido" "%1$s é totalmente suportado" "%1$s necessita de ligação de rede" diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml index 52554e216436..513fb6e87a10 100644 --- a/packages/SettingsLib/res/values-te/arrays.xml +++ b/packages/SettingsLib/res/values-te/arrays.xml @@ -50,8 +50,8 @@ "ఎప్పటికీ తనిఖీ చేయవద్దు" - "DRM కంటెంట్‌కు మాత్రమే తనిఖీ చేయండి" - "ఎల్లప్పుడూ తనిఖీ చేయండి" + "DRM కంటెంట్‌కు మాత్రమే చెక్ చేయండి" + "ఎల్లప్పుడూ చెక్ చేయండి" "ఎప్పటికీ HDCP తనిఖీని ఉపయోగించవద్దు" @@ -151,9 +151,9 @@ - ", సక్రియంగా ఉంది" - ", (మీడియా) సక్రియంగా ఉంది" - ", (ఫోన్) సక్రియంగా ఉంది" + ", యాక్టివ్‌గా ఉంది" + ", (మీడియా) యాక్టివ్‌గా ఉంది" + ", (ఫోన్) యాక్టివ్‌గా ఉంది" "ఆఫ్" diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index 5e6fa8e24b92..4df4089241dc 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -204,7 +204,7 @@ "%1$sకి పూర్తి మద్దతు ఉంది" "%1$sకి నెట్‌వర్క్ కనెక్షన్ అవసరం" "%1$sకు మద్దతు లేదు" - "తనిఖీ చేస్తోంది..." + "చెక్ చేస్తోంది..." "%s కోసం సెట్టింగ్‌లు" "ఇంజిన్ సెట్టింగ్‌లను ప్రారంభించండి" "ప్రాధాన్య ఇంజిన్" @@ -291,14 +291,14 @@ "బ్లూటూత్ MAP వెర్షన్‌" "బ్లూటూత్ MAP వెర్షన్‌ను ఎంచుకోండి" "బ్లూటూత్ ఆడియో కోడెక్" - "బ్లూటూత్ ఆడియో కోడెక్‌ని సక్రియం చేయండి\nఎంపిక" + "బ్లూటూత్ ఆడియో కోడెక్‌ని యాక్టివేట్ చేయండి\nఎంపిక" "బ్లూటూత్ ఆడియో శాంపిల్ రేట్" - "బ్లూటూత్ ఆడియో కోడెక్‌ని సక్రియం చేయండి\nఎంపిక: నమూనా రేట్" + "బ్లూటూత్ ఆడియో కోడెక్‌ని యాక్టివేట్ చేయండి\nఎంపిక: నమూనా రేట్" "గ్రే-అవుట్ అంటే ఫోన్ లేదా హెడ్‌సెట్ మద్దతు లేదు అని అర్ధం" "ఒక్కో శాంపిల్‌కు బ్లూటూత్ ఆడియో బిట్‌లు" - "బ్లూటూత్ ఆడియో కోడెక్‌ని సక్రియం చేయండి\nఎంపిక: ఒక్కో నమూనాలో బిట్‌లు" + "బ్లూటూత్ ఆడియో కోడెక్‌ని యాక్టివేట్ చేయండి\nఎంపిక: ఒక్కో నమూనాలో బిట్‌లు" "బ్లూటూత్ ఆడియో ఛానెల్ మోడ్" - "బ్లూటూత్ ఆడియో కోడెక్‌ని సక్రియం చేయండి\nఎంపిక: ఛానెల్ మోడ్" + "బ్లూటూత్ ఆడియో కోడెక్‌ని యాక్టివేట్ చేయండి\nఎంపిక: ఛానెల్ మోడ్" "బ్లూటూత్ ఆడియో LDAC కోడెక్: ప్లేబ్యాక్ క్వాలిటీ" "బ్లూటూత్ ఆడియో LDAC యాక్టివ్ చేయండి\nకోడెక్ ఎంపిక: ప్లేబ్యాక్ క్వాలిటీ" "ప్రసారం చేస్తోంది: %1$s" @@ -336,7 +336,7 @@ "అభివృద్ధి సెట్టింగ్‌లను అనుమతించాలా?" "ఈ సెట్టింగ్‌లు అభివృద్ధి వినియోగం కోసం మాత్రమే ఉద్దేశించబడినవి. వీటి వలన మీ పరికరం మరియు దీనిలోని యాప్‌లు విచ్ఛిన్నం కావచ్చు లేదా తప్పుగా ప్రవర్తించవచ్చు." "USB ద్వారా యాప్‌లను వెరిఫై చేయి" - "హానికరమైన ప్రవర్తన కోసం ADB/ADT ద్వారా ఇన్‌స్టాల్ చేయబడిన యాప్‌లను తనిఖీ చేయి." + "హానికరమైన ప్రవర్తన కోసం ADB/ADT ద్వారా ఇన్‌స్టాల్ చేయబడిన యాప్‌లను చెక్ చేయండి." "పేర్లు (MAC అడ్రస్‌లు మాత్రమే) లేని బ్లూటూత్ పరికరాలు డిస్‌ప్లే కాబడతాయి" "రిమోట్ పరికరాల్లో ఆమోదించలేని స్థాయిలో అధిక వాల్యూమ్ ఉండటం లేదా వాల్యూమ్ కంట్రోల్ లేకపోవడం వంటి సమస్యలు ఉంటే బ్లూటూత్ సంపూర్ణ వాల్యూమ్ ఫీచర్‌ను డిజేబుల్ చేస్తుంది." "బ్లూటూత్ Gabeldorsche ఫీచర్ స్ట్యాక్‌ను ఎనేబుల్ చేస్తుంది." @@ -423,11 +423,11 @@ "మెరుగైన రంగులు" "కంటికి కనిపించే విధంగా సహజమైన రంగులు" - "డిజిటల్ కంటెంట్ కోసం అనుకూలీకరించిన రంగులు" + "డిజిటల్ కంటెంట్ కోసం అనుకూలంగా మార్చిన రంగులు" "స్టాండ్‌బై యాప్‌లు" "నిష్క్రియంగా ఉంది. టోగుల్ చేయడానికి నొక్కండి." - "సక్రియంగా ఉంది. టోగుల్ చేయడానికి నొక్కండి." + "యాక్టివ్‌గా ఉంది. టోగుల్ చేయడానికి నొక్కండి." "యాప్ స్టాండ్‌బై స్థితి: %s" "మీడియా ట్రాన్స్‌కోడింగ్ సెట్టింగ్‌లు" "ట్రాన్స్‌కోడింగ్ ఆటోమేటిక్ సెట్టింగ్‌లను ఓవర్‌రైడ్ చేయండి" @@ -569,7 +569,7 @@ "యూజర్" "పరిమితం చేయబడిన ప్రొఫైల్" "కొత్త యూజర్‌ను జోడించాలా?" - "అదనపు యూజర్‌లను క్రియేట్ చేయడం ద్వారా మీరు ఈ పరికరాన్ని ఇతరులతో షేర్ చేయవచ్చు. ప్రతి యూజర్‌కు‌ వారికంటూ ప్రత్యేక స్థలం ఉంటుంది, వారు ఆ స్థలాన్ని యాప్‌లు, వాల్‌పేపర్ మొదలైనవాటితో అనుకూలీకరించవచ్చు. యూజర్‌లు ప్రతి ఒక్కరిపై ప్రభావం చూపే Wi‑Fi వంటి పరికర సెట్టింగ్‌లను కూడా సర్దుబాటు చేయవచ్చు.\n\nమీరు కొత్త యూజర్‌ను జోడించినప్పుడు, ఆ వ్యక్తి వారికంటూ స్వంత స్థలం సెట్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగిలిన యూజర్‌లందరి కోసం యాప్‌లను అప్‌డేట్ చేయవచ్చు. యాక్సెసిబిలిటీ సెట్టింగ్‌లు, సర్వీస్‌లు కొత్త యూజర్‌కి బదిలీ కాకపోవచ్చు." + "అదనపు యూజర్‌లను క్రియేట్ చేయడం ద్వారా మీరు ఈ పరికరాన్ని ఇతరులతో షేర్ చేయవచ్చు. ప్రతి యూజర్‌కు‌ వారికంటూ ప్రత్యేక స్థలం ఉంటుంది, వారు ఆ స్థలాన్ని యాప్‌లు, వాల్‌పేపర్ మొదలైనవాటితో అనుకూలంగా మార్చవచ్చు. యూజర్‌లు ప్రతి ఒక్కరిపై ప్రభావం చూపే Wi‑Fi వంటి పరికర సెట్టింగ్‌లను కూడా సర్దుబాటు చేయవచ్చు.\n\nమీరు కొత్త యూజర్‌ను జోడించినప్పుడు, ఆ వ్యక్తి వారికంటూ స్వంత స్థలం సెట్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగిలిన యూజర్‌లందరి కోసం యాప్‌లను అప్‌డేట్ చేయవచ్చు. యాక్సెసిబిలిటీ సెట్టింగ్‌లు, సర్వీస్‌లు కొత్త యూజర్‌కి బదిలీ కాకపోవచ్చు." "మీరు కొత్త యూజర్‌ను జోడించినప్పుడు, ఆ వ్యక్తి తన స్పేస్‌ను సెటప్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగతా యూజర్ల కోసం యాప్‌లను అప్‌డేట్‌ చేయగలరు." "యూజర్‌ను ఇప్పుడే సెటప్ చేయాలా?" "పరికరాన్ని తీసుకోవడానికి వ్యక్తి అందుబాటులో ఉన్నారని నిర్ధారించుకొని, ఆపై వారికి నిల్వ స్థలాన్ని సెటప్ చేయండి" -- cgit v1.2.3 From e3512e0916715fd7077a4a994a4ae459c9c5034e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 12:35:02 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I2d896713991694852697e60866798a35fceb66af --- packages/SettingsLib/res/values-am/strings.xml | 2 +- packages/SettingsLib/res/values-fi/strings.xml | 2 +- packages/SettingsLib/res/values-or/strings.xml | 8 ++++---- packages/SettingsLib/res/values-te/arrays.xml | 4 ++-- packages/SettingsLib/res/values-te/strings.xml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index b5982ae533dd..74844fc79428 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -651,7 +651,7 @@ "ነባሪ" "ማያ ገጽን ያብሩ" "ማያ ገጹን ማብራት ይፍቀዱ" - "አንድ መተግበሪያ ማያ ገጹን እንዲያበራ ይፍቀዱለት። ከተሰጠ፣ መተግበሪያው ያለእርስዎ ግልጽ ሐሳብ በማንኛውም ጊዜ ማያ ገጹን ሊያበራ ይችላል።" + "አንድ መተግበሪያ ማያ ገጹን እንዲያበራ ይፍቀዱለት። ከተሰጠ፣ መተግበሪያው ያለእርስዎ ግልፅ ሐሳብ በማንኛውም ጊዜ ማያ ገጹን ሊያበራ ይችላል።" "%1$sን ማሰራጨት ይቁም?" "%1$sን ካሰራጩ ወይም ውፅዓትን ከቀየሩ የአሁኑ ስርጭትዎ ይቆማል" "%1$s ያሰራጩ" diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index b643784cbbe2..2ff1cfb5ac5f 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -649,7 +649,7 @@ "Fyysinen näppäimistö" "Valitse näppäimistöasettelu" "Oletus" - "Käynnistä näyttö" + "Näytön käynnistys" "Salli näytön käynnistäminen" "Salli sovelluksen käynnistää näyttö. Jos sovellus saa luvan, se voi käynnistää näytön itsenäisesti milloin tahansa." "Lopetetaanko %1$s-sovelluksen lähettäminen?" diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index fa57c63e8ce9..e7a80f3a486c 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -148,7 +148,7 @@ "LE_AUDIO ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ" "ପେୟାର୍‌" "ପେୟାର୍‌" - "ବାତିଲ୍‌ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ପେୟାରିଂ ଫଳରେ ସଂଯୁକ୍ତ ଥିବା ବେଳେ ଆପଣଙ୍କ ସମ୍ପର୍କଗୁଡ଼ିକୁ ଏବଂ କଲ୍‌ର ଇତିବୃତିକୁ ଆକସେସ୍‌ ମଞ୍ଜୁର ହୁଏ।" "%1$s ସହ ପେୟାର୍‌ କରିହେଲା ନାହିଁ।" "ଏକ ଭୁଲ୍‌ PIN କିମ୍ବା ପାସକୀ କାରଣରୁ %1$s ସହ ପେୟାର୍‌ କରିପାରିଲା ନାହିଁ।" @@ -305,7 +305,7 @@ "ବ୍ୟକ୍ତିଗତ DNS" "ବ୍ୟକ୍ତିଗତ DNS ମୋଡ୍‌ ବାଛନ୍ତୁ" "ବନ୍ଦ" - "ସ୍ଵଚାଳିତ" + "ଅଟୋମେଟିକ" "ବ୍ୟକ୍ତିଗତ DNS ପ୍ରଦାତା ହୋଷ୍ଟନାମ" "DNS ପ୍ରଦାନକାରୀଙ୍କ ହୋଷ୍ଟନାମ ଲେଖନ୍ତୁ" "କନେକ୍ଟ କରିହେଲା ନାହିଁ" @@ -523,7 +523,7 @@ "{count,plural, =0{0ଟି ଡିଭାଇସ ସଂଯୁକ୍ତ ହୋଇଛି}=1{1ଟି ଡିଭାଇସ ସଂଯୁକ୍ତ ହୋଇଛି}other{#ଟି ଡିଭାଇସ ସଂଯୁକ୍ତ ହୋଇଛି}}" "ଅଧିକ ସମୟ।" "କମ୍ ସମୟ।" - "ବାତିଲ୍" + "ବାତିଲ" "ଠିକ୍‌ ଅଛି" "ହୋଇଗଲା" "ଆଲାରାମ୍ ଏବଂ ରିମାଇଣ୍ଡରଗୁଡ଼ିକ" @@ -608,7 +608,7 @@ "ଡିଭାଇସ୍ ଡିଫଲ୍ଟ" "ଅକ୍ଷମ କରାଯାଇଛି" "ସକ୍ଷମ କରାଯାଇଛି" - "ଏହି ପରିବର୍ତ୍ତନ ଲାଗୁ କରିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ନିଶ୍ଚିତ ରୂପେ ରିବୁଟ୍ କରାଯିବା ଆବଶ୍ୟକ। ବର୍ତ୍ତମାନ ରିବୁଟ୍ କରନ୍ତୁ କିମ୍ବା ବାତିଲ୍ କରନ୍ତୁ।" + "ଏହି ପରିବର୍ତ୍ତନ ଲାଗୁ କରିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ନିଶ୍ଚିତ ରୂପେ ରିବୁଟ୍ କରାଯିବା ଆବଶ୍ୟକ। ବର୍ତ୍ତମାନ ରିବୁଟ୍ କରନ୍ତୁ କିମ୍ବା ବାତିଲ କରନ୍ତୁ।" "ତାରଯୁକ୍ତ ହେଡଫୋନ୍" "ଚାଲୁ ଅଛି" "ବନ୍ଦ ଅଛି" diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml index a5b9f79325fd..513fb6e87a10 100644 --- a/packages/SettingsLib/res/values-te/arrays.xml +++ b/packages/SettingsLib/res/values-te/arrays.xml @@ -50,8 +50,8 @@ "ఎప్పటికీ తనిఖీ చేయవద్దు" - "DRM కంటెంట్‌కు మాత్రమే తనిఖీ చేయండి" - "ఎల్లప్పుడూ తనిఖీ చేయండి" + "DRM కంటెంట్‌కు మాత్రమే చెక్ చేయండి" + "ఎల్లప్పుడూ చెక్ చేయండి" "ఎప్పటికీ HDCP తనిఖీని ఉపయోగించవద్దు" diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index 78b4342431c5..4df4089241dc 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -204,7 +204,7 @@ "%1$sకి పూర్తి మద్దతు ఉంది" "%1$sకి నెట్‌వర్క్ కనెక్షన్ అవసరం" "%1$sకు మద్దతు లేదు" - "తనిఖీ చేస్తోంది..." + "చెక్ చేస్తోంది..." "%s కోసం సెట్టింగ్‌లు" "ఇంజిన్ సెట్టింగ్‌లను ప్రారంభించండి" "ప్రాధాన్య ఇంజిన్" @@ -336,7 +336,7 @@ "అభివృద్ధి సెట్టింగ్‌లను అనుమతించాలా?" "ఈ సెట్టింగ్‌లు అభివృద్ధి వినియోగం కోసం మాత్రమే ఉద్దేశించబడినవి. వీటి వలన మీ పరికరం మరియు దీనిలోని యాప్‌లు విచ్ఛిన్నం కావచ్చు లేదా తప్పుగా ప్రవర్తించవచ్చు." "USB ద్వారా యాప్‌లను వెరిఫై చేయి" - "హానికరమైన ప్రవర్తన కోసం ADB/ADT ద్వారా ఇన్‌స్టాల్ చేయబడిన యాప్‌లను తనిఖీ చేయి." + "హానికరమైన ప్రవర్తన కోసం ADB/ADT ద్వారా ఇన్‌స్టాల్ చేయబడిన యాప్‌లను చెక్ చేయండి." "పేర్లు (MAC అడ్రస్‌లు మాత్రమే) లేని బ్లూటూత్ పరికరాలు డిస్‌ప్లే కాబడతాయి" "రిమోట్ పరికరాల్లో ఆమోదించలేని స్థాయిలో అధిక వాల్యూమ్ ఉండటం లేదా వాల్యూమ్ కంట్రోల్ లేకపోవడం వంటి సమస్యలు ఉంటే బ్లూటూత్ సంపూర్ణ వాల్యూమ్ ఫీచర్‌ను డిజేబుల్ చేస్తుంది." "బ్లూటూత్ Gabeldorsche ఫీచర్ స్ట్యాక్‌ను ఎనేబుల్ చేస్తుంది." -- cgit v1.2.3 From 1025d2875d7897d44667ff0563a3eefafb493546 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 12:40:32 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I7b09b3f3d87c64e1150fb2d8cd3107fc3385fa2a --- packages/PackageInstaller/res/values-eu/strings.xml | 4 ++-- packages/PackageInstaller/res/values-or/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/PackageInstaller/res/values-eu/strings.xml b/packages/PackageInstaller/res/values-eu/strings.xml index c1b73fc23428..4af62518c819 100644 --- a/packages/PackageInstaller/res/values-eu/strings.xml +++ b/packages/PackageInstaller/res/values-eu/strings.xml @@ -84,8 +84,8 @@ "Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telebista honetan. Hori aldatzeko, joan Ezarpenak atalera." "Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telefono honetan. Hori aldatzeko, joan Ezarpenak atalera." "Baliteke telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telefonoari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea." - "Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik tabletak jasan ditzakeen kalteen edo datu-galeren erantzulea." - "Telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telebistak jasan ditzakeen kalteen edo datu-galeren erantzulea." + "Baliteke tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu hura erabiltzeagatik tabletari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela." + "Baliteke telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Aplikazio hau instalatzen baduzu, onartu egingo duzu hura erabiltzeagatik telebistari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela." "Egin aurrera" "Ezarpenak" "Wear aplikazioak instalatzea/desinstalatzea" diff --git a/packages/PackageInstaller/res/values-or/strings.xml b/packages/PackageInstaller/res/values-or/strings.xml index 12e61d10452e..4f24118a56ff 100644 --- a/packages/PackageInstaller/res/values-or/strings.xml +++ b/packages/PackageInstaller/res/values-or/strings.xml @@ -20,7 +20,7 @@ "ଇନଷ୍ଟଲ୍‍ କରନ୍ତୁ" "ଅପଡେଟ୍ କରନ୍ତୁ" "ହୋଇଗଲା" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ଇନଷ୍ଟଲ୍‌ କରାଯାଉଛି…" "%1$s ଇନଷ୍ଟଲ୍‌ କରାଯାଉଛି…" "ଆପ ଇନଷ୍ଟଲ ହୋଇଗଲା।" -- cgit v1.2.3 From 42ab40adddc790f9eb98c128888ce1dd1909b927 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 12:43:51 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I22c7529155bc89b3163c5e916dfca8a2097eac59 --- packages/PrintSpooler/res/values-or/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/PrintSpooler/res/values-or/strings.xml b/packages/PrintSpooler/res/values-or/strings.xml index fa10909b92ed..6f215d3af18b 100644 --- a/packages/PrintSpooler/res/values-or/strings.xml +++ b/packages/PrintSpooler/res/values-or/strings.xml @@ -83,7 +83,7 @@ "%1$s ବାତିଲ୍‍ କରାଯାଉଛି" "%1$s ପ୍ରିଣ୍ଟର୍‍ ତ୍ରୁଟି" "ପ୍ରିଣ୍ଟର୍‍ ଦ୍ୱାରା ରୋକାଯାଇଥିବା %1$s" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" "ପ୍ରିଣ୍ଟର୍‍କୁ କୌଣସି ସଂଯୋଗ ନାହିଁ" "ଅଜଣା" -- cgit v1.2.3 From 1cede1f77ac757845be728bd2f01e8c6eea546ea Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 12:51:11 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ib76243b67dd82d1335a64a06f446bf1b851fa879 --- packages/SettingsProvider/res/values-nb/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SettingsProvider/res/values-nb/strings.xml b/packages/SettingsProvider/res/values-nb/strings.xml index 3bdaf83a4230..8da90c0f32cb 100644 --- a/packages/SettingsProvider/res/values-nb/strings.xml +++ b/packages/SettingsProvider/res/values-nb/strings.xml @@ -20,6 +20,6 @@ "Lagring av innstillinger" - "Innstillingene for Wi-Fi-sone er endret" + "Innstillingene for wifi-sone er endret" "Trykk for å se detaljer" -- cgit v1.2.3 From 877ec3b6a9459ec29da00a45a1c46815e1235811 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 14 Jul 2022 12:54:55 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I2bb88306d741d7326d9a5826ca3ddde0b6dcc56f --- packages/SystemUI/res/values-nl/strings.xml | 2 +- packages/SystemUI/res/values-or/strings.xml | 16 ++++++++-------- packages/SystemUI/res/values-pa/strings.xml | 2 +- packages/SystemUI/res/values-te/strings.xml | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index f1320dd533e7..9b520230dcf2 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -1070,7 +1070,7 @@ "Toevoegen aan apparaatbediening" "Toevoegen" "Voorgesteld door %s" - "Bedieningselementen geüpdated" + "Bedieningselementen geüpdatet" "Apparaat vergrendeld" "Pincode bevat letters of symbolen" "%s verifiëren" diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 0c47f92415d7..a0fd3f165784 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -87,8 +87,8 @@ "ପୁଣିଥରେ ସ୍କ୍ରୀନ୍‌ଶଟ୍ ନେବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ" "ସ୍କ୍ରିନସଟକୁ ସେଭ୍ କରାଯାଇପାରିବ ନାହିଁ" "ଆପ୍‍ କିମ୍ବା ସଂସ୍ଥା ଦ୍ୱାରା ସ୍କ୍ରୀନଶଟ୍‍ ନେବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" - "ଏଡିଟ୍ କରନ୍ତୁ" - "ସ୍କ୍ରିନସଟ୍ ଏଡିଟ୍ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" + "ସ୍କ୍ରିନସଟ୍ ଏଡିଟ କରନ୍ତୁ" "ଅଧିକ କ୍ୟାପଚର୍ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟ୍ ଖାରଜ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟର ପ୍ରିଭ୍ୟୁ" @@ -114,7 +114,7 @@ "ବନ୍ଦ କରନ୍ତୁ" "ବିରତି କରନ୍ତୁ" "ପୁଣି ଚାଲୁ କରନ୍ତୁ" - "ବାତିଲ୍‌ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ସେୟାର୍‍ କରନ୍ତୁ" "ସ୍କ୍ରିନ୍‍ ରେକର୍ଡିଂ ବାତିଲ୍‌ କରିଦିଆଯାଇଛି" "ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ସେଭ୍ କରାଯାଇଛି" @@ -147,10 +147,10 @@ "ଫୋନ୍‌ ଖୋଲନ୍ତୁ" "ଭଏସ୍‍ ସହାୟକ ଖୋଲନ୍ତୁ" "କ୍ୟାମେରା ଖୋଲନ୍ତୁ" - "ବାତିଲ୍ କରନ୍ତୁ" + "ବାତିଲ କରନ୍ତୁ" "ନିଶ୍ଚିତ କରନ୍ତୁ" "ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" - "ପ୍ରାମାଣିକତା ବାତିଲ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" + "ପ୍ରାମାଣିକତା ବାତିଲ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" "ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" "ଆପଣଙ୍କର ମୁହଁକୁ ପ୍ରମାଣ କରୁଛି" "ମୁହଁ ପ୍ରାମାଣିକତା ହୋଇଛି" @@ -896,7 +896,7 @@ "ଟାଇଲ୍‍ ପୁଣି ସଜାଇବାକୁ ଦାବିଧରି ଟାଣନ୍ତୁ" "ବାହାର କରିବାକୁ ଏଠାକୁ ଡ୍ରାଗ୍‍ କରନ୍ତୁ" "ଆପଣଙ୍କର ଅତିକମ୍‌ରେ %1$dଟି ଟାଇଲ୍ ଆବଶ୍ୟକ" - "ଏଡିଟ୍‌ କରନ୍ତୁ" + "ଏଡିଟ କରନ୍ତୁ" "ସମୟ" "ଘଣ୍ଟା, ମିନିଟ୍‍ ଏବଂ ସେକେଣ୍ଡ ଦେଖାନ୍ତୁ" @@ -931,7 +931,7 @@ "ବିବରଣୀ ଖୋଲନ୍ତୁ" "%s ଯୋଗୁଁ ଉପଲବ୍ଧ ନାହିଁ" "%s ସେଟିଙ୍ଗ ଖୋଲନ୍ତୁ।" - "ସେଟିଙ୍ଗର କ୍ରମ ସଂଶୋଧନ କରନ୍ତୁ।" + "ସେଟିଂସର କ୍ରମ ଏଡିଟ କରନ୍ତୁ।" "ପାୱାର ମେନୁ" "ପୃଷ୍ଠା %1$d ମୋଟ %2$d" "ଲକ୍‌ ସ୍କ୍ରୀନ୍‌" @@ -1104,7 +1104,7 @@ "ପ୍ରଗତିରେ ଅଛି" "ନୂଆ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଦେଖିବାକୁ କ୍ୱିକ୍ ସେଟିଂସ୍ ଖୋଲନ୍ତୁ" "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଯୋଗ କରନ୍ତୁ" - "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଏଡିଟ୍ କରନ୍ତୁ" + "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଏଡିଟ କରନ୍ତୁ" "ଆଉଟପୁଟ୍ ଯୋଗ କରନ୍ତୁ" "ଗୋଷ୍ଠୀ" "1ଟି ଡିଭାଇସ୍ ଚୟନ କରାଯାଇଛି" diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index e4edf21a1168..cb001a2d594d 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -518,7 +518,7 @@ "ਸ਼ਾਂਤ" "ਸੂਚਨਾਵਾਂ" "ਗੱਲਾਂਬਾਤਾਂ" - "ਸਾਰੀਆਂ ਖਾਮੋਸ਼ ਸੂਚਨਾਵਾਂ ਕਲੀਅਰ ਕਰੋ" + "ਸਾਰੀਆਂ ਸ਼ਾਂਤ ਸੂਚਨਾਵਾਂ ਕਲੀਅਰ ਕਰੋ" "\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵੱਲੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਰੋਕਿਆ ਗਿਆ" "ਹੁਣੇ ਸ਼ੁਰੂ ਕਰੋ" "ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ" diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 3b69c41d1213..b6547fd72de7 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -60,13 +60,13 @@ "USB డీబగ్గింగ్‌ను అనుమతించాలా?" "ఇది కంప్యూటర్ యొక్క RSA కీ వేలిముద్ర:\n%1$s" "ఈ కంప్యూటర్ నుండి ఎల్లప్పుడూ అనుమతించు" - "అనుమతించు" + "అనుమతించండి" "USB డీబగ్గింగ్‌కి అనుమతి లేదు" "ఈ పరికరానికి ప్రస్తుతం సైన్ ఇన్ చేసిన వినియోగదారు USB డీబగ్గింగ్ ఆన్ చేయలేరు. ఈ ఫీచర్ ఉపయోగించడానికి, ప్రాథమిక వినియోగదారుకి మారాలి." "ఈ నెట్‌వర్క్ ద్వారా వైర్‌లెస్ డీబగ్గింగ్‌ను అనుమతించాలా?" "నెట్‌వర్క్ పేరు (SSID)\n%1$s\n\nWi‑Fi అడ్రస్ (BSSID)\n%2$s" "ఈ నెట్‌వర్క్ నుండి ఎల్లప్పుడూ అనుమతించు" - "అనుమతించు" + "అనుమతించండి" "వైర్‌లెస్ డీబగ్గింగ్‌కి అనుమతి లేదు" "ఈ పరికరానికి ప్రస్తుతం సైన్ ఇన్ చేసిన యూజర్, వైర్‌లెస్ డీబగ్గింగ్ ఆన్ చేయలేరు. ఈ ఫీచర్ ఉపయోగించడానికి, ప్రాథమిక యూజర్ కి స్విచ్ అవ్వండి." "USB పోర్ట్‌ నిలిపివేయబడింది" @@ -994,7 +994,7 @@ "- ఇది %1$s నుండి సమాచారాన్ని చదువుతుంది" "- ఇది %1$s లోపల చర్యలు తీసుకుంటుంది" "ఏ యాప్ నుండి అయినా స్లైస్‌లను చూపించడానికి %1$sని అనుమతించండి" - "అనుమతించు" + "అనుమతించండి" "తిరస్కరించు" "బ్యాటరీ సేవర్‌ని షెడ్యూల్ చేయడానికి నొక్కండి" "బ్యాటరీ ఛార్జింగ్ పూర్తిగా అయిపోతున్న తరుణంలో ఆన్ చేస్తుంది" @@ -1097,7 +1097,7 @@ "ఎర్రర్, మళ్లీ ప్రయత్నిస్తోంది..." "కనుగొనబడలేదు" "కంట్రోల్ అందుబాటులో లేదు" - "%1$sను యాక్సెస్ చేయడం సాధ్యపడలేదు. %2$s యాప్‌ను తనిఖీ చేసి, కంట్రోల్ ఇప్పటికీ అందుబాటులో ఉందని, యాప్ సెట్టింగ్‌లు మారలేదని నిర్ధారించుకోండి." + "%1$sను యాక్సెస్ చేయడం సాధ్యపడలేదు. %2$s యాప్‌ను చెక్ చేసి, కంట్రోల్ ఇప్పటికీ అందుబాటులో ఉందని, యాప్ సెట్టింగ్‌లు మారలేదని నిర్ధారించుకోండి." "యాప్‌ను తెరువు" "స్టేటస్ లోడ్ చేయడం సాధ్యపడలేదు" "ఎర్రర్, మళ్లీ ప్రయత్నించండి" -- cgit v1.2.3 From 70f5d083ce832841c1b646a8c8a82e73f5d2d481 Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Wed, 13 Jul 2022 00:11:13 +0000 Subject: Correct the range of issueOfDataEphemeris as [0, 1023] Bug: 239083503 Test: atest SatellitePvtTest Change-Id: I017b4e83a6af61c7827c9135176953809b139bb7 Merged-In: I017b4e83a6af61c7827c9135176953809b139bb7 --- core/api/system-current.txt | 4 ++-- location/java/android/location/SatellitePvt.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index ec4ad8b704c3..0126199add0c 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -5956,7 +5956,7 @@ package android.location { method public int getEphemerisSource(); method @FloatRange public double getIonoDelayMeters(); method @IntRange(from=0, to=1023) public int getIssueOfDataClock(); - method @IntRange(from=0, to=255) public int getIssueOfDataEphemeris(); + method @IntRange(from=0, to=1023) public int getIssueOfDataEphemeris(); method @Nullable public android.location.SatellitePvt.PositionEcef getPositionEcef(); method @IntRange(from=0) public long getTimeOfClockSeconds(); method @IntRange(from=0) public long getTimeOfEphemerisSeconds(); @@ -5984,7 +5984,7 @@ package android.location { method @NonNull public android.location.SatellitePvt.Builder setEphemerisSource(int); method @NonNull public android.location.SatellitePvt.Builder setIonoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double); method @NonNull public android.location.SatellitePvt.Builder setIssueOfDataClock(@IntRange(from=0, to=1023) int); - method @NonNull public android.location.SatellitePvt.Builder setIssueOfDataEphemeris(@IntRange(from=0, to=255) int); + method @NonNull public android.location.SatellitePvt.Builder setIssueOfDataEphemeris(@IntRange(from=0, to=1023) int); method @NonNull public android.location.SatellitePvt.Builder setPositionEcef(@NonNull android.location.SatellitePvt.PositionEcef); method @NonNull public android.location.SatellitePvt.Builder setTimeOfClockSeconds(@IntRange(from=0) long); method @NonNull public android.location.SatellitePvt.Builder setTimeOfEphemerisSeconds(@IntRange(from=0) long); diff --git a/location/java/android/location/SatellitePvt.java b/location/java/android/location/SatellitePvt.java index f3e15084d730..2031929514f3 100644 --- a/location/java/android/location/SatellitePvt.java +++ b/location/java/android/location/SatellitePvt.java @@ -539,7 +539,7 @@ public final class SatellitePvt implements Parcelable { * *

This field is valid if {@link #hasIssueOfDataEphemeris()} is true. */ - @IntRange(from = 0, to = 255) + @IntRange(from = 0, to = 1023) public int getIssueOfDataEphemeris() { return mIssueOfDataEphemeris; } @@ -847,8 +847,8 @@ public final class SatellitePvt implements Parcelable { */ @NonNull public Builder setIssueOfDataEphemeris( - @IntRange(from = 0, to = 255) int issueOfDataEphemeris) { - Preconditions.checkArgumentInRange(issueOfDataEphemeris, 0, 255, + @IntRange(from = 0, to = 1023) int issueOfDataEphemeris) { + Preconditions.checkArgumentInRange(issueOfDataEphemeris, 0, 1023, "issueOfDataEphemeris"); mIssueOfDataEphemeris = issueOfDataEphemeris; mFlags = (byte) (mFlags | HAS_ISSUE_OF_DATA_EPHEMERIS); -- cgit v1.2.3 From 7713b243f1de0849cdd20461458a2c117d672de0 Mon Sep 17 00:00:00 2001 From: Stefano Galarraga Date: Tue, 12 Jul 2022 08:19:38 +0100 Subject: Add benchmarks for WASM bidding logic Add new test using new WebView WASM support. Add JetPack Core dependency to fix the ClassNotFoundException issue when looking for the ContextCompat class. Results of running the `evaluate_turtledoveWasm` test on a Pixel 4: ``` evaluate_turtledoveWasm_standardDeviation: 838804 evaluate_turtledoveWasm_min (ns): 21844616 evaluate_turtledoveWasm_median (ns): 22534819 evaluate_turtledoveWasm_mean (ns): 22640871 ``` Test: JSScriptEnginePerfTests Change-Id: Id79234f17258439ccc633cae2e1cbddc356aff99 Bug: 230095467 --- apct-tests/perftests/rubidium/Android.bp | 1 + .../perftests/rubidium/assets/generate_bid.wasm | Bin 0 -> 1308806 bytes .../rubidium/assets/generate_bid_using_wasm.js | 24 +++++ .../rubidium/js/JSScriptEnginePerfTests.java | 97 ++++++++++++++++++--- 4 files changed, 110 insertions(+), 12 deletions(-) create mode 100644 apct-tests/perftests/rubidium/assets/generate_bid.wasm create mode 100644 apct-tests/perftests/rubidium/assets/generate_bid_using_wasm.js diff --git a/apct-tests/perftests/rubidium/Android.bp b/apct-tests/perftests/rubidium/Android.bp index 1f764d69f61a..0f22603adac7 100644 --- a/apct-tests/perftests/rubidium/Android.bp +++ b/apct-tests/perftests/rubidium/Android.bp @@ -33,6 +33,7 @@ android_test { "compatibility-device-util-axt", "platform-test-annotations", "adservices-service-core", + "androidx.core_core", ], test_suites: ["device-tests"], data: [":perfetto_artifacts"], diff --git a/apct-tests/perftests/rubidium/assets/generate_bid.wasm b/apct-tests/perftests/rubidium/assets/generate_bid.wasm new file mode 100644 index 000000000000..5e7fe9ee5fe7 Binary files /dev/null and b/apct-tests/perftests/rubidium/assets/generate_bid.wasm differ diff --git a/apct-tests/perftests/rubidium/assets/generate_bid_using_wasm.js b/apct-tests/perftests/rubidium/assets/generate_bid_using_wasm.js new file mode 100644 index 000000000000..bc50d0af0954 --- /dev/null +++ b/apct-tests/perftests/rubidium/assets/generate_bid_using_wasm.js @@ -0,0 +1,24 @@ +function generateBid(ad, wasmModule) { + let input = ad.metadata.input; + + const instance = new WebAssembly.Instance(wasmModule); + + const memory = instance.exports.memory; + const input_in_memory = new Float32Array(memory.buffer, 0, 200); + for (let i = 0; i < input.length; ++i) { + input_in_memory[i] = input[i]; + } + const results = [ + instance.exports.nn_forward_model0(input_in_memory.length, input_in_memory), + instance.exports.nn_forward_model1(input_in_memory.length, input_in_memory), + instance.exports.nn_forward_model2(input_in_memory.length, input_in_memory), + instance.exports.nn_forward_model3(input_in_memory.length, input_in_memory), + instance.exports.nn_forward_model4(input_in_memory.length, input_in_memory), + ]; + const bid = results.map(x => Math.max(x, 1)).reduce((x, y) => x * y); + return { + ad: 'example', + bid: bid, + render: ad.renderUrl + } +} \ No newline at end of file diff --git a/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java b/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java index bf9ff3a47c40..0ddec236b6da 100644 --- a/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java +++ b/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java @@ -24,6 +24,9 @@ import static com.android.adservices.service.js.JSScriptArgument.stringArrayArg; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assume.assumeTrue; + +import android.annotation.SuppressLint; import android.content.Context; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; @@ -45,48 +48,44 @@ import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; import org.json.JSONArray; -import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; /** To run the unit tests for this class, run "atest RubidiumPerfTests:JSScriptEnginePerfTests" */ @MediumTest @RunWith(AndroidJUnit4.class) public class JSScriptEnginePerfTests { - private static final String TAG = JSScriptEnginePerfTests.class.getSimpleName(); + private static final String TAG = JSScriptEngine.TAG; private static final Context sContext = ApplicationProvider.getApplicationContext(); private static final ExecutorService sExecutorService = Executors.newFixedThreadPool(10); - private static JSScriptEngine sJSScriptEngine; + private static final JSScriptEngine sJSScriptEngine = + JSScriptEngine.getInstanceForTesting( + sContext, Profiler.createInstance(JSScriptEngine.TAG)); @Rule public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); @Before public void before() throws Exception { - Profiler profiler = Profiler.createInstance(JSScriptEngine.TAG); - sJSScriptEngine = JSScriptEngine.getInstanceForTesting(sContext, profiler); - // Warm up the sandbox env. callJSEngine( "function test() { return \"hello world\";" + " }", ImmutableList.of(), "test"); } - @After - public void after() { - sJSScriptEngine.shutdown(); - } - @Test public void evaluate_helloWorld() throws Exception { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); @@ -156,6 +155,7 @@ public class JSScriptEnginePerfTests { runParametrizedTurtledoveScript(75); } + @SuppressLint("DefaultLocale") private void runParametrizedTurtledoveScript(int numAds) throws Exception { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); state.pauseTiming(); @@ -220,7 +220,34 @@ public class JSScriptEnginePerfTests { return arrayArg("foo", Collections.nCopies(numCustomAudiences, interestGroupArg)); } - private static String callJSEngine( + @Test + public void evaluate_turtledoveWasm() throws Exception { + assumeTrue(sJSScriptEngine.isWasmSupported().get(3, TimeUnit.SECONDS)); + + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + state.pauseTiming(); + + String jsTestFile = readAsset("generate_bid_using_wasm.js"); + byte[] wasmTestFile = readBinaryAsset("generate_bid.wasm"); + JSScriptArgument[] inputBytes = new JSScriptArgument[200]; + Random rand = new Random(); + for (int i = 0; i < inputBytes.length; i++) { + byte value = (byte) (rand.nextInt(2 * Byte.MAX_VALUE) - Byte.MIN_VALUE); + inputBytes[i] = JSScriptArgument.numericArg("_", value); + } + JSScriptArgument adDataArgument = + recordArg( + "ad", + stringArg("render_url", "http://google.com"), + recordArg("metadata", JSScriptArgument.arrayArg("input", inputBytes))); + + state.resumeTiming(); + while (state.keepRunning()) { + callJSEngine(jsTestFile, wasmTestFile, ImmutableList.of(adDataArgument), "generateBid"); + } + } + + private String callJSEngine( @NonNull String jsScript, @NonNull List args, @NonNull String functionName) @@ -228,6 +255,15 @@ public class JSScriptEnginePerfTests { return callJSEngine(sJSScriptEngine, jsScript, args, functionName); } + private String callJSEngine( + @NonNull String jsScript, + @NonNull byte[] wasmScript, + @NonNull List args, + @NonNull String functionName) + throws Exception { + return callJSEngine(sJSScriptEngine, jsScript, wasmScript, args, functionName); + } + private static String callJSEngine( @NonNull JSScriptEngine jsScriptEngine, @NonNull String jsScript, @@ -241,6 +277,21 @@ public class JSScriptEnginePerfTests { return futureResult.get(); } + private String callJSEngine( + @NonNull JSScriptEngine jsScriptEngine, + @NonNull String jsScript, + @NonNull byte[] wasmScript, + @NonNull List args, + @NonNull String functionName) + throws Exception { + CountDownLatch resultLatch = new CountDownLatch(1); + ListenableFuture futureResult = + callJSEngineAsync( + jsScriptEngine, jsScript, wasmScript, args, functionName, resultLatch); + resultLatch.await(); + return futureResult.get(); + } + private static ListenableFuture callJSEngineAsync( @NonNull String jsScript, @NonNull List args, @@ -261,4 +312,26 @@ public class JSScriptEnginePerfTests { result.addListener(resultLatch::countDown, sExecutorService); return result; } + + private ListenableFuture callJSEngineAsync( + @NonNull JSScriptEngine engine, + @NonNull String jsScript, + @NonNull byte[] wasmScript, + @NonNull List args, + @NonNull String functionName, + @NonNull CountDownLatch resultLatch) { + Objects.requireNonNull(engine); + Objects.requireNonNull(resultLatch); + ListenableFuture result = engine.evaluate(jsScript, wasmScript, args, functionName); + result.addListener(resultLatch::countDown, sExecutorService); + return result; + } + + private byte[] readBinaryAsset(@NonNull String assetName) throws IOException { + return sContext.getAssets().open(assetName).readAllBytes(); + } + + private String readAsset(@NonNull String assetName) throws IOException { + return new String(readBinaryAsset(assetName), StandardCharsets.UTF_8); + } } -- cgit v1.2.3 From 705019b5fcea333b3041a0a56a0c4e61c41e1b76 Mon Sep 17 00:00:00 2001 From: Andrew Chant Date: Tue, 19 Jul 2022 18:22:54 +0000 Subject: Revert "Limit the number of concurrently snoozed notifications" This reverts commit 48b83a0025d2e85c8f22bd94bf6cd7f8ae51254c. Reason for revert: Breaks downstream build (due to missing "Merged-In"?) Bug: 239578926 Change-Id: Id64db786bdbeae0009c513129a6906971524e11c --- .../notification/NotificationManagerService.java | 19 ++--- .../android/server/notification/SnoozeHelper.java | 11 --- .../NotificationManagerServiceTest.java | 85 +++------------------- .../server/notification/SnoozeHelperTest.java | 17 ----- 4 files changed, 15 insertions(+), 117 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 88f543260871..d1e0b0474b61 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -7030,7 +7030,6 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { - final List recordsToSnooze = new ArrayList<>(); if (r.getSbn().isGroup()) { final List groupNotifications = findCurrentAndSnoozedGroupNotificationsLocked( @@ -7039,8 +7038,8 @@ public class NotificationManagerService extends SystemService { if (r.getNotification().isGroupSummary()) { // snooze all children for (int i = 0; i < groupNotifications.size(); i++) { - if (!mKey.equals(groupNotifications.get(i).getKey())) { - recordsToSnooze.add(groupNotifications.get(i)); + if (mKey != groupNotifications.get(i).getKey()) { + snoozeNotificationLocked(groupNotifications.get(i)); } } } else { @@ -7050,8 +7049,8 @@ public class NotificationManagerService extends SystemService { if (groupNotifications.size() == 2) { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - if (!mKey.equals(groupNotifications.get(i).getKey())) { - recordsToSnooze.add(groupNotifications.get(i)); + if (mKey != groupNotifications.get(i).getKey()) { + snoozeNotificationLocked(groupNotifications.get(i)); } } } @@ -7059,15 +7058,7 @@ public class NotificationManagerService extends SystemService { } } // snooze the notification - recordsToSnooze.add(r); - - if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { - for (int i = 0; i < recordsToSnooze.size(); i++) { - snoozeNotificationLocked(recordsToSnooze.get(i)); - } - } else { - Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); - } + snoozeNotificationLocked(r); } diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index 15d7c1e7a210..7f265df3f416 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -62,8 +62,6 @@ import java.util.Set; public class SnoozeHelper { public static final int XML_SNOOZED_NOTIFICATION_VERSION = 1; - static final int CONCURRENT_SNOOZE_LIMIT = 500; - protected static final String XML_TAG_NAME = "snoozed-notifications"; private static final String XML_SNOOZED_NOTIFICATION = "notification"; @@ -137,15 +135,6 @@ public class SnoozeHelper { } } - protected boolean canSnooze(int numberToSnooze) { - synchronized (mLock) { - if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { - return false; - } - } - return true; - } - @NonNull protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) { Long time = null; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index b1b323b734bd..22721a1bcc92 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -3380,80 +3380,19 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_tooManySnoozed_singleNotification() { - final NotificationRecord notification = generateNotificationRecord( - mTestNotificationChannel, 1, null, true); - mService.addNotification(notification); - - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); - when(mSnoozeHelper.canSnooze(1)).thenReturn(false); - - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); - - verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); - assertThat(mService.getNotificationRecordCount()).isEqualTo(1); - } - - @Test - public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { - final NotificationRecord notification = generateNotificationRecord( - mTestNotificationChannel, 1, "group", true); - final NotificationRecord notificationChild = generateNotificationRecord( - mTestNotificationChannel, 1, "group", false); - mService.addNotification(notification); - mService.addNotification(notificationChild); - - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); - when(mSnoozeHelper.canSnooze(2)).thenReturn(false); - - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = - mService.new SnoozeNotificationRunnable( - notificationChild.getKey(), 100, null); - snoozeNotificationRunnable.run(); - - verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); - assertThat(mService.getNotificationRecordCount()).isEqualTo(2); - } - - @Test - public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { - final NotificationRecord notification = generateNotificationRecord( - mTestNotificationChannel, 1, "group", true); - final NotificationRecord notificationChild = generateNotificationRecord( - mTestNotificationChannel, 12, "group", false); - final NotificationRecord notificationChild2 = generateNotificationRecord( - mTestNotificationChannel, 13, "group", false); - mService.addNotification(notification); - mService.addNotification(notificationChild); - mService.addNotification(notificationChild2); - - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); - when(mSnoozeHelper.canSnooze(3)).thenReturn(false); - - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); - - verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); - assertThat(mService.getNotificationRecordCount()).isEqualTo(3); - } - - @Test - public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() { + public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -3461,17 +3400,19 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() { + public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, "group", true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -3489,7 +3430,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mSnoozeHelper.getNotification(any())).thenReturn(notification); when(mSnoozeHelper.getNotifications( anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>()); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3499,8 +3439,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2))); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = mService.new SnoozeNotificationRunnable( - notification2.getKey(), 100, null); - snoozeNotificationRunnable2.run(); + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); // snooze twice verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong()); @@ -3514,7 +3454,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3544,7 +3483,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3566,7 +3504,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3592,7 +3529,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3620,7 +3556,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 8bead5774548..2ae2ef7162a5 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,7 +15,6 @@ */ package com.android.server.notification; -import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; import static com.android.server.notification.SnoozeHelper.EXTRA_KEY; import static junit.framework.Assert.assertEquals; @@ -281,22 +280,6 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey())); } - @Test - public void testSnoozeLimit() { - for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { - NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); - - assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); - - if (i % 2 == 0) { - mSnoozeHelper.snooze(r, null); - } else { - mSnoozeHelper.snooze(r, 9000); - } - } - assertFalse(mSnoozeHelper.canSnooze(1)); - } - @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); -- cgit v1.2.3 From e2ceb6acfae4daa6fb095ca4031324f9f4d0fa96 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Tue, 19 Jul 2022 18:38:51 +0000 Subject: Revert "Revert "Limit the number of concurrently snoozed notifications"" This reverts commit 705019b5fcea333b3041a0a56a0c4e61c41e1b76. Reason for revert: adding merged in this time Merged-In: I005b43979d1c708fd505c8b33ae0c8cb03ddbb35 Bug: 234441463 Change-Id: I5ecfdf77e56d9a50ca5cc8031ce83313b8d4ee5d --- .../notification/NotificationManagerService.java | 19 +++-- .../android/server/notification/SnoozeHelper.java | 11 +++ .../NotificationManagerServiceTest.java | 85 +++++++++++++++++++--- .../server/notification/SnoozeHelperTest.java | 17 +++++ 4 files changed, 117 insertions(+), 15 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index d1e0b0474b61..88f543260871 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -7030,6 +7030,7 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { + final List recordsToSnooze = new ArrayList<>(); if (r.getSbn().isGroup()) { final List groupNotifications = findCurrentAndSnoozedGroupNotificationsLocked( @@ -7038,8 +7039,8 @@ public class NotificationManagerService extends SystemService { if (r.getNotification().isGroupSummary()) { // snooze all children for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } else { @@ -7049,8 +7050,8 @@ public class NotificationManagerService extends SystemService { if (groupNotifications.size() == 2) { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - if (mKey != groupNotifications.get(i).getKey()) { - snoozeNotificationLocked(groupNotifications.get(i)); + if (!mKey.equals(groupNotifications.get(i).getKey())) { + recordsToSnooze.add(groupNotifications.get(i)); } } } @@ -7058,7 +7059,15 @@ public class NotificationManagerService extends SystemService { } } // snooze the notification - snoozeNotificationLocked(r); + recordsToSnooze.add(r); + + if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { + for (int i = 0; i < recordsToSnooze.size(); i++) { + snoozeNotificationLocked(recordsToSnooze.get(i)); + } + } else { + Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); + } } diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index 7f265df3f416..15d7c1e7a210 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -62,6 +62,8 @@ import java.util.Set; public class SnoozeHelper { public static final int XML_SNOOZED_NOTIFICATION_VERSION = 1; + static final int CONCURRENT_SNOOZE_LIMIT = 500; + protected static final String XML_TAG_NAME = "snoozed-notifications"; private static final String XML_SNOOZED_NOTIFICATION = "notification"; @@ -135,6 +137,15 @@ public class SnoozeHelper { } } + protected boolean canSnooze(int numberToSnooze) { + synchronized (mLock) { + if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { + return false; + } + } + return true; + } + @NonNull protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) { Long time = null; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 22721a1bcc92..b1b323b734bd 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -3380,39 +3380,98 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { + public void testSnoozeRunnable_tooManySnoozed_singleNotification() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); mService.addNotification(notification); - when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(1)).thenReturn(false); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); + notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(1); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 1, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(2)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notificationChild.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(2); + } + + @Test + public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord notificationChild = generateNotificationRecord( + mTestNotificationChannel, 12, "group", false); + final NotificationRecord notificationChild2 = generateNotificationRecord( + mTestNotificationChannel, 13, "group", false); + mService.addNotification(notification); + mService.addNotification(notificationChild); + mService.addNotification(notificationChild2); + + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + when(mSnoozeHelper.canSnooze(3)).thenReturn(false); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); + + verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); + assertThat(mService.getNotificationRecordCount()).isEqualTo(3); + } + + @Test + public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() { + final NotificationRecord notification = generateNotificationRecord( + mTestNotificationChannel, 1, null, true); + mService.addNotification(notification); + when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); + + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); + snoozeNotificationRunnable.run(); // snooze twice verify(mSnoozeHelper, times(2)).snooze(any(NotificationRecord.class), anyLong()); } @Test - public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception { + public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, "group", true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -3430,6 +3489,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mSnoozeHelper.getNotification(any())).thenReturn(notification); when(mSnoozeHelper.getNotifications( anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>()); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3439,8 +3499,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2))); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); + notification2.getKey(), 100, null); + snoozeNotificationRunnable2.run(); // snooze twice verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong()); @@ -3454,6 +3514,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3483,6 +3544,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3504,6 +3566,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3529,6 +3592,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3556,6 +3620,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); + when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 2ae2ef7162a5..8bead5774548 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,6 +15,7 @@ */ package com.android.server.notification; +import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; import static com.android.server.notification.SnoozeHelper.EXTRA_KEY; import static junit.framework.Assert.assertEquals; @@ -280,6 +281,22 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey())); } + @Test + public void testSnoozeLimit() { + for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { + NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); + + assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); + + if (i % 2 == 0) { + mSnoozeHelper.snooze(r, null); + } else { + mSnoozeHelper.snooze(r, 9000); + } + } + assertFalse(mSnoozeHelper.canSnooze(1)); + } + @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); -- cgit v1.2.3 From 3a5d2e3180809078651a4ec4b99154e2e09e8b14 Mon Sep 17 00:00:00 2001 From: Neil Vohra Date: Mon, 18 Jul 2022 21:54:13 +0000 Subject: Add dependency on collector-device-lib-platform, which includes statsd metric collectors Test: Presubmits Bug: b/231969600 Change-Id: I88da7288d83430d938a1fbbd87a45c3e1b5d53d7 --- apct-tests/perftests/rubidium/Android.bp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apct-tests/perftests/rubidium/Android.bp b/apct-tests/perftests/rubidium/Android.bp index 1f764d69f61a..339ef3066ca0 100644 --- a/apct-tests/perftests/rubidium/Android.bp +++ b/apct-tests/perftests/rubidium/Android.bp @@ -29,7 +29,7 @@ android_test { "androidx.test.rules", "androidx.annotation_annotation", "apct-perftests-utils", - "collector-device-lib", + "collector-device-lib-platform", "compatibility-device-util-axt", "platform-test-annotations", "adservices-service-core", -- cgit v1.2.3 From 28dc43e6a7698f4e6ace7718ce71a2d7a5b8bec4 Mon Sep 17 00:00:00 2001 From: Steve Elliott Date: Fri, 24 Jun 2022 11:01:49 -0400 Subject: Fix stale NSSL "fling" state caused by no-op fling If a fling gesture ends with the current Y position in the exact end position for the fling, then the code to run the fling animation is bypassed, but the flag in AmbientState tracking whether a fling is active is never reset. This CL replaces the short circuit logic with the standard fling-end logic, ensuring that all expected code paths are executed. Fixes: 234824085 Fixes: 237272856 Test: manual 1. Enter lockscreen 2. Swipe up and then down to the exact same position, in one continuous gesture 3. Wait for a notification update Observe: Shade resizes correctly to match the new contents Change-Id: Ie8ddf1dbaaf1ba607657646db05d3eb622fc9415 Merged-In: Ie8ddf1dbaaf1ba607657646db05d3eb622fc9415 (cherry picked from commit 7f387f9ae92490d7ab196eb2274019b543b8ab88) --- .../systemui/statusbar/phone/PanelViewController.java | 4 +--- .../phone/NotificationPanelViewControllerTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java index 82ca842d48c9..5d417e0b59e2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java @@ -599,9 +599,7 @@ public abstract class PanelViewController { float collapseSpeedUpFactor, boolean expandBecauseOfFalsing) { if (target == mExpandedHeight && mOverExpansion == 0.0f) { // We're at the target and didn't fling and there's no overshoot - endJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE); - mKeyguardStateController.notifyPanelFlingEnd(); - notifyExpandingFinished(); + onFlingEnd(false /* cancelled */); return; } mIsFlinging = true; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java index d47644f047a2..8900d8ff9fda 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java @@ -985,6 +985,21 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { verify(mKeyguardStateController).notifyPanelFlingEnd(); } + @Test + public void testSwipe_exactlyToTarget_notifiesNssl() { + // No over-expansion + mNotificationPanelViewController.setOverExpansion(0f); + // Fling to a target that is equal to the current position (i.e. a no-op fling). + mNotificationPanelViewController.flingToHeight( + 0f, + true, + mNotificationPanelViewController.mExpandedHeight, + 1f, + false); + // Verify that the NSSL is notified that the panel is *not* flinging. + verify(mNotificationStackScrollLayoutController).setPanelFlinging(false); + } + @Test public void testDoubleTapRequired_Keyguard() { FalsingManager.FalsingTapListener listener = getFalsingTapListener(); -- cgit v1.2.3 From c010da3a4649a02afe256cbf6dad475c2278059b Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Mon, 27 Jun 2022 14:01:16 -0700 Subject: Stop crashing the system on hitting the alarm limit Exempting the system as a runtime restart is not clearly better than extreme memory and computation pressure that can result from the originating spam. Callers in the system should guard against any spammy requests that lead them to create a lot of alarms. Test: Builds, boots and existing tests should pass. atest CtsAlarmManagerTestCases:UidCapTests atest FrameworksMockingServicesTests:AlarmManagerServiceTest Bug: 234441463 Change-Id: Id5e94d44ac9ab24870a8213ec7583da0f592a5ff (cherry picked from commit 3b9f3f4a0f5a661be65e287996cae8a4481a1453) Merged-In: Id5e94d44ac9ab24870a8213ec7583da0f592a5ff --- services/core/java/com/android/server/AlarmManagerService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index d16244167c62..11726e028499 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -75,6 +75,7 @@ import android.text.format.DateFormat; import android.text.format.DateUtils; import android.util.ArrayMap; import android.util.ArraySet; +import android.util.EventLog; import android.util.KeyValueListParser; import android.util.Log; import android.util.LongArrayQueue; @@ -1768,7 +1769,11 @@ class AlarmManagerService extends SystemService { mHandler.obtainMessage(AlarmHandler.UNREGISTER_CANCEL_LISTENER, operation).sendToTarget(); Slog.w(TAG, errorMsg); - throw new IllegalStateException(errorMsg); + if (callingUid != Process.SYSTEM_UID) { + throw new IllegalStateException(errorMsg); + } else { + EventLog.writeEvent(0x534e4554, "234441463", -1, errorMsg); + } } setImplLocked(type, triggerAtTime, triggerElapsed, windowLength, maxElapsed, interval, operation, directReceiver, listenerTag, flags, true, workSource, -- cgit v1.2.3