From cdfcf6e4698566f5f9c002bee0a588c00634ee9b Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 8 Oct 2021 16:15:06 -0700 Subject: Apply the last recents animation transform on single-activity PIP tasks - When swiping up to enter PIP w/ auto-enter, SysUI applies a transform on the leash which is seamlessly applied to the task (to prevent jumps when the leash is removed). This was intended to be applied in both single and multiple activity PIP cases, but if that doesn't happen, then when the transform is later cleared, it will inadvertently reset the task's crop and matrix. Bug: 201127015 Test: atest PinnedStackTests Test: Open YT, enter PIP, turn screen off, turn screen back on Change-Id: I0d6d46c7c52f7a43058902b50a26131f626ae92d (cherry picked from commit 54d481dedac60bdc1af5e128c67c66b1d66c45af) --- services/core/java/com/android/server/wm/RootWindowContainer.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index bd688a618c63..52da4b80a75d 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2125,6 +2125,9 @@ class RootWindowContainer extends WindowContainer final Task rootTask; if (singleActivity) { rootTask = task; + + // Apply the last recents animation leash transform to the task entering PIP + rootTask.maybeApplyLastRecentsAnimationTransaction(); } else { // In the case of multiple activities, we will create a new task for it and then // move the PIP activity into the task. Note that we explicitly defer the task -- cgit v1.2.3 From b591b3ebec4886e9c1c2219a6c0e9fd3e1ac63ee Mon Sep 17 00:00:00 2001 From: Josh Tsuji Date: Mon, 4 Oct 2021 15:23:59 -0400 Subject: [DO NOT MERGE] Improve brightness handling during screen off timeout. - Align doze brightness logic with DisplayPowerController, so that the 'minimum dim amount' is taken into account by DozeScreenBrightness. - Clamp brightness to the now-correct dim value during the entire screen off animation, rather than sometimes transitioning to the sensor value. Apply the sensor brightness value on changing to the DOZE Display state, which happens after the screen off animation. Bug: 194972547 Test: at 0%, 45%, and 100% brightness, allow the screen to time out in bright and dark rooms, observe minimal brightness changes Change-Id: I528a944e04f8906cd8c7740eea97dd8fba7c3d3e (cherry picked from commit 2c26ea64bc74c7c75e3f65bd9e8cebd6494571d5) --- .../systemui/doze/DozeScreenBrightness.java | 36 ++++++++++++++++++---- .../com/android/systemui/doze/DozeScreenState.java | 11 ++++++- .../systemui/doze/DozeScreenBrightnessTest.java | 12 ++++++-- .../android/systemui/doze/DozeScreenStateTest.java | 5 ++- 4 files changed, 53 insertions(+), 11 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java index da7b389fbd36..058f37a2ef38 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java @@ -36,6 +36,7 @@ import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.doze.dagger.WrappedService; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.statusbar.phone.DozeParameters; +import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.util.sensors.AsyncSensorManager; import java.io.PrintWriter; @@ -55,6 +56,16 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi "com.android.systemui.doze.AOD_BRIGHTNESS"; protected static final String BRIGHTNESS_BUCKET = "brightness_bucket"; + /** + * Just before the screen times out from user inactivity, DisplayPowerController dims the screen + * brightness to the lower of {@link #mScreenBrightnessDim}, or the current brightness minus + * DisplayPowerController#SCREEN_DIM_MINIMUM_REDUCTION_FLOAT. + * + * This value is 0.04f * 255, which converts SCREEN_DIM_MINIMUM_REDUCTION_FLOAT to the integer + * brightness values used by doze. + */ + private static final int SCREEN_DIM_MINIMUM_REDUCTION_INT = 10; + private final Context mContext; private final DozeMachine.Service mDozeService; private final DozeHost mDozeHost; @@ -82,6 +93,8 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi */ private int mDebugBrightnessBucket = -1; + private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; + @Inject public DozeScreenBrightness(Context context, @WrappedService DozeMachine.Service service, AsyncSensorManager sensorManager, @@ -89,7 +102,8 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi AlwaysOnDisplayPolicy alwaysOnDisplayPolicy, WakefulnessLifecycle wakefulnessLifecycle, DozeParameters dozeParameters, - DockManager dockManager) { + DockManager dockManager, + UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) { mContext = context; mDozeService = service; mSensorManager = sensorManager; @@ -99,6 +113,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi mDozeHost = host; mHandler = handler; mDockManager = dockManager; + mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController; mDefaultDozeBrightness = alwaysOnDisplayPolicy.defaultDozeBrightness; mScreenBrightnessDim = alwaysOnDisplayPolicy.dimBrightness; @@ -148,14 +163,15 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi } } - private void updateBrightnessAndReady(boolean force) { + public void updateBrightnessAndReady(boolean force) { if (force || mRegistered || mDebugBrightnessBucket != -1) { int sensorValue = mDebugBrightnessBucket == -1 ? mLastSensorValue : mDebugBrightnessBucket; int brightness = computeBrightness(sensorValue); boolean brightnessReady = brightness > 0; if (brightnessReady) { - mDozeService.setDozeScreenBrightness(clampToUserSetting(brightness)); + mDozeService.setDozeScreenBrightness( + clampToDimBrightnessForScreenOff(clampToUserSetting(brightness))); } int scrimOpacity = -1; @@ -207,13 +223,21 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi /** * Clamp the brightness to the dim brightness value used by PowerManagerService just before the * device times out and goes to sleep, if we are sleeping from a timeout. This ensures that we - * don't raise the brightness back to the user setting before playing the screen off animation. + * don't raise the brightness back to the user setting before or during the screen off + * animation. */ private int clampToDimBrightnessForScreenOff(int brightness) { - if (mDozeParameters.shouldControlUnlockedScreenOff() + if (mUnlockedScreenOffAnimationController.isScreenOffAnimationPlaying() && mWakefulnessLifecycle.getLastSleepReason() == PowerManager.GO_TO_SLEEP_REASON_TIMEOUT) { - return Math.min(mScreenBrightnessDim, brightness); + return Math.max( + PowerManager.BRIGHTNESS_OFF, + // Use the lower of either the dim brightness, or the current brightness reduced + // by the minimum dim amount. This is the same logic used in + // DisplayPowerController#updatePowerState to apply a minimum dim amount. + Math.min( + brightness - SCREEN_DIM_MINIMUM_REDUCTION_INT, + mScreenBrightnessDim)); } else { return brightness; } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java index 8f1486b0c7cb..038be48b53ee 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java @@ -77,6 +77,7 @@ public class DozeScreenState implements DozeMachine.Part { private final Provider mUdfpsControllerProvider; @Nullable private UdfpsController mUdfpsController; private final DozeLog mDozeLog; + private final DozeScreenBrightness mDozeScreenBrightness; private int mPendingScreenState = Display.STATE_UNKNOWN; private SettableWakeLock mWakeLock; @@ -90,7 +91,8 @@ public class DozeScreenState implements DozeMachine.Part { WakeLock wakeLock, AuthController authController, Provider udfpsControllerProvider, - DozeLog dozeLog) { + DozeLog dozeLog, + DozeScreenBrightness dozeScreenBrightness) { mDozeService = service; mHandler = handler; mParameters = parameters; @@ -99,6 +101,7 @@ public class DozeScreenState implements DozeMachine.Part { mAuthController = authController; mUdfpsControllerProvider = udfpsControllerProvider; mDozeLog = dozeLog; + mDozeScreenBrightness = dozeScreenBrightness; updateUdfpsController(); if (mUdfpsController == null) { @@ -204,6 +207,12 @@ public class DozeScreenState implements DozeMachine.Part { if (screenState != Display.STATE_UNKNOWN) { if (DEBUG) Log.d(TAG, "setDozeScreenState(" + screenState + ")"); mDozeService.setDozeScreenState(screenState); + if (screenState == Display.STATE_DOZE) { + // If we're entering doze, update the doze screen brightness. We might have been + // clamping it to the dim brightness during the screen off animation, and we should + // now change it to the brightness we actually want according to the sensor. + mDozeScreenBrightness.updateBrightnessAndReady(false /* force */); + } mPendingScreenState = Display.STATE_UNKNOWN; mWakeLock.setAcquired(false); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java index e0520b406a0a..1d00531af42c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java @@ -51,6 +51,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.dock.DockManager; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.statusbar.phone.DozeParameters; +import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeThreadFactory; import com.android.systemui.util.sensors.AsyncSensorManager; @@ -86,6 +87,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { DozeParameters mDozeParameters; @Mock DockManager mDockManager; + @Mock + private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); private FakeThreadFactory mFakeThreadFactory = new FakeThreadFactory(mFakeExecutor); @@ -113,7 +116,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mSensor = fakeSensorManager.getFakeLightSensor(); mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, Optional.of(mSensor.getSensor()), mDozeHost, null /* handler */, - mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager); + mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager, + mUnlockedScreenOffAnimationController); } @Test @@ -211,7 +215,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { public void testPulsing_withoutLightSensor_setsAoDDimmingScrimTransparent() throws Exception { mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, Optional.empty() /* sensor */, mDozeHost, null /* handler */, - mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager); + mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager, + mUnlockedScreenOffAnimationController); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE); reset(mDozeHost); @@ -240,7 +245,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { public void testNullSensor() throws Exception { mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, Optional.empty() /* sensor */, mDozeHost, null /* handler */, - mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager); + mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager, + mUnlockedScreenOffAnimationController); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE_AOD); diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java index 150ab7700e4b..3e19cc436dca 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java @@ -82,6 +82,8 @@ public class DozeScreenStateTest extends SysuiTestCase { private UdfpsController mUdfpsController; @Mock private DozeLog mDozeLog; + @Mock + private DozeScreenBrightness mDozeScreenBrightness; @Before public void setUp() throws Exception { @@ -96,7 +98,8 @@ public class DozeScreenStateTest extends SysuiTestCase { mHandlerFake = new FakeHandler(Looper.getMainLooper()); mWakeLock = new WakeLockFake(); mScreen = new DozeScreenState(mServiceFake, mHandlerFake, mDozeHost, mDozeParameters, - mWakeLock, mAuthController, mUdfpsControllerProvider, mDozeLog); + mWakeLock, mAuthController, mUdfpsControllerProvider, mDozeLog, + mDozeScreenBrightness); } @Test -- cgit v1.2.3 From 75e876b5480bb382b222a5d983ddaabf108a2dc6 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Wed, 6 Oct 2021 23:43:46 +0800 Subject: Continue the pausing process after automatically entering pip Or the activity remained in PAUSING state and prevents the activity to stop after screen off until stop timeout. Bug: 202345179 Test: atest PinnedStackTests Change-Id: Ibb8b3c48d483dcb96207ec2395a87b31d8eb107e Merged-In: Ibb8b3c48d483dcb96207ec2395a87b31d8eb107e (cherry picked from commit e84bd0d141b31d9504edf2d73591b2b8266f02e3) (cherry picked from commit 2c2860f0c53da530c3b7e24e94a0836b695f8dbd) --- .../server/wm/ActivityTaskManagerService.java | 12 +++++-- services/core/java/com/android/server/wm/Task.java | 38 ++++++++++++---------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index f3ba56a03aef..08f3b1a8c6e0 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -3387,9 +3387,15 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final List actions = r.pictureInPictureArgs.getActions(); mRootWindowContainer.moveActivityToPinnedRootTask( r, "enterPictureInPictureMode"); - final Task rootTask = r.getRootTask(); - rootTask.setPictureInPictureAspectRatio(aspectRatio); - rootTask.setPictureInPictureActions(actions); + final Task task = r.getTask(); + task.setPictureInPictureAspectRatio(aspectRatio); + task.setPictureInPictureActions(actions); + + // Continue the pausing process after entering pip. + if (task.getPausingActivity() == r) { + task.schedulePauseActivity(r, false /* userLeaving */, + false /* pauseImmediately */, "auto-pip"); + } } }; diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index c3074fab0a1a..c068fd1a5f6e 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -5771,23 +5771,8 @@ class Task extends WindowContainer { + "directly: %s", prev); didAutoPip = mAtmService.enterPictureInPictureMode(prev, prev.pictureInPictureArgs); - mPausingActivity = null; } else { - ProtoLog.v(WM_DEBUG_STATES, "Enqueueing pending pause: %s", prev); - try { - EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev), - prev.shortComponentName, "userLeaving=" + userLeaving, reason); - - mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), - prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, - prev.configChangeFlags, pauseImmediately)); - } catch (Exception e) { - // Ignore exception, if process died other code will cleanup. - Slog.w(TAG, "Exception thrown during pause", e); - mPausingActivity = null; - mLastPausedActivity = null; - mTaskSupervisor.mNoHistoryActivities.remove(prev); - } + schedulePauseActivity(prev, userLeaving, pauseImmediately, reason); } } else { mPausingActivity = null; @@ -5802,7 +5787,7 @@ class Task extends WindowContainer { } // If already entered PIP mode, no need to keep pausing. - if (mPausingActivity != null && !didAutoPip) { + if (mPausingActivity != null) { // Have the window manager pause its key dispatching until the new // activity has started. If we're pausing the activity just because // the screen is being turned off and the UI is sleeping, don't interrupt @@ -5835,6 +5820,25 @@ class Task extends WindowContainer { } } + void schedulePauseActivity(ActivityRecord prev, boolean userLeaving, + boolean pauseImmediately, String reason) { + ProtoLog.v(WM_DEBUG_STATES, "Enqueueing pending pause: %s", prev); + try { + EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev), + prev.shortComponentName, "userLeaving=" + userLeaving, reason); + + mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), + prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, + prev.configChangeFlags, pauseImmediately)); + } catch (Exception e) { + // Ignore exception, if process died other code will cleanup. + Slog.w(TAG, "Exception thrown during pause", e); + mPausingActivity = null; + mLastPausedActivity = null; + mTaskSupervisor.mNoHistoryActivities.remove(prev); + } + } + @VisibleForTesting void completePauseLocked(boolean resumeNext, ActivityRecord resuming) { // Complete the pausing process of a pausing activity, so it doesn't make sense to -- cgit v1.2.3 From 66f93c5c6b5dc888641ec60ad812334a3f814d61 Mon Sep 17 00:00:00 2001 From: Josh Tsuji Date: Wed, 6 Oct 2021 16:37:04 +0000 Subject: [DO NOT MERGE] Fix DozeScreenBrightnessTest. This was broken by ag/15974634, but the presubmits did not catch that for some reason. That CL changed the brightness logic to be <= the dim value, so this failure (and fix) make sense. Test: atest SystemUITests, since apparently treehugger won't do that and will +2 this anyway Fixes: 202212576 Change-Id: Ibe18322fbe1e1fbae86c5274615ad0b6f727c8e2 (cherry picked from commit 20d85a91d4d2ac22760111483b4bdeaecace6c5f) (cherry picked from commit fc534e4f63a4ac9953394cb69d2f8f25ca508464) --- .../src/com/android/systemui/doze/DozeScreenBrightnessTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java index 1d00531af42c..b8d465a8c881 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java @@ -319,13 +319,14 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { when(mWakefulnessLifecycle.getLastSleepReason()).thenReturn( PowerManager.GO_TO_SLEEP_REASON_TIMEOUT); when(mDozeParameters.shouldControlUnlockedScreenOff()).thenReturn(true); + when(mUnlockedScreenOffAnimationController.isScreenOffAnimationPlaying()).thenReturn(true); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE); // If we're dozing after a timeout, and playing the unlocked screen animation, we should - // stay at dim brightness, because the screen dims just before timeout. - assertEquals(mServiceFake.screenBrightness, DIM_BRIGHTNESS); + // stay at or below dim brightness, because the screen dims just before timeout. + assertTrue(mServiceFake.screenBrightness <= DIM_BRIGHTNESS); } @Test @@ -333,6 +334,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { when(mWakefulnessLifecycle.getLastSleepReason()).thenReturn( PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON); when(mDozeParameters.shouldControlUnlockedScreenOff()).thenReturn(true); + when(mUnlockedScreenOffAnimationController.isScreenOffAnimationPlaying()).thenReturn(true); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE); @@ -347,6 +349,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { when(mWakefulnessLifecycle.getLastSleepReason()).thenReturn( PowerManager.GO_TO_SLEEP_REASON_TIMEOUT); when(mDozeParameters.shouldControlUnlockedScreenOff()).thenReturn(false); + when(mUnlockedScreenOffAnimationController.isScreenOffAnimationPlaying()).thenReturn(false); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE); -- cgit v1.2.3 From 8b770aef8d4cee3dc139001d3be28d48fe2e47f0 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Wed, 13 Oct 2021 21:24:50 +0800 Subject: [RESTRICT AUTOMERGE] Add WiFi scan notify message (QS Internet Dialog) Bug: 202323013 Test: add new string only, unnecessary to test. Change-Id: I54bc60793f317390a78ce1e9dc96ee31c861ad63 (cherry picked from commit 6baf1dad31398d150402085809cbe71ab3b0e453) --- packages/SystemUI/res/values/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 7aacb702b75a..4ad4fa9d0854 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -3033,4 +3033,6 @@ See all To switch networks, disconnect ethernet + + To improve device experience, apps and services can still scan for Wi\u2011Fi networks at any time, even when Wi\u2011Fi is off. You can change this in Wi\u2011Fi scanning settings. Change -- cgit v1.2.3 From 148d7fe341bc509eb97af9660d9ee966eb08042c Mon Sep 17 00:00:00 2001 From: Ashwini Oruganti Date: Tue, 12 Oct 2021 15:06:57 -0700 Subject: Update the BroadcastQueue logic for runtime permissions Previously, we were skipping a broadcast when either the permission or the app op was granted. However, for runtime permissions to be considered "granted" both the permission and the app op need to be granted. This change updates taking this into account. Test: manual Bug: 202436287 Bug: 183537857 Change-Id: I9f12f9e17e61246d723d18ead93c6115bbf6d5cf Merged-In: I9f12f9e17e61246d723d18ead93c6115bbf6d5cf (cherry picked from commit 1e6a9681266986e1d8ceba55646199c02223c7b8) (cherry picked from commit 400ff61cff478ad0a2e79509aaa254d2341c5e3f) --- .../java/com/android/server/am/BroadcastQueue.java | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index 503b3a93b31f..94bf62f8b9b7 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -1568,17 +1568,23 @@ public final class BroadcastQueue { perm = PackageManager.PERMISSION_DENIED; } - if (perm == PackageManager.PERMISSION_GRANTED) { - skip = true; - break; - } - int appOp = AppOpsManager.permissionToOpCode(excludedPermission); if (appOp != AppOpsManager.OP_NONE) { - if (mService.getAppOpsManager().checkOpNoThrow(appOp, + // When there is an app op associated with the permission, + // skip when both the permission and the app op are + // granted. + if ((perm == PackageManager.PERMISSION_GRANTED) && ( + mService.getAppOpsManager().checkOpNoThrow(appOp, info.activityInfo.applicationInfo.uid, info.activityInfo.packageName) - == AppOpsManager.MODE_ALLOWED) { + == AppOpsManager.MODE_ALLOWED)) { + skip = true; + break; + } + } else { + // When there is no app op associated with the permission, + // skip when permission is granted. + if (perm == PackageManager.PERMISSION_GRANTED) { skip = true; break; } -- cgit v1.2.3 From 7a42ab512f12d0a9821a4097aeb981faea325a87 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Thu, 14 Oct 2021 02:18:03 +0800 Subject: [RESTRICT AUTOMERGE] Add Wi-Fi Scanning notify to QS Internet Dialog - Show message when Wi-Fi is OFF and Wi-Fi Scanning is ON - Don't show message when device is locked - Show a "Change" link to launch Wi-Fi Scanning Settings Bug: 202323013 Test: manual test to verify on the device. atest -c InternetDialogControllerTest \ InternetDialogTest Change-Id: I5eb4563a69e85050532c8b4fe3748e01cc7d9ca5 (cherry picked from commit 8c0847b0fe8df54c35fe747220d2c76ffe8a59c7) --- .../res/layout/internet_connectivity_dialog.xml | 40 ++++++++++++++++++ .../floatingmenu/AnnotationLinkSpan.java | 10 ++--- .../systemui/qs/tiles/dialog/InternetDialog.java | 26 ++++++++++++ .../qs/tiles/dialog/InternetDialogController.java | 9 +++++ .../qs/tiles/dialog/InternetDialogTest.java | 47 ++++++++++++++++++++++ 5 files changed, 127 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/res/layout/internet_connectivity_dialog.xml b/packages/SystemUI/res/layout/internet_connectivity_dialog.xml index 918635d666fa..c88e95f07f12 100644 --- a/packages/SystemUI/res/layout/internet_connectivity_dialog.xml +++ b/packages/SystemUI/res/layout/internet_connectivity_dialog.xml @@ -323,6 +323,46 @@ + + + + + + + + + + + mClickListener; private AnnotationLinkSpan(View.OnClickListener listener) { @@ -50,7 +50,7 @@ class AnnotationLinkSpan extends ClickableSpan { * @param linkInfos used to attach the click action into the corresponding span * @return the text attached with the span */ - static CharSequence linkify(CharSequence text, LinkInfo... linkInfos) { + public static CharSequence linkify(CharSequence text, LinkInfo... linkInfos) { final SpannableString msg = new SpannableString(text); final Annotation[] spans = msg.getSpans(/* queryStart= */ 0, msg.length(), Annotation.class); @@ -78,12 +78,12 @@ class AnnotationLinkSpan extends ClickableSpan { /** * Data class to store the annotation and the click action. */ - static class LinkInfo { - static final String DEFAULT_ANNOTATION = "link"; + public static class LinkInfo { + public static final String DEFAULT_ANNOTATION = "link"; private final Optional mAnnotation; private final Optional mListener; - LinkInfo(@NonNull String annotation, View.OnClickListener listener) { + public LinkInfo(@NonNull String annotation, View.OnClickListener listener) { mAnnotation = Optional.of(annotation); mListener = Optional.ofNullable(listener); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java index dc54e1b52f2e..dae357e9e36b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java @@ -36,6 +36,7 @@ import android.telephony.TelephonyDisplayInfo; import android.telephony.TelephonyManager; import android.text.Html; import android.text.TextUtils; +import android.text.method.LinkMovementMethod; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; @@ -63,6 +64,7 @@ import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.systemui.Prefs; import com.android.systemui.R; +import com.android.systemui.accessibility.floatingmenu.AnnotationLinkSpan; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.phone.SystemUIDialog; @@ -110,6 +112,8 @@ public class InternetDialog extends SystemUIDialog implements private LinearLayout mTurnWifiOnLayout; private LinearLayout mEthernetLayout; private TextView mWifiToggleTitleText; + private LinearLayout mWifiScanNotifyLayout; + private TextView mWifiScanNotifyText; private LinearLayout mSeeAllLayout; private RecyclerView mWifiRecyclerView; private ImageView mConnectedWifiIcon; @@ -220,6 +224,8 @@ public class InternetDialog extends SystemUIDialog implements mMobileNetworkLayout = mDialogView.requireViewById(R.id.mobile_network_layout); mTurnWifiOnLayout = mDialogView.requireViewById(R.id.turn_on_wifi_layout); mWifiToggleTitleText = mDialogView.requireViewById(R.id.wifi_toggle_title); + mWifiScanNotifyLayout = mDialogView.requireViewById(R.id.wifi_scan_notify_layout); + mWifiScanNotifyText = mDialogView.requireViewById(R.id.wifi_scan_notify_text); mConnectedWifListLayout = mDialogView.requireViewById(R.id.wifi_connected_layout); mConnectedWifiIcon = mDialogView.requireViewById(R.id.wifi_connected_icon); mConnectedWifiTitleText = mDialogView.requireViewById(R.id.wifi_connected_title); @@ -313,8 +319,10 @@ public class InternetDialog extends SystemUIDialog implements showProgressBar(); final boolean isDeviceLocked = mInternetDialogController.isDeviceLocked(); final boolean isWifiEnabled = mWifiManager.isWifiEnabled(); + final boolean isWifiScanEnabled = mWifiManager.isScanAlwaysAvailable(); updateWifiToggle(isWifiEnabled, isDeviceLocked); updateConnectedWifi(isWifiEnabled, isDeviceLocked); + updateWifiScanNotify(isWifiEnabled, isWifiScanEnabled, isDeviceLocked); final int visibility = (isDeviceLocked || !isWifiEnabled || mWifiEntriesCount <= 0) ? View.GONE : View.VISIBLE; @@ -411,6 +419,24 @@ public class InternetDialog extends SystemUIDialog implements mContext.getColor(R.color.connected_network_primary_color)); } + @MainThread + private void updateWifiScanNotify(boolean isWifiEnabled, boolean isWifiScanEnabled, + boolean isDeviceLocked) { + if (isWifiEnabled || !isWifiScanEnabled || isDeviceLocked) { + mWifiScanNotifyLayout.setVisibility(View.GONE); + return; + } + if (TextUtils.isEmpty(mWifiScanNotifyText.getText())) { + final AnnotationLinkSpan.LinkInfo linkInfo = new AnnotationLinkSpan.LinkInfo( + AnnotationLinkSpan.LinkInfo.DEFAULT_ANNOTATION, + v -> mInternetDialogController.launchWifiScanningSetting()); + mWifiScanNotifyText.setText(AnnotationLinkSpan.linkify( + getContext().getText(R.string.wifi_scan_notify_message), linkInfo)); + mWifiScanNotifyText.setMovementMethod(LinkMovementMethod.getInstance()); + } + mWifiScanNotifyLayout.setVisibility(View.VISIBLE); + } + void onClickConnectedWifi() { if (mConnectedWifiEntry == null) { return; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index aaba5efc92f6..276c0be53063 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -103,6 +103,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, private static final String TAG = "InternetDialogController"; private static final String ACTION_NETWORK_PROVIDER_SETTINGS = "android.settings.NETWORK_PROVIDER_SETTINGS"; + private static final String ACTION_WIFI_SCANNING_SETTINGS = + "android.settings.WIFI_SCANNING_SETTINGS"; private static final String EXTRA_CHOSEN_WIFI_ENTRY_KEY = "key_chosen_wifientry_key"; public static final Drawable EMPTY_DRAWABLE = new ColorDrawable(Color.TRANSPARENT); public static final int NO_CELL_DATA_TYPE_ICON = 0; @@ -603,6 +605,13 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, } } + void launchWifiScanningSetting() { + mCallback.dismissDialog(); + final Intent intent = new Intent(ACTION_WIFI_SCANNING_SETTINGS); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mActivityStarter.postStartActivityDismissingKeyguard(intent, 0); + } + void connectCarrierNetwork() { final MergedCarrierEntry mergedCarrierEntry = mAccessPointController.getMergedCarrierEntry(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java index c42b64a09985..7cea430e146f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java @@ -19,6 +19,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.View; import android.widget.LinearLayout; +import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; import androidx.test.filters.SmallTest; @@ -73,6 +74,7 @@ public class InternetDialogTest extends SysuiTestCase { private LinearLayout mConnectedWifi; private RecyclerView mWifiList; private LinearLayout mSeeAll; + private LinearLayout mWifiScanNotify; @Before public void setUp() { @@ -104,6 +106,7 @@ public class InternetDialogTest extends SysuiTestCase { mConnectedWifi = mDialogView.requireViewById(R.id.wifi_connected_layout); mWifiList = mDialogView.requireViewById(R.id.wifi_list_layout); mSeeAll = mDialogView.requireViewById(R.id.see_all_layout); + mWifiScanNotify = mDialogView.requireViewById(R.id.wifi_scan_notify_layout); } @After @@ -263,6 +266,50 @@ public class InternetDialogTest extends SysuiTestCase { assertThat(mSeeAll.getVisibility()).isEqualTo(View.GONE); } + @Test + public void updateDialog_wifiOn_hideWifiScanNotify() { + // The preconditions WiFi ON and Internet WiFi are already in setUp() + + mInternetDialog.updateDialog(); + + assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE); + } + + @Test + public void updateDialog_wifiOffAndWifiScanOff_hideWifiScanNotify() { + when(mWifiManager.isWifiEnabled()).thenReturn(false); + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false); + + mInternetDialog.updateDialog(); + + assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE); + } + + @Test + public void updateDialog_wifiOffAndWifiScanOnAndDeviceLocked_hideWifiScanNotify() { + when(mWifiManager.isWifiEnabled()).thenReturn(false); + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + when(mInternetDialogController.isDeviceLocked()).thenReturn(true); + + mInternetDialog.updateDialog(); + + assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE); + } + + @Test + public void updateDialog_wifiOffAndWifiScanOnAndDeviceUnlocked_showWifiScanNotify() { + when(mWifiManager.isWifiEnabled()).thenReturn(false); + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + when(mInternetDialogController.isDeviceLocked()).thenReturn(false); + + mInternetDialog.updateDialog(); + + assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.VISIBLE); + TextView wifiScanNotifyText = mDialogView.requireViewById(R.id.wifi_scan_notify_text); + assertThat(wifiScanNotifyText.getText().length()).isNotEqualTo(0); + assertThat(wifiScanNotifyText.getMovementMethod()).isNotNull(); + } + @Test public void onClickSeeMoreButton_clickSeeAll_verifyLaunchNetworkSetting() { mSeeAll.performClick(); -- cgit v1.2.3 From 43d9106a2c916ce8587b3b3b5006d3762511bf2d Mon Sep 17 00:00:00 2001 From: Tyler Gunn Date: Wed, 27 Oct 2021 14:24:49 -0700 Subject: Add config to detect e-call call based on dialed sim emerg # list. We normally use the combined emergency number list from the emergency number lists of both sims when placing emergency calls, with the provision that the routing may be unspecified if a dialed number is an emergency number on one sim but not the other. This config allows a carrier to mandate that calls are only treated as an emergency call on their network based on their own emergency number list. Test: TBD Bug: 203947159 Change-Id: Id5cd4123f1bb7bdd85e564fc6997dfbc50652a5f (cherry picked from commit 11dd6452d6621328b0bd430eeebacb55fd478cf3) --- .../java/android/telephony/CarrierConfigManager.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 68ef7543c33f..45fd7a3467c4 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -962,6 +962,21 @@ public class CarrierConfigManager { public static final String KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL = "carrier_use_ims_first_for_emergency_bool"; + /** + * When {@code true}, the determination of whether to place a call as an emergency call will be + * based on the known {@link android.telephony.emergency.EmergencyNumber}s for the SIM on which + * the call is being placed. In a dual SIM scenario, if Sim A has the emergency numbers + * 123, 456 and Sim B has the emergency numbers 789, and the user places a call on SIM A to 789, + * it will not be treated as an emergency call in this case. + * When {@code false}, the determination is based on the emergency numbers from all device SIMs, + * regardless of which SIM the call is being placed on. If Sim A has the emergency numbers + * 123, 456 and Sim B has the emergency numbers 789, and the user places a call on SIM A to 789, + * the call will be dialed as an emergency number, but with an unspecified routing. + * @hide + */ + public static final String KEY_USE_ONLY_DIALED_SIM_ECC_LIST_BOOL = + "use_only_dialed_sim_ecc_list_bool"; + /** * When IMS instant lettering is available for a carrier (see * {@link #KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL}), determines the list of characters @@ -5230,6 +5245,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_CARRIER_IMS_GBA_REQUIRED_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL, true); + sDefaults.putBoolean(KEY_USE_ONLY_DIALED_SIM_ECC_LIST_BOOL, false); sDefaults.putString(KEY_CARRIER_NETWORK_SERVICE_WWAN_PACKAGE_OVERRIDE_STRING, ""); sDefaults.putString(KEY_CARRIER_NETWORK_SERVICE_WLAN_PACKAGE_OVERRIDE_STRING, ""); sDefaults.putString(KEY_CARRIER_QUALIFIED_NETWORKS_SERVICE_PACKAGE_OVERRIDE_STRING, ""); -- cgit v1.2.3 From 6fcb6f1bfa5d8632de5c0b955ae5957a2876abb7 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Fri, 15 Oct 2021 17:19:19 +0000 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I906d64bc6ec9001b40af4cf4d90c9f4ca45aca89 (cherry picked from commit 7e142ec17bd1f4ea4423bcb4a4850434b783188c) Merged-In:I906d64bc6ec9001b40af4cf4d90c9f4ca45aca89 --- packages/SystemUI/res/values-af/strings.xml | 1 + packages/SystemUI/res/values-am/strings.xml | 1 + packages/SystemUI/res/values-ar/strings.xml | 2 ++ packages/SystemUI/res/values-as/strings.xml | 1 + packages/SystemUI/res/values-az/strings.xml | 2 ++ packages/SystemUI/res/values-b+sr+Latn/strings.xml | 1 + packages/SystemUI/res/values-be/strings.xml | 1 + packages/SystemUI/res/values-bg/strings.xml | 1 + packages/SystemUI/res/values-bn/strings.xml | 2 ++ packages/SystemUI/res/values-bs/strings.xml | 1 + packages/SystemUI/res/values-ca/strings.xml | 1 + packages/SystemUI/res/values-cs/strings.xml | 3 ++- packages/SystemUI/res/values-da/strings.xml | 1 + packages/SystemUI/res/values-de/strings.xml | 1 + packages/SystemUI/res/values-el/strings.xml | 2 ++ packages/SystemUI/res/values-en-rAU/strings.xml | 1 + packages/SystemUI/res/values-en-rCA/strings.xml | 1 + packages/SystemUI/res/values-en-rGB/strings.xml | 1 + packages/SystemUI/res/values-en-rIN/strings.xml | 1 + packages/SystemUI/res/values-en-rXC/strings.xml | 1 + packages/SystemUI/res/values-es-rUS/strings.xml | 2 ++ packages/SystemUI/res/values-es/strings.xml | 5 +++-- packages/SystemUI/res/values-et/strings.xml | 1 + packages/SystemUI/res/values-eu/strings.xml | 1 + packages/SystemUI/res/values-fa/strings.xml | 2 ++ packages/SystemUI/res/values-fi/strings.xml | 2 ++ packages/SystemUI/res/values-fr-rCA/strings.xml | 2 ++ packages/SystemUI/res/values-fr/strings.xml | 3 ++- packages/SystemUI/res/values-gl/strings.xml | 2 ++ packages/SystemUI/res/values-gu/strings.xml | 1 + packages/SystemUI/res/values-hi/strings.xml | 1 + packages/SystemUI/res/values-hr/strings.xml | 2 ++ packages/SystemUI/res/values-hu/strings.xml | 1 + packages/SystemUI/res/values-hy/strings.xml | 1 + packages/SystemUI/res/values-in/strings.xml | 1 + packages/SystemUI/res/values-is/strings.xml | 1 + packages/SystemUI/res/values-it/strings.xml | 1 + packages/SystemUI/res/values-iw/strings.xml | 2 ++ packages/SystemUI/res/values-ja/strings.xml | 2 ++ packages/SystemUI/res/values-ka/strings.xml | 1 + packages/SystemUI/res/values-kk/strings.xml | 2 ++ packages/SystemUI/res/values-km/strings.xml | 1 + packages/SystemUI/res/values-kn/strings.xml | 1 + packages/SystemUI/res/values-ko/strings.xml | 1 + packages/SystemUI/res/values-ky/strings.xml | 1 + packages/SystemUI/res/values-lo/strings.xml | 1 + packages/SystemUI/res/values-lt/strings.xml | 1 + packages/SystemUI/res/values-lv/strings.xml | 1 + packages/SystemUI/res/values-mk/strings.xml | 1 + packages/SystemUI/res/values-ml/strings.xml | 1 + packages/SystemUI/res/values-mn/strings.xml | 1 + packages/SystemUI/res/values-mr/strings.xml | 1 + packages/SystemUI/res/values-ms/strings.xml | 1 + packages/SystemUI/res/values-my/strings.xml | 1 + packages/SystemUI/res/values-nb/strings.xml | 1 + packages/SystemUI/res/values-ne/strings.xml | 1 + packages/SystemUI/res/values-nl/strings.xml | 1 + packages/SystemUI/res/values-or/strings.xml | 1 + packages/SystemUI/res/values-pa/strings.xml | 1 + packages/SystemUI/res/values-pl/strings.xml | 1 + packages/SystemUI/res/values-pt-rBR/strings.xml | 1 + packages/SystemUI/res/values-pt-rPT/strings.xml | 1 + packages/SystemUI/res/values-pt/strings.xml | 1 + packages/SystemUI/res/values-ro/strings.xml | 1 + packages/SystemUI/res/values-ru/strings.xml | 1 + packages/SystemUI/res/values-si/strings.xml | 2 ++ packages/SystemUI/res/values-sk/strings.xml | 1 + packages/SystemUI/res/values-sl/strings.xml | 2 ++ packages/SystemUI/res/values-sq/strings.xml | 1 + packages/SystemUI/res/values-sr/strings.xml | 1 + packages/SystemUI/res/values-sv/strings.xml | 2 ++ packages/SystemUI/res/values-sw/strings.xml | 1 + packages/SystemUI/res/values-ta/strings.xml | 1 + packages/SystemUI/res/values-te/strings.xml | 1 + packages/SystemUI/res/values-th/strings.xml | 1 + packages/SystemUI/res/values-tl/strings.xml | 1 + packages/SystemUI/res/values-tr/strings.xml | 2 ++ packages/SystemUI/res/values-uk/strings.xml | 2 ++ packages/SystemUI/res/values-ur/strings.xml | 1 + packages/SystemUI/res/values-uz/strings.xml | 2 ++ packages/SystemUI/res/values-vi/strings.xml | 1 + packages/SystemUI/res/values-zh-rCN/strings.xml | 1 + packages/SystemUI/res/values-zh-rHK/strings.xml | 1 + packages/SystemUI/res/values-zh-rTW/strings.xml | 1 + packages/SystemUI/res/values-zu/strings.xml | 2 ++ 85 files changed, 109 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index b3920768d29d..3e35addcb236 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -1179,4 +1179,5 @@ "Wi-fi sal vir nou nie outomaties koppel nie" "Sien alles" "Ontkoppel Ethernet om netwerke te wissel" + "Om toestelervaring te verbeter, kan programme en dienste steeds enige tyd na wi‑fi-netwerke soek, selfs wanneer wi‑fi af is. Jy kan dit in Wi-fi-opsporing-instellings verander. ""Verander" diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 41a92bed6375..7ccaefed97f0 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -1179,4 +1179,5 @@ "Wifi ለአሁን በራስ-ሰር አይገናኝም" "ሁሉንም ይመልከቱ" "አውታረ መረቦችን ለመቀየር፣ የኢተርኔት ግንኙነት ያቋርጡ" + "የመሣሪያ ተሞክሮን ለማሻሻል፣ መተግበሪያዎች እና አገልግሎቶች አሁንም በማንኛውም ጊዜ የWi-Fi አውታረ መረቦችን መቃኘት ይችላሉ፣ Wi-Fi ጠፍቶ ቢሆንም እንኳ። ይህንን በ Wi‑Fi ቅኝት ቅንብሮች ውስጥ መቀየር ይችላሉ። ""ቀይር" diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 5e73edf5b08d..cab5a1c2b326 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -1203,4 +1203,6 @@ "‏لن يتم الاتصال بشبكة Wi-Fi تلقائيًا في الوقت الحالي." "عرض الكل" "للتبديل بين الشبكات، يجب فصل إيثرنت." + + diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 32e4b0cff18d..7cd417f2a5cf 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -1179,4 +1179,5 @@ "এতিয়া ৱাই-ফাই স্বয়ংক্ৰিয়ভাৱে সংযুক্ত নহ’ব" "আটাইবোৰ চাওক" "নেটৱৰ্ক সলনি কৰিবলৈ ইথাৰনেটৰ পৰা সংযোগ বিচ্ছিন্ন কৰক" + "ডিভাইচ ব্যৱহাৰৰ অভিজ্ঞতা উন্নত কৰিবলৈ ৱাই-ফাই অফ থকা অৱস্থাতো এপ্ আৰু সেৱাসমূহে ৱাই-ফাই নেটৱৰ্কবোৰ স্কেন কৰিব পাৰে। আপুনি ৱাই-ফাই স্কেনিঙৰ ছেটিঙত এইটো সলনি কৰিব পাৰে। ""সলনি কৰক" diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 53d09c212ec8..ed8013be7760 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -1179,4 +1179,6 @@ "Wi-Fi hələlik avtomatik qoşulmayacaq" "Hamısına baxın" "Şəbəkəni dəyişmək üçün etherneti ayırın" + + diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index f8b865c6673e..7a520473e022 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -1185,4 +1185,5 @@ "WiFi trenutno ne može da se automatski poveže" "Pogledajte sve" "Da biste promenili mrežu, prekinite eternet vezu" + "Radi boljeg doživljaja uređaja, aplikacije i usluge i dalje mogu da traže WiFi mreže u bilo kom trenutku, čak i kada je WiFi isključen. To možete da promenite u podešavanjima WiFi skeniranja. ""Promenite" diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index c3d40a2f5a98..8aa994f610d0 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -1191,4 +1191,5 @@ "Аўтаматычнае падключэнне да Wi-Fi адсутнічае" "Паказаць усе" "Каб падключыцца да сетак, выключыце Ethernet" + "Каб палепшыць працу прылады, вы можаце дазволіць праграмам і сэрвісам шукаць сеткі Wi-Fi, нават калі Wi‑Fi выключаны. Змяніць гэты рэжым можна ў наладах пошуку сетак Wi-Fi. ""Змяніць" diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 291cb1135c6d..e9c222ca1cc1 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -1179,4 +1179,5 @@ "Засега Wi-Fi няма да се свързва автоматично" "Вижте всички" "За да превключите мрежите, прекъснете връзката с Ethernet" + "С цел подобряване на практическата работа с устройството приложенията и услугите пак могат да сканират за Wi‑Fi мрежи по всяко време дори когато функцията за Wi‑Fi e изключена. Можете да промените съответното поведение от настройките за сканиране за Wi‑Fi. ""Промяна" diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 97322b5d2905..5ecf485046eb 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -1179,4 +1179,6 @@ "এখন ওয়াই-ফাই নিজে থেকে কানেক্ট হবে না" "সবকটি দেখুন" "নেটওয়ার্ক বদলাতে ইথারনেট ডিসকানেক্ট করুন" + + diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index fb1be3c48000..fdb862a980fc 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -1185,4 +1185,5 @@ "WiFi se trenutno ne može automatski povezati" "Prikaži sve" "Da promijenite mrežu, isključite ethernet" + "Radi poboljšanja iskustva s uređajem aplikacije i usluge i dalje mogu bilo kada skenirati WiFi mreže, čak i kada je WiFi isključen. Ovo možete promijeniti u Postavkama skeniranja WiFi mreže. ""Promijeni" diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 948d35913355..72964cb134d1 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -1179,4 +1179,5 @@ "Per ara la Wi‑Fi no es connectarà automàticament" "Mostra-ho tot" "Per canviar de xarxa, desconnecta la connexió Ethernet" + "Per millorar l\'experiència del dispositiu, les aplicacions i els serveis poden cercar xarxes Wi‑Fi en qualsevol moment, fins i tot quan la Wi‑Fi estigui desactivada. Pots canviar aquesta opció a la configuració de cerca de xarxes Wi‑Fi. ""Canvia-la""." diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 0a47f929d5b1..23fc8a52184e 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -717,7 +717,7 @@ "Zapnuto" "Vypnuto" "Zapnuto – podle obličeje" - "Rozšířené ovládací prvky oznámení umožňují nastavit úroveň důležitosti oznámení aplikace od 0 do 5. \n\n""Úroveň 5"" \n– Zobrazit na začátku seznamu oznámení \n– Povolit vyrušení na celou obrazovku \n– Vždy zobrazit náhled \n\n""Úroveň 4"" \n– Zabránit vyrušení na celou obrazovku \n– Vždy zobrazit náhled \n\n""Úroveň 3"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n\n""Úroveň 2"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n– Nikdy nevydávat žádný zvukový signál ani nevibrovat \n\n""Úroveň 1"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n– Nikdy nevydávat zvukový signál ani nevibrovat \n– Skrýt z obrazovky uzamčení a stavového řádku \n– Zobrazovat na konci seznamu oznámení \n\n"";Úroveň 0"" \n– Blokovat všechna oznámení z aplikace" + "Rozšířené ovládací prvky oznámení umožňují nastavit úroveň důležitosti oznámení aplikace od 0 do 5. \n\n""Úroveň 5"" \n– Zobrazit na začátku seznamu oznámení \n– Povolit vyrušení na celou obrazovku \n– Vždy zobrazit náhled \n\n""Úroveň 4"" \n– Zabránit vyrušení na celou obrazovku \n– Vždy zobrazit náhled \n\n""Úroveň 3"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n\n""Úroveň 2"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n– Nikdy nevydávat žádný zvukový signál ani nevibrovat \n\n""Úroveň 1"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n– Nikdy nevydávat zvukový signál ani nevibrovat \n– Skrýt na obrazovce uzamčení a stavového řádku \n– Zobrazovat na konci seznamu oznámení \n\n"";Úroveň 0"" \n– Blokovat všechna oznámení z aplikace" "Oznámení" "Tato oznámení již nebudete dostávat" "Tato oznámení budou minimalizována" @@ -1191,4 +1191,5 @@ "Wi-Fi se prozatím nebude připojovat automaticky" "Zobrazit vše" "Pokud chcete přepnout sítě, odpojte ethernet" + "Za účelem lepšího fungování zařízení mohou aplikace a služby vyhledávat sítě Wi-Fi, i když je připojení Wi-Fi vypnuté. Toto chování můžete změnit v nastavení vyhledávání Wi-Fi. ""Změnit" diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index aa5971f3b5bb..85d976fad13a 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -1179,4 +1179,5 @@ "Ingen automatisk forbindelse til Wi-Fi i øjeblikket" "Se alle" "Afbryd ethernetforbindelsen for at skifte netværk" + "For at forbedre brugeroplevelsen på enheden kan apps og tjenester stadig til enhver tid scanne efter Wi‑Fi-netværk, også selvom Wi‑Fi er deaktiveret. Du kan ændre dette i indstillingerne for Wi-Fi-scanning. ""Skift indstilling" diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 6b4051a18cde..e929104cc3e6 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -1179,4 +1179,5 @@ "Zurzeit wird keine automatische WLAN-Verbindung hergestellt" "Alle ansehen" "Trenne das Ethernetkabel, um das Netzwerk zu wechseln" + "Zur Verbesserung der Gerätenutzung können Apps und Dienste weiter nach WLANs suchen, auch wenn die WLAN-Funktion deaktiviert ist. Dies lässt sich in den Einstellungen für die WLAN-Suche ändern. ""Ändern" diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 38571ea847d3..ae5ffc08a76d 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -1179,4 +1179,6 @@ "Δεν θα γίνεται προς το παρόν αυτόματη σύνδεση Wi-Fi." "Εμφάνιση όλων" "Για εναλλαγή δικτύων, αποσυνδέστε το ethernet" + + diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index c4a9768ef18a..96b50bd08e74 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -1179,4 +1179,5 @@ "Wi‑Fi won’t auto-connect for now" "See all" "To switch networks, disconnect Ethernet" + "To improve device experience, apps and services can still scan for Wi‑Fi networks at any time, even when Wi‑Fi is off. You can change this in Wi‑Fi scanning settings. ""Change" diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 8ee437fe824e..5361b9fd4082 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -1179,4 +1179,5 @@ "Wi‑Fi won’t auto-connect for now" "See all" "To switch networks, disconnect Ethernet" + "To improve device experience, apps and services can still scan for Wi‑Fi networks at any time, even when Wi‑Fi is off. You can change this in Wi‑Fi scanning settings. ""Change" diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index c4a9768ef18a..96b50bd08e74 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -1179,4 +1179,5 @@ "Wi‑Fi won’t auto-connect for now" "See all" "To switch networks, disconnect Ethernet" + "To improve device experience, apps and services can still scan for Wi‑Fi networks at any time, even when Wi‑Fi is off. You can change this in Wi‑Fi scanning settings. ""Change" diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index c4a9768ef18a..96b50bd08e74 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -1179,4 +1179,5 @@ "Wi‑Fi won’t auto-connect for now" "See all" "To switch networks, disconnect Ethernet" + "To improve device experience, apps and services can still scan for Wi‑Fi networks at any time, even when Wi‑Fi is off. You can change this in Wi‑Fi scanning settings. ""Change" diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 081940ed04ca..78d60f605934 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -1179,4 +1179,5 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎Wi‑Fi won’t auto-connect for now‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎See all‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎To switch networks, disconnect ethernet‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‎To improve device experience, apps and services can still scan for Wi‑Fi networks at any time, even when Wi‑Fi is off. You can change this in Wi‑Fi scanning settings. ‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎Change‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎‎‏‎‎‏‎" diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index a5e292f140de..bbcd2a70fd4c 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -1179,4 +1179,6 @@ "Por ahora, el Wi-Fi no se conectará automáticamente" "Ver todo" "Para cambiar de red, desconéctate de Ethernet" + + diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index b7f23d6d6e6a..30a6d09ea4d3 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -663,8 +663,8 @@ "Barra de estado" "Aplicaciones recientes" "Modo de demostración de UI del sistema" - "Habilitar modo de demostración" - "Mostrar modo de demostración" + "Habilitar modo demo" + "Mostrar modo demo" "Ethernet" "Alarma" "Wallet" @@ -1179,4 +1179,5 @@ "Por ahora no se conectará automáticamente a redes Wi-Fi" "Ver todo" "Para cambiar de red, desconecta el cable Ethernet" + "Para mejorar la experiencia con el dispositivo, las aplicaciones y los servicios podrán buscar redes Wi-Fi en cualquier momento, aunque la conexión Wi-Fi esté desactivada. Puedes cambiarlo en los ajustes de búsqueda de redes Wi-Fi. ""Cambiar" diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index eae6f460dc4f..fb2aa1ff5905 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -1179,4 +1179,5 @@ "WiFi-ühendust ei looda praegu automaatselt" "Kuva kõik" "Võrkude vahetamiseks katkestage Etherneti-ühendus" + "Seadme kasutuskogemuse parandamiseks võivad rakendused ja teenused siiski alati otsida WiFi-võrke isegi siis, kui WiFi on väljas. Seda saab muuta WiFi-skannimise seadetes. ""Muuda" diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index a418ba9b2a63..27418388ae8b 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -1179,4 +1179,5 @@ "Oraingoz ez da automatikoki konektatuko wifira" "Ikusi guztiak" "Sarea aldatzeko, deskonektatu Ethernet-a" + "Gailuaren funtzionamendua hobetzeko, aplikazioek eta zerbitzuek wifi-sareak bilatzen jarraituko dute, baita wifi-konexioa desaktibatuta dagoenean ere. Aukera hori aldatzeko, joan wifi-sareen bilaketaren ezarpenetara. ""Aldatu" diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index a4c456bc73f0..d70f4c642cdc 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -1179,4 +1179,6 @@ "‏فعلاً Wi-Fi به‌طور خودکار متصل نمی‌شود" "مشاهده همه" "برای تغییر شبکه، اترنت را قطع کنید" + + diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 1601fbbcfb80..8a2c75aaa882 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -1179,4 +1179,6 @@ "Wi-Fi ei toistaiseksi yhdistä automaattisesti" "Näytä kaikki" "Irrota Ethernet-johto, jos haluat vaihtaa verkkoa" + + diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 7b4496fe97c9..f845d5627003 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -1179,4 +1179,6 @@ "Connexion automatique au Wi-Fi impossible pour le moment" "Tout afficher" "Pour changer de réseau, débranchez le câble Ethernet" + + diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 2a75e27404c3..ce6cd9591e93 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -896,7 +896,7 @@ "Icône droite" "Faites glisser les blocs pour les ajouter" "Faites glisser les blocs pour les réorganiser" - "Faites glisser les icônes ici pour les supprimer." + "Faites glisser les blocs ici pour les supprimer" "Au minimum %1$d tuiles sont nécessaires" "Modifier" "Heure" @@ -1179,4 +1179,5 @@ "Connexion automatique au Wi-Fi désactivée pour le moment" "Tout afficher" "Pour changer de réseau, déconnectez l\'Ethernet" + "Pour améliorer l\'expérience sur l\'appareil, les applis et les services peuvent continuer de rechercher les réseaux Wi-Fi, même si le Wi-Fi est désactivé. Vous pouvez modifier cela dans les paramètres de recherche Wi-Fi. ""Modifier" diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 89292239a652..16b7c0eab064 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -1179,4 +1179,6 @@ "De momento, a wifi non se conectará automaticamente" "Ver todo" "Para cambiar de rede, desconecta a Ethernet" + + diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 170de0e9afa1..79bb64f0599b 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -1179,4 +1179,5 @@ "હમણાં પૂરતું વાઇ-ફાઇ ઑટોમૅટિક રીતે કનેક્ટ થશે નહીં" "બધા જુઓ" "બીજા નેટવર્ક પર જવા માટે, ઇથરનેટ ડિસ્કનેક્ટ કરો" + "ડિવાઇસના અનુભવને બહેતર બનાવવા માટે, વાઇ-ફાઇ બંધ હોય ત્યારે પણ ઍપ અને સેવાઓ કોઈપણ સમયે વાઇ-ફાઇ નેટવર્ક સ્કૅન કરી શકે છે. તમે વાઇ-ફાઇ સ્કૅનિંગના સેટિંગમાં જઈને આને બદલી શકો છો. ""બદલો" diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index e763a189a3c4..429bbccaf797 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -1179,4 +1179,5 @@ "फ़िलहाल, वाई-फ़ाई अपने-आप कनेक्ट नहीं होगा" "सभी देखें" "नेटवर्क बदलने के लिए, पहले ईथरनेट को डिसकनेक्ट करें" + "डिवाइस इस्तेमाल करने के अनुभव काे बेहतर बनाने के लिए, ऐप्लिकेशन और सेवाओं की मदद से, किसी भी समय वाई-फ़ाई नेटवर्क स्कैन किए जा सकते हैं. ऐसा वाई-फ़ाई बंद होने पर भी किया जा सकता है. वाई-फ़ाई स्कैनिंग की सेटिंग में जाकर, इसे बदला जा सकता है. ""बदलें" diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index f0cd3624466c..b1fba3c888b8 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -1185,4 +1185,6 @@ "Wi-Fi se zasad neće automatski povezivati" "Prikaži sve" "Da biste se prebacili na drugu mrežu, odspojite Ethernet" + + diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index a1e7617376d0..26c34f80117f 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -1179,4 +1179,5 @@ "A Wi-Fi-re történő csatlakozás jelenleg nem automatikus" "Megtekintés" "Hálózatváltáshoz válassza le az ethernetet" + "Az eszközhasználati élmény javítása érdekében az alkalmazások és a szolgáltatások továbbra is bármikor kereshetnek Wi-Fi-hálózatokat, még akkor is, ha a Wi-Fi ki van kapcsolva. A funkciót a „Wi-Fi scanning settings” (Wi-Fi-keresési beállítások) részben módosíthatja. ""Módosítás" diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index c630306531cd..133587000926 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi-ն ավտոմատ չի միանա" "Տեսնել բոլորը" "Մի ցանցից մյուսին անցնելու համար անջատեք Ethernet-ը" + "Սարքի աշխատանքը բարելավելու համար հավելվածներն ու ծառայությունները կորոնեն Wi‑Fi ցանցեր, նույնիսկ երբ Wi‑Fi-ն անջատված է։ Այս պարամետրը կարող եք փոխել Wi‑Fi ցանցերի որոնման կարգավորումներում։ ""Փոխել" diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index f62b64ecb6f8..83b6371f4505 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi tidak akan otomatis terhubung untuk saat ini" "Lihat semua" "Untuk beralih jaringan, lepaskan kabel ethernet" + "Agar pengalaman perangkat menjadi lebih baik, aplikasi dan layanan tetap dapat memindai jaringan Wi-Fi kapan saja, bahkan saat Wi-Fi nonaktif. Anda dapat mengubahnya di setelan pemindaian Wi-Fi. ""Ubah" diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 4ed68b45e490..af97d98d9f14 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi tengist ekki sjálfkrafa eins og er" "Sjá allt" "Aftengdu ethernet til að skipta um net" + "Til að bæta tækjaupplifun geta forrit og þjónustur áfram leitað að WiFi-netum hvenær sem er, jafnvel þótt slökkt sé á WiFi. Hægt er að breyta þessu í stillingum WiFi-leitar. ""Breyta" diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index dc5c94bf4cc3..1ea1097dfc79 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -1179,4 +1179,5 @@ "Connessione automatica rete Wi-Fi non attiva al momento" "Mostra tutte" "Per cambiare rete, scollega il cavo Ethernet" + "Per migliorare l\'esperienza con il dispositivo, le app e i servizi possono continuare a cercare reti Wi-Fi in qualsiasi momento, anche quando la connessione Wi-Fi non è attiva. Puoi modificare questa preferenza nelle impostazioni relative alla ricerca di reti Wi-Fi. ""Cambia" diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index fe9fcc057358..a2bcd9af33a8 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -1191,4 +1191,6 @@ "‏ה-Wi-Fi לא יתחבר באופן אוטומטי בינתיים" "הצגת הכול" "כדי לעבור בין רשתות, צריך לנתק את האתרנט" + + diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index c14ae83413cf..e35aa8d0a26f 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -1179,4 +1179,6 @@ "Wi-Fi に自動接続しません" "すべて表示" "ネットワークを変更するにはイーサネット接続を解除してください" + + diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index c19fef51d60d..19dee6855adc 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi ინტერნეტს დროებით ავტომატურად არ დაუკავშირდება" "ყველას ნახვა" "ქსელების გადასართავად, გაწყვიტეთ Ethernet-თან კავშირი" + "მოწყობილობისგან მიღებული გამოცდილების გასაუმჯობესებლად, აპებსა და სერვისებს მაინც შეუძლია სკანირება Wi‑Fi ქსელების აღმოსაჩენად, ნებისმიერ დროს, მაშინაც კი, როცა Wi‑Fi გამორთულია. ამის შეცვლა Wi-Fi სკანირების პარამეტრებში შეგიძლიათ. ""შეცვლა" diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 7e99094baa1e..d4a7ed036e3a 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -1179,4 +1179,6 @@ "Әзірше Wi-Fi автоматты түрде қосылмайды." "Барлығын көру" "Желілерді ауыстыру үшін ethernet кабелін ажыратыңыз." + + diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index c22c2c75bd36..7aee43f0018a 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi នឹងមិន​ភ្ជាប់ដោយស្វ័យ​ប្រវត្តិក្នុងពេលនេះទេ" "មើលទាំងអស់" "ដើម្បី​ប្ដូរ​បណ្ដាញ សូមផ្ដាច់​អ៊ីសឺរណិត" + "ដើម្បីធ្វើឱ្យ​បទពិសោធន៍ប្រើប្រាស់​ឧបករណ៍ប្រសើរឡើង កម្មវិធី និងសេវាកម្ម​នៅតែអាចស្កេនរក​បណ្ដាញ Wi‑Fi បានគ្រប់ពេល ទោះបីជា​នៅពេលដែលបិទ Wi‑Fi ក៏ដោយ។ អ្នកអាចប្ដូរវាបាន​នៅក្នុង​ការកំណត់​ការស្កេន Wi‑Fi។ ""ប្ដូរ" diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 88de12924b84..8aa8febf4690 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -1179,4 +1179,5 @@ "ಸದ್ಯದ ಮಟ್ಟಿಗೆ ವೈ-ಫೈ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕನೆಕ್ಟ್ ಆಗುವುದಿಲ್ಲ" "ಎಲ್ಲವನ್ನೂ ನೋಡಿ" "ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಬದಲಿಸಲು, ಇಥರ್ನೆಟ್ ಅನ್ನು ಡಿಸ್‌ಕನೆಕ್ಟ್ ಮಾಡಿ" + "ವೈ-ಫೈ ಆಫ್ ಇದ್ದಾಗಲೂ ಸಹ, ಸಾಧನದ ಅನುಭವವನ್ನು ಸುಧಾರಿಸಲು, ಆ್ಯಪ್‌ಗಳು ಮತ್ತು ಸೇವೆಗಳು ಯಾವಾಗ ಬೇಕಾದರೂ ಸಹ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗಾಗಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಬಹುದು. ನೀವು ಇದನ್ನು ವೈ-ಫೈ ಸ್ಕ್ಯಾನಿಂಗ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು. ""ಬದಲಿಸಿ" diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index d51b5aff4a78..0346c45af6ea 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -1179,4 +1179,5 @@ "지금은 Wi-Fi가 자동으로 연결되지 않습니다." "모두 보기" "네트워크를 전환하려면 이더넷을 연결 해제하세요." + "기기 환경을 개선하기 위해 Wi‑Fi가 꺼져 있을 때도 앱과 서비스에서 Wi‑Fi 네트워크를 검색할 수 있습니다. 이 설정은 Wi‑Fi 검색 설정에서 변경할 수 있습니다. ""변경" diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 6f89a79adbcf..c86f2f93da52 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi азырынча автоматтык түрдө туташпайт" "Баарын көрүү" "Башка тармактарга которулуу үчүн Ethernet кабелин ажыратыңыз" + "Түзмөктүн колдонулушун жакшыртуу үчүн колдонмолор менен кызматтар Wi‑Fi өчүп турса да зымсыз тармактарды издей беришет. Аны Wi-Fi тармактарын издөө жөндөөлөрүнөн өзгөртө аласыз. ""Өзгөртүү" diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index b9f0da9eeb5a..969818e28d26 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi ຈະບໍ່ເຊື່ອມຕໍ່ອັດຕະໂນມັດສຳລັບຕອນນີ້" "ເບິ່ງທັງໝົດ" "ເພື່ອສະຫຼັບເຄືອຂ່າຍ, ໃຫ້ຕັດການເຊື່ອມຕໍ່ອີເທີເນັດກ່ອນ" + "ເພື່ອປັບປຸງປະສົບການອຸປະກອນ, ແອັບ ແລະ ບໍລິການຍັງຄົງສາມາດສະແກນຫາເຄືອຂ່າຍ Wi‑Fi ຕອນໃດກໍໄດ້, ເຖິງແມ່ນວ່າຈະປິດ Wi‑Fi ໄວ້ກໍຕາມ. ທ່ານສາມາດປ່ຽນສິ່ງນີ້ໄດ້ໃນການຕັ້ງຄ່າການສະແກນ Wi‑Fi. ""ປ່ຽນ" diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 1e503cd0521c..be976160951f 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -1191,4 +1191,5 @@ "„Wi-Fi“ šiuo metu nebus prijungtas automatiškai" "Žiūrėti viską" "Norėdami perjungti tinklus, atjunkite eternetą" + "Kad pagerintų įrenginio funkcijas, programos ir paslaugos vis tiek gali bet kada nuskaityti ieškodamos „Wi‑Fi“ tinklų, net jei „Wi‑Fi“ išjungtas. Tai galite pakeisti „Wi-Fi“ nuskaitymo nustatymuose. ""Pakeisti" diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index e0fa10716f32..e4ba5df7631f 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -1185,4 +1185,5 @@ "Wi-Fi savienojums īslaicīgi netiks izveidots automātiski." "Visu tīklu skatīšana" "Lai pārslēgtu tīklus, atvienojiet tīkla Ethernet vadu." + "Lai uzlabotu ierīces lietošanas iespējas, lietotnes un pakalpojumi joprojām varēs meklēt Wi‑Fi tīklus jebkurā laikā, pat ja Wi‑Fi būs izslēgts. Varat to mainīt Wi‑Fi meklēšanas iestatījumos. ""Mainīt" diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 672dc885068e..721bd2b9fdbf 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi нема да се поврзува автоматски засега" "Прикажи ги сите" "За промена на мрежата, прекинете ја врската со етернетот" + "За да се подобри доживувањето на уредот, апликациите и услугите може сѐ уште да скенираат за Wi‑Fi мрежи во секое време, дури и кога Wi‑Fi е исклучено. Може да го промените ова во поставките за „Скенирање за Wi-Fi“. ""Промени" diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 092848c6baaa..e432a1dc9ee5 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -1179,4 +1179,5 @@ "വൈഫൈ ഇപ്പോൾ സ്വയമേവ കണക്റ്റ് ചെയ്യില്ല" "എല്ലാം കാണുക" "മറ്റ് നെറ്റ്‌വർക്കുകളിലേക്ക് മാറാൻ, ഇതർനെറ്റ് വിച്ഛേദിക്കുക" + "ഉപകരണ അനുഭവം മെച്ചപ്പെടുത്താൻ, വൈഫൈ ഓഫാക്കിയിരിക്കുമ്പോൾ പോലും ആപ്പുകൾക്കും സേവനങ്ങൾക്കും വൈഫൈ നെറ്റ്‌വർക്കുകൾ കണ്ടെത്താൻ ഏത് സമയത്തും സ്‌കാൻ ചെയ്യാനാകും. നിങ്ങൾക്ക് ഇത് വൈഫൈ സ്‌കാനിംഗ് ക്രമീകരണത്തിൽ മാറ്റാം. ""മാറ്റുക" diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index b97bb6678bf3..cbab4da4909f 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi-г одоогоор автоматаар холбохгүй" "Бүгдийг харах" "Сүлжээг сэлгэхийн тулд этернэтийг салгана уу" + "Төхөөрөмжийн туршлагыг сайжруулахын тулд аппууд болон үйлчилгээнүүд нь Wi-Fi сүлжээг хүссэн үедээ буюу Wi-Fi-г унтраалттай байсан ч скан хийх боломжтой хэвээр байна. Та үүнийг Wi-Fi скан хийх тохиргоонд өөрчлөх боломжтой. ""Өөрчлөх" diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index d8f7d904b66d..2e632806668f 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -1179,4 +1179,5 @@ "सध्या वाय-फाय ऑटो-कनेक्ट होणार नाही" "सर्व पहा" "नेटवर्क स्विच करण्यासाठी, इथरनेट केबल डिस्कनेक्ट करा" + "डिव्हाइसच्या अनुभवामध्ये सुधारणा करण्यासाठी, वाय-फाय बंद असले तरीही ॲप्स आणि सेवा या कधीही वाय-फाय नेटवर्क स्कॅन करू शकतात. तुम्ही हे वाय-फाय स्कॅनिंग सेटिंग्जमध्ये बदलू शकता. ""बदला" diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index e06d379fefa2..7bc56237d5eb 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi tidak akan disambungkan secara automatik buat masa ini" "Lihat semua" "Untuk menukar rangkaian, putuskan sambungan ethernet" + "Untuk meningkatkan pengalaman peranti, apl dan perkhidmatan masih dapat melakukan imbasan untuk mengesan rangkaian Wi-Fi pada bila-bila masa, meskipun apabila Wi-Fi dimatikan. Anda boleh menukar tetapan ini dalam tetapan pengimbasan Wi-Fi. ""Tukar" diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 01544f0a3cee..c864587f7016 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi က လောလောဆယ် အလိုအလျောက် ချိတ်ဆက်မည်မဟုတ်ပါ" "အားလုံးကြည့်ရန်" "ကွန်ရက်ပြောင်းရန် အီသာနက်ကို ချိတ်ဆက်မှုဖြုတ်ပါ" + "စက်ပစ္စည်းကို ပိုမိုကောင်းမွန်စွာ အသုံးပြုနိုင်ရန် Wi-Fi ပိတ်ထားသည့်တိုင် အက်ပ်နှင့် ဝန်ဆောင်မှုများက Wi-Fi ကွန်ရက်များကို အချိန်မရွေး စကင်ဖတ်နိုင်သည်။ ၎င်းကို Wi-Fi ရှာဖွေခြင်း ဆက်တင်များတွင် ပြောင်းနိုင်သည်။ ""ပြောင်းရန်" diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 4f40c5738c5c..628b6a99883d 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -1179,4 +1179,5 @@ "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. ""Bytt" diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 43051c67a25f..c6dfb37ce848 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -1179,4 +1179,5 @@ "केही समयका लागि Wi-Fi स्वतः कनेक्ट हुँदैन" "सबै नेटवर्क हेर्नुहोस्" "नेटवर्क बदल्न इथरनेट डिस्कनेक्ट गर्नुहोस्" + "डिभाइस प्रयोगको अनुभवमा गुणस्तर सुधार गर्न, एप तथा सेवाहरूले अझै पनि जुनसुकै बेला (Wi‑Fi अफ भएका बेलामा पनि) Wi‑Fi नेटवर्क खोज्न सक्छन्। तपाईं यसलाई Wi‑Fi स्क्यानिङका सेटिङमा गई परिवर्तन गर्न सक्नुहुन्छ। ""बदल्नुहोस्" diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index d210e1e9999a..00debe8d4112 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -1179,4 +1179,5 @@ "Wifi maakt momenteel niet automatisch verbinding" "Alles tonen" "Verbreek de ethernetverbinding om van netwerk te wisselen" + "Apps en services kunnen nog steeds op elk moment scannen op wifi-netwerken, zelfs als wifi uitstaat, om de apparaatfunctionaliteit te verbeteren. Je kunt dit aanpassen in de instellingen voor wifi-scannen. ""Wijzigen" diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 56f944efeab4..a1e7013fec73 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -1179,4 +1179,5 @@ "ବର୍ତ୍ତମାନ ପାଇଁ ୱାଇ-ଫାଇ ସ୍ୱତଃ-ସଂଯୋଗ ହେବ ନାହିଁ" "ସବୁ ଦେଖନ୍ତୁ" "ନେଟୱାର୍କ ସ୍ୱିଚ୍ କରିବାକୁ, ଇଥରନେଟ୍ ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ" + "ଡିଭାଇସ ଅନୁଭୂତିକୁ ଉନ୍ନତ କରିବା ପାଇଁ, ୱାଇ-ଫାଇ ବନ୍ଦ ଥିଲେ ମଧ୍ୟ ଆପ ଓ ସେବାଗୁଡ଼ିକ ଏବେ ବି ଯେ କୌଣସି ସମୟରେ ୱାଇ-ଫାଇ ନେଟୱାର୍କ ପାଇଁ ସ୍କାନ କରିପାରିବ। ଆପଣ ଏହାକୁ ୱାଇ-ଫାଇ ସ୍କାନିଂ ସେଟିଂସରେ ପରିବର୍ତ୍ତନ କରିପାରିବେ। ""ପରିବର୍ତ୍ତନ କରନ୍ତୁ" diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index acb3c05cd892..0c9dd95ec219 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -1179,4 +1179,5 @@ "ਫ਼ਿਲਹਾਲ ਵਾਈ-ਫਾਈ ਸਵੈ-ਕਨੈਕਟ ਨਹੀਂ ਹੋਵੇਗਾ" "ਸਭ ਦੇਖੋ" "ਨੈੱਟਵਰਕਾਂ ਨੂੰ ਬਦਲਣ ਲਈ, ਈਥਰਨੈੱਟ ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰੋ" + "ਡੀਵਾਈਸ ਦੇ ਅਨੁਭਵ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ, ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਕਿਸੇ ਵੀ ਸਮੇਂ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਲਈ ਸਕੈਨ ਕਰ ਸਕਦੀਆਂ ਹਨ, ਭਾਵੇਂ ਵਾਈ-ਫਾਈ ਬੰਦ ਹੀ ਕਿਉਂ ਨਾ ਹੋਵੇ। ਤੁਸੀਂ ਇਸ ਨੂੰ ਵਾਈ‑ਫਾਈ ਸਕੈਨਿੰਗ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਬਦਲ ਸਕਦੇ ਹੋ। ""ਬਦਲੋ" diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index ff5d6cdb778f..9d7936887c6b 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -1191,4 +1191,5 @@ "Wi-Fi nie będzie na razie włączać się automatycznie" "Pokaż wszystko" "Aby przełączać sieci, odłącz Ethernet" + "Aby zapewnić Ci większy komfort korzystania z urządzenia, aplikacje i usługi mogą nadal wyszukiwać sieci Wi-Fi w pobliżu nawet wtedy, gdy Wi-Fi jest wyłączone. Możesz to zmienić w ustawieniach skanowania Wi-Fi. ""Zmień" diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 240e8a300bd9..ac1bd1164481 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -1179,4 +1179,5 @@ "A conexão automática ao Wi-Fi ficará indisponível" "Ver tudo" "Para mudar de rede, desconecte o cabo Ethernet" + "Para melhorar a experiência no dispositivo, os apps e serviços ainda podem procurar redes Wi-Fi a qualquer momento, mesmo quando o Wi-Fi estiver desativado. Você pode mudar essa opção nas configurações de busca por Wi-Fi. ""Mudar" diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index db5c46e48102..469170e1d363 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -1179,4 +1179,5 @@ "Por agora, o Wi-Fi não irá estabelecer lig. automaticamente" "Veja tudo" "Para mudar de rede, desligue a Ethernet" + "Para melhorar a experiência do dispositivo, as apps e os serviços podem continuar a procurar redes Wi-Fi em qualquer altura, mesmo quando o Wi-Fi está desativado. Pode alterar esta opção nas definições de procura de Wi-Fi. ""Alterar" diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 240e8a300bd9..ac1bd1164481 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -1179,4 +1179,5 @@ "A conexão automática ao Wi-Fi ficará indisponível" "Ver tudo" "Para mudar de rede, desconecte o cabo Ethernet" + "Para melhorar a experiência no dispositivo, os apps e serviços ainda podem procurar redes Wi-Fi a qualquer momento, mesmo quando o Wi-Fi estiver desativado. Você pode mudar essa opção nas configurações de busca por Wi-Fi. ""Mudar" diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 6344b1150b05..aa174d41dc00 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -1185,4 +1185,5 @@ "Deocamdată, Wi-Fi nu se poate conecta automat" "Afișează-le pe toate" "Pentru a schimba rețeaua, deconectați ethernet" + "Pentru a îmbunătăți experiența cu dispozitivul, aplicațiile și serviciile pot să caute în continuare rețele Wi‑Fi chiar și atunci când conexiunea Wi-Fi este dezactivată. Puteți să schimbați acest aspect din setările pentru căutarea de rețele Wi-Fi. ""Schimbați" diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 768c23c3e816..69f8c97f2fe9 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -1191,4 +1191,5 @@ "Подключение по Wi-Fi не установится автоматически." "Показать все" "Чтобы переключиться между сетями, отключите кабель Ethernet." + "Чтобы улучшать работу устройства, приложения и сервисы могут искать беспроводные сети в любое время, даже если вы отключили Wi‑Fi. Чтобы запретить это, отключите поиск сетей Wi‑Fi. ""Открыть настройки" diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 64a5bf21ba2a..f0f79274789e 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -1179,4 +1179,6 @@ "Wi-Fi දැනට ස්වයං-සබැඳි නොවනු ඇත" "සියල්ල බලන්න" "ජාල මාරු කිරීමට, ඊතර්නෙට් විසන්ධි කරන්න" + + diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 9451f05b6e8c..c296666b6249 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -1191,4 +1191,5 @@ "Wi‑Fi sa teraz automaticky nepripojí" "Zobraziť všetko" "Ak chcete prepnúť siete, odpojte ethernet" + "Aplikácie a služby môžu kedykoľvek vyhľadávať siete Wi‑Fi (a to aj vtedy, keď je pripojenie Wi‑Fi vypnuté), čím zlepšujú prostredie v zariadení. Môžete to zmeniť v nastaveniach vyhľadávania sietí Wi‑Fi. ""Zmeniť" diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 440bade46c3a..0fb2029e330e 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -1191,4 +1191,6 @@ "Vmesnik Wi-Fi trenutno ne bo samodejno vzpostavil povezave." "Prikaz vseh omrežij" "Če želite preklopiti omrežje, prekinite ethernetno povezavo." + + diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index f2481d8518ea..cfd5573e8fd3 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi nuk do të lidhet automatikisht për momentin" "Shiko të gjitha" "Për të ndërruar rrjetet, shkëput Ethernet-in" + "Për të përmirësuar përvojën e pajisjes, aplikacionet dhe shërbimet mund të vazhdojnë të skanojnë për rrjete Wi-Fi në çdo kohë, edhe kur Wi-Fi është joaktiv. Mund ta ndryshosh këtë te cilësimet e skanimit të Wi-Fi. ""Ndrysho" diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index c6d04498d991..ea67c9e49437 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -1185,4 +1185,5 @@ "WiFi тренутно не може да се аутоматски повеже" "Погледајте све" "Да бисте променили мрежу, прекините етернет везу" + "Ради бољег доживљаја уређаја, апликације и услуге и даље могу да траже WiFi мреже у било ком тренутку, чак и када је WiFi искључен. То можете да промените у подешавањима WiFi скенирања. ""Промените" diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 865a9c4eee3a..dd44e8e67db5 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -1179,4 +1179,6 @@ "Du ansluts inte till wifi automatiskt för närvarande" "Visa alla" "Koppla bort Ethernet för att växla nätverk" + + diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 72a2c218681b..6d503e249a6a 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi haitaunganishwa kiotomatiki kwa sasa" "Angalia yote" "Ili kubadili mitandao, tenganisha ethaneti" + "Ili kuboresha hali ya matumizi ya kifaa, programu na huduma bado zinaweza kutafuta mitandao ya Wi‑Fi wakati wowote, hata wakati umezima Wi‑Fi. Unaweza kubadilisha mipangilio hii katika mipangilio ya kutafuta Wi-Fi. ""Badilisha" diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 314a7915fc01..845a36148ef4 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -1179,4 +1179,5 @@ "தற்போதைக்கு வைஃபை தானாக இணைக்கப்படாது" "அனைத்தையும் காட்டு" "நெட்வொர்க்குகளை மாற்ற ஈதர்நெட் இணைப்பைத் துண்டிக்கவும்" + "சாதன அனுபவத்தை மேம்படுத்த, வைஃபை ஆஃப் செய்யப்பட்டிருந்தாலும்கூட எந்த நேரத்திலும் ஆப்ஸும் சேவைகளும் வைஃபை நெட்வொர்க்குகளைத் தேடலாம். வைஃபை ஸ்கேனிங் அமைப்புகளில் இதை மாற்றிக் கொள்ளலாம். ""மாற்று" diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index c35312cffecb..9eaa4fa113d8 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -1179,4 +1179,5 @@ "ప్రస్తుతానికి Wi-Fi ఆటోమేటిక్‌గా కనెక్ట్ అవ్వదు" "అన్నీ చూడండి" "నెట్‌వర్క్‌లను మార్చడానికి, ఈథర్‌నెట్‌ను డిస్‌కనెక్ట్ చేయండి" + "పరికర అనుభవాన్ని మెరుగుపరచడానికి, Wi‑Fi ఆఫ్‌లో ఉన్నప్పుడు కూడా, ఏ సమయంలో అయినా ఇప్పటికీ Wi‑Fi నెట్‌వర్క్‌ల కోసం యాప్‌లు, సర్వీస్‌లు స్కాన్ చేయగలవు. మీరు దీనిని Wi‑Fi స్కానింగ్ సెట్టింగ్‌లలో మార్చవచ్చు. ""మార్చండి" diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 9d47282bbbbd..dd315a24d4c6 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -1179,4 +1179,5 @@ "Wi-Fi จะไม่เชื่อมต่ออัตโนมัติในตอนนี้" "ดูทั้งหมด" "ตัดการเชื่อมต่ออีเทอร์เน็ตเพื่อสลับเครือข่าย" + "เพื่อปรับปรุงประสบการณ์การใช้อุปกรณ์ แอปและบริการต่างๆ จะยังคงสแกนหาเครือข่าย Wi‑Fi ได้ทุกเมื่อแม้ว่า Wi‑Fi จะปิดอยู่ คุณเปลี่ยนตัวเลือกนี้ได้ในการตั้งค่าการสแกนหา Wi-Fi ""เปลี่ยน" diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 3c07d2fb60bf..ee569df1bf65 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -1179,4 +1179,5 @@ "Hindi awtomatikong kokonekta ang Wi-Fi sa ngayon" "Tingnan lahat" "Para lumipat ng network, idiskonekta ang ethernet" + "Para pahusayin ang karanasan sa device, puwede pa ring mag-scan ng mga Wi-Fi network ang mga app at serbisyo anumang oras, kahit habang naka-off ang Wi‑Fi. Mababago mo ito sa mga setting ng pag-scan ng Wi-Fi. ""Baguhin" diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index ce110f7a2242..f3d49ac09168 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -1179,4 +1179,6 @@ "Şu anda kablosuz ağa otomatik olarak bağlanılamıyor" "Tümünü göster" "Ağ değiştirmek için ethernet bağlantısını kesin" + + diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index baf0380de840..d591b2dab964 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -1191,4 +1191,6 @@ "Пристрій не підключатиметься до Wi-Fi автоматично" "Показати все" "Щоб вибрати іншу мережу, від’єднайте кабель Ethernet" + + diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index d200a32d064a..88be783776db 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -1179,4 +1179,5 @@ "‏ابھی Wi-Fi خود کار طور پر منسلک نہیں ہوگا" "سبھی دیکھیں" "نیٹ ورکس پر سوئچ کرنے کیلئے، ایتھرنیٹ غیر منسلک کریں" + "‏آلے کے تجربے کو بہتر بنانے کے لیے، Wi‑Fi کے آف ہونے پر بھی ایپس اور سروسز کسی بھی وقت Wi‑Fi نیٹ ورکس اسکین کر سکتی ہیں۔ آپ اسے Wi‑Fi اسکیننگ کی ترتیبات میں تبدیل کر سکتے ہیں۔ ""تبدیل کریں" diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 210abbf42c3a..63b221219d9a 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -1179,4 +1179,6 @@ "Wi-Fi hozir avtomatik ulanmaydi" "Hammasi" "Boshqa tarmoqqa almashish uchun Ethernet tarmogʻini uzing" + + diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 4c8c6232d0fa..7eb2a8b4eb11 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -1179,4 +1179,5 @@ "Tạm thời, Wi-Fi sẽ không tự động kết nối" "Xem tất cả" "Để chuyển mạng, hãy rút cáp Ethernet" + "Để cải thiện trải nghiệm khi dùng thiết bị, các ứng dụng và dịch vụ vẫn có thể quét tìm mạng Wi‑Fi bất cứ lúc nào, ngay cả khi Wi‑Fi tắt. Bạn có thể thay đổi chế độ này trong phần cài đặt tính năng Quét tìm Wi‑Fi. ""Thay đổi" diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index de71f7b88f6f..faae83c6dd83 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -1179,4 +1179,5 @@ "WLAN 暂时无法自动连接" "查看全部" "如要切换网络,请断开以太网连接" + "为了提升设备的使用体验,即使 WLAN 已关闭,应用和服务仍可以随时扫描 WLAN 网络。您可以在 WLAN 扫描设置中更改此设置。""更改" diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 6e9cf80f9016..b5c40693865e 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -1179,4 +1179,5 @@ "目前系統不會自動連線至 Wi-Fi" "顯示全部" "如要切換網絡,請中斷以太網連線" + "為改善裝置的使用體驗,應用程式和服務仍可隨時掃瞄 Wi-Fi 網絡 (即使 Wi-Fi 已關閉)。您可在 Wi-Fi 掃瞄設定中變更此設定。""變更" diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index c6bfe971dc2b..a23ec38a6327 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -1179,4 +1179,5 @@ "目前不會自動連上 Wi-Fi" "查看全部" "如要切換網路,請中斷乙太網路連線" + "為提升裝置的使用體驗,應用程式和服務仍可隨時掃描 Wi‑Fi 網路,即使 Wi-Fi 連線功能處於關閉狀態時亦然。你可以前往「掃描 Wi-Fi」設定進行變更。""變更" diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index d119afb8d683..a72a9d526b7a 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -1179,4 +1179,6 @@ "I-Wi-Fi ngeke ixhume ngokuzenzakalelayo okwamanje" "Bona konke" "Ukuze ushintshe amanethiwekhi, nqamula i-ethernet" + + -- cgit v1.2.3 From 8aa61bff85d3a162bc1dbf3515ba065b62ca6d25 Mon Sep 17 00:00:00 2001 From: Zoey Chen Date: Tue, 12 Oct 2021 04:14:53 +0000 Subject: [SystemUI] 1.Remove the unnecessary log 2. update signal icon in bg thread 1. The log should be controlled by the DEBUG, otherwise it will be printed infinitely and the performance will be very slow. The log can be removed after checking, so I removing it instead of adding the DEBUG tag. 2. Do too much get icon in the main thread, move it into bg thread 3. It is unnecessary that update the mobile data layout from the callback, onAccessPointsChanged, because it is used for Wi-Fi. Bug: 201200079 Test: manual and Q verified pass Change-Id: I5f4623f9ffb68fae6ca377625aaa039f0f33dd38 (cherry picked from commit 5f685c98cc877f61e0297a9507412cb83f83d84b) Merged-In:I5f4623f9ffb68fae6ca377625aaa039f0f33dd38 --- .../systemui/qs/tiles/dialog/InternetDialog.java | 53 ++++++++++++++++------ .../qs/tiles/dialog/InternetDialogController.java | 19 +++++--- .../qs/tiles/dialog/InternetDialogFactory.kt | 6 ++- .../qs/tiles/dialog/InternetDialogTest.java | 42 +++++++++-------- 4 files changed, 79 insertions(+), 41 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java index dae357e9e36b..583626273c29 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java @@ -66,11 +66,13 @@ import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.accessibility.floatingmenu.AnnotationLinkSpan; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.wifitrackerlib.WifiEntry; import java.util.List; +import java.util.concurrent.Executor; /** * Dialog for showing mobile network, connected Wi-Fi network and Wi-Fi networks. @@ -84,6 +86,7 @@ public class InternetDialog extends SystemUIDialog implements static final long PROGRESS_DELAY_MS = 2000L; private final Handler mHandler; + private final Executor mBackgroundExecutor; private final LinearLayoutManager mLayoutManager; @VisibleForTesting @@ -158,13 +161,14 @@ public class InternetDialog extends SystemUIDialog implements public InternetDialog(Context context, InternetDialogFactory internetDialogFactory, InternetDialogController internetDialogController, boolean canConfigMobileData, boolean canConfigWifi, boolean aboveStatusBar, UiEventLogger uiEventLogger, - @Main Handler handler) { + @Main Handler handler, @Background Executor executor) { super(context, R.style.Theme_SystemUI_Dialog_Internet); if (DEBUG) { Log.d(TAG, "Init InternetDialog"); } mContext = context; mHandler = handler; + mBackgroundExecutor = executor; mInternetDialogFactory = internetDialogFactory; mInternetDialogController = internetDialogController; mSubscriptionManager = mInternetDialogController.getSubscriptionManager(); @@ -299,7 +303,13 @@ public class InternetDialog extends SystemUIDialog implements dismiss(); } - void updateDialog() { + /** + * Update the internet dialog when receiving the callback. + * + * @param shouldUpdateMobileNetwork {@code true} for update the mobile network layout, + * otherwise {@code false}. + */ + void updateDialog(boolean shouldUpdateMobileNetwork) { if (DEBUG) { Log.d(TAG, "updateDialog"); } @@ -309,8 +319,10 @@ public class InternetDialog extends SystemUIDialog implements mInternetDialogSubTitle.setText(getSubtitleText()); } updateEthernet(); - setMobileDataLayout(mInternetDialogController.activeNetworkIsCellular() - || mInternetDialogController.isCarrierNetworkActive()); + if (shouldUpdateMobileNetwork) { + setMobileDataLayout(mInternetDialogController.activeNetworkIsCellular() + || mInternetDialogController.isCarrierNetworkActive()); + } if (!mCanConfigWifi) { return; @@ -379,7 +391,13 @@ public class InternetDialog extends SystemUIDialog implements } else { mMobileSummaryText.setVisibility(View.GONE); } - mSignalIcon.setImageDrawable(getSignalStrengthDrawable()); + + mBackgroundExecutor.execute(() -> { + Drawable drawable = getSignalStrengthDrawable(); + mHandler.post(() -> { + mSignalIcon.setImageDrawable(drawable); + }); + }); mMobileTitleText.setTextAppearance(isCarrierNetworkConnected ? R.style.TextAppearance_InternetDialog_Active : R.style.TextAppearance_InternetDialog); @@ -534,52 +552,57 @@ public class InternetDialog extends SystemUIDialog implements @Override public void onRefreshCarrierInfo() { - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override public void onSimStateChanged() { - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override @WorkerThread public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override @WorkerThread public void onLost(Network network) { - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override public void onSubscriptionsChanged(int defaultDataSubId) { mDefaultDataSubId = defaultDataSubId; mTelephonyManager = mTelephonyManager.createForSubscriptionId(mDefaultDataSubId); - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); + } + + @Override + public void onUserMobileDataStateChanged(boolean enabled) { + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override public void onServiceStateChanged(ServiceState serviceState) { - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override @WorkerThread public void onDataConnectionStateChanged(int state, int networkType) { - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) { - mHandler.post(() -> updateDialog()); + mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */)); } @Override @@ -591,7 +614,7 @@ public class InternetDialog extends SystemUIDialog implements mAdapter.setWifiEntries(wifiEntries, mWifiEntriesCount); mHandler.post(() -> { mAdapter.notifyDataSetChanged(); - updateDialog(); + updateDialog(false /* shouldUpdateMobileNetwork */); }); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index 276c0be53063..90d83aeb0f94 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -149,6 +149,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, private ConnectivityManager.NetworkCallback mConnectivityManagerNetworkCallback; private WindowManager mWindowManager; private ToastFactory mToastFactory; + private SignalDrawable mSignalDrawable; @VisibleForTesting static final float TOAST_PARAMS_HORIZONTAL_WEIGHT = 1.0f; @@ -225,6 +226,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mConnectivityManagerNetworkCallback = new DataConnectivityListener(); mWindowManager = windowManager; mToastFactory = toastFactory; + mSignalDrawable = new SignalDrawable(mContext); } void onStart(@NonNull InternetDialogCallback callback, boolean canConfigWifi) { @@ -431,10 +433,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, Drawable getSignalStrengthIcon(Context context, int level, int numLevels, int iconType, boolean cutOut) { - Log.d(TAG, "getSignalStrengthIcon"); - final SignalDrawable signalDrawable = new SignalDrawable(context); - signalDrawable.setLevel( - SignalDrawable.getState(level, numLevels, cutOut)); + mSignalDrawable.setLevel(SignalDrawable.getState(level, numLevels, cutOut)); // Make the network type drawable final Drawable networkDrawable = @@ -443,7 +442,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, : context.getResources().getDrawable(iconType, context.getTheme()); // Overlay the two drawables - final Drawable[] layers = {networkDrawable, signalDrawable}; + final Drawable[] layers = {networkDrawable, mSignalDrawable}; final int iconSize = context.getResources().getDimensionPixelSize(R.dimen.signal_strength_icon_size); @@ -892,7 +891,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, TelephonyCallback.DataConnectionStateListener, TelephonyCallback.DisplayInfoListener, TelephonyCallback.ServiceStateListener, - TelephonyCallback.SignalStrengthsListener { + TelephonyCallback.SignalStrengthsListener, + TelephonyCallback.UserMobileDataStateListener { @Override public void onServiceStateChanged(@NonNull ServiceState serviceState) { @@ -914,6 +914,11 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mTelephonyDisplayInfo = telephonyDisplayInfo; mCallback.onDisplayInfoChanged(telephonyDisplayInfo); } + + @Override + public void onUserMobileDataStateChanged(boolean enabled) { + mCallback.onUserMobileDataStateChanged(enabled); + } } private class InternetOnSubscriptionChangedListener @@ -1018,6 +1023,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, void onSignalStrengthsChanged(SignalStrength signalStrength); + void onUserMobileDataStateChanged(boolean enabled); + void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo); void dismissDialog(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt index 11c6980678b1..ea5df17bca58 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt @@ -20,7 +20,9 @@ import android.os.Handler import android.util.Log import com.android.internal.logging.UiEventLogger import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main +import java.util.concurrent.Executor import javax.inject.Inject private const val TAG = "InternetDialogFactory" @@ -32,6 +34,7 @@ private val DEBUG = Log.isLoggable(TAG, Log.DEBUG) @SysUISingleton class InternetDialogFactory @Inject constructor( @Main private val handler: Handler, + @Background private val executor: Executor, private val internetDialogController: InternetDialogController, private val context: Context, private val uiEventLogger: UiEventLogger @@ -49,7 +52,8 @@ class InternetDialogFactory @Inject constructor( return } else { internetDialog = InternetDialog(context, this, internetDialogController, - canConfigMobileData, canConfigWifi, aboveStatusBar, uiEventLogger, handler) + canConfigMobileData, canConfigWifi, aboveStatusBar, uiEventLogger, handler, + executor) internetDialog?.show() } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java index 7cea430e146f..66889607482f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java @@ -27,6 +27,8 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import com.android.wifitrackerlib.WifiEntry; import org.junit.After; @@ -65,6 +67,7 @@ public class InternetDialogTest extends SysuiTestCase { @Mock private InternetDialogController mInternetDialogController; + private FakeExecutor mBgExecutor = new FakeExecutor(new FakeSystemClock()); private InternetDialog mInternetDialog; private View mDialogView; private View mSubTitle; @@ -93,7 +96,8 @@ public class InternetDialogTest extends SysuiTestCase { when(mInternetDialogController.getWifiManager()).thenReturn(mWifiManager); mInternetDialog = new InternetDialog(mContext, mock(InternetDialogFactory.class), - mInternetDialogController, true, true, true, mock(UiEventLogger.class), mHandler); + mInternetDialogController, true, true, true, mock(UiEventLogger.class), mHandler, + mBgExecutor); mInternetDialog.mAdapter = mInternetAdapter; mInternetDialog.onAccessPointsChanged(mWifiEntries, mInternetWifiEntry); mInternetDialog.show(); @@ -129,7 +133,7 @@ public class InternetDialogTest extends SysuiTestCase { public void updateDialog_withApmOn_internetDialogSubTitleGone() { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(true); assertThat(mSubTitle.getVisibility()).isEqualTo(View.GONE); } @@ -138,7 +142,7 @@ public class InternetDialogTest extends SysuiTestCase { public void updateDialog_withApmOff_internetDialogSubTitleVisible() { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(true); assertThat(mSubTitle.getVisibility()).isEqualTo(View.VISIBLE); } @@ -148,7 +152,7 @@ public class InternetDialogTest extends SysuiTestCase { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false); when(mInternetDialogController.hasEthernet()).thenReturn(true); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(true); assertThat(mEthernet.getVisibility()).isEqualTo(View.VISIBLE); } @@ -158,7 +162,7 @@ public class InternetDialogTest extends SysuiTestCase { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false); when(mInternetDialogController.hasEthernet()).thenReturn(false); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(true); assertThat(mEthernet.getVisibility()).isEqualTo(View.GONE); } @@ -168,7 +172,7 @@ public class InternetDialogTest extends SysuiTestCase { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); when(mInternetDialogController.hasEthernet()).thenReturn(true); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(true); assertThat(mEthernet.getVisibility()).isEqualTo(View.VISIBLE); } @@ -178,7 +182,7 @@ public class InternetDialogTest extends SysuiTestCase { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); when(mInternetDialogController.hasEthernet()).thenReturn(false); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(true); assertThat(mEthernet.getVisibility()).isEqualTo(View.GONE); } @@ -187,7 +191,7 @@ public class InternetDialogTest extends SysuiTestCase { public void updateDialog_withApmOn_mobileDataLayoutGone() { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(true); assertThat(mMobileDataToggle.getVisibility()).isEqualTo(View.GONE); } @@ -197,7 +201,7 @@ public class InternetDialogTest extends SysuiTestCase { // The preconditions WiFi ON and Internet WiFi are already in setUp() doReturn(false).when(mInternetDialogController).activeNetworkIsCellular(); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.VISIBLE); } @@ -208,7 +212,7 @@ public class InternetDialogTest extends SysuiTestCase { mInternetDialog.onAccessPointsChanged(mWifiEntries, null /* connectedEntry*/); doReturn(false).when(mInternetDialogController).activeNetworkIsCellular(); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.GONE); } @@ -218,7 +222,7 @@ public class InternetDialogTest extends SysuiTestCase { // The precondition WiFi ON is already in setUp() mInternetDialog.onAccessPointsChanged(null /* wifiEntries */, mInternetWifiEntry); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mWifiList.getVisibility()).isEqualTo(View.GONE); assertThat(mSeeAll.getVisibility()).isEqualTo(View.GONE); @@ -228,7 +232,7 @@ public class InternetDialogTest extends SysuiTestCase { public void updateDialog_wifiOnAndHasWifiList_showWifiListAndSeeAll() { // The preconditions WiFi ON and WiFi entries are already in setUp() - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mWifiList.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mSeeAll.getVisibility()).isEqualTo(View.VISIBLE); @@ -239,7 +243,7 @@ public class InternetDialogTest extends SysuiTestCase { // The preconditions WiFi ON and Internet WiFi are already in setUp() when(mInternetDialogController.isDeviceLocked()).thenReturn(true); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mWifiToggle.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mWifiToggle.getBackground()).isNotNull(); @@ -250,7 +254,7 @@ public class InternetDialogTest extends SysuiTestCase { // The preconditions WiFi ON and Internet WiFi are already in setUp() when(mInternetDialogController.isDeviceLocked()).thenReturn(true); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.GONE); } @@ -260,7 +264,7 @@ public class InternetDialogTest extends SysuiTestCase { // The preconditions WiFi entries are already in setUp() when(mInternetDialogController.isDeviceLocked()).thenReturn(true); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mWifiList.getVisibility()).isEqualTo(View.GONE); assertThat(mSeeAll.getVisibility()).isEqualTo(View.GONE); @@ -270,7 +274,7 @@ public class InternetDialogTest extends SysuiTestCase { public void updateDialog_wifiOn_hideWifiScanNotify() { // The preconditions WiFi ON and Internet WiFi are already in setUp() - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE); } @@ -280,7 +284,7 @@ public class InternetDialogTest extends SysuiTestCase { when(mWifiManager.isWifiEnabled()).thenReturn(false); when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE); } @@ -291,7 +295,7 @@ public class InternetDialogTest extends SysuiTestCase { when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); when(mInternetDialogController.isDeviceLocked()).thenReturn(true); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE); } @@ -302,7 +306,7 @@ public class InternetDialogTest extends SysuiTestCase { when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); when(mInternetDialogController.isDeviceLocked()).thenReturn(false); - mInternetDialog.updateDialog(); + mInternetDialog.updateDialog(false); assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.VISIBLE); TextView wifiScanNotifyText = mDialogView.requireViewById(R.id.wifi_scan_notify_text); -- cgit v1.2.3 From e664c5e7fc1f59ffd87e31e25e4b5ce7f1dc8db3 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Fri, 22 Oct 2021 02:22:49 +0000 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I782cb1bd08a0b2bb4c2caf293e1119d59e21f5dc (cherry picked from commit eed6614c73a23dd37f5dd1e98b7814e054fa9339) Merged-In:I782cb1bd08a0b2bb4c2caf293e1119d59e21f5dc --- packages/SystemUI/res/values-ar/strings.xml | 3 +- packages/SystemUI/res/values-as/strings.xml | 58 ++++++++++++------------- packages/SystemUI/res/values-az/strings.xml | 3 +- packages/SystemUI/res/values-bn/strings.xml | 3 +- packages/SystemUI/res/values-el/strings.xml | 3 +- packages/SystemUI/res/values-es-rUS/strings.xml | 3 +- packages/SystemUI/res/values-fa/strings.xml | 3 +- packages/SystemUI/res/values-fi/strings.xml | 3 +- packages/SystemUI/res/values-fr-rCA/strings.xml | 3 +- packages/SystemUI/res/values-gl/strings.xml | 3 +- packages/SystemUI/res/values-hr/strings.xml | 3 +- packages/SystemUI/res/values-iw/strings.xml | 3 +- packages/SystemUI/res/values-ja/strings.xml | 3 +- packages/SystemUI/res/values-kk/strings.xml | 3 +- packages/SystemUI/res/values-si/strings.xml | 3 +- packages/SystemUI/res/values-sl/strings.xml | 3 +- packages/SystemUI/res/values-sv/strings.xml | 3 +- packages/SystemUI/res/values-te/strings.xml | 28 ++++++------ packages/SystemUI/res/values-tr/strings.xml | 3 +- packages/SystemUI/res/values-uk/strings.xml | 3 +- packages/SystemUI/res/values-uz/strings.xml | 3 +- packages/SystemUI/res/values-zu/strings.xml | 3 +- 22 files changed, 63 insertions(+), 83 deletions(-) diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index cab5a1c2b326..bd261923d0a4 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -1203,6 +1203,5 @@ "‏لن يتم الاتصال بشبكة Wi-Fi تلقائيًا في الوقت الحالي." "عرض الكل" "للتبديل بين الشبكات، يجب فصل إيثرنت." - - + "‏لتحسين تجربتك على الجهاز، يظل بإمكان التطبيقات والخدمات البحث عن شبكات Wi‑Fi في أي وقت، حتى عند إيقاف شبكة Wi‑Fi. وبإمكانك تغيير هذا الخيار في إعدادات البحث عن شبكات Wi-Fi. ""تغيير" diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 7cd417f2a5cf..e2e4abc49d95 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -24,19 +24,19 @@ "কোনো জাননী নাই" "চলিত" "জাননীসমূহ" - "বেটাৰি অতি সোনকালে শেষ হ\'ব পাৰে" + "বেটাৰী অতি সোনকালে শেষ হ\'ব পাৰে" "%s বাকী আছে" "%1$s অৱশিষ্ট আছে, আপোনাৰ ব্যৱহাৰক ভিত্তি কৰি প্ৰায় %2$s বাকী আছে" "%1$s অৱশিষ্ট আছে, প্ৰায় %2$s বাকী" - "%s বাকী আছে। বেটাৰি সঞ্চয়কাৰী অন হৈ আছে।" + "%s বাকী আছে। বেটাৰী সঞ্চয়কাৰী অন হৈ আছে।" "ইউএছবি জৰিয়তে চ্চাৰ্জ কৰিব নোৱাৰি। আপোনাৰ ডিভাইচৰ লগত পোৱা চ্চাৰ্জাৰটো ব্যৱহাৰ কৰক।" "ইউএছবি জৰিয়তে চ্চাৰ্জ কৰিব নোৱাৰি" "আপোনাৰ ডিভাইচৰ লগত পোৱা চ্চাৰ্জাৰটো ব্যৱহাৰ কৰক।" "ছেটিং" - "বেটাৰি সঞ্চয়কাৰী অন কৰেনে?" + "বেটাৰী সঞ্চয়কাৰী অন কৰেনে?" "বেটাৰী সঞ্চয়কাৰীৰ বিষয়ে" "অন কৰক" - "বেটাৰি সঞ্চয়কাৰী অন কৰক" + "বেটাৰী সঞ্চয়কাৰী অন কৰক" "ছেটিং" "ৱাই-ফাই" "স্বয়ং-ঘূৰ্ণন স্ক্ৰীন" @@ -193,11 +193,11 @@ "স্ক্ৰীনৰ আকাৰ ডাঙৰ কৰিবলৈ জুম কৰক।" "ব্লুটুথ সংযোগ হ’ল।" "ব্লুটুথ সংযোগ বিচ্ছিন্ন কৰা হ’ল।" - "বেটাৰি শেষ" - "বেটাৰিৰ এডাল দণ্ড।" - "বেটাৰিৰ দুডাল দণ্ড।" - "বেটাৰিৰ তিনিডাল দণ্ড।" - "বেটাৰি পূৰাকৈ চ্চাৰ্জ হৈছে।" + "বেটাৰী শেষ" + "বেটাৰীৰ এডাল দণ্ড।" + "বেটাৰীৰ দুডাল দণ্ড।" + "বেটাৰীৰ তিনিডাল দণ্ড।" + "বেটাৰী পূৰাকৈ চাৰ্জ হৈছে।" "বেটাৰীৰ চাৰ্জৰ শতাংশ অজ্ঞাত।" "%sৰ লগত সংযোগ কৰা হ’ল।" "%sৰ লগত সংযোগ কৰা হ’ল।" @@ -229,10 +229,10 @@ "এয়াৰপ্লে’ন ম’ড।" "ভিপিএন অন অৱস্থাত আছে।" "কোনো ছিম কাৰ্ড নাই" - "বেটাৰিৰ বিৱৰণসমূহ খোলক" - "%d শতাংশ বেটাৰি।" + "বেটাৰীৰ বিৱৰণসমূহ খোলক" + "%d শতাংশ বেটাৰী।" "আপোনাৰ ব্যৱহাৰৰ ওপৰত ভিত্তি কৰি বেটাৰী %1$s শতাংশ, প্ৰায় %2$s বাকী আছে" - "বেটাৰি চাৰ্জ হৈ আছে, %d শতাংশ।" + "বেটাৰী চাৰ্জ হৈ আছে, %d শতাংশ।" "ছিষ্টেমৰ ছেটিং৷" "জাননীসমূহ।" "সকলো জাননীবোৰ চাওক" @@ -258,7 +258,7 @@ "ৱাই-ফাই অফ কৰা হ’ল।" "ৱাই-ফাই অন কৰা হ’ল।" "ম’বাইল %1$s. %2$s. %3$s." - "বেটাৰি %s।" + "বেটাৰী %s।" "এয়াৰপ্লেইন ম\'ড অফ হৈ আছে৷" "এয়াৰপ্লেইন ম\'ড অন হৈ আছে৷" "এয়াৰপ্লেইন ম\'ড অফ কৰা হ’ল।" @@ -338,7 +338,7 @@ "ব্লুটুথ (%dটা ডিভাইচ)" "ব্লুটুথ বন্ধ অৱস্থাত আছে" "কোনো যোৰা লগোৱা ডিভাইচ উপলব্ধ নহয়।" - "বেটাৰি %s" + "বেটাৰী %s" "অডিঅ’" "হেডছেট" "ইনপুট" @@ -391,7 +391,7 @@ "সম্পন্ন কৰা হ’ল" "বন্ধ কৰক" "সংযোগ কৰা হ’ল" - "সংযুক্ত, বেটাৰি %1$s" + "সংযুক্ত, বেটাৰী %1$s" "সংযোগ কৰি থকা হৈছে..." "টেডাৰ কৰি থকা হৈছে" "হটস্পট" @@ -504,9 +504,9 @@ "ব্যৱহাৰকাৰীক আঁতৰাবনে?" "এই ব্যৱহাৰকাৰীৰ সকলো এপ্ আৰু ডেটা মচা হ\'ব।" "আঁতৰাওক" - "বেটাৰি সঞ্চয়কাৰী অন হৈ আছে" + "বেটাৰী সঞ্চয়কাৰী অন হৈ আছে" "কাৰ্যদক্ষতা আৰু নেপথ্য ডেটা হ্ৰাস কৰে" - "বেটাৰি সঞ্চয়কাৰী অফ কৰক" + "বেটাৰী সঞ্চয়কাৰী অফ কৰক" "%sএ আপোনাৰ স্ক্ৰীনত দৃশ্যমান হোৱা অথবা ৰেকর্ডিং অথবা কাষ্টিঙৰ সময়ত আপোনাৰ ডিভাইচত প্লে\' কৰা সকলো তথ্যলৈ এক্সেছ পাব। এইটোত পাছৱর্ড, পৰিশোধৰ সবিশেষ, ফট\', বার্তাসমূহ আৰু আপুনি প্লে\' কৰা অডিঅ\'ৰ দৰে তথ্য অন্তর্ভুক্ত হয়।" "এই সুবিধাটো প্ৰদান কৰা সেৱাটোৱে আপোনাৰ স্ক্ৰীনত দৃশ্যমান হোৱা অথবা ৰেকর্ডিং অথবা কাষ্টিংৰ সময়ত আপোনাৰ ডিভাইচত প্লে\' কৰা সকলো তথ্যলৈ এক্সেছ পাব। এইটোত পাছৱর্ড, পৰিশোধৰ সবিশেষ, ফট\', বার্তাসমূহ আৰু আপুনি প্লে\' কৰা অডিঅ\'ৰ দৰে তথ্য অন্তর্ভুক্ত হয়।" "ৰেকর্ডিং অথবা কাষ্টিং আৰম্ভ কৰিবনে?" @@ -657,8 +657,8 @@ "ৱাই-ফাই" "ব্লুটুথ আৰু ৱাই-ফাই" "System UI Tuner" - "সংযুক্ত বেটাৰিৰ কিমান শতাংশ বাকী আছে দেখুওৱাক" - "চাৰ্জ হৈ নথকা অৱস্থাত বেটাৰি কিমান শতাংশ বাকী স্থিতি দণ্ডৰ ভিতৰত দেখুৱাওক" + "সংযুক্ত বেটাৰীৰ কিমান শতাংশ বাকী আছে দেখুওৱাক" + "চাৰ্জ হৈ নথকা অৱস্থাত বেটাৰী কিমান শতাংশ বাকী স্থিতি দণ্ডৰ ভিতৰত দেখুৱাওক" "ক্ষিপ্ৰ ছেটিং" "স্থিতি দণ্ড" "অৱলোকন" @@ -696,7 +696,7 @@ "ছেটিঙৰ পৰা System UI Tuner আঁতৰাই ইয়াৰ সুবিধাসমূহ ব্যৱহাৰ কৰাটো বন্ধ কৰিবনে?" "আপোনাৰ ডিভাইচত এপ্লিকেশ্বনটো ইনষ্টল কৰা হোৱা নাই" "ঘড়ীৰ ছেকেণ্ড দেখুৱাওক" - "স্থিতি দণ্ডত ঘড়ীৰ ছেকেণ্ড দেখুৱাওক। এই কার্যই বেটাৰিৰ অৱস্থাত প্ৰভাৱ পেলাব পাৰে।" + "স্থিতি দণ্ডত ঘড়ীৰ ছেকেণ্ড দেখুৱাওক। এই কার্যই বেটাৰীৰ জীৱনকালত প্ৰভাৱ পেলাব পাৰে।" "ক্ষিপ্ৰ ছেটিং পুনৰ সজাওক" "দ্ৰুত ছেটিঙত উজ্জ্বলতা দেখুৱাওক" "পৰীক্ষামূলক" @@ -803,8 +803,8 @@ %d মিনিট %d মিনিট - "বেটাৰিৰ ব্যৱহাৰ" - "চ্চাৰ্জ কৰি থকাৰ সময়ত বেটাৰি সঞ্চয়কাৰী উপলব্ধ নহয়।" + "বেটাৰীৰ ব্যৱহাৰ" + "চাৰ্জ কৰি থকাৰ সময়ত বেটাৰী সঞ্চয়কাৰী উপলব্ধ নহয়।" "বেটাৰী সঞ্চয়কাৰী" "কাৰ্যদক্ষতা আৰু নেপথ্য ডেটা হ্ৰাস কৰে" "%1$s বুটাম" @@ -854,7 +854,7 @@ "অসুবিধা নিদিব" "ভলিউম বুটামসমূহৰ শ্বৰ্টকাট" "ভলিউম বঢ়োৱা বুটাম ব্যৱহাৰ কৰি অসুবিধা নিদিব নিষ্ক্ৰিয় কৰক" - "বেটাৰি" + "বেটাৰী" "ঘড়ী" "হেডছেট" "ছেটিং খোলক" @@ -963,7 +963,7 @@ "মেনু" "%1$s এপ্" "সতৰ্কবার্তাসমূহ" - "বেটাৰি" + "বেটাৰী" "স্ক্ৰীণশ্বটসমূহ" "সাধাৰণ বার্তাসমূহ" "ষ্ট\'ৰেজ" @@ -987,7 +987,7 @@ "Keep" "সলনি কৰক" "নেপথ্যত চলি থকা এপসমূহ" - "বেটাৰি আৰু ডেটাৰ ব্যৱহাৰৰ বিষয়ে বিশদভাৱে জানিবলৈ টিপক" + "বেটাৰী আৰু ডেটাৰ ব্যৱহাৰৰ বিষয়ে সবিশেষ জানিবলৈ টিপক" "ম’বাইল ডেটা অফ কৰিবনে?" "আপুনি %sৰ জৰিয়তে ডেটা সংযোগ বা ইণ্টাৰনেট সংযোগ নাপাব। কেৱল ৱাই-ফাইৰ যোগেৰে ইণ্টাৰনেট উপলব্ধ হ\'ব।" "আপোনাৰ বাহক" @@ -998,11 +998,11 @@ "%1$sক যিকোনো এপৰ অংশ দেখুওৱাবলৈ অনুমতি দিয়ক" "অনুমতি দিয়ক" "অস্বীকাৰ কৰক" - "বেটাৰি সঞ্চয়কাৰীৰ সময়সূচী সক্ৰিয় কৰিবলৈ টিপক" - "বেটাৰি শেষ হোৱাৰ সম্ভাৱনা থাকিলে অন কৰক" + "বেটাৰী সঞ্চয়কাৰীৰ সময়সূচী সক্ৰিয় কৰিবলৈ টিপক" + "বেটাৰী শেষ হোৱাৰ সম্ভাৱনা থাকিলে অন কৰক" "নালাগে, ধন্যবাদ" - "বেটাৰি সঞ্চয়কাৰীৰ সময়সূচী অন কৰা অৱস্থাত আছে" - "বেটাৰি চ্চাৰ্জৰ স্তৰ %d%%তকৈ কম হোৱাৰ লগে লগে বেটাৰি সঞ্চয়কাৰী স্বয়ংক্ৰিয়ভাৱে অন হ’ব।" + "বেটাৰী সঞ্চয়কাৰীৰ সময়সূচী অন কৰা অৱস্থাত আছে" + "বেটাৰী চাৰ্জৰ স্তৰ %d%%তকৈ কম হোৱাৰ লগে লগে বেটাৰী সঞ্চয়কাৰী স্বয়ংক্ৰিয়ভাৱে অন হ’ব।" "ছেটিং" "বুজি পালোঁ" "SysUI হীপ ডাম্প কৰক" diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index ed8013be7760..89dca12e9b8d 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -1179,6 +1179,5 @@ "Wi-Fi hələlik avtomatik qoşulmayacaq" "Hamısına baxın" "Şəbəkəni dəyişmək üçün etherneti ayırın" - - + "Cihaz təcrübəsini yaxşılaşdırmaq üçün Wi-Fi deaktiv olduqda belə, tətbiqlər və xidmətlər Wi-Fi şəbəkəsini axtara biləcək. Bunu Wi-Fi axtarışı ayarlarında dəyişə bilərsiniz. ""Dəyişin" diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 5ecf485046eb..3f4746b2c8c5 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -1179,6 +1179,5 @@ "এখন ওয়াই-ফাই নিজে থেকে কানেক্ট হবে না" "সবকটি দেখুন" "নেটওয়ার্ক বদলাতে ইথারনেট ডিসকানেক্ট করুন" - - + "ডিভাইস সংক্রান্ত অভিজ্ঞতা আরও ভাল করতে, অ্যাপ ও পরিষেবা যেকোনও সময় আপনার ওয়াই-ফাই নেটওয়ার্ক স্ক্যান করতে পারবে, এমনকি ডিভাইসের ওয়াই-ফাই বন্ধ করা থাকলেও। ওয়াই-ফাই স্ক্যানিং সেটিংস থেকে আপনি এটি পরিবর্তন করতে পারবেন। ""পরিবর্তন করুন" diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index ae5ffc08a76d..5930f4c67952 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -1179,6 +1179,5 @@ "Δεν θα γίνεται προς το παρόν αυτόματη σύνδεση Wi-Fi." "Εμφάνιση όλων" "Για εναλλαγή δικτύων, αποσυνδέστε το ethernet" - - + "Για βελτίωση της εμπειρίας στη συσκευή, οι εφαρμογές και οι υπηρεσίες μπορούν ακόμα να εκτελούν σάρωση για δίκτυα Wi‑Fi ανά πάσα στιγμή, ακόμα και όταν το Wi‑Fi είναι απενεργοποιημένο. Μπορείτε να αλλάξετε αυτήν τη ρύθμιση στις ρυθμίσεις της Σάρωσης Wi‑Fi. ""Αλλαγή" diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index bbcd2a70fd4c..8f6f93a0af68 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -1179,6 +1179,5 @@ "Por ahora, el Wi-Fi no se conectará automáticamente" "Ver todo" "Para cambiar de red, desconéctate de Ethernet" - - + "Para mejorar la experiencia con el dispositivo, las apps y los servicios pueden seguir buscando redes Wi-Fi en cualquier momento, incluso cuando la conexión Wi-Fi esté desactivada. Puedes cambiar este parámetro en la configuración de búsqueda de Wi-Fi. ""Cambiar" diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index d70f4c642cdc..84ab778d15c7 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -1179,6 +1179,5 @@ "‏فعلاً Wi-Fi به‌طور خودکار متصل نمی‌شود" "مشاهده همه" "برای تغییر شبکه، اترنت را قطع کنید" - - + "‏برای بهبود تجربه استفاده از دستگاه، برنامه‌ها و سرویس‌ها همچنان می‌توانند در هر زمانی شبکه‌های Wi-Fi را اسکن کنند؛ حتی وقتی که Wi-Fi خاموش باشد. می‌توانید این مورد را در تنظیمات اسکن کردن Wi‑Fi تغییر دهید. ""تغییر" diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 8a2c75aaa882..25efe59ef7aa 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -1179,6 +1179,5 @@ "Wi-Fi ei toistaiseksi yhdistä automaattisesti" "Näytä kaikki" "Irrota Ethernet-johto, jos haluat vaihtaa verkkoa" - - + "Laitteen käyttökokemuksen parantamiseksi sovellukset ja palvelut voivat hakea Wi-Fi-verkkoja myös silloin, kun Wi-Fi on pois päältä. Voit muuttaa asetusta Wi-Fi-haun asetuksissa. ""Muuta" diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index f845d5627003..b885249a4e91 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -1179,6 +1179,5 @@ "Connexion automatique au Wi-Fi impossible pour le moment" "Tout afficher" "Pour changer de réseau, débranchez le câble Ethernet" - - + "Pour améliorer l\'expérience de l\'appareil, les applications et les services peuvent quand même rechercher des réseaux Wi-Fi en tout temps, même lorsque le Wi-Fi est désactivé. Vous pouvez modifier vos préférences dans les paramètres de recherche de réseaux Wi-Fi. ""Modifier" diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 16b7c0eab064..9da7d6fbac0a 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -1179,6 +1179,5 @@ "De momento, a wifi non se conectará automaticamente" "Ver todo" "Para cambiar de rede, desconecta a Ethernet" - - + "Para mellorar a experiencia que ofrece o dispositivo, as aplicacións e os servizos poden seguir buscando redes wifi en calquera momento, aínda que esta conexión estea desactivada. Podes cambiar esta opción na configuración da función Busca de redes wifi. ""Cambiar" diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index b1fba3c888b8..789bdf6c7a7f 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -1185,6 +1185,5 @@ "Wi-Fi se zasad neće automatski povezivati" "Prikaži sve" "Da biste se prebacili na drugu mrežu, odspojite Ethernet" - - + "Da bi se poboljšao doživljaj uređaja, aplikacije i usluge i dalje mogu tražiti Wi-Fi mreže u bilo kojem trenutku, čak i kada je Wi-Fi isključen. To možete promijeniti u postavkama traženja Wi-Fija. ""Promijeni" diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index a2bcd9af33a8..2978a6a346f7 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -1191,6 +1191,5 @@ "‏ה-Wi-Fi לא יתחבר באופן אוטומטי בינתיים" "הצגת הכול" "כדי לעבור בין רשתות, צריך לנתק את האתרנט" - - + "‏כדי לשפר את חוויית השימוש במכשיר, אפליקציות ושירותים יוכלו לחפש רשתות Wi-Fi בכל שלב, גם כאשר ה-Wi-Fi כבוי. אפשר לשנות זאת בהגדרות של חיפוש נקודות Wi-Fi. ""שינוי" diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index e35aa8d0a26f..ba3d2241152b 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -1179,6 +1179,5 @@ "Wi-Fi に自動接続しません" "すべて表示" "ネットワークを変更するにはイーサネット接続を解除してください" - - + "デバイスの機能向上のため、アプリやサービスは、Wi-Fi が OFF の場合でも、いつでも Wi-Fi ネットワークをスキャンできます。この設定は Wi-Fi スキャンの設定で変更できます。""変更" diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index d4a7ed036e3a..5e3dbdc218d6 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -1179,6 +1179,5 @@ "Әзірше Wi-Fi автоматты түрде қосылмайды." "Барлығын көру" "Желілерді ауыстыру үшін ethernet кабелін ажыратыңыз." - - + "Құрылғы жұмысын жақсарту үшін қолданбалар мен қызметтер Wi-Fi байланысы өшірулі кезде де Wi-Fi желілерін іздейді. Оны Wi-Fi іздеу параметрлерінен өзгерте аласыз. ""Өзгерту" diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index f0f79274789e..f6fd853170f6 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -1179,6 +1179,5 @@ "Wi-Fi දැනට ස්වයං-සබැඳි නොවනු ඇත" "සියල්ල බලන්න" "ජාල මාරු කිරීමට, ඊතර්නෙට් විසන්ධි කරන්න" - - + "උපාංග අත්දැකීම වැඩි දියුණු කිරිමට, Wi‑Fi ක්‍රියාවිරහිත විට පවා, ඕනෑම අවස්ථාවක Wi‑Fi ජාල සඳහා ස්කෑන් කිරීමට යෙදුම් සහ සේවාවලට හැකිය. ඔබට මෙය Wi‑Fi ස්කෑන් කිරීමේ සැකසීම් තුළ වෙනස් කළ හැකිය. ""වෙනස් කරන්න" diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 0fb2029e330e..c2598211981e 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -1191,6 +1191,5 @@ "Vmesnik Wi-Fi trenutno ne bo samodejno vzpostavil povezave." "Prikaz vseh omrežij" "Če želite preklopiti omrežje, prekinite ethernetno povezavo." - - + "Za izboljšano izkušnjo pri uporabi naprave lahko aplikacije in storitve kadar koli iščejo omrežja Wi‑Fi, tudi ko je Wi‑Fi izklopljen. To lahko spremenite v nastavitvah iskanja omrežij Wi-Fi. ""Spremeni" diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index dd44e8e67db5..a671d4c554cc 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -1179,6 +1179,5 @@ "Du ansluts inte till wifi automatiskt för närvarande" "Visa alla" "Koppla bort Ethernet för att växla nätverk" - - + "I syfte att förbättra upplevelsen med enheten kan appar och tjänster fortfarande söka efter wifi-nätverk när som helst, även om wifi har inaktiverats. ""Ändra" diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 9eaa4fa113d8..605c2eca5124 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -563,30 +563,30 @@ "ఈ పరికరంలో ప్రమాణపత్ర అధికారం ఇన్‌స్టాల్ చేయబడింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు." "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్‌ని పర్యవేక్షించగల నెట్‌వర్క్ లాగింగ్‌ని ఆన్ చేశారు." "మీ అడ్మిన్ నెట్‌వర్క్ లాగింగ్‌ను ఆన్ చేశారు, ఇది మీ వర్క్ ప్రొఫైల్‌లోని ట్రాఫిక్‌ను పర్యవేక్షిస్తుంది కానీ మీ వ్యక్తిగత ప్రొఫైల్‌లో కాదు." - "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." - "మీరు ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$s మరియు %2$sకి కనెక్ట్ చేయబడ్డారు." - "మీ కార్యాలయ ప్రొఫైల్ ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది." - "మీ వ్యక్తిగత ప్రొఫైల్ ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది." + "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీరు ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$s మరియు %2$sకి కనెక్ట్ చేయబడ్డారు." + "మీ కార్యాలయ ప్రొఫైల్ ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది." + "మీ వ్యక్తిగత ప్రొఫైల్ ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది." "మీ పరికరం %1$s ద్వారా నిర్వహించబడుతోంది." "%1$s మీ పరికరాన్ని నిర్వహించడానికి %2$sని ఉపయోగిస్తుంది." "మీ పరికరంతో అనుబంధించబడిన సెట్టింగ్‌లు, కార్పొరేట్ యాక్సెస్, యాప్‌లు, డేటా మరియు మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు." " " "మరింత తెలుసుకోండి" - "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." " " "VPN సెట్టింగ్‌లను తెరవండి" " " "విశ్వసనీయ ఆధారాలను తెరువు" "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్‌ని పర్యవేక్షించగల నెట్‌వర్క్ లాగింగ్‌ని ఆన్ చేశారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి." - "మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక యాప్‌నకు అనుమతి ఇచ్చారు.\n\nఈ యాప్ ఇమెయిల్‌లు,యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ డివైజ్ మరియు నెట్‌వర్క్ యాక్టివిటీని పర్యవేక్షించగలదు." - "%1$s ద్వారా మీ కార్యాలయ ప్రొఫైల్ నిర్వహించబడుతోంది.\n\nఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల సామర్థ్యం మీ నిర్వాహకులకు ఉంది.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ అయ్యారు, ఇది మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక యాప్‌నకు అనుమతి ఇచ్చారు.\n\nఈ యాప్ ఈమెయిళ్లు,యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ డివైజ్ మరియు నెట్‌వర్క్ యాక్టివిటీని పర్యవేక్షించగలదు." + "%1$s ద్వారా మీ కార్యాలయ ప్రొఫైల్ నిర్వహించబడుతోంది.\n\nఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల సామర్థ్యం మీ నిర్వాహకులకు ఉంది.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ అయ్యారు, ఇది మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." "ఈ పరికరాన్ని మీ తల్లి/తండ్రి మేనేజ్ చేస్తున్నారు. మీ తల్లి/తండ్రి, మీరు ఉపయోగించే యాప్‌లు, మీ లొకేషన్, అలాగే మీ పరికర వినియోగ వ్యవధి వంటి సమాచారాన్ని చూడగలరు, మేనేజ్ చేయగలరు." "VPN" - "మీరు ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడ్డారు." - "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌‍సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." - "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." - "మీ కార్యాలయ ప్రొఫైల్ %1$s నిర్వహణలో ఉంది. ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %2$sకి ప్రొఫైల్ కనెక్ట్ చేయబడింది.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి." - "మీ కార్యాలయ ప్రొఫైల్ %1$s నిర్వహణలో ఉంది. ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %2$sకి ప్రొఫైల్ కనెక్ట్ చేయబడింది.\n\nమీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %3$sకి కూడా మీరు కనెక్ట్ చేయబడ్డారు." + "మీరు ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడ్డారు." + "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌‍సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీ కార్యాలయ ప్రొఫైల్ %1$s నిర్వహణలో ఉంది. ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %2$sకి ప్రొఫైల్ కనెక్ట్ చేయబడింది.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి." + "మీ కార్యాలయ ప్రొఫైల్ %1$s నిర్వహణలో ఉంది. ఈమెయిళ్లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %2$sకి ప్రొఫైల్ కనెక్ట్ చేయబడింది.\n\nమీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %3$sకి కూడా మీరు కనెక్ట్ చేయబడ్డారు." "TrustAgent ద్వారా అన్‌లాక్ చేయబడింది" "మీరు మాన్యువల్‌గా అన్‌లాక్ చేస్తే మినహా పరికరం లాక్ చేయబడి ఉంటుంది" "%1$s\n%2$s" @@ -611,7 +611,7 @@ "మీరు అన్‌పిన్ చేసే వరకు ఇది వీక్షణలో ఉంచబడుతుంది. అన్‌పిన్ చేయడానికి, పైకి స్వైప్ చేసి & పట్టుకోండి." "దీని వలన మీరు అన్‌పిన్ చేసే వరకు ఇది వీక్షణలో ఉంచబడుతుంది. అన్‌పిన్ చేయడానికి స్థూలదృష్టిని తాకి & అలాగే పట్టుకోండి." "దీని వలన మీరు అన్‌పిన్ చేసే వరకు ఇది వీక్షణలో ఉంచబడుతుంది. అన్‌పిన్ చేయడానికి హోమ్‌ని తాకి & అలాగే పట్టుకోండి." - "వ్యక్తిగత డేటా (కాంటాక్ట్‌లు, ఇంకా ఇమెయిల్ కంటెంట్ లాంటివి) యాక్సెస్ చేయబడవచ్చు." + "వ్యక్తిగత డేటా (కాంటాక్ట్‌లు, ఇంకా ఈమెయిల్‌ కంటెంట్ లాంటివి) యాక్సెస్ చేయబడవచ్చు." "పిన్ చేయబడిన యాప్ ఇతర యాప్‌లను తెరవవచ్చు." "ఈ యాప్‌ను అన్‌పిన్ చేయడానికి, \'వెనుకకు\', \'ఓవర్‌వ్యూ\' బటన్‌లను తాకి & అలాగే పట్టుకోండి" "ఈ యాప్‌ను అన్‌పిన్ చేయడానికి, వెనుకకు, హోమ్ బటన్‌లను తాకి & అలాగే పట్టుకోండి" @@ -845,7 +845,7 @@ "సహాయకం" "బ్రౌజర్" "కాంటాక్ట్‌లు" - "ఇమెయిల్" + "ఈమెయిల్‌" "SMS" "మ్యూజిక్" "YouTube" diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index f3d49ac09168..4838b9ea5f24 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -1179,6 +1179,5 @@ "Şu anda kablosuz ağa otomatik olarak bağlanılamıyor" "Tümünü göster" "Ağ değiştirmek için ethernet bağlantısını kesin" - - + "Uygulamalar ve hizmetler, cihaz deneyimini iyileştirmek için Kablosuz özelliği kapalı bile olsa kablosuz ağlar herhangi bir zamanda tarayabilir. Bunu kablosuz ağ taraması ayarlarından değiştirebilirsiniz. ""Değiştir" diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index d591b2dab964..62b85c45bf38 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -1191,6 +1191,5 @@ "Пристрій не підключатиметься до Wi-Fi автоматично" "Показати все" "Щоб вибрати іншу мережу, від’єднайте кабель Ethernet" - - + "Щоб користуватися пристроєм було зручніше, додатки й сервіси можуть шукати бездротові мережі, навіть якщо Wi-Fi вимкнено. Це налаштування можна змінити в параметрах пошуку мереж Wi-Fi. ""Змінити" diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 63b221219d9a..fb396a91421c 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -1179,6 +1179,5 @@ "Wi-Fi hozir avtomatik ulanmaydi" "Hammasi" "Boshqa tarmoqqa almashish uchun Ethernet tarmogʻini uzing" - - + "Qurilma ishlashini yaxshilash uchun ilova va xizmatlar hatto Wi-Fi yoqilmaganda ham istalgan vaqt Wi-Fi tarmoqlarni qidirishi mumkin. Buni taqiqlash uchun Wi-Fi tarmoqlarni qidirish funksiyasini faolsizlantiring. ""Sozlamalarni ochish" diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index a72a9d526b7a..983e2f751fdd 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -1179,6 +1179,5 @@ "I-Wi-Fi ngeke ixhume ngokuzenzakalelayo okwamanje" "Bona konke" "Ukuze ushintshe amanethiwekhi, nqamula i-ethernet" - - + "Ukuze kuthuthukiswe ukuzizwela kwedivayisi, ama-app namasevisi kusengakwazi ukuskena amanethiwekhi we-Wi-Fi noma kunini, ngisho noma i-Wi-Fi ivaliwe, Ungashintsha lokhu kumasethingi Wokuskena i-Wi-Fi. ""Shintsha" -- cgit v1.2.3 From 8496b8bc08af45f7e23e2779e177164ea5d2c9b0 Mon Sep 17 00:00:00 2001 From: Issei Suzuki Date: Thu, 14 Oct 2021 19:56:24 +0200 Subject: Fix black frame flicker in UNOCCLUDE transition. When an activity which occludes the keyguard finishes, WindowManager immediately updatees the keyguard occluded status, so show-when-locked wallpaper was not used anymore. However sysui needed some time to finish keyguard occluded status change in their side, and meantime no wallpaper target existed. With this change, we keep using show-when-locked wallpaper until app transition finishes. Bug: 201560359 Test: manual. Show assist app on the lockscreen and close. Change-Id: I4958a2f5ecdd12b3db43b44ee4a221972070ab2c (cherry picked from commit f5a613e5282542ea356c20b3f397276f06d68fe9) Merged-In:I4958a2f5ecdd12b3db43b44ee4a221972070ab2c --- .../java/com/android/server/policy/PhoneWindowManager.java | 6 ++++++ .../com/android/server/policy/WindowManagerPolicy.java | 14 ++++++++++++++ .../core/java/com/android/server/wm/AppTransition.java | 4 ++++ .../java/com/android/server/wm/WallpaperController.java | 3 ++- .../java/com/android/server/wm/WindowManagerService.java | 5 +++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index b6ca67d25f77..7767fe611f87 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -4630,6 +4630,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { return mKeyguardDelegate.isInputRestricted(); } + /** {@inheritDoc} */ + @Override + public boolean isKeyguardUnoccluding() { + return keyguardOn() && !mWindowManagerFuncs.isAppTransitionStateIdle(); + } + @Override public void dismissKeyguardLw(IKeyguardDismissCallback callback, CharSequence message) { if (mKeyguardDelegate != null && mKeyguardDelegate.isShowing()) { diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java index 78b03b2b88e7..510ab93e1af5 100644 --- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java +++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java @@ -367,6 +367,12 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { * as the top display. */ void moveDisplayToTop(int displayId); + + /** + * Return whether the app transition state is idle. + * @return {@code true} if app transition state is idle on the default display. + */ + boolean isAppTransitionStateIdle(); } /** @@ -973,6 +979,14 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { */ public boolean isKeyguardOccluded(); + /** + * Return whether the keyguard is unoccluding. + * @return {@code true} if the keyguard is unoccluding. + */ + default boolean isKeyguardUnoccluding() { + return false; + } + /** * @return true if in keyguard is on. */ diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index c1b287ff8077..c61cfeeac917 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -365,6 +365,10 @@ public class AppTransition implements Dump { setAppTransitionState(APP_STATE_IDLE); } + boolean isIdle() { + return mAppTransitionState == APP_STATE_IDLE; + } + boolean isTimeout() { return mAppTransitionState == APP_STATE_TIMEOUT; } diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java index 4ff6d3c9a5f2..1f2a9a29932c 100644 --- a/services/core/java/com/android/server/wm/WallpaperController.java +++ b/services/core/java/com/android/server/wm/WallpaperController.java @@ -159,7 +159,8 @@ class WallpaperController { boolean needsShowWhenLockedWallpaper = false; if ((w.mAttrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0 && mService.mPolicy.isKeyguardLocked() - && mService.mPolicy.isKeyguardOccluded()) { + && (mService.mPolicy.isKeyguardOccluded() + || mService.mPolicy.isKeyguardUnoccluding())) { // The lowest show when locked window decides whether we need to put the wallpaper // behind. needsShowWhenLockedWallpaper = !isFullscreen(w.mAttrs) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index e3b25a5fda3e..e3ff9e75dbd8 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3071,6 +3071,11 @@ public class WindowManagerService extends IWindowManager.Stub syncInputTransactions(true /* waitForAnimations */); } + @Override + public boolean isAppTransitionStateIdle() { + return getDefaultDisplayContentLocked().mAppTransition.isIdle(); + } + /** * Notifies activity manager that some Keyguard flags have changed and that it needs to * reevaluate the visibilities of the activities. -- cgit v1.2.3 From 402baf46cea73f06e98d9a2ae2fc04025462b849 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Wed, 20 Oct 2021 03:46:56 +0800 Subject: [RESTRICT AUTOMERGE] Hide Wi-Fi Scanning message when Location is disabled (QS Internet Dialog) - When the location is disabled, the WiFi scanning service will also stop. - Bypass the WifiManager#isScanAlwaysAvailable() result. Bug: 203471614 Test: manual test on the device. atest -c InternetDialogControllerTest \ InternetDialogTest Change-Id: I2f159820d577f226e640b3ea735f6b18c52a16f7 (cherry picked from commit 194a61951688b8ed48b6c0e254398f66c5b1d79a) Merged-In:I2f159820d577f226e640b3ea735f6b18c52a16f7 --- .../systemui/qs/tiles/dialog/InternetDialog.java | 2 +- .../qs/tiles/dialog/InternetDialogController.java | 14 ++++++++- .../tiles/dialog/InternetDialogControllerTest.java | 35 ++++++++++++++++++++-- .../qs/tiles/dialog/InternetDialogTest.java | 6 ++-- 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java index 583626273c29..d0271f72153e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java @@ -331,7 +331,7 @@ public class InternetDialog extends SystemUIDialog implements showProgressBar(); final boolean isDeviceLocked = mInternetDialogController.isDeviceLocked(); final boolean isWifiEnabled = mWifiManager.isWifiEnabled(); - final boolean isWifiScanEnabled = mWifiManager.isScanAlwaysAvailable(); + final boolean isWifiScanEnabled = mInternetDialogController.isWifiScanEnabled(); updateWifiToggle(isWifiEnabled, isDeviceLocked); updateConnectedWifi(isWifiEnabled, isDeviceLocked); updateWifiScanNotify(isWifiEnabled, isWifiScanEnabled, isDeviceLocked); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index 90d83aeb0f94..67e34113bebb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -76,6 +76,7 @@ import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.AccessPointController; import com.android.systemui.toast.SystemUIToast; @@ -150,6 +151,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, private WindowManager mWindowManager; private ToastFactory mToastFactory; private SignalDrawable mSignalDrawable; + private LocationController mLocationController; @VisibleForTesting static final float TOAST_PARAMS_HORIZONTAL_WEIGHT = 1.0f; @@ -199,7 +201,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, GlobalSettings globalSettings, KeyguardStateController keyguardStateController, WindowManager windowManager, ToastFactory toastFactory, @Background Handler workerHandler, - CarrierConfigTracker carrierConfigTracker) { + CarrierConfigTracker carrierConfigTracker, + LocationController locationController) { if (DEBUG) { Log.d(TAG, "Init InternetDialogController"); } @@ -227,6 +230,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mWindowManager = windowManager; mToastFactory = toastFactory; mSignalDrawable = new SignalDrawable(mContext); + mLocationController = locationController; } void onStart(@NonNull InternetDialogCallback callback, boolean canConfigWifi) { @@ -788,6 +792,14 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return false; } + @WorkerThread + boolean isWifiScanEnabled() { + if (!mLocationController.isLocationEnabled()) { + return false; + } + return mWifiManager.isScanAlwaysAvailable(); + } + static class WifiEntryConnectCallback implements WifiEntry.ConnectCallback { final ActivityStarter mActivityStarter; final WifiEntry mWifiEntry; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java index f9d5be6c4807..663edc7b373b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java @@ -49,6 +49,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.AccessPointController; import com.android.systemui.toast.SystemUIToast; @@ -135,6 +136,8 @@ public class InternetDialogControllerTest extends SysuiTestCase { private Animator mAnimator; @Mock private CarrierConfigTracker mCarrierConfigTracker; + @Mock + private LocationController mLocationController; private TestableResources mTestableResources; private MockInternetDialogController mInternetDialogController; @@ -170,7 +173,8 @@ public class InternetDialogControllerTest extends SysuiTestCase { mSubscriptionManager, mTelephonyManager, mWifiManager, mock(ConnectivityManager.class), mHandler, mExecutor, mBroadcastDispatcher, mock(KeyguardUpdateMonitor.class), mGlobalSettings, mKeyguardStateController, - mWindowManager, mToastFactory, mWorkerHandler, mCarrierConfigTracker); + mWindowManager, mToastFactory, mWorkerHandler, mCarrierConfigTracker, + mLocationController); mSubscriptionManager.addOnSubscriptionsChangedListener(mExecutor, mInternetDialogController.mOnSubscriptionsChangedListener); mInternetDialogController.onStart(mInternetDialogCallback, true); @@ -602,6 +606,30 @@ public class InternetDialogControllerTest extends SysuiTestCase { verify(mMergedCarrierEntry).setEnabled(false); } + @Test + public void isWifiScanEnabled_locationOff_returnFalse() { + when(mLocationController.isLocationEnabled()).thenReturn(false); + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false); + + assertThat(mInternetDialogController.isWifiScanEnabled()).isFalse(); + + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + + assertThat(mInternetDialogController.isWifiScanEnabled()).isFalse(); + } + + @Test + public void isWifiScanEnabled_locationOn_returnIsScanAlwaysAvailable() { + when(mLocationController.isLocationEnabled()).thenReturn(true); + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false); + + assertThat(mInternetDialogController.isWifiScanEnabled()).isFalse(); + + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + + assertThat(mInternetDialogController.isWifiScanEnabled()).isTrue(); + } + private String getResourcesString(String name) { return mContext.getResources().getString(getResourcesId(name)); } @@ -625,12 +653,13 @@ public class InternetDialogControllerTest extends SysuiTestCase { KeyguardUpdateMonitor keyguardUpdateMonitor, GlobalSettings globalSettings, KeyguardStateController keyguardStateController, WindowManager windowManager, ToastFactory toastFactory, Handler workerHandler, - CarrierConfigTracker carrierConfigTracker) { + CarrierConfigTracker carrierConfigTracker, + LocationController locationController) { super(context, uiEventLogger, starter, accessPointController, subscriptionManager, telephonyManager, wifiManager, connectivityManager, handler, mainExecutor, broadcastDispatcher, keyguardUpdateMonitor, globalSettings, keyguardStateController, windowManager, toastFactory, workerHandler, - carrierConfigTracker); + carrierConfigTracker, locationController); mGlobalSettings = globalSettings; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java index 66889607482f..5e1fea512d55 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java @@ -282,7 +282,7 @@ public class InternetDialogTest extends SysuiTestCase { @Test public void updateDialog_wifiOffAndWifiScanOff_hideWifiScanNotify() { when(mWifiManager.isWifiEnabled()).thenReturn(false); - when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false); + when(mInternetDialogController.isWifiScanEnabled()).thenReturn(false); mInternetDialog.updateDialog(false); @@ -292,7 +292,7 @@ public class InternetDialogTest extends SysuiTestCase { @Test public void updateDialog_wifiOffAndWifiScanOnAndDeviceLocked_hideWifiScanNotify() { when(mWifiManager.isWifiEnabled()).thenReturn(false); - when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + when(mInternetDialogController.isWifiScanEnabled()).thenReturn(true); when(mInternetDialogController.isDeviceLocked()).thenReturn(true); mInternetDialog.updateDialog(false); @@ -303,7 +303,7 @@ public class InternetDialogTest extends SysuiTestCase { @Test public void updateDialog_wifiOffAndWifiScanOnAndDeviceUnlocked_showWifiScanNotify() { when(mWifiManager.isWifiEnabled()).thenReturn(false); - when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + when(mInternetDialogController.isWifiScanEnabled()).thenReturn(true); when(mInternetDialogController.isDeviceLocked()).thenReturn(false); mInternetDialog.updateDialog(false); -- cgit v1.2.3 From c3c9ada6e5d946ce7d224649f1d6528ce80b1a24 Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Thu, 23 Sep 2021 20:36:42 +0000 Subject: Revert "Revert "[pm] remove old stage dirs on low storage"" This reverts commit b45ebca772a77bf3fd269d0dcfc1a7af7c73861d. Reason for revert: adding the fix for system to abandon sessions BUG: 67862680 Test: manual Change-Id: I91170ba399b3a596320b3bd9c8188912e5c4f1be (cherry picked from commit ce2c9032b905ff0e32c34298b86c6b19e6e21f53) Merged-In: I91170ba399b3a596320b3bd9c8188912e5c4f1be (cherry picked from commit 50db8a56a226e6afc0288d3894ca226938f4af4b) Merged-In:I91170ba399b3a596320b3bd9c8188912e5c4f1be --- .../android/server/pm/PackageInstallerService.java | 53 ++++++++++++++++++---- .../android/server/pm/PackageInstallerSession.java | 4 +- .../android/server/pm/PackageManagerService.java | 4 ++ 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index d7b244980cfc..7fdeb27203bd 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -135,6 +135,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements private static final long MAX_ACTIVE_SESSIONS_NO_PERMISSION = 50; /** Upper bound on number of historical sessions for a UID */ private static final long MAX_HISTORICAL_SESSIONS = 1048576; + /** Destroy sessions older than this on storage free request */ + private static final long MAX_SESSION_AGE_ON_LOW_STORAGE_MILLIS = 8 * DateUtils.HOUR_IN_MILLIS; /** * Allow verification-skipping if it's a development app installed through ADB with @@ -334,22 +336,28 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements @GuardedBy("mSessions") private void reconcileStagesLocked(String volumeUuid) { - final File stagingDir = getTmpSessionDir(volumeUuid); - final ArraySet unclaimedStages = newArraySet( - stagingDir.listFiles(sStageFilter)); - - // We also need to clean up orphaned staging directory for staged sessions - final File stagedSessionStagingDir = Environment.getDataStagingDirectory(volumeUuid); - unclaimedStages.addAll(newArraySet(stagedSessionStagingDir.listFiles())); - + final ArraySet unclaimedStages = getStagingDirsOnVolume(volumeUuid); // Ignore stages claimed by active sessions for (int i = 0; i < mSessions.size(); i++) { final PackageInstallerSession session = mSessions.valueAt(i); unclaimedStages.remove(session.stageDir); } + removeStagingDirs(unclaimedStages); + } + + private ArraySet getStagingDirsOnVolume(String volumeUuid) { + final File stagingDir = getTmpSessionDir(volumeUuid); + final ArraySet stagingDirs = newArraySet(stagingDir.listFiles(sStageFilter)); + + // We also need to clean up orphaned staging directory for staged sessions + final File stagedSessionStagingDir = Environment.getDataStagingDirectory(volumeUuid); + stagingDirs.addAll(newArraySet(stagedSessionStagingDir.listFiles())); + return stagingDirs; + } + private void removeStagingDirs(ArraySet stagingDirsToRemove) { // Clean up orphaned staging directories - for (File stage : unclaimedStages) { + for (File stage : stagingDirsToRemove) { Slog.w(TAG, "Deleting orphan stage " + stage); synchronized (mPm.mInstallLock) { mPm.removeCodePathLI(stage); @@ -363,6 +371,33 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements } } + /** + * Called to free up some storage space from obsolete installation files + */ + public void freeStageDirs(String volumeUuid) { + final ArraySet unclaimedStagingDirsOnVolume = getStagingDirsOnVolume(volumeUuid); + final long currentTimeMillis = System.currentTimeMillis(); + synchronized (mSessions) { + for (int i = 0; i < mSessions.size(); i++) { + final PackageInstallerSession session = mSessions.valueAt(i); + if (!unclaimedStagingDirsOnVolume.contains(session.stageDir)) { + // Only handles sessions stored on the target volume + continue; + } + final long age = currentTimeMillis - session.createdMillis; + if (age >= MAX_SESSION_AGE_ON_LOW_STORAGE_MILLIS) { + // Aggressively close old sessions because we are running low on storage + // Their staging dirs will be removed too + session.abandon(); + } else { + // Session is new enough, so it deserves to be kept even on low storage + unclaimedStagingDirsOnVolume.remove(session.stageDir); + } + } + } + removeStagingDirs(unclaimedStagingDirsOnVolume); + } + public static boolean isStageName(String name) { final boolean isFile = name.startsWith("vmdl") && name.endsWith(".tmp"); final boolean isContainer = name.startsWith("smdl") && name.endsWith(".tmp"); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 542948491dc8..d0e445749698 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -673,7 +673,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { final Runnable r; synchronized (mLock) { assertNotChildLocked("StagedSession#abandon"); - assertCallerIsOwnerOrRoot(); + assertCallerIsOwnerOrRootOrSystem(); if (isInTerminalState()) { // We keep the session in the database if it's in a finalized state. It will be // removed by PackageInstallerService when the last update time is old enough. @@ -3704,7 +3704,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { private void abandonNonStaged() { synchronized (mLock) { assertNotChildLocked("abandonNonStaged"); - assertCallerIsOwnerOrRoot(); + assertCallerIsOwnerOrRootOrSystem(); if (mRelinquished) { if (LOGD) Slog.d(TAG, "Ignoring abandon after commit relinquished control"); return; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6da70ad77d67..d648f5ea9d97 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -9296,6 +9296,10 @@ public class PackageManagerService extends IPackageManager.Stub if (freeBytesRequired > 0) { smInternal.freeCache(volumeUuid, freeBytesRequired); } + + // 12. Clear temp install session files + mInstallerService.freeStageDirs(volumeUuid); + if (file.getUsableSpace() >= bytes) return; } else { try { -- cgit v1.2.3 From b2dc041a4e84986e3a6932b127d3a18ef02b6d0a Mon Sep 17 00:00:00 2001 From: Winson Date: Mon, 18 Oct 2021 14:00:41 -0700 Subject: Block SHELL_UID from overlay fabricate and clear shell overlays on boot Prevents non-root shell from fabricating overlays and removes all overlays with their creating package as shell on boot. Prevents unapproved usages of the fabrication API and cleans up any potentially broken overlays respectively. Bug: 202768292 Test: sts-tradefed run sts-engbuild-no-spl-lock \ -m StsHostTestCases -t android.security.sts.Bug_202768292 Change-Id: I184cc498e49c416e184cc0855a8810b57dd08175 (cherry picked from commit 627d5eb68e19a8ea18c3c1405701b3a33f073315) Merged-In:I184cc498e49c416e184cc0855a8810b57dd08175 --- .../com/android/server/om/OverlayManagerService.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java index 27b164830572..ee0b3d52eb3d 100644 --- a/services/core/java/com/android/server/om/OverlayManagerService.java +++ b/services/core/java/com/android/server/om/OverlayManagerService.java @@ -71,6 +71,7 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AtomicFile; +import android.util.EventLog; import android.util.Slog; import android.util.SparseArray; @@ -81,7 +82,6 @@ import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.SystemConfig; import com.android.server.SystemService; - import com.android.server.pm.UserManagerService; import com.android.server.pm.parsing.pkg.AndroidPackage; @@ -285,6 +285,12 @@ public final class OverlayManagerService extends SystemService { restoreSettings(); + // Wipe all shell overlays on boot, to recover from a potentially broken device + String shellPkgName = TextUtils.emptyIfNull( + getContext().getString(android.R.string.config_systemShell)); + mSettings.removeIf(overlayInfo -> overlayInfo.isFabricated + && shellPkgName.equals(overlayInfo.packageName)); + initIfNeeded(); onSwitchUser(UserHandle.USER_SYSTEM); @@ -891,6 +897,16 @@ public final class OverlayManagerService extends SystemService { throw new IllegalArgumentException(request.typeToString() + " unsupported for user " + request.userId); } + + // Normal apps are blocked from accessing OMS via SELinux, so to block non-root, + // non privileged callers, a simple check against the shell UID is sufficient, since + // that's the only exception from the other categories. This is enough while OMS + // is not a public API, but this will have to be changed if it's ever exposed. + if (callingUid == Process.SHELL_UID) { + EventLog.writeEvent(0x534e4554, "202768292", -1, ""); + throw new IllegalArgumentException("Non-root shell cannot fabricate overlays"); + } + realUserId = UserHandle.USER_ALL; // Enforce that the calling process can only register and unregister fabricated -- cgit v1.2.3 From bc506448b9ca7ddc9b7139f16725dfbba9803854 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Fri, 1 Oct 2021 19:27:29 +0800 Subject: setTurnScreenOn can only used as wakeup setTurnScreenOn shouldn't dismiss keyguard automatically even when the keyguard is insecure. The keyguard state should only be affected by requestDismissKeyguard and/or setShowWhenLocked, and for either case setTurnScreenOn can be used to wakeup device if the activity is going to be resumed and visible. Bug: 201103497 Test: atest ActivityVisibilityTests KeyguardTests KeyguardLockedTests Change-Id: I283dea469a33286fc9cf835e39ee5a3be2444739 (cherry picked from commit f3a1274a38ca891c1f2e86db2c1926293c90c6fa) (cherry picked from commit 966a61366e10c5a65f9661d4b934e64b4c088d87) Merged-In:I283dea469a33286fc9cf835e39ee5a3be2444739 --- core/java/android/app/Activity.java | 5 +-- .../com/android/server/wm/KeyguardController.java | 39 ++++------------------ 2 files changed, 8 insertions(+), 36 deletions(-) diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index db5dcc5c264b..af59ea1d22ff 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -77,7 +77,6 @@ import android.os.IBinder; import android.os.Looper; import android.os.Parcelable; import android.os.PersistableBundle; -import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager.ServiceNotFoundException; @@ -8788,9 +8787,7 @@ public class Activity extends ContextThemeWrapper * the activity is visible after the screen is turned on when the lockscreen is up. In addition, * if this flag is set and the activity calls {@link * KeyguardManager#requestDismissKeyguard(Activity, KeyguardManager.KeyguardDismissCallback)} - * the screen will turn on. If the screen is off and device is not secured, this flag can turn - * screen on and dismiss keyguard to make this activity visible and resume, which can be used to - * replace {@link PowerManager#ACQUIRE_CAUSES_WAKEUP} + * the screen will turn on. * * @param turnScreenOn {@code true} to turn on the screen; {@code false} otherwise. * diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index cf0f973fa7db..054854aef121 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -190,8 +190,7 @@ class KeyguardController { if (keyguardChanged) { // Irrelevant to AOD. - dismissMultiWindowModeForTaskIfNeeded(null /* currentTaskControllsingOcclusion */, - false /* turningScreenOn */); + dismissMultiWindowModeForTaskIfNeeded(null /* currentTaskControllsingOcclusion */); mKeyguardGoingAway = false; if (keyguardShowing) { mDismissalRequested = false; @@ -385,6 +384,8 @@ class KeyguardController { mService.continueWindowLayout(); } } + dismissMultiWindowModeForTaskIfNeeded(topActivity != null + ? topActivity.getRootTask() : null); } /** @@ -410,21 +411,6 @@ class KeyguardController { } } - /** - * Called when somebody wants to turn screen on. - */ - private void handleTurnScreenOn(int displayId) { - if (displayId != DEFAULT_DISPLAY) { - return; - } - - mTaskSupervisor.wakeUp("handleTurnScreenOn"); - if (mKeyguardShowing && canDismissKeyguard()) { - mWindowManager.dismissKeyguard(null /* callback */, null /* message */); - mDismissalRequested = true; - } - } - boolean isDisplayOccluded(int displayId) { return getDisplayState(displayId).mOccluded; } @@ -438,11 +424,9 @@ class KeyguardController { } private void dismissMultiWindowModeForTaskIfNeeded( - @Nullable Task currentTaskControllingOcclusion, boolean turningScreenOn) { - // If turningScreenOn is true, it means that the visibility state has changed from - // currentTaskControllingOcclusion and we should update windowing mode. + @Nullable Task currentTaskControllingOcclusion) { // TODO(b/113840485): Handle docked stack for individual display. - if (!turningScreenOn && (!mKeyguardShowing || !isDisplayOccluded(DEFAULT_DISPLAY))) { + if (!mKeyguardShowing || !isDisplayOccluded(DEFAULT_DISPLAY)) { return; } @@ -581,26 +565,17 @@ class KeyguardController { && controller.mWindowManager.isKeyguardSecure( controller.mService.getCurrentUserId()); - boolean occludingChange = false; - boolean turningScreenOn = false; if (mTopTurnScreenOnActivity != lastTurnScreenOnActivity && mTopTurnScreenOnActivity != null && !mService.mWindowManager.mPowerManager.isInteractive() - && (mRequestDismissKeyguard || occludedByActivity - || controller.canDismissKeyguard())) { - turningScreenOn = true; - controller.handleTurnScreenOn(mDisplayId); + && (mRequestDismissKeyguard || occludedByActivity)) { + controller.mTaskSupervisor.wakeUp("handleTurnScreenOn"); mTopTurnScreenOnActivity.setCurrentLaunchCanTurnScreenOn(false); } if (lastOccluded != mOccluded) { - occludingChange = true; controller.handleOccludedChanged(mDisplayId, mTopOccludesActivity); } - - if (occludingChange || turningScreenOn) { - controller.dismissMultiWindowModeForTaskIfNeeded(task, turningScreenOn); - } } /** -- cgit v1.2.3 From a70c46b8a5ac697c87017f9c3fdebb03d3cc0292 Mon Sep 17 00:00:00 2001 From: Varun Shah Date: Wed, 20 Oct 2021 09:24:41 -0700 Subject: Update deletion conditions for a package's UsageStats. If a profile owner is defined for a specific user, do not delete usage stats for a package on package deletion. Bug: 197399948 Test: atest UserUsageStatsServiceTest Test: atest UsageStatsTest [all] Change-Id: I94a8e3dfca8ef4c7616f77944d61726e06043b85 Merged-In: I94a8e3dfca8ef4c7616f77944d61726e06043b85 (cherry picked from commit 157fbcfbe4b38075391aef5b4977d45702a06936) Merged-In:I94a8e3dfca8ef4c7616f77944d61726e06043b85 --- .../app/admin/DevicePolicyManagerInternal.java | 8 +++++++ .../devicepolicy/DevicePolicyManagerService.java | 7 ++++++ .../server/usage/UserUsageStatsServiceTest.java | 2 +- .../android/server/usage/UsageStatsService.java | 26 +++++++++++++++++----- .../server/usage/UserUsageStatsService.java | 10 +++++---- 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java index a0d2977cf09a..01875eda2eca 100644 --- a/core/java/android/app/admin/DevicePolicyManagerInternal.java +++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java @@ -16,6 +16,7 @@ package android.app.admin; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.ComponentName; @@ -76,6 +77,13 @@ public abstract class DevicePolicyManagerInternal { public abstract void addOnCrossProfileWidgetProvidersChangeListener( OnCrossProfileWidgetProvidersChangeListener listener); + /** + * @param userHandle the handle of the user whose profile owner is being fetched. + * @return the configured supervision app if it exists and is the device owner or policy owner. + */ + public abstract @Nullable ComponentName getProfileOwnerOrDeviceOwnerSupervisionComponent( + @NonNull UserHandle userHandle); + /** * Checks if an app with given uid is an active device owner of its user. * diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index d48c9ea4831c..99e28d101496 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -12646,6 +12646,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } + @Override + public @Nullable ComponentName getProfileOwnerOrDeviceOwnerSupervisionComponent( + @NonNull UserHandle userHandle) { + return DevicePolicyManagerService.this.getProfileOwnerOrDeviceOwnerSupervisionComponent( + userHandle); + } + @Override public boolean isActiveDeviceOwner(int uid) { return isDeviceOwner(new CallerIdentity(uid, null, null)); diff --git a/services/tests/mockingservicestests/src/com/android/server/usage/UserUsageStatsServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/usage/UserUsageStatsServiceTest.java index 24c58f49bed6..7358551d1bc5 100644 --- a/services/tests/mockingservicestests/src/com/android/server/usage/UserUsageStatsServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/usage/UserUsageStatsServiceTest.java @@ -72,7 +72,7 @@ public class UserUsageStatsServiceTest { HashMap installedPkgs = new HashMap<>(); installedPkgs.put(TEST_PACKAGE_NAME, System.currentTimeMillis()); - mService.init(System.currentTimeMillis(), installedPkgs); + mService.init(System.currentTimeMillis(), installedPkgs, true); } @After diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 1b8492722c10..ac1fcce20dc0 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -380,6 +380,7 @@ public class UsageStatsService extends SystemService implements if (userId == UserHandle.USER_SYSTEM) { UsageStatsIdleService.scheduleUpdateMappingsJob(getContext()); } + final boolean deleteObsoleteData = shouldDeleteObsoleteData(UserHandle.of(userId)); synchronized (mLock) { // This should be safe to add this early. Other than reportEventOrAddToQueue, every // other user grabs the lock before accessing @@ -402,7 +403,7 @@ public class UsageStatsService extends SystemService implements boolean needToFlush = !pendingEvents.isEmpty(); initializeUserUsageStatsServiceLocked(userId, System.currentTimeMillis(), - installedPackages); + installedPackages, deleteObsoleteData); final UserUsageStatsService userService = getUserUsageStatsServiceLocked(userId); if (userService == null) { Slog.i(TAG, "Attempted to unlock stopped or removed user " + userId); @@ -596,13 +597,13 @@ public class UsageStatsService extends SystemService implements * when the user is initially unlocked. */ private void initializeUserUsageStatsServiceLocked(int userId, long currentTimeMillis, - HashMap installedPackages) { + HashMap installedPackages, boolean deleteObsoleteData) { final File usageStatsDir = new File(Environment.getDataSystemCeDirectory(userId), "usagestats"); final UserUsageStatsService service = new UserUsageStatsService(getContext(), userId, usageStatsDir, this); try { - service.init(currentTimeMillis, installedPackages); + service.init(currentTimeMillis, installedPackages, deleteObsoleteData); mUserState.put(userId, service); } catch (Exception e) { if (mUserManager.isUserUnlocked(userId)) { @@ -1165,6 +1166,10 @@ public class UsageStatsService extends SystemService implements * Called by the Binder stub. */ private boolean updatePackageMappingsData() { + // don't update the mappings if a profile user is defined + if (!shouldDeleteObsoleteData(UserHandle.SYSTEM)) { + return true; // return true so job scheduler doesn't reschedule the job + } // fetch the installed packages outside the lock so it doesn't block package manager. final HashMap installedPkgs = getInstalledPackages(UserHandle.USER_SYSTEM); synchronized (mLock) { @@ -1309,6 +1314,13 @@ public class UsageStatsService extends SystemService implements } } + private boolean shouldDeleteObsoleteData(UserHandle userHandle) { + final DevicePolicyManagerInternal dpmInternal = getDpmInternal(); + // If a profile owner is not defined for the given user, obsolete data should be deleted + return dpmInternal == null + || dpmInternal.getProfileOwnerOrDeviceOwnerSupervisionComponent(userHandle) == null; + } + private String buildFullToken(String packageName, String token) { final StringBuilder sb = new StringBuilder(packageName.length() + token.length() + 1); sb.append(packageName); @@ -2532,8 +2544,12 @@ public class UsageStatsService extends SystemService implements private class MyPackageMonitor extends PackageMonitor { @Override public void onPackageRemoved(String packageName, int uid) { - mHandler.obtainMessage(MSG_PACKAGE_REMOVED, getChangingUserId(), 0, packageName) - .sendToTarget(); + final int changingUserId = getChangingUserId(); + // Only remove the package's data if a profile owner is not defined for the user + if (shouldDeleteObsoleteData(UserHandle.of(changingUserId))) { + mHandler.obtainMessage(MSG_PACKAGE_REMOVED, changingUserId, 0, packageName) + .sendToTarget(); + } super.onPackageRemoved(packageName, uid); } } diff --git a/services/usage/java/com/android/server/usage/UserUsageStatsService.java b/services/usage/java/com/android/server/usage/UserUsageStatsService.java index 36d8c857ca21..fee4a47fd6ff 100644 --- a/services/usage/java/com/android/server/usage/UserUsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UserUsageStatsService.java @@ -115,8 +115,9 @@ class UserUsageStatsService { mSystemTimeSnapshot = System.currentTimeMillis(); } - void init(final long currentTimeMillis, HashMap installedPackages) { - readPackageMappingsLocked(installedPackages); + void init(final long currentTimeMillis, HashMap installedPackages, + boolean deleteObsoleteData) { + readPackageMappingsLocked(installedPackages, deleteObsoleteData); mDatabase.init(currentTimeMillis); if (mDatabase.wasUpgradePerformed()) { mDatabase.prunePackagesDataOnUpgrade(installedPackages); @@ -180,12 +181,13 @@ class UserUsageStatsService { return mDatabase.onPackageRemoved(packageName, timeRemoved); } - private void readPackageMappingsLocked(HashMap installedPackages) { + private void readPackageMappingsLocked(HashMap installedPackages, + boolean deleteObsoleteData) { mDatabase.readMappingsLocked(); // Package mappings for the system user are updated after 24 hours via a job scheduled by // UsageStatsIdleService to ensure restored data is not lost on first boot. Additionally, // this makes user service initialization a little quicker on subsequent boots. - if (mUserId != UserHandle.USER_SYSTEM) { + if (mUserId != UserHandle.USER_SYSTEM && deleteObsoleteData) { updatePackageMappingsLocked(installedPackages); } } -- cgit v1.2.3 From 8347f70f27f5efbaa6eeba72f83c8a4f47dac413 Mon Sep 17 00:00:00 2001 From: Les Lee Date: Wed, 3 Nov 2021 19:57:54 +0800 Subject: Fix normalize doesn't work on carrier template From android 12, the subscriberId is being used for different network types. For instances: The TYPE_WIFI with subscriberId means that it is a merged wifi network. The TYPE_CARRIER means that the network associate to specific carrier network (subscriberId). So remove the check "isMatchRuleMobile" and only check whether subscriberId is being used in NetworkTemplate or not. Bug: 194939211 Test: atest -c NetworkTemplateTest Change-Id: I80c9f887cf8b4714716d657da92ed273a532ce27 Merged-In: I80c9f887cf8b4714716d657da92ed273a532ce27 (cherry picked from commit 46cc261aa90305bdfec668af5d5ed25a27032cda) Merged-In:I80c9f887cf8b4714716d657da92ed273a532ce27 --- core/java/android/net/NetworkTemplate.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java index 249154aa9129..762816dd9f11 100644 --- a/core/java/android/net/NetworkTemplate.java +++ b/core/java/android/net/NetworkTemplate.java @@ -782,8 +782,8 @@ public class NetworkTemplate implements Parcelable { } /** - * Examine the given template and normalize if it refers to a "merged" - * mobile subscriber. We pick the "lowest" merged subscriber as the primary + * Examine the given template and normalize it. + * We pick the "lowest" merged subscriber as the primary * for key purposes, and expand the template to match all other merged * subscribers. *

@@ -798,8 +798,8 @@ public class NetworkTemplate implements Parcelable { } /** - * Examine the given template and normalize if it refers to a "merged" - * mobile subscriber. We pick the "lowest" merged subscriber as the primary + * Examine the given template and normalize it. + * We pick the "lowest" merged subscriber as the primary * for key purposes, and expand the template to match all other merged * subscribers. * @@ -811,7 +811,12 @@ public class NetworkTemplate implements Parcelable { * A, but also matches B. */ public static NetworkTemplate normalize(NetworkTemplate template, List mergedList) { - if (!template.isMatchRuleMobile()) return template; + // Now there are several types of network which uses SubscriberId to store network + // information. For instances: + // The TYPE_WIFI with subscriberId means that it is a merged carrier wifi network. + // The TYPE_CARRIER means that the network associate to specific carrier network. + + if (template.mSubscriberId == null) return template; for (String[] merged : mergedList) { if (ArrayUtils.contains(merged, template.mSubscriberId)) { -- cgit v1.2.3 From 05e7906edb106fc72b0cba5b1e3a936503ee7fc8 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Wed, 20 Oct 2021 19:00:22 +0800 Subject: Only register listeners if setView was success. Found a memory leak on ViewRootImpl. If the view wasn't been set to the VRI successfully, there would keep the registed listeners to the AccessibilityManager and DisplayManager forever because there didn't need to deatch anything from window. Another reasonable way is to register all listeners after setView success. Bug: 200843755 Test: manual, hard code to force addWindow fail and monitor no more ViewRootImpl object leaked to AccessibilityManager and DisplayManager. Change-Id: I3c9cc52d0ca4595c74c1dc3c51d286d9e6e3897f Merged-In: I3c9cc52d0ca4595c74c1dc3c51d286d9e6e3897f (cherry picked from commit d69deffd3551c7b008957763d218e6ed1b706384) Merged-In:I3c9cc52d0ca4595c74c1dc3c51d286d9e6e3897f --- core/java/android/view/ViewRootImpl.java | 36 +++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 0ecd76f82a8a..5c09640e1785 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -800,11 +800,7 @@ public final class ViewRootImpl implements ViewParent, context); mCompatibleVisibilityInfo = new SystemUiVisibilityInfo(); mAccessibilityManager = AccessibilityManager.getInstance(context); - mAccessibilityManager.addAccessibilityStateChangeListener( - mAccessibilityInteractionConnectionManager, mHandler); mHighContrastTextManager = new HighContrastTextManager(); - mAccessibilityManager.addHighTextContrastStateChangeListener( - mHighContrastTextManager, mHandler); mViewConfiguration = ViewConfiguration.get(context); mDensity = context.getResources().getDisplayMetrics().densityDpi; mNoncompatDensity = context.getResources().getDisplayMetrics().noncompatDensityDpi; @@ -1004,8 +1000,6 @@ public final class ViewRootImpl implements ViewParent, mView = view; mAttachInfo.mDisplayState = mDisplay.getState(); - mDisplayManager.registerDisplayListener(mDisplayListener, mHandler); - mViewLayoutDirectionInitial = mView.getRawLayoutDirection(); mFallbackEventHandler.setView(view); mWindowAttributes.copyFrom(attrs); @@ -1198,6 +1192,7 @@ public final class ViewRootImpl implements ViewParent, "Unable to add window -- unknown error code " + res); } + registerListeners(); if ((res & WindowManagerGlobal.ADD_FLAG_USE_BLAST) != 0) { mUseBLASTAdapter = true; } @@ -1254,6 +1249,28 @@ public final class ViewRootImpl implements ViewParent, } } + /** + * Register any kind of listeners if setView was success. + */ + private void registerListeners() { + mAccessibilityManager.addAccessibilityStateChangeListener( + mAccessibilityInteractionConnectionManager, mHandler); + mAccessibilityManager.addHighTextContrastStateChangeListener( + mHighContrastTextManager, mHandler); + mDisplayManager.registerDisplayListener(mDisplayListener, mHandler); + } + + /** + * Unregister all listeners while detachedFromWindow. + */ + private void unregisterListeners() { + mAccessibilityManager.removeAccessibilityStateChangeListener( + mAccessibilityInteractionConnectionManager); + mAccessibilityManager.removeHighTextContrastStateChangeListener( + mHighContrastTextManager); + mDisplayManager.unregisterDisplayListener(mDisplayListener); + } + private void setTag() { final String[] split = mWindowAttributes.getTitle().toString().split("\\."); if (split.length > 0) { @@ -4979,10 +4996,6 @@ public final class ViewRootImpl implements ViewParent, } mAccessibilityInteractionConnectionManager.ensureNoConnection(); - mAccessibilityManager.removeAccessibilityStateChangeListener( - mAccessibilityInteractionConnectionManager); - mAccessibilityManager.removeHighTextContrastStateChangeListener( - mHighContrastTextManager); removeSendWindowContentChangedCallback(); destroyHardwareRenderer(); @@ -5015,8 +5028,7 @@ public final class ViewRootImpl implements ViewParent, mInputEventReceiver = null; } - mDisplayManager.unregisterDisplayListener(mDisplayListener); - + unregisterListeners(); unscheduleTraversals(); } -- cgit v1.2.3 From 86e6db3ec59462003bff39bcc318cd1ac7678e9e Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Wed, 3 Nov 2021 18:24:09 +0000 Subject: Tweak volume adjustment rules Test: manual Bug: 197586676 Bug: 202500642 Merged-In: If531a23f5e7b242d3d637966b74b67acfd303199 Change-Id: If531a23f5e7b242d3d637966b74b67acfd303199 (cherry picked from commit 022081595bf4a082f8354b852eae6d5a015be3fe) Merged-In:If531a23f5e7b242d3d637966b74b67acfd303199 --- core/res/res/values/config.xml | 5 +- core/res/res/values/symbols.xml | 2 +- .../volume/VolumeDialogControllerImpl.java | 58 +++++++++++++++++----- .../volume/VolumeDialogControllerImplTest.java | 5 ++ .../android/server/media/MediaSession2Record.java | 6 +++ .../android/server/media/MediaSessionRecord.java | 33 ++++++++++++ .../server/media/MediaSessionRecordImpl.java | 7 +++ .../android/server/media/MediaSessionStack.java | 3 +- 8 files changed, 102 insertions(+), 17 deletions(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 0abeff91e511..fbc14c7e2e17 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1908,8 +1908,9 @@ STREAM_MUSIC as if it's on TV platform. --> false - - true + + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 0a98601969af..53b505e93020 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -4431,7 +4431,7 @@ - + diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index e57059894786..cd6a77836304 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -33,7 +33,11 @@ import android.media.AudioManager; import android.media.AudioSystem; import android.media.IAudioService; import android.media.IVolumeController; +import android.media.MediaRoute2Info; +import android.media.MediaRouter2Manager; +import android.media.RoutingSessionInfo; import android.media.VolumePolicy; +import android.media.session.MediaController; import android.media.session.MediaController.PlaybackInfo; import android.media.session.MediaSession.Token; import android.net.Uri; @@ -71,6 +75,7 @@ import com.android.systemui.util.concurrency.ThreadFactory; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -118,6 +123,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private final Context mContext; private final Looper mWorkerLooper; private final PackageManager mPackageManager; + private final MediaRouter2Manager mRouter2Manager; private final WakefulnessLifecycle mWakefulnessLifecycle; private AudioManager mAudio; private IAudioService mAudioService; @@ -179,6 +185,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mWorkerLooper = theadFactory.buildLooperOnNewThread( VolumeDialogControllerImpl.class.getSimpleName()); mWorker = new W(mWorkerLooper); + mRouter2Manager = MediaRouter2Manager.getInstance(mContext); mMediaSessionsCallbacksW = new MediaSessionsCallbacks(mContext); mMediaSessions = createMediaSessions(mContext, mWorkerLooper, mMediaSessionsCallbacksW); mAudio = audioManager; @@ -1149,16 +1156,16 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private final HashMap mRemoteStreams = new HashMap<>(); private int mNextStream = DYNAMIC_STREAM_START_INDEX; - private final boolean mShowRemoteSessions; + private final boolean mVolumeAdjustmentForRemoteGroupSessions; public MediaSessionsCallbacks(Context context) { - mShowRemoteSessions = context.getResources().getBoolean( - com.android.internal.R.bool.config_volumeShowRemoteSessions); + mVolumeAdjustmentForRemoteGroupSessions = context.getResources().getBoolean( + com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions); } @Override public void onRemoteUpdate(Token token, String name, PlaybackInfo pi) { - if (mShowRemoteSessions) { + if (showForSession(token)) { addStream(token, "onRemoteUpdate"); int stream = 0; @@ -1190,7 +1197,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void onRemoteVolumeChanged(Token token, int flags) { - if (mShowRemoteSessions) { + if (showForSession(token)) { addStream(token, "onRemoteVolumeChanged"); int stream = 0; synchronized (mRemoteStreams) { @@ -1214,7 +1221,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void onRemoteRemoved(Token token) { - if (mShowRemoteSessions) { + if (showForSession(token)) { int stream = 0; synchronized (mRemoteStreams) { if (!mRemoteStreams.containsKey(token)) { @@ -1233,14 +1240,41 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } public void setStreamVolume(int stream, int level) { - if (mShowRemoteSessions) { - final Token t = findToken(stream); - if (t == null) { - Log.w(TAG, "setStreamVolume: No token found for stream: " + stream); - return; + final Token token = findToken(stream); + if (token == null) { + Log.w(TAG, "setStreamVolume: No token found for stream: " + stream); + return; + } + if (showForSession(token)) { + mMediaSessions.setVolume(token, level); + } + } + + private boolean showForSession(Token token) { + if (mVolumeAdjustmentForRemoteGroupSessions) { + return true; + } + MediaController ctr = new MediaController(mContext, token); + String packageName = ctr.getPackageName(); + List sessions = + mRouter2Manager.getRoutingSessions(packageName); + boolean foundNonSystemSession = false; + boolean isGroup = false; + for (RoutingSessionInfo session : sessions) { + if (!session.isSystemSession()) { + foundNonSystemSession = true; + int selectedRouteCount = session.getSelectedRoutes().size(); + if (selectedRouteCount > 1) { + isGroup = true; + break; + } } - mMediaSessions.setVolume(t, level); } + if (!foundNonSystemSession) { + Log.d(TAG, "No routing session for " + packageName); + return false; + } + return !isGroup; } private Token findToken(int stream) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java index 5c0efd36fcd1..c9462d651bc0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java @@ -101,6 +101,11 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { // Initial non-set value when(mRingerModeLiveData.getValue()).thenReturn(-1); when(mRingerModeInternalLiveData.getValue()).thenReturn(-1); + // Enable group volume adjustments + mContext.getOrCreateTestableResources().addOverride( + com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions, + true); + mCallback = mock(VolumeDialogControllerImpl.C.class); mThreadFactory.setLooper(TestableLooper.get(this).getLooper()); mVolumeController = new TestableVolumeDialogControllerImpl(mContext, diff --git a/services/core/java/com/android/server/media/MediaSession2Record.java b/services/core/java/com/android/server/media/MediaSession2Record.java index 607218e20ea8..b424c2083bd4 100644 --- a/services/core/java/com/android/server/media/MediaSession2Record.java +++ b/services/core/java/com/android/server/media/MediaSession2Record.java @@ -145,6 +145,12 @@ public class MediaSession2Record implements MediaSessionRecordImpl { return false; } + @Override + public boolean canHandleVolumeKey() { + // TODO: Implement when MediaSession2 starts to get key events. + return false; + } + @Override public int getSessionPolicies() { synchronized (mLock) { diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 1525cd4da669..e4ed0e5d4186 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -26,7 +26,9 @@ import android.media.AudioAttributes; import android.media.AudioManager; import android.media.AudioSystem; import android.media.MediaMetadata; +import android.media.MediaRouter2Manager; import android.media.Rating; +import android.media.RoutingSessionInfo; import android.media.VolumeProvider; import android.media.session.ISession; import android.media.session.ISessionCallback; @@ -50,6 +52,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.SystemClock; +import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; @@ -121,6 +124,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR private final SessionCb mSessionCb; private final MediaSessionService mService; private final Context mContext; + private final boolean mVolumeAdjustmentForRemoteGroupSessions; private final Object mLock = new Object(); private final CopyOnWriteArrayList @@ -180,6 +184,8 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); mAudioAttrs = DEFAULT_ATTRIBUTES; mPolicies = policies; + mVolumeAdjustmentForRemoteGroupSessions = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions); // May throw RemoteException if the session app is killed. mSessionCb.mCb.asBinder().linkToDeath(this, 0); @@ -448,6 +454,33 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR cb); } + @Override + public boolean canHandleVolumeKey() { + if (isPlaybackTypeLocal() || mVolumeAdjustmentForRemoteGroupSessions) { + return true; + } + MediaRouter2Manager mRouter2Manager = MediaRouter2Manager.getInstance(mContext); + List sessions = + mRouter2Manager.getRoutingSessions(mPackageName); + boolean foundNonSystemSession = false; + boolean isGroup = false; + for (RoutingSessionInfo session : sessions) { + if (!session.isSystemSession()) { + foundNonSystemSession = true; + int selectedRouteCount = session.getSelectedRoutes().size(); + if (selectedRouteCount > 1) { + isGroup = true; + break; + } + } + } + if (!foundNonSystemSession) { + Log.d(TAG, "No routing session for " + mPackageName); + return false; + } + return !isGroup; + } + @Override public int getSessionPolicies() { synchronized (mLock) { diff --git a/services/core/java/com/android/server/media/MediaSessionRecordImpl.java b/services/core/java/com/android/server/media/MediaSessionRecordImpl.java index 3c50597b8cfc..8f01f02f2ab1 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecordImpl.java +++ b/services/core/java/com/android/server/media/MediaSessionRecordImpl.java @@ -130,6 +130,13 @@ public interface MediaSessionRecordImpl extends AutoCloseable { boolean sendMediaButton(String packageName, int pid, int uid, boolean asSystemService, KeyEvent ke, int sequenceId, ResultReceiver cb); + /** + * Returns whether the media session can handle volume key events. + * + * @return True if this media session can handle volume key events, false otherwise. + */ + boolean canHandleVolumeKey(); + /** * Get session policies from custom policy provider set when MediaSessionRecord is instantiated. * If custom policy does not exist, will return null. diff --git a/services/core/java/com/android/server/media/MediaSessionStack.java b/services/core/java/com/android/server/media/MediaSessionStack.java index c4c21df746b3..b75ba75e028b 100644 --- a/services/core/java/com/android/server/media/MediaSessionStack.java +++ b/services/core/java/com/android/server/media/MediaSessionStack.java @@ -325,8 +325,7 @@ class MediaSessionStack { int size = records.size(); for (int i = 0; i < size; i++) { MediaSessionRecord record = records.get(i); - // Do not send the volume key events to remote sessions. - if (record.checkPlaybackActiveState(true) && record.isPlaybackTypeLocal()) { + if (record.checkPlaybackActiveState(true) && record.canHandleVolumeKey()) { mCachedVolumeDefault = record; return record; } -- cgit v1.2.3 From 74372060f9ba3bb56782e79df91fe77af60a76db Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Mon, 8 Nov 2021 21:12:36 +0000 Subject: Re-enable volume control for non-grouped devices Bug: 197586676 Bug: 202500642 Test: make -j50 RunSettingsRoboTests Merged-In: I7740d78f3a7dca62d64e6cf7b8c9ffa1578c8e74 Change-Id: I7740d78f3a7dca62d64e6cf7b8c9ffa1578c8e74 (cherry picked from commit b7f52f4468a1daa7408e44fafb362b54eec20897) Merged-In:I7740d78f3a7dca62d64e6cf7b8c9ffa1578c8e74 --- .../src/com/android/settingslib/media/InfoMediaManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 3c43f4a637ba..a383c1e2b680 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -70,6 +70,7 @@ public class InfoMediaManager extends MediaManager { MediaRouter2Manager mRouterManager; @VisibleForTesting String mPackageName; + private final boolean mVolumeAdjustmentForRemoteGroupSessions; private MediaDevice mCurrentConnectedDevice; private LocalBluetoothManager mBluetoothManager; @@ -83,6 +84,9 @@ public class InfoMediaManager extends MediaManager { if (!TextUtils.isEmpty(packageName)) { mPackageName = packageName; } + + mVolumeAdjustmentForRemoteGroupSessions = context.getResources().getBoolean( + com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions); } @Override @@ -387,7 +391,9 @@ public class InfoMediaManager extends MediaManager { @TargetApi(Build.VERSION_CODES.R) boolean shouldEnableVolumeSeekBar(RoutingSessionInfo sessionInfo) { - return false; + return sessionInfo.isSystemSession() // System sessions are not remote + || mVolumeAdjustmentForRemoteGroupSessions + || sessionInfo.getSelectedRoutes().size() <= 1; } private void refreshDevices() { -- cgit v1.2.3 From 06ad525359baf9037679878fbec54efdb0e5b183 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Thu, 11 Nov 2021 00:02:44 +0000 Subject: Plumb config to output switcher indication chip Bug: 197586676 Bug: 202500642 Test: manual Merged-In: I71d7f11b9d88dfb9ef74814e9ac7f9d28b0e652c Change-Id: I71d7f11b9d88dfb9ef74814e9ac7f9d28b0e652c (cherry picked from commit 92013ed958dbc7e666ced0c4b0337f03ff9381c8) Merged-In:I71d7f11b9d88dfb9ef74814e9ac7f9d28b0e652c --- .../com/android/systemui/media/dialog/MediaOutputController.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index b2def7a8596a..802e5ebaf1c7 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -75,6 +75,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { private final ActivityStarter mActivityStarter; private final List mGroupMediaDevices = new CopyOnWriteArrayList<>(); private final boolean mAboveStatusbar; + private final boolean mVolumeAdjustmentForRemoteGroupSessions; private final NotificationEntryManager mNotificationEntryManager; @VisibleForTesting final List mMediaDevices = new CopyOnWriteArrayList<>(); @@ -104,6 +105,8 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName); mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName); mUiEventLogger = uiEventLogger; + mVolumeAdjustmentForRemoteGroupSessions = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions); } void start(@NonNull Callback cb) { @@ -466,7 +469,9 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { } boolean isVolumeControlEnabled(@NonNull MediaDevice device) { - return !isActiveRemoteDevice(device); + // TODO(b/202500642): Also enable volume control for remote non-group sessions. + return !isActiveRemoteDevice(device) + || mVolumeAdjustmentForRemoteGroupSessions; } private final MediaController.Callback mCb = new MediaController.Callback() { -- cgit v1.2.3 From b0fd66ff136e510af9ef2e2d99f58020f7a19583 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Wed, 17 Nov 2021 20:38:01 +0000 Subject: Fix SysUI volume controls not appearing SysUI listens to volume change events to trigger showing its volume control overlay UI. Normally when a hardware volume key is pressed, a volume (either locally or for a session corresponding to a remote playback) is changed, SysUI receives an event and the UI is displayed. In the case that a remote session doesn't allow volume adjustment, the key event is still routed to the session if that session is top of the stack. However, since the volume is not adjusted and an event is not dispatched, the SysUI volume control overlay doesn't appear. To the user it seems like the volume hardware key is broken, neither adjusting a volume or displaying the volume control overlay UI. This change fires volume change events for sessions that don't support actually changing the volume, to ensure that the SysUI is still displayed. It also seems more consistent, since there are other existing cases where the volume doesn't actually change for which an event is still fired (e.g., adjusting up when already at max volume). An alternative would be to change MediaSessionRecord's canHandleVolumeKey to return false for sessions that don't support volume adjustment, which would mean the key event would be handled by the next session in the stack (or, in most cases, to make a local volume adjustment). This is likely more confusing, since the user will generally expect the top session to be adjusted (surfacing that it could not is less confusing than just adjusting some other volume instead). Bug: 197586676 Bug: 202500642 Test: manual Merged-In: Ic44b48bb5605699b476af05407b90f2be5d70cd3 Change-Id: Ic44b48bb5605699b476af05407b90f2be5d70cd3 (cherry picked from commit 771b7ebe5d10f867a44101aa7a0b0a779bacfd32) Merged-In:Ic44b48bb5605699b476af05407b90f2be5d70cd3 --- .../android/server/media/MediaSessionRecord.java | 85 ++++++++++++---------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index e4ed0e5d4186..4822d6a62ac7 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -291,35 +291,39 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR asSystemService, useSuggested, previousFlagPlaySound); } else { if (mVolumeControlType == VolumeProvider.VOLUME_CONTROL_FIXED) { - // Nothing to do, the volume cannot be changed - return; - } - if (direction == AudioManager.ADJUST_TOGGLE_MUTE + if (DEBUG) { + Log.d(TAG, "Session does not support volume adjustment"); + } + } else if (direction == AudioManager.ADJUST_TOGGLE_MUTE || direction == AudioManager.ADJUST_MUTE || direction == AudioManager.ADJUST_UNMUTE) { Log.w(TAG, "Muting remote playback is not supported"); - return; - } - if (DEBUG) { - Log.w(TAG, "adjusting volume, pkg=" + packageName + ", asSystemService=" - + asSystemService + ", dir=" + direction); - } - mSessionCb.adjustVolume(packageName, pid, uid, asSystemService, direction); + } else { + if (DEBUG) { + Log.w(TAG, "adjusting volume, pkg=" + packageName + ", asSystemService=" + + asSystemService + ", dir=" + direction); + } + mSessionCb.adjustVolume(packageName, pid, uid, asSystemService, direction); + + int volumeBefore = (mOptimisticVolume < 0 ? mCurrentVolume : mOptimisticVolume); + mOptimisticVolume = volumeBefore + direction; + mOptimisticVolume = Math.max(0, Math.min(mOptimisticVolume, mMaxVolume)); + mHandler.removeCallbacks(mClearOptimisticVolumeRunnable); + mHandler.postDelayed(mClearOptimisticVolumeRunnable, OPTIMISTIC_VOLUME_TIMEOUT); + if (volumeBefore != mOptimisticVolume) { + pushVolumeUpdate(); + } - int volumeBefore = (mOptimisticVolume < 0 ? mCurrentVolume : mOptimisticVolume); - mOptimisticVolume = volumeBefore + direction; - mOptimisticVolume = Math.max(0, Math.min(mOptimisticVolume, mMaxVolume)); - mHandler.removeCallbacks(mClearOptimisticVolumeRunnable); - mHandler.postDelayed(mClearOptimisticVolumeRunnable, OPTIMISTIC_VOLUME_TIMEOUT); - if (volumeBefore != mOptimisticVolume) { - pushVolumeUpdate(); + if (DEBUG) { + Log.d(TAG, "Adjusted optimistic volume to " + mOptimisticVolume + " max is " + + mMaxVolume); + } } + // Always notify, even if the volume hasn't changed. This is important to ensure that + // System UI receives an event if a hardware volume key is pressed but the session that + // handles it does not allow volume adjustment. Without such an event, System UI would + // not show volume controls to the user. mService.notifyRemoteVolumeChanged(flags, this); - - if (DEBUG) { - Log.d(TAG, "Adjusted optimistic volume to " + mOptimisticVolume + " max is " - + mMaxVolume); - } } } @@ -343,25 +347,28 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR }); } else { if (mVolumeControlType != VolumeProvider.VOLUME_CONTROL_ABSOLUTE) { - // Nothing to do. The volume can't be set directly. - return; - } - value = Math.max(0, Math.min(value, mMaxVolume)); - mSessionCb.setVolumeTo(packageName, pid, uid, value); + if (DEBUG) { + Log.d(TAG, "Session does not support setting volume"); + } + } else { + value = Math.max(0, Math.min(value, mMaxVolume)); + mSessionCb.setVolumeTo(packageName, pid, uid, value); + + int volumeBefore = (mOptimisticVolume < 0 ? mCurrentVolume : mOptimisticVolume); + mOptimisticVolume = Math.max(0, Math.min(value, mMaxVolume)); + mHandler.removeCallbacks(mClearOptimisticVolumeRunnable); + mHandler.postDelayed(mClearOptimisticVolumeRunnable, OPTIMISTIC_VOLUME_TIMEOUT); + if (volumeBefore != mOptimisticVolume) { + pushVolumeUpdate(); + } - int volumeBefore = (mOptimisticVolume < 0 ? mCurrentVolume : mOptimisticVolume); - mOptimisticVolume = Math.max(0, Math.min(value, mMaxVolume)); - mHandler.removeCallbacks(mClearOptimisticVolumeRunnable); - mHandler.postDelayed(mClearOptimisticVolumeRunnable, OPTIMISTIC_VOLUME_TIMEOUT); - if (volumeBefore != mOptimisticVolume) { - pushVolumeUpdate(); + if (DEBUG) { + Log.d(TAG, "Set optimistic volume to " + mOptimisticVolume + " max is " + + mMaxVolume); + } } + // Always notify, even if the volume hasn't changed. mService.notifyRemoteVolumeChanged(flags, this); - - if (DEBUG) { - Log.d(TAG, "Set optimistic volume to " + mOptimisticVolume + " max is " - + mMaxVolume); - } } } -- cgit v1.2.3 From f5fbc4aade22388ab8f4994b9c1c9aedc82672d7 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Tue, 23 Nov 2021 06:42:28 +0000 Subject: Fix issue with alphas not being applied to the same view on unlock - It's possible for the nav bar configuration to change between locking and unlocking the phone, which will prevent the alpha from being restored on the bar layout correctly. This change updates the alpha of both vertical/horizontal layouts in NavBarView since they should always be in sync. Bug: 206733387 Test: atest SystemUITests Test: Lock screen in landscape app, turn screen on and unlock Change-Id: I265d04e6e2192f2bb57b1f8d77390664236427fc (cherry picked from commit 9b53d2ecabe2472a464007dd463593f95b4e19d5) (cherry picked from commit acb755ce9e27832bc1b02670098d144231b300e0) Merged-In:I265d04e6e2192f2bb57b1f8d77390664236427fc --- .../systemui/navigationbar/NavigationBarView.java | 19 +++++++---- .../phone/StatusBarKeyguardViewManager.java | 37 ++++++++-------------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index 70c21e43b79a..2c6e77c2444b 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -108,6 +108,7 @@ public class NavigationBarView extends FrameLayout implements private final int mNavColorSampleMargin; private final SysUiState mSysUiFlagContainer; + // The current view is one of mHorizontal or mVertical depending on the current configuration View mCurrentView = null; private View mVertical; private View mHorizontal; @@ -370,12 +371,6 @@ public class NavigationBarView extends FrameLayout implements } } - @Override - protected boolean onSetAlpha(int alpha) { - Log.e(TAG, "onSetAlpha", new Throwable()); - return super.onSetAlpha(alpha); - } - public void setAutoHideController(AutoHideController autoHideController) { mAutoHideController = autoHideController; } @@ -474,6 +469,18 @@ public class NavigationBarView extends FrameLayout implements return mCurrentView; } + /** + * Applies {@param consumer} to each of the nav bar views. + */ + public void forEachView(Consumer consumer) { + if (mVertical != null) { + consumer.accept(mVertical); + } + if (mHorizontal != null) { + consumer.accept(mHorizontal); + } + } + public RotationButtonController getRotationButtonController() { return mRotationButtonController; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 1e3e47b75d8a..13b01103247a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -552,12 +552,13 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb public void onStartedWakingUp() { mStatusBar.getNotificationShadeWindowView().getWindowInsetsController() .setAnimationsDisabled(false); - View currentView = getCurrentNavBarView(); - if (currentView != null) { - currentView.animate() - .alpha(1f) - .setDuration(NAV_BAR_CONTENT_FADE_DURATION) - .start(); + NavigationBarView navBarView = mStatusBar.getNavigationBarView(); + if (navBarView != null) { + navBarView.forEachView(view -> + view.animate() + .alpha(1f) + .setDuration(NAV_BAR_CONTENT_FADE_DURATION) + .start()); } } @@ -565,12 +566,13 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb public void onStartedGoingToSleep() { mStatusBar.getNotificationShadeWindowView().getWindowInsetsController() .setAnimationsDisabled(true); - View currentView = getCurrentNavBarView(); - if (currentView != null) { - currentView.animate() - .alpha(0f) - .setDuration(NAV_BAR_CONTENT_FADE_DURATION) - .start(); + NavigationBarView navBarView = mStatusBar.getNavigationBarView(); + if (navBarView != null) { + navBarView.forEachView(view -> + view.animate() + .alpha(0f) + .setDuration(NAV_BAR_CONTENT_FADE_DURATION) + .start()); } } @@ -996,17 +998,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mStatusBar.onKeyguardViewManagerStatesUpdated(); } - /** - * Updates the visibility of the nav bar content views. - */ - private void updateNavigationBarContentVisibility(boolean navBarContentVisible) { - final NavigationBarView navBarView = mStatusBar.getNavigationBarView(); - if (navBarView != null && navBarView.getCurrentView() != null) { - final View currentView = navBarView.getCurrentView(); - currentView.setVisibility(navBarContentVisible ? View.VISIBLE : View.INVISIBLE); - } - } - private View getCurrentNavBarView() { final NavigationBarView navBarView = mStatusBar.getNavigationBarView(); return navBarView != null ? navBarView.getCurrentView() : null; -- cgit v1.2.3 From efb099367349a687d36b0514744ac01bbd85006b Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Wed, 17 Nov 2021 16:05:10 -0800 Subject: Ignore ui mode change caused by Morris overlay in PiP When entering PiP from GMM with Morris overlay enabled, there will be a display change callback caused by ui mode change that tend to shift the PiP window. For PiP, such ui mode change from app is not quite relevant and we can simply ignore in PipController. Bug: 201589034 Video: http://recall/-/aaaaaabFQoRHlzixHdtY/dmI3KCeKPAH118BRqnhgNO Test: enter PiP from GMM with Morris overlay, see video Merged-In: I2d72e166fb8de1e503415b5441c03f0685de9573 Change-Id: I2d72e166fb8de1e503415b5441c03f0685de9573 (cherry picked from commit 391f372726af62c6d9ba9b221508003c37e8ff8a) (cherry picked from commit 166f263128010f6a885efa17a5ebc3aa94d3b3d6) Merged-In:I2d72e166fb8de1e503415b5441c03f0685de9573 --- .../src/com/android/wm/shell/common/DisplayLayout.java | 13 +++++++++++++ .../src/com/android/wm/shell/pip/phone/PipController.java | 3 +-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java index b7235a31af03..a568c28dacf1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java @@ -83,6 +83,19 @@ public class DisplayLayout { private boolean mHasStatusBar = false; private int mNavBarFrameHeight = 0; + /** + * Different from {@link #equals(Object)}, this method compares the basic geometry properties + * of two {@link DisplayLayout} objects including width, height, rotation, density and cutout. + * @return {@code true} if the given {@link DisplayLayout} is identical geometry wise. + */ + public boolean isSameGeometry(@NonNull DisplayLayout other) { + return mWidth == other.mWidth + && mHeight == other.mHeight + && mRotation == other.mRotation + && mDensityDpi == other.mDensityDpi + && Objects.equals(mCutout, other.mCutout); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java index 63f1985aa86e..8967457802a7 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java @@ -76,7 +76,6 @@ import com.android.wm.shell.pip.PipTransitionController; import com.android.wm.shell.pip.PipUtils; import java.io.PrintWriter; -import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; @@ -441,7 +440,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb } private void onDisplayChanged(DisplayLayout layout, boolean saveRestoreSnapFraction) { - if (Objects.equals(layout, mPipBoundsState.getDisplayLayout())) { + if (mPipBoundsState.getDisplayLayout().isSameGeometry(layout)) { return; } Runnable updateDisplayLayout = () -> { -- cgit v1.2.3 From f389baa556a1db5e0015eeb74be3281d3af0f50b Mon Sep 17 00:00:00 2001 From: wentjin Date: Fri, 24 Dec 2021 18:00:08 +0800 Subject: Use CopyOnWriteArrayList for mGroupDevices This change updates ArrayList to CopyOnWriteArrayList for mGroupDevices for thread safe concurrent access. CRs-Fixed: 3100274 Change-Id: Id303c4ceb3740fb47ce81ebd71bce0b2219cb1b2 --- core/java/android/bluetooth/DeviceGroup.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/java/android/bluetooth/DeviceGroup.java b/core/java/android/bluetooth/DeviceGroup.java index f1bd2c310197..0dac87f3d8f6 100644 --- a/core/java/android/bluetooth/DeviceGroup.java +++ b/core/java/android/bluetooth/DeviceGroup.java @@ -38,6 +38,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.UUID; +import java.util.concurrent.CopyOnWriteArrayList; /** * Provides Device Group details. @@ -53,7 +54,8 @@ public final class DeviceGroup implements Parcelable { /** Size of the Device Group. */ private int mSize; /** List of all group devices {@link BluetoothDevice} */ - private List mGroupDevices = new ArrayList(); + private CopyOnWriteArrayList mGroupDevices + = new CopyOnWriteArrayList(); /** Primary Service UUID which has included required Device Group service*/ private final ParcelUuid mIncludingSrvcUUID; /** Suggests whether exclusive access can be taken for this device group */ @@ -67,7 +69,7 @@ public final class DeviceGroup implements Parcelable { ParcelUuid includingSrvcUUID, boolean exclusiveAccessSupport) { mGroupId = groupId; mSize = size; - mGroupDevices = groupDevices; + mGroupDevices.addAll(groupDevices); mIncludingSrvcUUID = includingSrvcUUID; mExclusiveAccessSupport = exclusiveAccessSupport; } -- cgit v1.2.3 From 002151080a4ada96916c966a358a712bed359db4 Mon Sep 17 00:00:00 2001 From: zhenchao Date: Mon, 3 Jan 2022 15:03:18 +0800 Subject: BtHelper: enhancement change for CSIP group device SCO connection update To avoid forcing audio HAL switch route device to speaker while only one peer is disconnected. Make below BtHelper enhancement changes: 1. tear down audio-path while call audio stream is disconnected for all group members. 2. brought-up audo-path while call audio stream is started for first member. Change-Id: I806bdf09bc9259338d23efb0b13226aee543ba15 CRs-Fixed: 3105627 --- .../java/com/android/server/audio/BtHelper.java | 72 +++++++++++++++++++++- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/audio/BtHelper.java b/services/core/java/com/android/server/audio/BtHelper.java index 1dd90484672f..774415221482 100644 --- a/services/core/java/com/android/server/audio/BtHelper.java +++ b/services/core/java/com/android/server/audio/BtHelper.java @@ -323,9 +323,11 @@ public class BtHelper { return AudioSystem.bluetoothCodecToAudioFormat(btCodecConfig.getCodecType()); } - //SCO device tracking for TWSPLUS device + //SCO device tracking for TWSPLUS or GROUP device private HashMap mScoClientDevices = new HashMap(); + private static final int GROUP_ID_START = 0; + private static final int GROUP_ID_END = 15; private void updateTwsPlusScoState(BluetoothDevice device, Integer state) { if (mScoClientDevices.containsKey(device)) { @@ -392,6 +394,68 @@ public class BtHelper { return ret; } + private boolean isGroupDevice(BluetoothDevice device) { + int type = device.getDeviceType(); + boolean ret = false; + Log.i(TAG, "Bluetooth device type: " + type); + if (type >= GROUP_ID_START && type <= GROUP_ID_END) + ret = true; + Log.i(TAG, "isGroupDevice return " + ret); + return ret; + } + + private void updateGroupScoState(BluetoothDevice device, Integer state) { + if (mScoClientDevices.containsKey(device)) { + Integer prevState = mScoClientDevices.get(device); + Log.i(TAG, "updateGroupScoState: prevState: " + prevState + "state: " + state); + if (state != prevState) { + mScoClientDevices.remove(device); + mScoClientDevices.put(device, state); + } + } else { + mScoClientDevices.put(device, state); + } + } + + private boolean checkAndUpdateGroupScoState(Intent intent, Integer state) { + //default ret value is true + //so that legacy devices fallsthru + boolean ret = true; + BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + Log.i(TAG, "device:" + device); + + if (device == null) { + Log.e(TAG, "checkAndUpdateGroupScoState: device is null"); + //intent cant have device has null + //in case it is treat them as non-twsplus case and return true + return ret; + } + + if (isGroupDevice(device)) { + if (state == BluetoothHeadset.STATE_AUDIO_CONNECTED) { + //if adding new Device + //check if there is no device already connected + if (isAudioPathUp()) { + Log.i(TAG, "No need to bringup audio-path"); + ret = false; + } + //Update the States now + updateGroupScoState(device, state); + } else { + //For disconnect cases, update the state first + updateGroupScoState(device, state); + //if deleting new Device + //check if all devices are disconnected + if (isAudioPathUp()) { + Log.i(TAG, "not good to tear down audio-path"); + ret = false; + } + } + } + Log.i(TAG, "checkAndUpdateGroupScoState returns " + ret); + return ret; + } + // @GuardedBy("AudioDeviceBroker.mSetModeLock") @GuardedBy("AudioDeviceBroker.mDeviceStateLock") /*package*/ synchronized void receiveBtEvent(Intent intent) { @@ -409,6 +473,8 @@ public class BtHelper { switch (btState) { case BluetoothHeadset.STATE_AUDIO_CONNECTED: if (checkAndUpdatTwsPlusScoState(intent, + BluetoothHeadset.STATE_AUDIO_CONNECTED) && + checkAndUpdateGroupScoState(intent, BluetoothHeadset.STATE_AUDIO_CONNECTED)) { scoAudioState = AudioManager.SCO_AUDIO_STATE_CONNECTED; if (mScoAudioState != SCO_STATE_ACTIVE_INTERNAL && @@ -429,7 +495,9 @@ public class BtHelper { break; case BluetoothHeadset.STATE_AUDIO_DISCONNECTED: if (checkAndUpdatTwsPlusScoState(intent, - BluetoothHeadset.STATE_AUDIO_DISCONNECTED)) { + BluetoothHeadset.STATE_AUDIO_DISCONNECTED) && + checkAndUpdateGroupScoState(intent, + BluetoothHeadset.STATE_AUDIO_DISCONNECTED)) { mDeviceBroker.setBluetoothScoOn(false, "BtHelper.receiveBtEvent"); scoAudioState = AudioManager.SCO_AUDIO_STATE_DISCONNECTED; // There are two cases where we want to immediately reconnect audio: -- cgit v1.2.3 From bdef0fe373f2c9957ac4c83cc55127836263e862 Mon Sep 17 00:00:00 2001 From: Avinash Nalluri Date: Wed, 5 Jan 2022 12:04:11 -0800 Subject: Configure delay time for CIWLAN Configure maximum delay time to deactiavate data call. If the timer value sent by RIL is larger, we should reset to configured MAX. This ensures that user does not have to wait for too long if a large value comes from lower layers. Change-Id: Id2a418a466343e879f1996c843f3b6f2bedaaf92 CRs-Fixed: 3084270 --- core/res/res/values/config.xml | 4 ++++ core/res/res/values/symbols.xml | 2 ++ 2 files changed, 6 insertions(+) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 33e38e066f21..bf7b8dd3eabe 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -5095,4 +5095,8 @@ 32 + + + 7000 diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index bcd80ac1989e..00c595e2be84 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -4463,4 +4463,6 @@ + + -- cgit v1.2.3 From 53b90bcdb3451c98671aef937e2dd3523c698d61 Mon Sep 17 00:00:00 2001 From: Aman Mehta Date: Wed, 22 Dec 2021 15:09:04 +0530 Subject: Perf: Added support for app type in launch hint Added support for app type in launch hint CRs-Fixed: 3099018 Change-Id: Icba61c84d179767596fb2aa2ada38adb1ffba900 --- core/java/android/util/BoostFramework.java | 26 ++++++++ .../android/server/am/ActivityManagerService.java | 11 +++- .../com/android/server/wm/ActivityStarter.java | 28 ++++++-- .../android/server/wm/ActivityTaskSupervisor.java | 56 +++++++++++++--- .../com/android/server/wm/RootWindowContainer.java | 75 +++++++++++++++------- 5 files changed, 158 insertions(+), 38 deletions(-) mode change 100755 => 100644 services/core/java/com/android/server/wm/ActivityTaskSupervisor.java diff --git a/core/java/android/util/BoostFramework.java b/core/java/android/util/BoostFramework.java index 59ec6caba3ed..461d67a8ae83 100644 --- a/core/java/android/util/BoostFramework.java +++ b/core/java/android/util/BoostFramework.java @@ -48,6 +48,8 @@ public class BoostFramework { private static final String UXPERFORMANCE_JAR = "/system/framework/UxPerformance.jar"; private static final String UXPERFORMANCE_CLASS = "com.qualcomm.qti.UxPerformance"; + public static final float PERF_HAL_V22 = 2.2f; + public static final float PERF_HAL_V23 = 2.3f; /** @hide */ private static boolean sIsLoaded = false; @@ -63,6 +65,7 @@ public class BoostFramework { private static Method sperfHintAcqRelFunc = null; private static Method sperfHintRenewFunc = null; private static Method sPerfEventFunc = null; + private static Method sPerfGetPerfHalVerFunc = null; private static Method sIOPStart = null; private static Method sIOPStop = null; @@ -259,6 +262,15 @@ public class BoostFramework { int.class, int.class, int[].class}; sperfHintRenewFunc = sPerfClass.getMethod("perfHintRenew", argClasses); + try { + argClasses = new Class[] {}; + sPerfGetPerfHalVerFunc = sPerfClass.getMethod("perfGetHalVer", argClasses); + + } catch (Exception e) { + Log.i(TAG, "BoostFramework() : Exception_1 = perfGetHalVer not supported"); + sPerfGetPerfHalVerFunc = null; + } + try { argClasses = new Class[] {int.class, int.class, String.class, int.class, String.class}; sUXEngineEvents = sPerfClass.getDeclaredMethod("perfUXEngine_events", @@ -359,6 +371,20 @@ public class BoostFramework { return ret; } +/** @hide */ + public double getPerfHalVersion() { + double retVal = PERF_HAL_V22; + try { + if (sPerfGetPerfHalVerFunc != null) { + Object ret = sPerfGetPerfHalVerFunc.invoke(mPerf); + retVal = (double)ret; + } + } catch(Exception e) { + Log.e(TAG,"Exception " + e); + } + return retVal; + } + /** @hide */ public int perfGetFeedback(int req, String pkg_name) { int ret = -1; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 69a8a2c60b7e..893c068dbdc9 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -4444,7 +4444,16 @@ public class ActivityManagerService extends IActivityManager.Stub EventLogTags.writeAmProcBound(app.userId, pid, app.processName); if (mUxPerf != null && app.getHostingRecord() != null && app.getHostingRecord().isTopApp()) { - mUxPerf.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, app.processName, pid, BoostFramework.Launch.TYPE_ATTACH_APPLICATION); + if (mUxPerf.getPerfHalVersion() >= BoostFramework.PERF_HAL_V23) { + int pkgType = mUxPerf.perfGetFeedback( + BoostFramework.VENDOR_FEEDBACK_WORKLOAD_TYPE, app.processName); + mUxPerf.perfHintAcqRel(-1, + BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, app.processName, + pid, BoostFramework.Launch.TYPE_ATTACH_APPLICATION, 1, pkgType); + } else { + mUxPerf.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, app.processName, + pid, BoostFramework.Launch.TYPE_ATTACH_APPLICATION); + } } synchronized (mProcLock) { diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index e0b9bf2f1d73..cd2b8c21f57d 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1738,9 +1738,19 @@ class ActivityStarter { ? mSourceRecord.getTask() : null; String packageName= mService.mContext.getPackageName(); if (mPerf != null) { - mStartActivity.perfActivityBoostHandler = - mPerf.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + if (mPerf.getPerfHalVersion() >= BoostFramework.PERF_HAL_V23) { + int pkgType = + mPerf.perfGetFeedback(BoostFramework.VENDOR_FEEDBACK_WORKLOAD_TYPE, + packageName); + mStartActivity.perfActivityBoostHandler = + mPerf.perfHintAcqRel(mStartActivity.perfActivityBoostHandler, + BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, packageName, + -1, BoostFramework.Launch.BOOST_V1, 1, pkgType); + } else { + mStartActivity.perfActivityBoostHandler = + mPerf.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, packageName, -1, BoostFramework.Launch.BOOST_V1); + } } setNewTask(taskToAffiliate); } else if (mAddingToTask) { @@ -2713,9 +2723,19 @@ class ActivityStarter { private void addOrReparentStartingActivity(Task parent, String reason) { String packageName= mService.mContext.getPackageName(); if (mPerf != null) { - mStartActivity.perfActivityBoostHandler = - mPerf.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + if (mPerf.getPerfHalVersion() >= BoostFramework.PERF_HAL_V23) { + int pkgType = + mPerf.perfGetFeedback(BoostFramework.VENDOR_FEEDBACK_WORKLOAD_TYPE, + packageName); + mStartActivity.perfActivityBoostHandler = + mPerf.perfHintAcqRel(mStartActivity.perfActivityBoostHandler, + BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, packageName, + -1, BoostFramework.Launch.BOOST_V1, 1, pkgType); + } else { + mStartActivity.perfActivityBoostHandler = + mPerf.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, packageName, -1, BoostFramework.Launch.BOOST_V1); + } } if (mStartActivity.getTask() == null || mStartActivity.getTask() == parent) { parent.addChild(mStartActivity); diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java old mode 100755 new mode 100644 index b7c67a98792d..92da025ebb49 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -1862,30 +1862,68 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { void acquireAppLaunchPerfLock(ActivityRecord r) { /* Acquire perf lock during new app launch */ if (mPerfBoost != null) { - mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, r.packageName, -1, BoostFramework.Launch.BOOST_V1); - mPerfSendTapHint = true; - mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, r.packageName, -1, BoostFramework.Launch.BOOST_V2); + + int pkgType = mPerfBoost.perfGetFeedback(BoostFramework.VENDOR_FEEDBACK_WORKLOAD_TYPE, + r.packageName); + int wpcPid = -1; if (mService != null && r != null && r.info != null && r.info.applicationInfo !=null) { final WindowProcessController wpc = mService.getProcessController(r.processName, r.info.applicationInfo.uid); if (wpc != null && wpc.hasThread()) { //If target process didn't start yet, this operation will be done when app call attach - mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, r.packageName, wpc.getPid(), BoostFramework.Launch.TYPE_ATTACH_APPLICATION); + wpcPid = wpc.getPid(); } } + if (mPerfBoost.getPerfHalVersion() >= BoostFramework.PERF_HAL_V23) { + mPerfBoost.perfHintAcqRel(-1, BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V1, 2, pkgType, wpcPid); + mPerfSendTapHint = true; + mPerfBoost.perfHintAcqRel(-1, BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V2, 2, pkgType, wpcPid); + if (wpcPid != -1) { + mPerfBoost.perfHintAcqRel(-1, BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, wpcPid, BoostFramework.Launch.TYPE_ATTACH_APPLICATION, + 2, pkgType, wpcPid); + } + + if (pkgType == BoostFramework.WorkloadType.GAME) + { + mPerfHandle = + mPerfBoost.perfHintAcqRel(-1, BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_GAME, 2, pkgType, wpcPid); + } else { + mPerfHandle = + mPerfBoost.perfHintAcqRel(-1, BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V3, 2, pkgType, wpcPid); + } - if(mPerfBoost.perfGetFeedback(BoostFramework.VENDOR_FEEDBACK_WORKLOAD_TYPE, r.packageName) == BoostFramework.WorkloadType.GAME) - { - mPerfHandle = mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, r.packageName, -1, BoostFramework.Launch.BOOST_GAME); } else { - mPerfHandle = mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, r.packageName, -1, BoostFramework.Launch.BOOST_V3); + mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, r.packageName, + -1, BoostFramework.Launch.BOOST_V1); + mPerfSendTapHint = true; + mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, r.packageName, + -1, BoostFramework.Launch.BOOST_V2); + if (wpcPid != -1) { + mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, wpcPid, BoostFramework.Launch.TYPE_ATTACH_APPLICATION); + } + + if (pkgType == BoostFramework.WorkloadType.GAME) + { + mPerfHandle = mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_GAME); + } else { + mPerfHandle = mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V3); + } } if (mPerfHandle > 0) mIsPerfBoostAcquired = true; // Start IOP if (r.info.applicationInfo != null && r.info.applicationInfo.sourceDir != null) { mPerfBoost.perfIOPrefetchStart(-1,r.packageName, - r.info.applicationInfo.sourceDir.substring(0, r.info.applicationInfo.sourceDir.lastIndexOf('/'))); + r.info.applicationInfo.sourceDir.substring(0, + r.info.applicationInfo.sourceDir.lastIndexOf('/'))); } } } diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index d5439499328f..e159bfbf1811 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2253,37 +2253,64 @@ public class RootWindowContainer extends WindowContainer mPerfBoost = new BoostFramework(); } if (mPerfBoost != null) { - mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, - r.packageName, -1, BoostFramework.Launch.BOOST_V1); - mPerfSendTapHint = true; - mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, - r.packageName, -1, BoostFramework.Launch.BOOST_V2); - if (mWmService.mAtmService != null && r != null && r.info != null - && r.info.applicationInfo != null) { + int pkgType = mPerfBoost.perfGetFeedback(BoostFramework.VENDOR_FEEDBACK_WORKLOAD_TYPE, + r.packageName); + int wpcPid = -1; + if (mService != null && r != null && r.info != null && r.info.applicationInfo !=null) { final WindowProcessController wpc = - mWmService.mAtmService.getProcessController(r.processName, - r.info.applicationInfo.uid); + mService.getProcessController(r.processName, r.info.applicationInfo.uid); if (wpc != null && wpc.hasThread()) { - // If target process didn't start yet, - // this operation will be done when app call attach + //If target process didn't start yet, + // this operation will be done when app call attach + wpcPid = wpc.getPid(); + } + } + if (mPerfBoost.getPerfHalVersion() >= BoostFramework.PERF_HAL_V23) { + mPerfBoost.perfHintAcqRel(-1, BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V1, 2, pkgType, wpcPid); + mPerfSendTapHint = true; + mPerfBoost.perfHintAcqRel(-1, BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V2, 2, pkgType, wpcPid); + if (wpcPid != -1) { + mPerfBoost.perfHintAcqRel(-1, + BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, wpcPid, + BoostFramework.Launch.TYPE_ATTACH_APPLICATION, 2, pkgType, wpcPid); + } + + if (pkgType == BoostFramework.WorkloadType.GAME) + { + mPerfHandle = mPerfBoost.perfHintAcqRel(-1, + BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_GAME, 2, pkgType, wpcPid); + } else { + mPerfHandle = mPerfBoost.perfHintAcqRel(-1, + BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V3, 2, pkgType, wpcPid); + } + } else { + mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, r.packageName, + -1, BoostFramework.Launch.BOOST_V1); + mPerfSendTapHint = true; + mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V2); + if (wpcPid != -1) { mPerfBoost.perfHint( BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, - r.packageName, wpc.getPid(), + r.packageName, wpcPid, BoostFramework.Launch.TYPE_ATTACH_APPLICATION); } - } - if(mPerfBoost.perfGetFeedback( - BoostFramework.VENDOR_FEEDBACK_WORKLOAD_TYPE, r.packageName) == - BoostFramework.WorkloadType.GAME) - { - mPerfHandle = mPerfBoost.perfHint( - BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, - r.packageName, -1, BoostFramework.Launch.BOOST_GAME); - } else { - mPerfHandle = mPerfBoost.perfHint( - BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, - r.packageName, -1, BoostFramework.Launch.BOOST_V3); + if (pkgType == BoostFramework.WorkloadType.GAME) + { + mPerfHandle = mPerfBoost.perfHint( + BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_GAME); + } else { + mPerfHandle = mPerfBoost.perfHint( + BoostFramework.VENDOR_HINT_FIRST_LAUNCH_BOOST, + r.packageName, -1, BoostFramework.Launch.BOOST_V3); + } } if (mPerfHandle > 0) mIsPerfBoostAcquired = true; -- cgit v1.2.3 From 670a7626af25008ed473ca8b75c7a9bcc5bb3120 Mon Sep 17 00:00:00 2001 From: Aman Mehta Date: Mon, 17 Jan 2022 13:38:48 +0530 Subject: Perf: Updated launch hint types Updated launch hint types CRs-Fixed: 3099018 Change-Id: Id209bf9bd5ff11014c5323b022cfa1be5e17c87e --- core/java/android/util/BoostFramework.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/java/android/util/BoostFramework.java b/core/java/android/util/BoostFramework.java index 461d67a8ae83..26964103132d 100644 --- a/core/java/android/util/BoostFramework.java +++ b/core/java/android/util/BoostFramework.java @@ -131,6 +131,9 @@ public class BoostFramework { public static final int BOOST_GAME = 4; public static final int RESERVED_1 = 5; public static final int RESERVED_2 = 6; + public static final int RESERVED_3 = 7; + public static final int RESERVED_4 = 8; + public static final int RESERVED_5 = 9; public static final int TYPE_SERVICE_START = 100; public static final int TYPE_START_PROC = 101; public static final int TYPE_START_APP_FROM_BG = 102; -- cgit v1.2.3 From 7f9be5f5b6aa91934d6f251dbc53aaae1e6c0f31 Mon Sep 17 00:00:00 2001 From: Chaitanya Saggurthi Date: Mon, 17 Jan 2022 12:53:33 +0530 Subject: show exit SCBM popup dialog on APM enable If device is in SCBM and user try to change APM then show exit SCBM popup dialog to user. Change-Id: Iefaac859688d5d0b731afcfa3331396f00aedae4 CRs-Fixed: 3096109 --- .../src/com/android/systemui/qs/tiles/AirplaneModeTile.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java index 22cd6f86b165..79193564e21f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java @@ -49,6 +49,8 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.qti.extphone.ExtTelephonyManager; + import javax.inject.Inject; import dagger.Lazy; @@ -102,6 +104,10 @@ public class AirplaneModeTile extends QSTileImpl { mActivityStarter.postStartActivityDismissingKeyguard( new Intent(TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS), 0); return; + } else if(!airplaneModeEnabled && TelephonyProperties.in_scbm().orElse(false)) { + mActivityStarter.postStartActivityDismissingKeyguard( + new Intent(ExtTelephonyManager.ACTION_SHOW_NOTICE_SCM_BLOCK_OTHERS), 0); + return; } setEnabled(!airplaneModeEnabled); } -- cgit v1.2.3