From 140124334a5f83ea8caabd72ebeac3587cf2a72b Mon Sep 17 00:00:00 2001 From: Shamali Patwa Date: Thu, 18 Apr 2024 18:16:38 +0000 Subject: [PATCH 01/13] Revert "When getting a widget provider by name, check all categories" This reverts commit 1f69351310f4f97c7498ece8c07e5519de0a45da. Reason for revert: Testing odd behavior between google app and pixel weather and duplicate items issue (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:7e5ed568b9f14570a67293827c5c7248b2ac975d) Merged-In: If181aa3e86969e8821b7e1cc765c3801f04489d2 Change-Id: If181aa3e86969e8821b7e1cc765c3801f04489d2 --- .../launcher3/dragndrop/AddItemActivity.java | 2 +- .../graphics/LauncherPreviewRenderer.java | 2 +- .../android/launcher3/icons/IconCache.java | 2 +- .../android/launcher3/model/WidgetsModel.java | 46 ++++++------------- .../launcher3/util/PackageUserKey.java | 4 -- .../launcher3/widget/WidgetSections.java | 2 +- 6 files changed, 18 insertions(+), 40 deletions(-) diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java index 2873e73d24..05fdcef461 100644 --- a/src/com/android/launcher3/dragndrop/AddItemActivity.java +++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java @@ -184,7 +184,7 @@ public class AddItemActivity extends BaseActivity // user sees TextView widgetAppName = findViewById(R.id.widget_appName); WidgetSections.WidgetSection section = targetApp.widgetCategory == NO_CATEGORY ? null - : WidgetSections.get(this).get(targetApp.widgetCategory); + : WidgetSections.getWidgetSections(this).get(targetApp.widgetCategory); widgetAppName.setText(section == null ? info.loadLabel(getPackageManager()) : getString(section.mSectionTitle)); diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java index 6bed9dcdd3..0e4b48e1c3 100644 --- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java +++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java @@ -419,7 +419,7 @@ public class LauncherPreviewRenderer extends ContextWrapper private void inflateAndAddWidgets(LauncherAppWidgetInfo info, WidgetsModel widgetsModel) { WidgetItem widgetItem = widgetsModel.getWidgetProviderInfoByProviderName( - info.providerName, info.user, mContext); + info.providerName, info.user); if (widgetItem == null) { return; } diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java index 5b9e61c84d..329f71777e 100644 --- a/src/com/android/launcher3/icons/IconCache.java +++ b/src/com/android/launcher3/icons/IconCache.java @@ -559,7 +559,7 @@ public class IconCache extends BaseIconCache { return; } - WidgetSection widgetSection = WidgetSections.get(mContext) + WidgetSection widgetSection = WidgetSections.getWidgetSections(mContext) .get(infoInOut.widgetCategory); infoInOut.title = mContext.getString(widgetSection.mSectionTitle); infoInOut.contentDescription = getUserBadgedLabel(infoInOut.title, infoInOut.user); diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java index 519eeaa223..91ce5eabf5 100644 --- a/src/com/android/launcher3/model/WidgetsModel.java +++ b/src/com/android/launcher3/model/WidgetsModel.java @@ -18,7 +18,6 @@ import android.content.pm.PackageManager; import android.os.UserHandle; import android.util.Log; import android.util.Pair; -import android.util.SparseArray; import androidx.annotation.Nullable; import androidx.collection.ArrayMap; @@ -202,16 +201,8 @@ public class WidgetsModel { // add and update. mWidgetsList.putAll(rawWidgetsShortcuts.stream() .filter(new WidgetValidityCheck(app)) - .flatMap( - widgetItem -> getPackageUserKeys(app.getContext(), widgetItem) - .stream() - .map( - key -> new Pair<>( - packageItemInfoCache.getOrCreate(key), - widgetItem - ) - ) - ) + .flatMap(widgetItem -> getPackageUserKeys(app.getContext(), widgetItem).stream() + .map(key -> new Pair<>(packageItemInfoCache.getOrCreate(key), widgetItem))) .collect(groupingBy(pair -> pair.first, mapping(pair -> pair.second, toList())))); // Update each package entry @@ -249,26 +240,19 @@ public class WidgetsModel { } public WidgetItem getWidgetProviderInfoByProviderName( - ComponentName providerName, UserHandle user, Context context) { - SparseArray sections = WidgetSections.get( - context); + ComponentName providerName, UserHandle user) { if (!WIDGETS_ENABLED) { return null; } + List widgetsList = mWidgetsList.get( + new PackageItemInfo(providerName.getPackageName(), user)); + if (widgetsList == null) { + return null; + } - // Checking if we hav ea provider in any of the categories. - for (int i = 0; i < sections.size(); i++) { - PackageItemInfo key = new PackageItemInfo( - providerName.getPackageName(), - sections.get(i).mCategory, - user - ); - if (mWidgetsList.containsKey(key)) { - return mWidgetsList.get(key).stream().filter( - item -> item.componentName.equals(providerName) - ) - .findFirst() - .orElse(null); + for (WidgetItem item : widgetsList) { + if (item.componentName.equals(providerName)) { + return item; } } return null; @@ -302,12 +286,10 @@ public class WidgetsModel { categories.forEach(category -> { if (category == NO_CATEGORY) { packageUserKeys.add( - new PackageUserKey(item.componentName.getPackageName(), item.user) - ); + new PackageUserKey(item.componentName.getPackageName(), + item.user)); } else { - packageUserKeys.add( - new PackageUserKey(item.componentName.getPackageName(), category, item.user) - ); + packageUserKeys.add(new PackageUserKey(category, item.user)); } }); return packageUserKeys; diff --git a/src/com/android/launcher3/util/PackageUserKey.java b/src/com/android/launcher3/util/PackageUserKey.java index c1fb379605..92d97371e5 100644 --- a/src/com/android/launcher3/util/PackageUserKey.java +++ b/src/com/android/launcher3/util/PackageUserKey.java @@ -48,10 +48,6 @@ public class PackageUserKey { update(/* packageName= */ "", widgetCategory, user); } - public PackageUserKey(String packageName, int widgetCategory, UserHandle user) { - update(packageName, widgetCategory, user); - } - public void update(String packageName, UserHandle user) { update(packageName, NO_CATEGORY, user); } diff --git a/src/com/android/launcher3/widget/WidgetSections.java b/src/com/android/launcher3/widget/WidgetSections.java index f5fd2a9af9..c45b09591f 100644 --- a/src/com/android/launcher3/widget/WidgetSections.java +++ b/src/com/android/launcher3/widget/WidgetSections.java @@ -50,7 +50,7 @@ public final class WidgetSections { private static Map sWidgetsToCategories; /** Returns a list of widget sections that are shown in the widget picker. */ - public static synchronized SparseArray get(Context context) { + public static synchronized SparseArray getWidgetSections(Context context) { if (sWidgetSections != null) { return sWidgetSections; } From 2f2429e56591b259dc76afc23fc734e6ffbb4425 Mon Sep 17 00:00:00 2001 From: Jordan Silva Date: Thu, 20 Jun 2024 09:46:30 +0000 Subject: [PATCH 02/13] Fix digital wellbeing banner position in portrait mode The banner should be aligned to the start of the screen, not the center. This CL fixes DWB position for split tasks when device is unfolded. Fix: 348200661 Bug: 345789862 Flag: EXEMPT bugfix Test: Manual. Add a Digital Wellbeing (DWB) timer to 2 apps. Open these two apps in split mode. Unfold the device and go to Overview. The DWB banner should aligned correctly. (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:3d088e3899cfca516dfa8ae9699691ece2b914d9) Merged-In: I0544b4a8eb85b00196373c8a4368e680abab222b Change-Id: I0544b4a8eb85b00196373c8a4368e680abab222b --- .../quickstep/orientation/PortraitPagedViewHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java b/quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java index 758a737bec..eeacee1cf6 100644 --- a/quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java +++ b/quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java @@ -259,7 +259,8 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements return new Pair<>(translationX, translationY); } - bannerParams.gravity = BOTTOM | ((deviceProfile.isLandscape) ? START : CENTER_HORIZONTAL); + bannerParams.gravity = + BOTTOM | (deviceProfile.isLeftRightSplit ? START : CENTER_HORIZONTAL); // Set correct width if (desiredTaskId == splitBounds.leftTopTaskId) { From 1a654c58dcea6d8ca358e78d852958b457eefe4c Mon Sep 17 00:00:00 2001 From: Jordan Silva Date: Wed, 19 Jun 2024 14:16:08 +0100 Subject: [PATCH 03/13] Fix recents button not navigating to Overview This CL prevents returning launcher in getVisibleLauncher method when isHomeVisible is true but Launcher is not started. Bug: 337954957 Bug: 331947116 Flag: EXEMPT bugfix Test: Manual. With 3-button-nav. Open a video from -1 scren (not in Youtube app), press recent button. More instructions in b/337954957#comment26. (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:6a4c142b5b77ccb8c439e29209b6dfd04a4690d0) Merged-In: I40edafdab5457666474de2c0368158a9c1c05fb0 Change-Id: I40edafdab5457666474de2c0368158a9c1c05fb0 --- .../com/android/quickstep/LauncherActivityInterface.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java index c42882714c..1048ea1b0d 100644 --- a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java +++ b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java @@ -35,7 +35,6 @@ import androidx.annotation.Nullable; import androidx.annotation.UiThread; import com.android.launcher3.DeviceProfile; -import com.android.launcher3.Flags; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAnimUtils; import com.android.launcher3.LauncherInitListener; @@ -213,10 +212,7 @@ public final class LauncherActivityInterface extends if (launcher.isStarted() && (isInLiveTileMode() || launcher.hasBeenResumed())) { return launcher; } - if (Flags.useActivityOverlay() - && SystemUiProxy.INSTANCE.get(launcher).getHomeVisibilityState().isHomeVisible()) { - return launcher; - } + return null; } From 35439c082161feeba3162d13ebfa44736f8bfd36 Mon Sep 17 00:00:00 2001 From: Charlie Anderson Date: Tue, 18 Jun 2024 13:22:01 -0400 Subject: [PATCH 04/13] Only send new first screen broadcast on first load after restore Flag: EXEMPT launcher_broadcast_installed_apps Bug: 322314760 Test: manually tested (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:30a3acc7796850caa6be51b6c46d26d35dfb0b3c) Merged-In: I28a3ee1fb2c5c382ea8789b6e966c80db1abf0e0 Change-Id: I28a3ee1fb2c5c382ea8789b6e966c80db1abf0e0 --- .../android/launcher3/model/LoaderTask.java | 2 +- .../android/launcher3/model/LoaderTaskTest.kt | 171 +++++++++++++++++- 2 files changed, 170 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index dc6968c7d9..312c6f412a 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -209,7 +209,7 @@ public class LoaderTask implements Runnable { mApp.getContext().getContentResolver(), "launcher_broadcast_installed_apps", /* def= */ 0); - if (launcherBroadcastInstalledApps == 1) { + if (launcherBroadcastInstalledApps == 1 && mIsRestoreFromBackup) { List broadcastModels = FirstScreenBroadcastHelper.createModelsForFirstScreenBroadcast( mPmHelper, diff --git a/tests/src/com/android/launcher3/model/LoaderTaskTest.kt b/tests/src/com/android/launcher3/model/LoaderTaskTest.kt index 28a001f990..d16674c6c2 100644 --- a/tests/src/com/android/launcher3/model/LoaderTaskTest.kt +++ b/tests/src/com/android/launcher3/model/LoaderTaskTest.kt @@ -1,10 +1,13 @@ package com.android.launcher3.model import android.appwidget.AppWidgetManager +import android.content.Intent import android.os.UserHandle import android.platform.test.flag.junit.SetFlagsRule +import android.provider.Settings import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest +import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.launcher3.Flags import com.android.launcher3.InvariantDeviceProfile import com.android.launcher3.LauncherAppState @@ -14,6 +17,7 @@ import com.android.launcher3.icons.IconCache import com.android.launcher3.icons.cache.CachingLogic import com.android.launcher3.icons.cache.IconCacheUpdateHandler import com.android.launcher3.pm.UserCache +import com.android.launcher3.provider.RestoreDbTask import com.android.launcher3.ui.TestViewHelpers import com.android.launcher3.util.Executors.MODEL_EXECUTOR import com.android.launcher3.util.LauncherModelHelper.SandboxModelContext @@ -21,21 +25,30 @@ import com.android.launcher3.util.LooperIdleLock import com.android.launcher3.util.UserIconInfo import com.google.common.truth.Truth import java.util.concurrent.CountDownLatch +import junit.framework.Assert.assertEquals import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers.any import org.mockito.ArgumentMatchers.anyInt +import org.mockito.ArgumentMatchers.anyList +import org.mockito.ArgumentMatchers.anyMap import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.times -import org.mockito.Mockito.verify import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations +import org.mockito.MockitoSession import org.mockito.Spy +import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.doReturn +import org.mockito.kotlin.spy +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever +import org.mockito.quality.Strictness private const val INSERTION_STATEMENT_FILE = "databases/workspace_items.sql" @@ -43,6 +56,20 @@ private const val INSERTION_STATEMENT_FILE = "databases/workspace_items.sql" @RunWith(AndroidJUnit4::class) class LoaderTaskTest { private var context = SandboxModelContext() + private val expectedBroadcastModel = + FirstScreenBroadcastModel( + installerPackage = "installerPackage", + pendingCollectionItems = mutableSetOf("pendingCollectionItem"), + pendingWidgetItems = mutableSetOf("pendingWidgetItem"), + pendingHotseatItems = mutableSetOf("pendingHotseatItem"), + pendingWorkspaceItems = mutableSetOf("pendingWorkspaceItem"), + installedHotseatItems = mutableSetOf("installedHotseatItem"), + installedWorkspaceItems = mutableSetOf("installedWorkspaceItem"), + firstScreenInstalledWidgets = mutableSetOf("installedFirstScreenWidget"), + secondaryScreenInstalledWidgets = mutableSetOf("installedSecondaryScreenWidget") + ) + private lateinit var mockitoSession: MockitoSession + @Mock private lateinit var app: LauncherAppState @Mock private lateinit var bgAllAppsList: AllAppsList @Mock private lateinit var modelDelegate: ModelDelegate @@ -61,7 +88,11 @@ class LoaderTaskTest { @Before fun setup() { MockitoAnnotations.initMocks(this) - + mockitoSession = + ExtendedMockito.mockitoSession() + .strictness(Strictness.LENIENT) + .mockStatic(FirstScreenBroadcastHelper::class.java) + .startMocking() val idp = InvariantDeviceProfile().apply { numRows = 5 @@ -90,6 +121,7 @@ class LoaderTaskTest { @After fun tearDown() { context.onDestroy() + mockitoSession.finishMocking() } @Test @@ -166,6 +198,141 @@ class LoaderTaskTest { verify(bgAllAppsList, Mockito.never()) .setFlags(BgDataModel.Callbacks.FLAG_QUIET_MODE_ENABLED, true) } + + @Test + fun `When launcher_broadcast_installed_apps and is restore then send installed item broadcast`() { + // Given + val spyContext = spy(context) + `when`(app.context).thenReturn(spyContext) + whenever( + FirstScreenBroadcastHelper.createModelsForFirstScreenBroadcast( + anyOrNull(), + anyList(), + anyMap(), + anyList() + ) + ) + .thenReturn(listOf(expectedBroadcastModel)) + + whenever( + FirstScreenBroadcastHelper.sendBroadcastsForModels( + spyContext, + listOf(expectedBroadcastModel) + ) + ) + .thenCallRealMethod() + + Settings.Secure.putInt(spyContext.contentResolver, "launcher_broadcast_installed_apps", 1) + RestoreDbTask.setPending(spyContext) + + // When + LoaderTask(app, bgAllAppsList, BgDataModel(), modelDelegate, launcherBinder) + .runSyncOnBackgroundThread() + + // Then + val argumentCaptor = ArgumentCaptor.forClass(Intent::class.java) + verify(spyContext).sendBroadcast(argumentCaptor.capture()) + val actualBroadcastIntent = argumentCaptor.value + assertEquals(expectedBroadcastModel.installerPackage, actualBroadcastIntent.`package`) + assertEquals( + ArrayList(expectedBroadcastModel.installedWorkspaceItems), + actualBroadcastIntent.getStringArrayListExtra("workspaceInstalledItems") + ) + assertEquals( + ArrayList(expectedBroadcastModel.installedHotseatItems), + actualBroadcastIntent.getStringArrayListExtra("hotseatInstalledItems") + ) + assertEquals( + ArrayList( + expectedBroadcastModel.firstScreenInstalledWidgets + + expectedBroadcastModel.secondaryScreenInstalledWidgets + ), + actualBroadcastIntent.getStringArrayListExtra("widgetInstalledItems") + ) + assertEquals( + ArrayList(expectedBroadcastModel.pendingCollectionItems), + actualBroadcastIntent.getStringArrayListExtra("folderItem") + ) + assertEquals( + ArrayList(expectedBroadcastModel.pendingWorkspaceItems), + actualBroadcastIntent.getStringArrayListExtra("workspaceItem") + ) + assertEquals( + ArrayList(expectedBroadcastModel.pendingHotseatItems), + actualBroadcastIntent.getStringArrayListExtra("hotseatItem") + ) + assertEquals( + ArrayList(expectedBroadcastModel.pendingWidgetItems), + actualBroadcastIntent.getStringArrayListExtra("widgetItem") + ) + } + + @Test + fun `When not a restore then installed item broadcast not sent`() { + // Given + val spyContext = spy(context) + `when`(app.context).thenReturn(spyContext) + whenever( + FirstScreenBroadcastHelper.createModelsForFirstScreenBroadcast( + anyOrNull(), + anyList(), + anyMap(), + anyList() + ) + ) + .thenReturn(listOf(expectedBroadcastModel)) + + whenever( + FirstScreenBroadcastHelper.sendBroadcastsForModels( + spyContext, + listOf(expectedBroadcastModel) + ) + ) + .thenCallRealMethod() + + Settings.Secure.putInt(spyContext.contentResolver, "launcher_broadcast_installed_apps", 1) + + // When + LoaderTask(app, bgAllAppsList, BgDataModel(), modelDelegate, launcherBinder) + .runSyncOnBackgroundThread() + + // Then + verify(spyContext, times(0)).sendBroadcast(any(Intent::class.java)) + } + + @Test + fun `When launcher_broadcast_installed_apps false then installed item broadcast not sent`() { + // Given + val spyContext = spy(context) + `when`(app.context).thenReturn(spyContext) + whenever( + FirstScreenBroadcastHelper.createModelsForFirstScreenBroadcast( + anyOrNull(), + anyList(), + anyMap(), + anyList() + ) + ) + .thenReturn(listOf(expectedBroadcastModel)) + + whenever( + FirstScreenBroadcastHelper.sendBroadcastsForModels( + spyContext, + listOf(expectedBroadcastModel) + ) + ) + .thenCallRealMethod() + + Settings.Secure.putInt(spyContext.contentResolver, "launcher_broadcast_installed_apps", 0) + RestoreDbTask.setPending(spyContext) + + // When + LoaderTask(app, bgAllAppsList, BgDataModel(), modelDelegate, launcherBinder) + .runSyncOnBackgroundThread() + + // Then + verify(spyContext, times(0)).sendBroadcast(any(Intent::class.java)) + } } private fun LoaderTask.runSyncOnBackgroundThread() { From 35f30f2e115e8c7f2c2deb9abef7dbb594a64121 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Fri, 21 Jun 2024 18:36:00 +0100 Subject: [PATCH 05/13] Close floating views before fake rotation - We do the same in Launcher for real rotation Fix: 348113790 Test: manual Flag: EXEMPT bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:bde639236f8e73608e3fd14fecdbbe5267f4607e) Merged-In: Ibd5f42db439cd94a389f7aaf6fe2db317c11cd67 Change-Id: Ibd5f42db439cd94a389f7aaf6fe2db317c11cd67 --- quickstep/src/com/android/quickstep/views/RecentsView.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 4f802c95a6..6798676174 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -31,6 +31,7 @@ import static com.android.app.animation.Interpolators.FINAL_FRAME; import static com.android.app.animation.Interpolators.LINEAR; import static com.android.app.animation.Interpolators.OVERSHOOT_0_75; import static com.android.app.animation.Interpolators.clampToProgress; +import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE; import static com.android.launcher3.AbstractFloatingView.TYPE_TASK_MENU; import static com.android.launcher3.AbstractFloatingView.getTopOpenViewWithType; import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS; @@ -130,6 +131,7 @@ import androidx.annotation.UiThread; import androidx.core.graphics.ColorUtils; import com.android.internal.jank.Cuj; +import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BaseActivity.MultiWindowModeChangedListener; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Flags; @@ -2688,6 +2690,7 @@ public abstract class RecentsView { setLayoutRotation(newRotation, mOrientationState.getDisplayRotation()); From 396c95964a3aee3919a02499cff4a470499fb031 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Mon, 24 Jun 2024 13:41:37 +0100 Subject: [PATCH 06/13] Disable Select mode from Menu in fake landscape Fix: 349072279 Test: Verify that Select mode is only available from Menu in grid only Overview on tablets Flag: EXEMPT bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:2026c800165865b3323f449a2d9cda22e9231598) Merged-In: Icd0d8303547b45d3653696812c51ce2c2bfd410b Change-Id: Icd0d8303547b45d3653696812c51ce2c2bfd410b --- .../com/android/quickstep/TaskShortcutFactory.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java index fd141c3229..d18c86ea8e 100644 --- a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java +++ b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java @@ -492,18 +492,8 @@ public interface TaskShortcutFactory { TaskContainer taskContainer) { boolean isTablet = container.getDeviceProfile().isTablet; boolean isGridOnlyOverview = isTablet && Flags.enableGridOnlyOverview(); - // Extra conditions if it's not grid-only overview if (!isGridOnlyOverview) { - RecentsOrientedState orientedState = taskContainer.getTaskView().getOrientedState(); - boolean isFakeLandscape = !orientedState.isRecentsActivityRotationAllowed() - && orientedState.getTouchRotation() != ROTATION_0; - if (!isFakeLandscape) { - return null; - } - // Disallow "Select" when swiping up from landscape due to rotated thumbnail. - if (orientedState.getDisplayRotation() != ROTATION_0) { - return null; - } + return null; } SystemShortcut modalStateSystemShortcut = From cb2a1474a787c868451a9d5d12291fcbf4e5e71c Mon Sep 17 00:00:00 2001 From: Schneider Victor-tulias Date: Wed, 12 Jun 2024 13:46:35 -0400 Subject: [PATCH 07/13] Fix icon flash on app launch Flag: com.android.launcher3.enable_additional_home_animations Fixes: 343051344 Test: temp logs, launched apps from home, quickly swiped home while quick switching (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:9fb1f8043573d5bc3376f0786354fc8f7a9cf2cd) Merged-In: I91071d53f753eb7bc99305c46241de203bcfdc98 Change-Id: I91071d53f753eb7bc99305c46241de203bcfdc98 --- .../quickstep/SwipeUpAnimationLogic.java | 20 ++++++++++++------- .../android/quickstep/views/RecentsView.java | 4 ++++ .../android/launcher3/views/ClipIconView.java | 4 ++++ .../launcher3/views/FloatingIconView.java | 8 +++++++- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java index fb54241592..ba33c62d9d 100644 --- a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java +++ b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java @@ -17,6 +17,7 @@ package com.android.quickstep; import static com.android.app.animation.Interpolators.ACCELERATE_1_5; import static com.android.app.animation.Interpolators.LINEAR; +import static com.android.launcher3.Flags.enableAdditionalHomeAnimations; import static com.android.launcher3.PagedView.INVALID_PAGE; import android.animation.Animator; @@ -449,7 +450,7 @@ public abstract class SwipeUpAnimationLogic implements float alpha = mAnimationFactory.getWindowAlpha(progress); mHomeAnim.setPlayFraction(progress); - if (mTargetTaskView == null) { + if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) { mHomeToWindowPositionMap.mapRect(mWindowCurrentRect, currentRect); mMatrix.setRectToRect(mCropRectF, mWindowCurrentRect, ScaleToFit.FILL); mLocalTransformParams @@ -464,10 +465,15 @@ public abstract class SwipeUpAnimationLogic implements mLocalTransformParams.applySurfaceParams( mLocalTransformParams.createSurfaceParams(this)); - mAnimationFactory.update( - currentRect, progress, mMatrix.mapRadius(cornerRadius), (int) (alpha * 255)); - if (mTargetTaskView == null) { + mAnimationFactory.update( + currentRect, + progress, + mMatrix.mapRadius(cornerRadius), + !enableAdditionalHomeAnimations() || mTargetTaskView == null + ? 0 : (int) (alpha * 255)); + + if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) { return; } if (mAnimationFactory.isAnimatingIntoIcon() && mAnimationFactory.isAnimationReady()) { @@ -506,7 +512,7 @@ public abstract class SwipeUpAnimationLogic implements public void onAnimationStart(Animator animation) { setUp(); mHomeAnim.dispatchOnStart(); - if (mTargetTaskView == null) { + if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) { return; } Rect thumbnailBounds = new Rect(); @@ -521,7 +527,7 @@ public abstract class SwipeUpAnimationLogic implements } private void setUp() { - if (mTargetTaskView == null) { + if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) { return; } RecentsView recentsView = mTargetTaskView.getRecentsView(); @@ -542,7 +548,7 @@ public abstract class SwipeUpAnimationLogic implements } private void cleanUp() { - if (mTargetTaskView == null) { + if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) { return; } RecentsView recentsView = mTargetTaskView.getRecentsView(); diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 6798676174..43a3eda6fb 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -35,6 +35,7 @@ import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE; import static com.android.launcher3.AbstractFloatingView.TYPE_TASK_MENU; import static com.android.launcher3.AbstractFloatingView.getTopOpenViewWithType; import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS; +import static com.android.launcher3.Flags.enableAdditionalHomeAnimations; import static com.android.launcher3.Flags.enableGridOnlyOverview; import static com.android.launcher3.Flags.enableRefactorTaskThumbnail; import static com.android.launcher3.LauncherAnimUtils.SUCCESS_TRANSITION_PROGRESS; @@ -4523,6 +4524,9 @@ public abstract class RecentsView Date: Mon, 24 Jun 2024 13:24:58 -0700 Subject: [PATCH 08/13] Fix NPE when locking private space in taskbar allapps. We can just remove the check since isSearchSupported has been launched. bug: 345648701 Test manually video - before: https://drive.google.com/file/d/1EwwRXrASusmqVixGWuKGnOQQyiDLE6Yy/view?usp=sharing after: https://drive.google.com/file/d/1OCvtxzbhRJrBMMM2JH_cOurQ-_BaALSA/view?usp=sharing Flag: com.android.launcher3.enable_private_space (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e770f10d2a6a047c1ad7b1061f57c388dec4f913) Merged-In: I0ae19d342556aac4ee0b6e26b4cef8752c0beb38 Change-Id: I0ae19d342556aac4ee0b6e26b4cef8752c0beb38 --- src/com/android/launcher3/allapps/AllAppsRecyclerView.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java index ba34f598e7..2a472227b9 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java @@ -305,9 +305,7 @@ public class AllAppsRecyclerView extends FastScrollRecyclerView { @Override public int getScrollBarTop() { - return ActivityContext.lookupContext(getContext()).getAppsView().isSearchSupported() - ? getResources().getDimensionPixelOffset(R.dimen.all_apps_header_top_padding) - : 0; + return getResources().getDimensionPixelOffset(R.dimen.all_apps_header_top_padding); } @Override From 62462a50ee8cbc57aeea8d79617385e836c6ca5b Mon Sep 17 00:00:00 2001 From: Saumya Prakash Date: Fri, 28 Jun 2024 19:04:26 +0000 Subject: [PATCH 09/13] Prevent Taskbar edu dismissal from touching outside of the window. In an effort to encourage users to look at Taskbar edu more thoroughly, this change makes it so users have to press the 'Done' button explicitly to close the taskbar edu window. This change also adds the ability for it to be dismissed by the back gesture. It only applies to the features edu, and not other taskbar educations. Fix: 349612575 Test: Manually run all versions of taskbar edu and ensure that the edu only goes away with back gesture, swipe up or clicking on the DONE button Flag: EXEMPT bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:17339843e76cb507413e1d22dcf0c7982e024379) Merged-In: I9c456b9efddc6de5f292d6a14b1ce9daee7efaa3 Change-Id: I9c456b9efddc6de5f292d6a14b1ce9daee7efaa3 --- .../launcher3/taskbar/TaskbarEduTooltip.kt | 17 ++++++++++++++++- .../taskbar/TaskbarEduTooltipController.kt | 10 +++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltip.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltip.kt index c45c66741d..7f9d8a390e 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltip.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltip.kt @@ -27,6 +27,7 @@ import android.view.View import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.animation.Interpolator +import android.window.OnBackInvokedDispatcher import androidx.core.view.updateLayoutParams import com.android.app.animation.Interpolators.EMPHASIZED_ACCELERATE import com.android.app.animation.Interpolators.EMPHASIZED_DECELERATE @@ -66,11 +67,14 @@ constructor( /** Container where the tooltip's body should be inflated. */ lateinit var content: ViewGroup private set + private lateinit var arrow: View /** Callback invoked when the tooltip is being closed. */ var onCloseCallback: () -> Unit = {} private var openCloseAnimator: AnimatorSet? = null + /** Used to set whether users can tap outside the current tooltip window to dismiss it */ + var allowTouchDismissal = true /** Animates the tooltip into view. */ fun show() { @@ -134,14 +138,25 @@ constructor( override fun isOfType(type: Int): Boolean = type and TYPE_TASKBAR_EDUCATION_DIALOG != 0 override fun onControllerInterceptTouchEvent(ev: MotionEvent?): Boolean { - if (ev?.action == ACTION_DOWN && !activityContext.dragLayer.isEventOverView(this, ev)) { + if ( + ev?.action == ACTION_DOWN && + !activityContext.dragLayer.isEventOverView(this, ev) && + allowTouchDismissal + ) { close(true) } return false } + override fun onAttachedToWindow() { + super.onAttachedToWindow() + findOnBackInvokedDispatcher() + ?.registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_DEFAULT, this) + } + override fun onDetachedFromWindow() { super.onDetachedFromWindow() + findOnBackInvokedDispatcher()?.unregisterOnBackInvokedCallback(this) Settings.Secure.putInt(mContext.contentResolver, LAUNCHER_TASKBAR_EDUCATION_SHOWING, 0) } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltipController.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltipController.kt index 5cbd5c95f0..d57c4838d7 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltipController.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltipController.kt @@ -86,10 +86,13 @@ open class TaskbarEduTooltipController(context: Context) : !activityContext.isPhoneMode && !activityContext.isTinyTaskbar } + private val isOpen: Boolean get() = tooltip?.isOpen ?: false + val isBeforeTooltipFeaturesStep: Boolean get() = isTooltipEnabled && tooltipStep <= TOOLTIP_STEP_FEATURES + private lateinit var controllers: TaskbarControllers // Keep track of whether the user has seen the Search Edu @@ -152,6 +155,7 @@ open class TaskbarEduTooltipController(context: Context) : tooltipStep = TOOLTIP_STEP_NONE inflateTooltip(R.layout.taskbar_edu_features) tooltip?.run { + allowTouchDismissal = false val splitscreenAnim = requireViewById(R.id.splitscreen_animation) val suggestionsAnim = requireViewById(R.id.suggestions_animation) val pinningAnim = requireViewById(R.id.pinning_animation) @@ -216,6 +220,7 @@ open class TaskbarEduTooltipController(context: Context) : inflateTooltip(R.layout.taskbar_edu_pinning) tooltip?.run { + allowTouchDismissal = true requireViewById(R.id.standalone_pinning_animation) .supportLightTheme() @@ -260,6 +265,7 @@ open class TaskbarEduTooltipController(context: Context) : userHasSeenSearchEdu = true inflateTooltip(R.layout.taskbar_edu_search) tooltip?.run { + allowTouchDismissal = true requireViewById(R.id.search_edu_animation).supportLightTheme() val eduSubtitle: TextView = requireViewById(R.id.search_edu_text) showDisclosureText(eduSubtitle) @@ -332,7 +338,9 @@ open class TaskbarEduTooltipController(context: Context) : } /** Closes the current [tooltip]. */ - fun hide() = tooltip?.close(true) + fun hide() { + tooltip?.close(true) + } /** Initializes [tooltip] with content from [contentResId]. */ private fun inflateTooltip(@LayoutRes contentResId: Int) { From 1855ef15b90fa3e372e2fd98f29820d2815e9a41 Mon Sep 17 00:00:00 2001 From: Vinit Nayak Date: Wed, 3 Jul 2024 13:24:52 -0700 Subject: [PATCH 10/13] Initialize SplitSelectStateController for 3P before setting content view * RecentsView#onAttachedToWindow relies on splitSelectStateController being initialized, so we now do it before RecentsActivity calls setContentView() Bug: 332643607 Test: Couldn't repro before or after :( Flag: EXEMPT bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:4276ee4897f59cfb1a2e432adfe54196b1a0dd2d) Merged-In: Ic26460e08ca74adcf6dcf31abc956ad57f4061c2 Change-Id: Ic26460e08ca74adcf6dcf31abc956ad57f4061c2 --- .../src/com/android/quickstep/RecentsActivity.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index 13e98444f4..18461a6440 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -132,6 +132,13 @@ public final class RecentsActivity extends StatefulActivity implem * Init drag layer and overview panel views. */ protected void setupViews() { + SystemUiProxy systemUiProxy = SystemUiProxy.INSTANCE.get(this); + // SplitSelectStateController needs to be created before setContentView() + mSplitSelectStateController = + new SplitSelectStateController(this, mHandler, getStateManager(), + null /* depthController */, getStatsLogManager(), + systemUiProxy, RecentsModel.INSTANCE.get(this), + null /*activityBackCallback*/); inflateRootView(R.layout.fallback_recents_activity); setContentView(getRootView()); mDragLayer = findViewById(R.id.drag_layer); @@ -139,12 +146,6 @@ public final class RecentsActivity extends StatefulActivity implem mFallbackRecentsView = findViewById(R.id.overview_panel); mActionsView = findViewById(R.id.overview_actions_view); getRootView().getSysUiScrim().getSysUIProgress().updateValue(0); - SystemUiProxy systemUiProxy = SystemUiProxy.INSTANCE.get(this); - mSplitSelectStateController = - new SplitSelectStateController(this, mHandler, getStateManager(), - null /* depthController */, getStatsLogManager(), - systemUiProxy, RecentsModel.INSTANCE.get(this), - null /*activityBackCallback*/); mDragLayer.recreateControllers(); if (enableDesktopWindowingMode()) { mDesktopRecentsTransitionController = new DesktopRecentsTransitionController( From 912edc94a182f1ae75de60c55497e426a9d046f6 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Wed, 10 Jul 2024 12:45:17 +0100 Subject: [PATCH 11/13] focusTransitionScaleAndDimOut should always go from 1f to 0f - Also updated AnimatedFloat to accept a Consumer, so a lambda can be used as updateCallback with refernce to udpated value - Also updated PendingAnimation to accept Animator with TimedInterpolator without specifying SpringProperty Fix: 352195519 Test: manual Flag: EXEMPT bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:c378e64b757dbb83b6024be462a6752bc6a2c5f2) Merged-In: Ifb78c1bcd3ca215a5d214f986a107d0988bff13b Change-Id: Ifb78c1bcd3ca215a5d214f986a107d0988bff13b --- .../android/quickstep/util/BorderAnimator.kt | 3 +- .../android/quickstep/views/RecentsView.java | 2 +- .../com/android/quickstep/views/TaskView.kt | 29 +++++++------------ .../android/launcher3/anim/AnimatedFloat.java | 17 +++++++++-- .../launcher3/anim/PendingAnimation.java | 7 +++++ 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/quickstep/src/com/android/quickstep/util/BorderAnimator.kt b/quickstep/src/com/android/quickstep/util/BorderAnimator.kt index 85238ed826..7e51fcfedc 100644 --- a/quickstep/src/com/android/quickstep/util/BorderAnimator.kt +++ b/quickstep/src/com/android/quickstep/util/BorderAnimator.kt @@ -50,7 +50,7 @@ private constructor( private val disappearanceDurationMs: Long, private val interpolator: Interpolator, ) { - private val borderAnimationProgress = AnimatedFloat { updateOutline() } + private val borderAnimationProgress = AnimatedFloat { _ -> updateOutline() } private val borderPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = borderColor @@ -224,6 +224,7 @@ private constructor( val borderWidth: Float get() = borderWidthPx * animationProgress + val alignmentAdjustment: Float // Outset the border by half the width to create an outwards-growth animation get() = -borderWidth / 2f + alignmentAdjustmentInset diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 43a3eda6fb..d7c7857653 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -3805,7 +3805,7 @@ public abstract class RecentsView + focusTransitionScaleAndDim.value = + FOCUS_TRANSITION_FAST_OUT_INTERPOLATOR.getInterpolation(v) + } + .animateToValue(1f, 0f) private var iconAndDimAnimator: ObjectAnimator? = null // The current background requests to load the task thumbnail and icon @@ -1700,16 +1701,6 @@ constructor( override fun get(taskView: TaskView) = taskView.focusTransitionProgress } - @JvmField - val SCALE_AND_DIM_OUT: FloatProperty = - object : FloatProperty("scaleAndDimFastOut") { - override fun setValue(taskView: TaskView, v: Float) { - taskView.focusTransitionScaleAndDimOut = v - } - - override fun get(taskView: TaskView) = taskView.focusTransitionScaleAndDimOut - } - private val SPLIT_SELECT_TRANSLATION_X: FloatProperty = object : FloatProperty("splitSelectTranslationX") { override fun setValue(taskView: TaskView, v: Float) { diff --git a/src/com/android/launcher3/anim/AnimatedFloat.java b/src/com/android/launcher3/anim/AnimatedFloat.java index b414ab6e35..44411640fb 100644 --- a/src/com/android/launcher3/anim/AnimatedFloat.java +++ b/src/com/android/launcher3/anim/AnimatedFloat.java @@ -20,6 +20,8 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.util.FloatProperty; +import java.util.function.Consumer; + /** * A mutable float which allows animating the value */ @@ -38,9 +40,9 @@ public class AnimatedFloat { } }; - private static final Runnable NO_OP = () -> { }; + private static final Consumer NO_OP = t -> { }; - private final Runnable mUpdateCallback; + private final Consumer mUpdateCallback; private ObjectAnimator mValueAnimator; // Only non-null when an animation is playing to this value. private Float mEndValue; @@ -52,6 +54,10 @@ public class AnimatedFloat { } public AnimatedFloat(Runnable updateCallback) { + this(v -> updateCallback.run()); + } + + public AnimatedFloat(Consumer updateCallback) { mUpdateCallback = updateCallback; } @@ -60,6 +66,11 @@ public class AnimatedFloat { value = initialValue; } + public AnimatedFloat(Consumer updateCallback, float initialValue) { + this(updateCallback); + value = initialValue; + } + /** * Returns an animation from the current value to the given value. */ @@ -99,7 +110,7 @@ public class AnimatedFloat { public void updateValue(float v) { if (Float.compare(v, value) != 0) { value = v; - mUpdateCallback.run(); + mUpdateCallback.accept(value); } } diff --git a/src/com/android/launcher3/anim/PendingAnimation.java b/src/com/android/launcher3/anim/PendingAnimation.java index e58890f7ca..47a2bdd6de 100644 --- a/src/com/android/launcher3/anim/PendingAnimation.java +++ b/src/com/android/launcher3/anim/PendingAnimation.java @@ -59,6 +59,13 @@ public class PendingAnimation extends AnimatedPropertySetter { add(anim, springProperty); } + /** + * Utility method to sent an interpolator on an animation and add it to the list + */ + public void add(Animator anim, TimeInterpolator interpolator) { + add(anim, interpolator, SpringProperty.DEFAULT); + } + @Override public void add(Animator anim) { add(anim, SpringProperty.DEFAULT); From f061e8b26d559e9a5a77d5b143a4a5eb150c5da0 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 9 Jul 2024 18:05:47 -0700 Subject: [PATCH 12/13] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Bug: 347053373 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:4bafcb8b1dd8d982eaa39c50ad0008539866ba5e) Merged-In: Ia4bc42b575811c5371e2a6a84c5b83e65f36b01c Change-Id: Ia4bc42b575811c5371e2a6a84c5b83e65f36b01c --- go/quickstep/res/values-fa/strings.xml | 4 +- go/quickstep/res/values-fr-rCA/strings.xml | 10 +-- go/quickstep/res/values-nb/strings.xml | 2 +- quickstep/res/values-en-rAU/strings.xml | 2 +- quickstep/res/values-en-rGB/strings.xml | 2 +- quickstep/res/values-en-rIN/strings.xml | 2 +- quickstep/res/values-fa/strings.xml | 2 +- quickstep/res/values-fr-rCA/strings.xml | 52 ++++++++-------- quickstep/res/values-ko/strings.xml | 2 +- quickstep/res/values-mn/strings.xml | 2 +- quickstep/res/values-mr/strings.xml | 2 +- quickstep/res/values-nb/strings.xml | 2 +- quickstep/res/values-pt-rPT/strings.xml | 4 +- quickstep/res/values-ta/strings.xml | 2 +- quickstep/res/values-zh-rCN/strings.xml | 2 +- res/values-de/strings.xml | 4 +- res/values-en-rCA/strings.xml | 3 +- res/values-en-rXC/strings.xml | 3 +- res/values-fa/strings.xml | 16 ++--- res/values-fr-rCA/strings.xml | 72 +++++++++++----------- res/values-hu/strings.xml | 2 +- res/values-pa/strings.xml | 8 +-- res/values-pt/strings.xml | 2 +- 23 files changed, 100 insertions(+), 102 deletions(-) diff --git a/go/quickstep/res/values-fa/strings.xml b/go/quickstep/res/values-fa/strings.xml index 47786e92eb..8453d4e3e2 100644 --- a/go/quickstep/res/values-fa/strings.xml +++ b/go/quickstep/res/values-fa/strings.xml @@ -14,7 +14,7 @@ "برای گوش کردن به نوشتار در صفحه‌نمایش‌تان یا ترجمه کردن آن، یکی از برنامه‌های دستیار دیجیتالی را در «تنظیمات» انتخاب کنید" "برای استفاده از این ویژگی، دستیارتان را تغییر دهید" "برای گوش کردن به نوشتار در صفحه‌نمایش‌تان یا ترجمه کردن آن، برنامه دستیار دیجیتالی‌تان را در «تنظیمات» تغییر دهید" - "برای گوش کردن به نوشتار در این صفحه، اینجا ضربه بزنید" - "برای ترجمه نوشتار در این صفحه، اینجا ضربه بزنید" + "برای گوش کردن به نوشتار در این صفحه، اینجا تک‌ضرب بزنید" + "برای ترجمه نوشتار در این صفحه، اینجا تک‌ضرب بزنید" "نمی‌توان این برنامه را هم‌رسانی کرد" diff --git a/go/quickstep/res/values-fr-rCA/strings.xml b/go/quickstep/res/values-fr-rCA/strings.xml index 2cc9d8fe7c..e48faeb627 100644 --- a/go/quickstep/res/values-fr-rCA/strings.xml +++ b/go/quickstep/res/values-fr-rCA/strings.xml @@ -1,7 +1,7 @@ - "Partager application" + "Partager appli" "Écouter" "Traduire" "Lentille" @@ -9,12 +9,12 @@ "ANNULER" "PARAMÈTRES" "Traduire ou écouter le texte à l\'écran" - "Des renseignements comme du texte sur votre écran, des adresses Web et des captures d\'écran peuvent être partagés avec Google.\n\nPour modifier les renseignements que vous partagez, accédez à ""Paramètres > Applications > Applications par défaut > Application d\'assistant numérique""." + "Des renseignements comme du texte sur votre écran, des adresses Web et des captures d\'écran peuvent être partagés avec Google.\n\nPour modifier les renseignements que vous partagez, accédez à ""Paramètres > Applis > Applis par défaut > Appli d\'assistant numérique""." "Choisir un assistant pour utiliser cette fonctionnalité" - "Pour écouter ou traduire le texte affiché sur votre écran, choisissez l\'application d\'un assistant numérique dans les paramètres" + "Pour écouter ou traduire le texte affiché sur votre écran, choisissez l\'appli d\'un assistant numérique dans les paramètres" "Modifier votre assistant pour utiliser cette fonctionnalité" - "Pour écouter ou traduire le texte affiché sur votre écran, modifiez l\'application de votre assistant numérique dans les paramètres" + "Pour écouter ou traduire le texte affiché sur votre écran, modifiez l\'appli de votre assistant numérique dans les paramètres" "Touchez ce bouton pour écouter le texte affiché sur cet écran" "Touchez ce bouton pour traduire le texte affiché sur cet écran" - "Cette application ne peut pas être partagée" + "Cette appli ne peut pas être partagée" diff --git a/go/quickstep/res/values-nb/strings.xml b/go/quickstep/res/values-nb/strings.xml index 662b544fd3..6299cc8190 100644 --- a/go/quickstep/res/values-nb/strings.xml +++ b/go/quickstep/res/values-nb/strings.xml @@ -9,7 +9,7 @@ "AVBRYT" "INNSTILLINGER" "Oversett eller lytt til tekst på skjermen" - "Informasjon som tekst på skjermen, nettadresser og skjermdumper kan deles med Google.\n\nFor å endre hvilken informasjon du deler, gå til ""Innstillinger > Apper > Standardapper > Digital assistent-app""." + "Informasjon som tekst på skjermen, nettadresser og skjermbilder kan deles med Google.\n\nFor å endre hvilken informasjon du deler, gå til ""Innstillinger > Apper > Standardapper > Digital assistent-app""." "Velg en assistent for å bruke denne funksjonen" "For å høre eller oversette tekst på skjermen, velg en digital assistent-app i innstillingene" "Endre assistenten for å bruke denne funksjonen" diff --git a/quickstep/res/values-en-rAU/strings.xml b/quickstep/res/values-en-rAU/strings.xml index eedb29ec84..b84f64613f 100644 --- a/quickstep/res/values-en-rAU/strings.xml +++ b/quickstep/res/values-en-rAU/strings.xml @@ -87,7 +87,7 @@ "Try again" "Nice!" "Tutorial %1$d/%2$d" - "Ready!" + "All set!" "Swipe up to go home" "Tap the home button to go to your home screen" "You’re ready to start using your %1$s" diff --git a/quickstep/res/values-en-rGB/strings.xml b/quickstep/res/values-en-rGB/strings.xml index eedb29ec84..b84f64613f 100644 --- a/quickstep/res/values-en-rGB/strings.xml +++ b/quickstep/res/values-en-rGB/strings.xml @@ -87,7 +87,7 @@ "Try again" "Nice!" "Tutorial %1$d/%2$d" - "Ready!" + "All set!" "Swipe up to go home" "Tap the home button to go to your home screen" "You’re ready to start using your %1$s" diff --git a/quickstep/res/values-en-rIN/strings.xml b/quickstep/res/values-en-rIN/strings.xml index eedb29ec84..b84f64613f 100644 --- a/quickstep/res/values-en-rIN/strings.xml +++ b/quickstep/res/values-en-rIN/strings.xml @@ -87,7 +87,7 @@ "Try again" "Nice!" "Tutorial %1$d/%2$d" - "Ready!" + "All set!" "Swipe up to go home" "Tap the home button to go to your home screen" "You’re ready to start using your %1$s" diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml index b296080164..bafc2d51b1 100644 --- a/quickstep/res/values-fa/strings.xml +++ b/quickstep/res/values-fa/strings.xml @@ -89,7 +89,7 @@ "آموزش گام‌به‌گام %1$d/%2$d" "همه چیز آماده است!" "برای رفتن به صفحه اصلی، تند به‌بالا بکشید" - "برای رفتن به صفحه اصلی، روی دکمه صفحه اصلی ضربه بزنید" + "برای رفتن به صفحه اصلی، روی دکمه صفحه اصلی تک‌ضرب بزنید" "آماده‌اید از %1$s خود استفاده کنید" "دستگاه" "تنظیمات پیمایش سیستم" diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml index edfb59ebc4..95104947c8 100644 --- a/quickstep/res/values-fr-rCA/strings.xml +++ b/quickstep/res/values-fr-rCA/strings.xml @@ -23,34 +23,34 @@ "Forme libre" "Ordinateur de bureau" "Aucun élément récent" - "Paramètres d\'utilisation de l\'application" + "Paramètres d\'utilisation de l\'appli" "Tout effacer" - "Applications récentes" + "Applis récentes" "Tâche fermée" "%1$s : %2$s" "< 1 min" "Il reste %1$s aujourd\'hui" - "Suggestions d\'applications" - "Vos prédictions d\'applications" - "Obtenir des suggestions d\'applications dans la rangée du bas de votre écran d\'accueil" - "Retrouvez des suggestions d\'applications dans la rangée des favoris de votre écran d\'accueil" - "Accédez facilement aux applications que vous utilisez le plus, directement à l\'écran d\'accueil. Les suggestions changeront en fonction de vos habitudes. Les applications dans la rangée du bas seront déplacées vers votre écran d\'accueil." - "Accédez facilement aux applications que vous utilisez le plus, directement à l\'écran d\'accueil. Les suggestions changeront en fonction de vos habitudes. Les applications dans la rangée des favoris seront déplacées vers votre écran d\'accueil." - "Obtenir des suggestions d\'applications" + "Suggestions d\'applis" + "Vos prédictions d\'applis" + "Obtenir des suggestions d\'applis dans la rangée du bas de votre écran d\'accueil" + "Retrouvez des suggestions d\'applis dans la rangée des favoris de votre écran d\'accueil" + "Accédez facilement aux applis que vous utilisez le plus, directement à l\'écran d\'accueil. Les suggestions changeront en fonction de vos habitudes. Les applis dans la rangée du bas seront déplacées vers votre écran d\'accueil." + "Accédez facilement aux applis que vous utilisez le plus, directement à l\'écran d\'accueil. Les suggestions changeront en fonction de vos habitudes. Les applis dans la rangée des favoris seront déplacées vers votre écran d\'accueil." + "Obtenir des suggestions d\'applis" "Non merci" "Paramètres" - "Les applications les plus utilisées s\'affichent ici et changent en fonction des habitudes" - "Faites glisser des applications hors de la rangée du bas pour obtenir des suggestions d\'applications" - "Applications suggérées ajoutées à l\'espace vide" - "Les suggestions d\'applications sont activées" - "Les suggestions d\'applications sont désactivées" - "Application prédite : %1$s" + "Les applis les plus utilisées s\'affichent ici et changent en fonction des habitudes" + "Faites glisser des applis hors de la rangée du bas pour obtenir des suggestions d\'applis" + "Applis suggérées ajoutées à l\'espace vide" + "Les suggestions d\'applis sont activées" + "Les suggestions d\'applis sont désactivées" + "Appli prédite : %1$s" "Faites pivoter votre appareil" "Veuillez faire pivoter votre appareil pour terminer le tutoriel de navigation par gestes" "Assurez-vous de balayer l\'écran à partir de l\'extrémité droite ou gauche" "Assurez-vous de balayer l\'écran à partir de l\'extrémité droite ou gauche vers le centre, puis allons-y" "Vous avez appris à balayer de la droite pour revenir en arrière. Apprenez comment changer d\'appli." - "Vous avez appris le geste de retour en arrière. Maintenant, apprenez comment changer d\'application." + "Vous avez appris le geste de retour en arrière. Maintenant, apprenez comment changer d\'appli." "Vous avez appris le geste de retour en arrière" "Assurez-vous de ne pas balayer trop près du bas de l\'écran" "Modifiez la sensibilité du geste de retour dans Paramètres" @@ -74,11 +74,11 @@ "Essayez de tenir la fenêtre plus longtemps avant de relâcher" "Assurez-vous de balayer l\'écran vers le haut, puis de faire une pause" "Vous avez appris à utiliser les gestes. Pour les désactiver, accédez au menu Paramètres." - "Vous avez appris le geste de changement d\'application" - "Balayez pour basculer entre les applications" - "Pour changer d\'application, balayez l\'écran de bas en haut, maintenez le doigt dessus, puis relâchez-le." + "Vous avez appris le geste de changement d\'appli" + "Balayez pour basculer entre les applis" + "Pour changer d\'appli, balayez l\'écran de bas en haut, maintenez le doigt dessus, puis relâchez-le." "Pour changer d\'appli, balayez l\'écran de bas en haut avec deux doigts, maintenez-les et relâchez-les." - "Changer d\'application" + "Changer d\'appli" "Balayez l\'écran de bas en haut, maintenez le doigt en place, puis relâchez-le" "Bien joué!" "Terminé" @@ -98,14 +98,14 @@ "Partager" "Enr. paire d\'applis" "Toucher une autre appli pour partager l\'écran" - "Choisir une autre application pour utiliser l\'Écran divisé" + "Choisir une autre appli pour utiliser l\'Écran divisé" "Annuler" "Quitter la sélection d\'écran divisé" - "Choisir une autre application pour utiliser l\'écran partagé" - "L\'application ou votre organisation n\'autorise pas cette action" - "Les widgets ne sont actuellement pas pris en charge. Veuillez sélectionner une autre application" + "Choisir une autre appli pour utiliser l\'écran partagé" + "L\'appli ou votre organisation n\'autorise pas cette action" + "Les widgets ne sont actuellement pas pris en charge. Veuillez sélectionner une autre appli" "Ignorer le tutoriel sur la navigation?" - "Vous trouverez le tutoriel dans l\'application %1$s" + "Vous trouverez le tutoriel dans l\'appli %1$s" "Annuler" "Ignorer" "Faire pivoter l\'écran" @@ -137,7 +137,7 @@ "Séparateur de la barre des tâches" "Déplacer vers le coin supérieur gauche de l\'écran" "Déplacer vers le coin inférieur droit de l\'écran" - "{count,plural, =1{Afficher # autre application.}one{Afficher # autre application.}other{Afficher # autres applications.}}" + "{count,plural, =1{Afficher # autre appli.}one{Afficher # autre appli.}other{Afficher # autres applis.}}" "{count,plural, =1{Afficher # appli de bureau.}one{Afficher # appli de bureau.}other{Afficher # applis de bureau.}}" "%1$s et %2$s" "Bulle" diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml index 1f4275a2d7..c27b7f8263 100644 --- a/quickstep/res/values-ko/strings.xml +++ b/quickstep/res/values-ko/strings.xml @@ -141,7 +141,7 @@ "{count,plural, =1{데스크톱 앱 #개를 표시합니다.}other{데스크톱 앱 #개를 표시합니다.}}" "%1$s%2$s" "풍선" - "오버플로" + "더보기" "%2$s%1$s" "%1$s%2$d개" diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml index 7a4c7e9cd6..fe2e4a4d97 100644 --- a/quickstep/res/values-mn/strings.xml +++ b/quickstep/res/values-mn/strings.xml @@ -141,7 +141,7 @@ "{count,plural, =1{Компьютерын # аппыг харуулна уу.}other{Компьютерын # аппыг харуулна уу.}}" "%1$s болон %2$s" "Бөмбөлөг" - "Урт цэс" + "Илүү хэсэг" "%2$s-с ирсэн %1$s" "%1$s болон бусад %2$d" diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml index 7941156dbc..b053a216a7 100644 --- a/quickstep/res/values-mr/strings.xml +++ b/quickstep/res/values-mr/strings.xml @@ -95,7 +95,7 @@ "सिस्टीम नेव्हिगेशन सेटिंग्ज" "शेअर करा" "स्क्रीनशॉट" - "स्प्लिट" + "स्प्लिट करा" "ॲपची जोडी सेव्ह करा" "स्प्लिट स्क्रीन वापरण्यासाठी दुसऱ्या ॲपवर टॅप करा" "स्प्लिट स्क्रीन वापरण्यासाठी दुसरे ॲप निवडा" diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml index dd3d16e18a..6aa755a027 100644 --- a/quickstep/res/values-nb/strings.xml +++ b/quickstep/res/values-nb/strings.xml @@ -94,7 +94,7 @@ "enheten" "Innstillinger for systemnavigasjon" "Del" - "Skjermdump" + "Skjermbilde" "Del opp" "Lagre apptilkobling" "Trykk på en annen app for å bruke delt skjerm" diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml index dd00469e41..e4d07bd97a 100644 --- a/quickstep/res/values-pt-rPT/strings.xml +++ b/quickstep/res/values-pt-rPT/strings.xml @@ -57,7 +57,7 @@ "Deslize rapidamente com o dedo para retroceder" "Para voltar ao último ecrã, deslize rapidamente do limite esquerdo ou direito até ao centro do ecrã." "Para voltar ao último ecrã, deslize rapidamente com 2 dedos a partir da extremidade esquerda ou direita até ao centro do ecrã." - "Voltar" + "Retroceder" "Deslize rapidamente a partir da extremidade esquerda ou direita para o meio do ecrã" "Deslize rapidamente com o dedo a partir do limite inferior do ecrã" "Não faça uma pausa antes de soltar" @@ -113,7 +113,7 @@ "Arraste uma app para o lado para usar 2 apps em simultâneo" "Deslize lentamente para cima para ver a Barra de tarefas" "Receba sugestões de apps baseadas na sua rotina" - "Mantenha o divisor premido para fixar a Barra de tarefas" + "Mantenha o divisor pressionado para fixar a Barra de tarefas" "Faça mais com a Barra de tarefas" "Mostre sempre a Barra de tarefas" "Para mostrar sempre a Barra de tarefas no fundo do ecrã, toque sem soltar no divisor" diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml index ed3ebeedaa..47d8055e16 100644 --- a/quickstep/res/values-ta/strings.xml +++ b/quickstep/res/values-ta/strings.xml @@ -122,7 +122,7 @@ "மூடுக" "முடிந்தது" "முகப்பு" - "அணுகல்தன்மை" + "மாற்றுத்திறன் வசதி" "பின்செல்லும்" "IME சுவிட்ச்சர்" "சமீபத்தியவை" diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml index a89227e17e..79ea299db8 100644 --- a/quickstep/res/values-zh-rCN/strings.xml +++ b/quickstep/res/values-zh-rCN/strings.xml @@ -141,7 +141,7 @@ "{count,plural, =1{显示 # 款桌面应用。}other{显示 # 款桌面应用。}}" "%1$s%2$s" "气泡框" - "菜单" + "溢出式气泡框" "来自“%2$s”的%1$s" "%1$s以及另外 %2$d 个" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 9a4e5e2a30..69be6d2417 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -37,7 +37,7 @@ "Dieses App-Paar wird auf diesem Gerät nicht unterstützt" "Gerät aufklappen, um dieses App-Paar zu verwenden" "App-Paar nicht verfügbar" - "Zum Verschieben des Widgets berühren und halten" + "Zum Verschieben des Widgets gedrückt halten" "Doppeltippen und halten, um ein Widget zu bewegen oder benutzerdefinierte Aktionen zu nutzen." "%1$d × %2$d" "%1$d breit und %2$d hoch" @@ -75,7 +75,7 @@ "App" "Alle Apps" "Benachrichtigungen" - "Zum Verschieben einer Verknüpfung berühren und halten" + "Zum Verschieben einer Verknüpfung gedrückt halten" "Doppeltippen und halten, um eine Verknüpfung zu bewegen oder benutzerdefinierte Aktionen zu nutzen." "Auf diesem Startbildschirm ist kein Platz mehr vorhanden" "Ablage \"Favoriten\" ist voll." diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml index e9f951b491..08ff6e7f82 100644 --- a/res/values-en-rCA/strings.xml +++ b/res/values-en-rCA/strings.xml @@ -27,8 +27,7 @@ "Widgets disabled in Safe mode" "Shortcut isn\'t available" "Home" - - + "Set %1$s as default home app in Settings" "Split screen" "App info for %1$s" "Usage settings for %1$s" diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml index fb08c7e581..fa6d1f1a87 100644 --- a/res/values-en-rXC/strings.xml +++ b/res/values-en-rXC/strings.xml @@ -27,8 +27,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎Widgets disabled in Safe mode‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‎Shortcut isn\'t available‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎Home‎‏‎‎‏‎" - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‎Set ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ as default home app in Settings‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎Split screen‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎App info for %1$s‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎Usage settings for %1$s‎‏‎‎‏‎" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index b39945b759..5cbce53868 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -38,7 +38,7 @@ "برای استفاده از این جفت برنامه، دستگاه را باز کنید" "جفت برنامه دردسترس نیست" "برای جابه‌جا کردن ابزارک، لمس کنید و نگه دارید." - "برای جابه‌جا کردن ابزارک یا استفاده از کنش‌های سفارشی، دوضربه بزنید و نگه دارید." + "برای جابه‌جا کردن ابزارک یا استفاده از کنش‌های سفارشی، دو تک‌ضرب بزنید و نگه دارید." "%1$d × %2$d" "‏%1$d عرض در %2$d طول" "ابزارک %1$s" @@ -67,7 +67,7 @@ "یادداشت‌برداری" "افزودن" "افزودن ابزارک %1$s" - "برای تغییر تنظیمات ابزارک، ضربه بزنید" + "برای تغییر تنظیمات ابزارک، تک‌ضرب بزنید" "تغییر تنظیمات ابزارک" "جستجوی برنامه‌ها" "درحال بارگیری برنامه‌‌ها…" @@ -76,7 +76,7 @@ "همه برنامه‌ها" "اعلان‌ها" "برای جابه‌جا کردن میان‌بر، لمس کنید و نگه دارید." - "برای جابه‌جا کردن میان‌بر یا استفاده از کنش‌های سفارشی، دوضربه بزنید و نگه دارید." + "برای جابه‌جا کردن میان‌بر یا استفاده از کنش‌های سفارشی، دو تک‌ضرب بزنید و نگه دارید." "فضای خالی در این صفحه اصلی وجود ندارد" "فضای بیشتری در سینی موارد دلخواه وجود ندارد" "فهرست برنامه‌ها" @@ -99,7 +99,7 @@ "به برنامه اجازه می‌دهد تنظیمات و میان‌برهای صفحه اصلی را تغییر دهد." "ابزارک را نمی‌توان بار کرد" "تنظیمات ابزارک" - "برای تکمیل راه‌اندازی ضربه بزنید" + "برای تکمیل راه‌اندازی تک‌ضرب بزنید" "این برنامه سیستمی است و حذف نصب نمی‌شود." "ویرایش نام" "%1$s غیرفعال شد" @@ -108,8 +108,8 @@ "‏صفحه اصلی %1$d از %2$d" "صفحه اصلی جدید" "پوشه باز شده، %1$d در %2$d" - "برای بستن پوشه، ضربه بزنید" - "برای ذخیره تغییر نام، ضربه بزنید" + "برای بستن پوشه، تک‌ضرب بزنید" + "برای ذخیره تغییر نام، تک‌ضرب بزنید" "پوشه بسته شد" "نام پوشه به %1$s تغییر کرد" "پوشه: %1$s، %2$d مورد" @@ -139,7 +139,7 @@ "%1$s درحال نصب است، %2$s تکمیل شده است" "درحال بارگیری %1$s، %2$s کامل شد" "%1$s درانتظار نصب" - "%1$s بایگانی شده است. برای بارگیری و بازیابی ضربه بزنید." + "%1$s بایگانی شده است. برای بارگیری و بازیابی تک‌ضرب بزنید." "برنامه باید به‌روز شود" "برنامه برای این نماد به‌روز نشده است. می‌توانید آن را به‌صورت دستی به‌روز کنید تا میان‌بر دوباره فعال شود، یا نماد را بردارید." "به‌روزرسانی" @@ -187,7 +187,7 @@ "فیلتر" "ناموفق بود: %1$s" "فضای خصوصی" - "برای راه‌اندازی یا باز کردن، ضربه بزنید" + "برای راه‌اندازی یا باز کردن، تک‌ضرب بزنید" "خصوصی" "تنظیمات «فضای خصوصی»" "خصوصی، باز." diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index f3b08cbdba..f95f26d2f6 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -21,9 +21,9 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Lanceur3" "Travail" - "L\'application n\'est pas installée." - "Application indisponible" - "L\'application téléchargée est désactivée en mode sans échec." + "L\'appli n\'est pas installée." + "Appli indisponible" + "L\'appli téléchargée est désactivée en mode sans échec." "Widgets désactivés en mode sans échec" "Le raccourci n\'est pas disponible" "Accueil" @@ -34,9 +34,9 @@ "Paramètres d\'utilisation pour %1$s" "Enr. paire d\'applis" "%1$s | %2$s" - "Cette paire d\'applications n\'est pas prise en charge sur cet appareil" - "Déplier l\'appareil pour utiliser cette paire d\'applications" - "La Paire d\'applications n\'est pas offerte" + "Cette paire d\'applis n\'est pas prise en charge sur cet appareil" + "Déplier l\'appareil pour utiliser cette paire d\'applis" + "La Paire d\'applis n\'est pas offerte" "Maintenez le doigt sur un widget pour le déplacer." "Touchez 2x un widget et maintenez le doigt dessus pour le déplacer ou utiliser des actions personnalisées." "%1$d × %2$d" @@ -69,20 +69,20 @@ "Ajoutez le widget %1$s" "Touchez pour modifier les paramètres du widget" "Modifier les paramètres du widget" - "Rechercher dans les applications" - "Chargement des applications en cours…" - "Aucune application trouvée correspondant à « %1$s »" - "Application" - "Toutes les applications" + "Rechercher dans les applis" + "Chargement des applis en cours…" + "Aucune appli trouvée correspondant à « %1$s »" + "Appli" + "Toutes les applis" "Notifications" "Maintenez le doigt sur un raccourci pour le déplacer." "Touchez deux fois un raccourci et maintenez le doigt dessus pour le déplacer ou utiliser des actions personnalisées." "Pas d\'espace libre sur cet écran d\'accueil" "Il n\'y a plus d\'espace dans la zone des favoris" - "Liste des applications" + "Liste des applis" "Résultats de recherche" - "Liste des applications personnelles" - "Liste des applications professionnelles" + "Liste des applis personnelles" + "Liste des applis professionnelles" "Supprimer" "Désinstaller" "Détails de l\'appli" @@ -92,17 +92,17 @@ "Ne pas suggérer d\'appli" "Épingler la prédiction" "installer des raccourcis" - "Permet à une application d\'ajouter des raccourcis sans l\'intervention de l\'utilisateur." + "Permet à une appli d\'ajouter des raccourcis sans l\'intervention de l\'utilisateur." "lire les paramètres et les raccourcis de la page d\'accueil" - "Permet à l\'application de lire les paramètres et les raccourcis de l\'écran d\'accueil." + "Permet à l\'appli de lire les paramètres et les raccourcis de l\'écran d\'accueil." "modifier les paramètres et les raccourcis de la page d\'accueil" - "Permet à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil." + "Permet à l\'appli de modifier les paramètres et les raccourcis de l\'écran d\'accueil." "Impossible de charger le widget" "Paramètres du widget" "Touchez pour terminer la configuration" - "Impossible de désinstaller cette application, car il s\'agit d\'une application système." + "Impossible de désinstaller cette appli, car il s\'agit d\'une appli système." "Modifier le nom" - "L\'application %1$s est désactivée" + "L\'appli %1$s est désactivée" "{count,plural, =1{{app_name} a # notification}one{{app_name} a # notification}other{{app_name} a # notifications}}" "Page %1$d sur %2$d" "Écran d\'accueil %1$d sur %2$d" @@ -114,7 +114,7 @@ "Nouveau nom du dossier : %1$s" "Dossier : %1$s, %2$d élément(s)" "Dossier : %1$s, %2$d éléments ou plus" - "Paire d\'applications : %1$s et %2$s" + "Paire d\'applis : %1$s et %2$s" "Fond d\'écran et style" "Modifier l\'écran d\'accueil" "Paramètres d\'accueil" @@ -125,23 +125,23 @@ "Activé" "Désactivé" "L\'accès aux notifications est requis" - "Pour afficher les points de notification, activez les notifications d\'application pour %1$s" + "Pour afficher les points de notification, activez les notifications d\'appli pour %1$s" "Modifier les paramètres" "Afficher les points de notification" "Options pour les développeurs" - "Ajouter les icônes des applications à l\'écran d\'accueil" - "Pour les nouvelles applications" + "Ajouter les icônes des applis à l\'écran d\'accueil" + "Pour les nouvelles applis" "Inconnu" "Supprimer" "Rechercher" - "Cette application n\'est pas installée" - "L\'application liée à cette icône n\'est pas installée. Vous pouvez la supprimer ou rechercher l\'application et l\'installer manuellement." - "Installation de l\'application %1$s en cours, %2$s terminée" + "Cette appli n\'est pas installée" + "L\'appli liée à cette icône n\'est pas installée. Vous pouvez la supprimer ou rechercher l\'appli et l\'installer manuellement." + "Installation de l\'appli %1$s en cours, %2$s terminée" "Téléchargement de %1$s : %2$s" "%1$s en attente d\'installation" "L\'appli %1$s est archivée. Touchez le bouton pour télécharger et restaurer l\'appli." - "Mise à jour de l\'application requise" - "L\'application pour cette icône n\'est pas à jour. Vous pouvez soit la mettre à jour manuellement pour réactiver ce raccourci, soit retirer l\'icône." + "Mise à jour de l\'appli requise" + "L\'appli pour cette icône n\'est pas à jour. Vous pouvez soit la mettre à jour manuellement pour réactiver ce raccourci, soit retirer l\'icône." "Mettre à jour" "Retirer" "Liste des widgets" @@ -174,15 +174,15 @@ "Personnel" "Travail" "Profil professionnel" - "Les applications professionnelles sont indiquées par un badge et elles sont visibles pour votre administrateur informatique" + "Les applis professionnelles sont indiquées par un badge et elles sont visibles pour votre administrateur informatique" "OK" - "Les applications professionnelles sont interrompues" - "Vous ne recevrez pas de notifications de vos applications professionnelles" - "Les applications professionnelles ne peuvent ni vous envoyer de notifications, ni utiliser la pile, ni accéder à votre position" - "Vous ne recevrez pas d\'appels téléphoniques, de messages texte ni de notifications de vos applications professionnelles" - "Les applications professionnelles sont indiquées par un badge et sont visibles pour votre administrateur informatique" + "Les applis professionnelles sont interrompues" + "Vous ne recevrez pas de notifications de vos applis professionnelles" + "Les applis professionnelles ne peuvent ni vous envoyer de notifications, ni utiliser la pile, ni accéder à votre position" + "Vous ne recevrez pas d\'appels téléphoniques, de messages texte ni de notifications de vos applis professionnelles" + "Les applis professionnelles sont indiquées par un badge et sont visibles pour votre administrateur informatique" "OK" - "Mettre en pause les applications professionnelles" + "Mettre en pause les applis professionnelles" "Réactiver" "Filtrer" "Échec : %1$s" @@ -195,5 +195,5 @@ "Verrouiller" "Transition vers l\'Espace privé" "Installer" - "Installer des applications dans l\'Espace privé" + "Installer des applis dans l\'Espace privé" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 3b556da7ef..6e1b49a1ff 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -188,7 +188,7 @@ "Sikertelen: %1$s" "Privát terület" "Koppintson a beállításhoz vagy a megnyitáshoz" - "Privát terület" + "Privát" "Privát terület beállításai" "Privát, feloldott." "Privát, zárolt." diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index c235c3cdc5..8cb5515145 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -86,7 +86,7 @@ "ਹਟਾਓ" "ਅਣਸਥਾਪਤ ਕਰੋ" "ਐਪ ਜਾਣਕਾਰੀ" - "ਨਿੱਜੀ ਵਜੋਂ ਸਥਾਪਤ ਕਰੋ" + "ਪ੍ਰਾਈਵੇਟ ਵਜੋਂ ਸਥਾਪਤ ਕਰੋ" "ਐਪ ਅਣਸਥਾਪਤ ਕਰੋ" "ਸਥਾਪਤ ਕਰੋ" "ਐਪ ਦਾ ਸੁਝਾਅ ਨਾ ਦਿਓ" @@ -186,14 +186,14 @@ "ਰੋਕ ਹਟਾਓ" "ਫਿਲਟਰ" "ਇਹ ਕਾਰਵਾਈ ਅਸਫਲ ਹੋਈ: %1$s" - "ਨਿੱਜੀ ਸਪੇਸ" + "ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ" "ਸੈੱਟਅੱਪ ਕਰਨ ਜਾਂ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ" "ਨਿੱਜੀ" - "ਨਿੱਜੀ ਸਪੇਸ ਸੰਬੰਧੀ ਸੈਟਿੰਗਾਂ" + "ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਸੰਬੰਧੀ ਸੈਟਿੰਗਾਂ" "ਨਿੱਜੀ, ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ।" "ਨਿੱਜੀ, ਲਾਕ ਕੀਤਾ ਗਿਆ।" "ਲਾਕ ਕਰੋ" - "ਨਿੱਜੀ ਸਪੇਸ ਨੂੰ ਤਬਦੀਲ ਕਰਨਾ" + "ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਨੂੰ ਤਬਦੀਲ ਕਰਨਾ" "ਸਥਾਪਤ ਕਰੋ" "ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਵਿੱਚ ਐਪਾਂ ਸਥਾਪਤ ਕਰੋ" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index b2ec45d3fc..4c4b13bacd 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -192,7 +192,7 @@ "Configurações do Espaço particular" "Privada, desbloqueado." "Privada, bloqueado." - "Bloquear" + "Bloqueio" "Espaço particular em transição" "Instalar" "Instalar apps no espaço privado" From 5fbc9a5d5def34d7b966b8dc6bf196d25b6928c3 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Thu, 11 Jul 2024 15:50:06 +0100 Subject: [PATCH 13/13] Perform state switch to Overview from -1 screen - This fixed a regression caused by ag/27904180, where -1 is no longer considered `visibleLauncher`. -1 still have Launcher being top activity, and recents animation will always fail - Added isInMinusOne in LauncherActivityInterface, and return Launcher in getVisibleLauncher for -1 case - -1 should be the only case where Launcher is top activity, but is not started Fix: 352254279 Test: Recents button from the following scenarios: Home, -1, apps, transparent apps, video from -1 Flag: EXEMPT bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:1cd3fe27f229da4f7bb80a2e04d1416cc050fc94) Merged-In: I0898d202b9dd4742c0c7d2c0d6b340c748e8acf7 Change-Id: I0898d202b9dd4742c0c7d2c0d6b340c748e8acf7 --- .../android/quickstep/LauncherActivityInterface.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java index 1048ea1b0d..b564fa752a 100644 --- a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java +++ b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java @@ -212,6 +212,9 @@ public final class LauncherActivityInterface extends if (launcher.isStarted() && (isInLiveTileMode() || launcher.hasBeenResumed())) { return launcher; } + if (isInMinusOne()) { + return launcher; + } return null; } @@ -289,6 +292,15 @@ public final class LauncherActivityInterface extends && TopTaskTracker.INSTANCE.get(launcher).getCachedTopTask(false).isHomeTask(); } + private boolean isInMinusOne() { + QuickstepLauncher launcher = getCreatedContainer(); + + return launcher != null + && launcher.getStateManager().getState() == NORMAL + && !launcher.isStarted() + && TopTaskTracker.INSTANCE.get(launcher).getCachedTopTask(false).isHomeTask(); + } + @Override public void onLaunchTaskFailed() { QuickstepLauncher launcher = getCreatedContainer();