From 3a50ab4af10032914ae3277bcb886bc77ed6b9be Mon Sep 17 00:00:00 2001 From: Sebastian Franco Date: Tue, 16 Nov 2021 10:21:04 -0600 Subject: [PATCH 01/37] Adding ripple effect to the "All Apps tab" buttons. Test: Manually tested Fix: 192252147 Change-Id: I38d37b581b998dc05f087533cff3968ebe0cb00d --- res/color-night-v31/accent_ripple_color.xml | 4 ++ res/color-night/accent_ripple_color.xml | 4 ++ res/color-v31/accent_ripple_color.xml | 4 ++ res/color/accent_ripple_color.xml | 4 ++ res/drawable/all_apps_tabs_background.xml | 41 ++++++++++++++------- res/drawable/personal_work_tabs_ripple.xml | 22 ----------- 6 files changed, 43 insertions(+), 36 deletions(-) create mode 100644 res/color-night-v31/accent_ripple_color.xml create mode 100644 res/color-night/accent_ripple_color.xml create mode 100644 res/color-v31/accent_ripple_color.xml create mode 100644 res/color/accent_ripple_color.xml delete mode 100644 res/drawable/personal_work_tabs_ripple.xml diff --git a/res/color-night-v31/accent_ripple_color.xml b/res/color-night-v31/accent_ripple_color.xml new file mode 100644 index 0000000000..cb149d6786 --- /dev/null +++ b/res/color-night-v31/accent_ripple_color.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/res/color-night/accent_ripple_color.xml b/res/color-night/accent_ripple_color.xml new file mode 100644 index 0000000000..4a37b00ab8 --- /dev/null +++ b/res/color-night/accent_ripple_color.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/res/color-v31/accent_ripple_color.xml b/res/color-v31/accent_ripple_color.xml new file mode 100644 index 0000000000..a996228daa --- /dev/null +++ b/res/color-v31/accent_ripple_color.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/res/color/accent_ripple_color.xml b/res/color/accent_ripple_color.xml new file mode 100644 index 0000000000..697f415ec7 --- /dev/null +++ b/res/color/accent_ripple_color.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/res/drawable/all_apps_tabs_background.xml b/res/drawable/all_apps_tabs_background.xml index aea2e7a98b..8471cd4539 100644 --- a/res/drawable/all_apps_tabs_background.xml +++ b/res/drawable/all_apps_tabs_background.xml @@ -13,23 +13,36 @@ See the License for the specific language governing permissions and limitations under the License. --> - - + + + - + - - - - - + + + + + + + + + + + + + + + + - \ No newline at end of file + + \ No newline at end of file diff --git a/res/drawable/personal_work_tabs_ripple.xml b/res/drawable/personal_work_tabs_ripple.xml deleted file mode 100644 index 2e57b80570..0000000000 --- a/res/drawable/personal_work_tabs_ripple.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - \ No newline at end of file From 0077caa15d567da042f19deffe319682043863db Mon Sep 17 00:00:00 2001 From: Tracy Zhou Date: Sat, 8 Jan 2022 22:56:59 -0800 Subject: [PATCH 02/37] End live tile when notification panel is pulled down for the first time in Overview. Fixes: 211556489 Test: Go to overview with live tile. Turn on dark theme. Pull the panel back up. Make sure everything looks fine (live tile is ended). Change-Id: I51cb81718a489ad7568c5e05ace0b3dbc6ca5443 --- .../android/quickstep/TaskAnimationManager.java | 16 ++++++++++++++++ .../quickstep/TouchInteractionService.java | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/quickstep/src/com/android/quickstep/TaskAnimationManager.java b/quickstep/src/com/android/quickstep/TaskAnimationManager.java index d3b17f8324..82c7c08153 100644 --- a/quickstep/src/com/android/quickstep/TaskAnimationManager.java +++ b/quickstep/src/com/android/quickstep/TaskAnimationManager.java @@ -220,6 +220,22 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn return mCallbacks; } + public void endLiveTile() { + if (mLastGestureState == null) { + return; + } + BaseActivityInterface activityInterface = mLastGestureState.getActivityInterface(); + if (ENABLE_QUICKSTEP_LIVE_TILE.get() && activityInterface.isInLiveTileMode() + && activityInterface.getCreatedActivity() != null) { + RecentsView recentsView = activityInterface.getCreatedActivity().getOverviewPanel(); + if (recentsView != null) { + recentsView.switchToScreenshot(null, + () -> recentsView.finishRecentsAnimation(true /* toRecents */, + false /* shouldPip */, null)); + } + } + } + public void setLiveTileCleanUpHandler(Runnable cleanUpHandler) { mLiveTileCleanUpHandler = cleanUpHandler; } diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 38d6448405..539239d36a 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -33,6 +33,7 @@ import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SHE import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SHELL_STARTING_WINDOW; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SMARTSPACE_TRANSITION_CONTROLLER; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SYSUI_PROXY; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_TRACING_ENABLED; import android.annotation.TargetApi; @@ -495,6 +496,15 @@ public class TouchInteractionService extends Service mOverviewComponentObserver.onSystemUiStateChanged(); mTaskbarManager.onSystemUiFlagsChanged(systemUiStateFlags); + boolean wasExpanded = (lastSysUIFlags & SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED) != 0; + boolean isExpanded = + (systemUiStateFlags & SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED) != 0; + if (wasExpanded != isExpanded && isExpanded) { + // End live tile when expanding the notification panel for the first time from + // overview. + mTaskAnimationManager.endLiveTile(); + } + if ((lastSysUIFlags & SYSUI_STATE_TRACING_ENABLED) != (systemUiStateFlags & SYSUI_STATE_TRACING_ENABLED)) { // Update the tracing state From 675120232802b220c93600a391ee560742beb17c Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 20 Jan 2022 21:32:45 +0000 Subject: [PATCH 03/37] Skip animation if there are no targets Bug: 210118444 Test: Manual Change-Id: I362ca30d0e00b647d84b5df38b35b924d5ccfb33 --- quickstep/src/com/android/quickstep/views/RecentsView.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 02261af499..13a2bda048 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -4139,8 +4139,10 @@ public abstract class RecentsView Date: Thu, 20 Jan 2022 13:48:40 -0800 Subject: [PATCH 04/37] Fix bug where back swipe to icon in All Apps search result. Issue is that All Apps is scaling during the animation, so when FloatingIconView looks for it in the view hierarchy, it's not in its final position. This would be the cleanest approach for a scv2 fix Bug: 213306709 Test: manual Change-Id: Iaec77d15c9533edccd9c82164143af8fa522158f Merged-In: Iaec77d15c9533edccd9c82164143af8fa522158f --- .../launcher3/QuickstepTransitionManager.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 6e2fadd7d3..49b2cc5894 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -367,7 +367,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener if (launcherClosing) { // Delay animation by a frame to avoid jank. Pair launcherContentAnimator = - getLauncherContentAnimator(true /* isAppOpening */, startDelay); + getLauncherContentAnimator(true /* isAppOpening */, startDelay, false); anim.play(launcherContentAnimator.first); anim.addListener(new AnimatorListenerAdapter() { @Override @@ -464,9 +464,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener * @param isAppOpening True when this is called when an app is opening. * False when this is called when an app is closing. * @param startDelay Start delay duration. + * @param skipAllAppsScale True if we want to avoid scaling All Apps */ private Pair getLauncherContentAnimator(boolean isAppOpening, - int startDelay) { + int startDelay, boolean skipAllAppsScale) { AnimatorSet launcherAnimator = new AnimatorSet(); Runnable endListener; @@ -484,7 +485,6 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener final float startAlpha = appsView.getAlpha(); final float startScale = SCALE_PROPERTY.get(appsView); appsView.setAlpha(alphas[0]); - SCALE_PROPERTY.set(appsView, scales[0]); ObjectAnimator alpha = ObjectAnimator.ofFloat(appsView, View.ALPHA, alphas); alpha.setDuration(CONTENT_ALPHA_DURATION); @@ -496,12 +496,16 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener appsView.setLayerType(View.LAYER_TYPE_NONE, null); } }); - ObjectAnimator scale = ObjectAnimator.ofFloat(appsView, SCALE_PROPERTY, scales); - scale.setInterpolator(AGGRESSIVE_EASE); - scale.setDuration(CONTENT_SCALE_DURATION); + + if (!skipAllAppsScale) { + SCALE_PROPERTY.set(appsView, scales[0]); + ObjectAnimator scale = ObjectAnimator.ofFloat(appsView, SCALE_PROPERTY, scales); + scale.setInterpolator(AGGRESSIVE_EASE); + scale.setDuration(CONTENT_SCALE_DURATION); + launcherAnimator.play(scale); + } launcherAnimator.play(alpha); - launcherAnimator.play(scale); endListener = () -> { appsView.setAlpha(startAlpha); @@ -1565,6 +1569,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener || mLauncher.getWorkspace().isOverlayShown(); boolean playWorkspaceReveal = true; + boolean skipAllAppsScale = false; if (mFromUnlock) { anim.play(getUnlockWindowAnimator(appTargets, wallpaperTargets)); } else if (ENABLE_BACK_SWIPE_HOME_ANIMATION.get() @@ -1579,6 +1584,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener true /* animateOverviewScrim */, launcherView).getAnimators()); // We play StaggeredWorkspaceAnim as a part of the closing window animation. playWorkspaceReveal = false; + } else { + // Skip scaling all apps, otherwise FloatingIconView will get wrong + // layout bounds. + skipAllAppsScale = true; } } else { anim.play(getFallbackClosingWindowAnimators(appTargets)); @@ -1600,7 +1609,8 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener if (mLauncher.isInState(LauncherState.ALL_APPS)) { Pair contentAnimator = - getLauncherContentAnimator(false, LAUNCHER_RESUME_START_DELAY); + getLauncherContentAnimator(false, LAUNCHER_RESUME_START_DELAY, + skipAllAppsScale); anim.play(contentAnimator.first); anim.addListener(new AnimatorListenerAdapter() { @Override From eff9a120c67bb85d66f6d2244da05f283f30f93d Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 20 Jan 2022 23:55:17 +0000 Subject: [PATCH 05/37] Dispatch hover events through the input consumer proxy - Touch explore uses hover events to focus views for accessibility, but we were dropping these events when handling them through the input consumer proxy. The reason this changed is that in sc-v2 we moved the recents input consumer to the top of the task display area to ensure that it was always above any of the tasks in splitscreen, but by doing so, it was always above launcher even after settling in overview. The existing path for handling motion events is heavily tied to touch handling (action down/move/up) so we just add a separate path for dispatching hover events through the normal mechanism to launcher via the consumer. Bug: 197043796 Change-Id: I5f8cfd357ff13971fe172ce1d0179535479cd26c --- .../com/android/quickstep/InputConsumer.java | 2 ++ .../inputconsumers/OverviewInputConsumer.java | 7 +++++++ .../quickstep/util/InputConsumerProxy.java | 20 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/quickstep/src/com/android/quickstep/InputConsumer.java b/quickstep/src/com/android/quickstep/InputConsumer.java index 0b093234f3..c455dc7462 100644 --- a/quickstep/src/com/android/quickstep/InputConsumer.java +++ b/quickstep/src/com/android/quickstep/InputConsumer.java @@ -99,6 +99,8 @@ public interface InputConsumer { default void onMotionEvent(MotionEvent ev) { } + default void onHoverEvent(MotionEvent ev) { } + default void onKeyEvent(KeyEvent ev) { } default void onInputEvent(InputEvent ev) { diff --git a/quickstep/src/com/android/quickstep/inputconsumers/OverviewInputConsumer.java b/quickstep/src/com/android/quickstep/inputconsumers/OverviewInputConsumer.java index b0df2869c7..02ac48ebeb 100644 --- a/quickstep/src/com/android/quickstep/inputconsumers/OverviewInputConsumer.java +++ b/quickstep/src/com/android/quickstep/inputconsumers/OverviewInputConsumer.java @@ -100,6 +100,13 @@ public class OverviewInputConsumer, T extends StatefulAct } } + @Override + public void onHoverEvent(MotionEvent ev) { + if (ENABLE_QUICKSTEP_LIVE_TILE.get()) { + mActivity.dispatchGenericMotionEvent(ev); + } + } + @Override public void onKeyEvent(KeyEvent ev) { if (ENABLE_QUICKSTEP_LIVE_TILE.get()) { diff --git a/quickstep/src/com/android/quickstep/util/InputConsumerProxy.java b/quickstep/src/com/android/quickstep/util/InputConsumerProxy.java index c2101a848e..91b53c7ff2 100644 --- a/quickstep/src/com/android/quickstep/util/InputConsumerProxy.java +++ b/quickstep/src/com/android/quickstep/util/InputConsumerProxy.java @@ -71,7 +71,16 @@ public class InputConsumerProxy { private boolean onInputConsumerEvent(InputEvent ev) { if (ev instanceof MotionEvent) { - onInputConsumerMotionEvent((MotionEvent) ev); + MotionEvent event = (MotionEvent) ev; + int action = event.getActionMasked(); + boolean isHoverEvent = action == MotionEvent.ACTION_HOVER_ENTER + || action == MotionEvent.ACTION_HOVER_MOVE + || action == MotionEvent.ACTION_HOVER_EXIT; + if (isHoverEvent) { + onInputConsumerHoverEvent(event); + } else { + onInputConsumerMotionEvent(event); + } } else if (ev instanceof KeyEvent) { initInputConsumerIfNeeded(); mInputConsumer.onKeyEvent((KeyEvent) ev); @@ -113,6 +122,15 @@ public class InputConsumerProxy { return true; } + private void onInputConsumerHoverEvent(MotionEvent ev) { + initInputConsumerIfNeeded(); + if (mInputConsumer != null) { + SimpleOrientationTouchTransformer.INSTANCE.get(mContext).transform(ev, + mRotationSupplier.get()); + mInputConsumer.onHoverEvent(ev); + } + } + public void destroy() { if (mTouchInProgress) { mDestroyPending = true; From cd6abc19a8be4d9908890d335d0db646d40660e2 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 19 Jan 2022 00:10:45 +0000 Subject: [PATCH 06/37] Update taskbar resume alignment anim if launcher state changes in the middle One way to reproduce this issue is to run `adb shell input keyevent KEYCODE_HOME`, which happens to pause and immediately resume launcher. For example, let's say we run this while in All Apps. Because the isResumed=true comes before the state transition to Normal, we behave as if we are still going to All Apps, specifically goingToUnstashedState = false (since we stash in All Apps). To fix this, we now listen to state changes while the resume alignment animation is playing, and update it if necessary. Also did the same correction for the gesture alignment animation, though I don't have a specific repo for that. Finally, because there are now more triggers for alignment animations to play, we add a check to only play them if it's not animating to the same value it's already animating towards. One notable experience this improves is swiping down from All Apps to home; if you do it quick enough, the state animation ends before the taskbar unstash animation, and thus the unstash animation would cancel and start again with the full duration, making it look laggy/disjointed (this behavior existed before this change as well). Test: TaplTestsQuickstep Test: Go to All Apps, run `adb shell input keyevent KEYCODE_HOME`, open an app and ensure taskbar icons are visible Test: Quick switch from home when taskbar is present in apps, but instead go to overview; ensure no jump when taskbar stashes Test: Swipe down quickly from All Apps, ensure taskbar unstashing doesn't slow down when reaching the end of the state transition Fixes: 214562370 Change-Id: Ie0c6140e14186e41c7e4748dc745f87349b084fe Merged-In: Ie0c6140e14186e41c7e4748dc745f87349b084fe (cherry picked from commit 5fa2ed27bf143da66a4c557dad9a4fbcfac4ea6d) --- .../TaskbarLauncherStateController.java | 132 +++++++++++------- .../com/android/quickstep/AnimatedFloat.java | 21 +++ 2 files changed, 99 insertions(+), 54 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java index 7a50d0bf63..be5ab55353 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java @@ -207,59 +207,10 @@ import java.util.function.Supplier; private Animator onStateChangeApplied(int changedFlags, long duration, boolean start) { AnimatorSet animatorSet = new AnimatorSet(); - if (hasAnyFlag(changedFlags, FLAG_RESUMED)) { - boolean isResumed = isResumed(); - ObjectAnimator anim = mIconAlignmentForResumedState - .animateToValue(isResumed && goingToUnstashedLauncherState() - ? 1 : 0) - .setDuration(duration); - - anim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mIsAnimatingToLauncherViaResume = false; - } - - @Override - public void onAnimationStart(Animator animation) { - mIsAnimatingToLauncherViaResume = isResumed; - - TaskbarStashController stashController = mControllers.taskbarStashController; - stashController.updateStateForFlag(FLAG_IN_APP, !isResumed); - stashController.applyState(duration); - } - }); - animatorSet.play(anim); - } - - if (hasAnyFlag(changedFlags, FLAG_RECENTS_ANIMATION_RUNNING)) { - boolean isRecentsAnimationRunning = isRecentsAnimationRunning(); - Animator animator = mIconAlignmentForGestureState - .animateToValue(isRecentsAnimationRunning && goingToUnstashedLauncherState() - ? 1 : 0); - if (isRecentsAnimationRunning) { - animator.setDuration(duration); - } - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mIsAnimatingToLauncherViaGesture = false; - } - - @Override - public void onAnimationStart(Animator animation) { - mIsAnimatingToLauncherViaGesture = isRecentsAnimationRunning(); - } - }); - animatorSet.play(animator); - } - - if (hasAnyFlag(changedFlags, FLAG_RESUMED | FLAG_RECENTS_ANIMATION_RUNNING)) { - boolean goingToLauncher = hasAnyFlag(FLAG_RESUMED | FLAG_RECENTS_ANIMATION_RUNNING); - animatorSet.play(mTaskbarBackgroundAlpha.animateToValue(goingToLauncher ? 0 : 1) - .setDuration(duration)); - } + // Add the state animation first to ensure FLAG_IN_STASHED_LAUNCHER_STATE is set and we can + // determine whether goingToUnstashedLauncherStateChanged. + boolean wasGoingToUnstashedLauncherState = goingToUnstashedLauncherState(); if (hasAnyFlag(changedFlags, FLAG_TRANSITION_STATE_RUNNING)) { boolean committed = !hasAnyFlag(FLAG_TRANSITION_STATE_RUNNING); playStateTransitionAnim(animatorSet, duration, committed); @@ -270,6 +221,76 @@ import java.util.function.Supplier; applyState(0 /* duration */); } } + boolean goingToUnstashedLauncherStateChanged = wasGoingToUnstashedLauncherState + != goingToUnstashedLauncherState(); + + boolean launcherStateChangedDuringAnimToResumeAlignment = + mIconAlignmentForResumedState.isAnimating() && goingToUnstashedLauncherStateChanged; + if (hasAnyFlag(changedFlags, FLAG_RESUMED) + || launcherStateChangedDuringAnimToResumeAlignment) { + boolean isResumed = isResumed(); + float toAlignmentForResumedState = isResumed && goingToUnstashedLauncherState() ? 1 : 0; + // If we're already animating to the value, just leave it be instead of restarting it. + if (!mIconAlignmentForResumedState.isAnimatingToValue(toAlignmentForResumedState)) { + ObjectAnimator resumeAlignAnim = mIconAlignmentForResumedState + .animateToValue(toAlignmentForResumedState) + .setDuration(duration); + + resumeAlignAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mIsAnimatingToLauncherViaResume = false; + } + + @Override + public void onAnimationStart(Animator animation) { + mIsAnimatingToLauncherViaResume = isResumed; + + TaskbarStashController stashController = + mControllers.taskbarStashController; + stashController.updateStateForFlag(FLAG_IN_APP, !isResumed); + stashController.applyState(duration); + } + }); + animatorSet.play(resumeAlignAnim); + } + } + + + boolean launcherStateChangedDuringAnimToGestureAlignment = + mIconAlignmentForGestureState.isAnimating() && goingToUnstashedLauncherStateChanged; + if (hasAnyFlag(changedFlags, FLAG_RECENTS_ANIMATION_RUNNING) + || launcherStateChangedDuringAnimToGestureAlignment) { + boolean isRecentsAnimationRunning = isRecentsAnimationRunning(); + float toAlignmentForGestureState = isRecentsAnimationRunning + && goingToUnstashedLauncherState() ? 1 : 0; + // If we're already animating to the value, just leave it be instead of restarting it. + if (!mIconAlignmentForGestureState.isAnimatingToValue(toAlignmentForGestureState)) { + Animator gestureAlignAnim = mIconAlignmentForGestureState + .animateToValue(toAlignmentForGestureState); + if (isRecentsAnimationRunning) { + gestureAlignAnim.setDuration(duration); + } + gestureAlignAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mIsAnimatingToLauncherViaGesture = false; + } + + @Override + public void onAnimationStart(Animator animation) { + mIsAnimatingToLauncherViaGesture = isRecentsAnimationRunning(); + } + }); + animatorSet.play(gestureAlignAnim); + } + } + + if (hasAnyFlag(changedFlags, FLAG_RESUMED | FLAG_RECENTS_ANIMATION_RUNNING)) { + boolean goingToLauncher = hasAnyFlag(FLAG_RESUMED | FLAG_RECENTS_ANIMATION_RUNNING); + animatorSet.play(mTaskbarBackgroundAlpha.animateToValue(goingToLauncher ? 0 : 1) + .setDuration(duration)); + } if (start) { animatorSet.start(); @@ -310,8 +331,11 @@ import java.util.function.Supplier; animatorSet.play(stashAnimator); } - animatorSet.play(mIconAlignmentForLauncherState.animateToValue(toAlignment) - .setDuration(duration)); + // If we're already animating to the value, just leave it be instead of restarting it. + if (!mIconAlignmentForLauncherState.isAnimatingToValue(toAlignment)) { + animatorSet.play(mIconAlignmentForLauncherState.animateToValue(toAlignment) + .setDuration(duration)); + } } private boolean isResumed() { diff --git a/quickstep/src/com/android/quickstep/AnimatedFloat.java b/quickstep/src/com/android/quickstep/AnimatedFloat.java index 95c871099b..6a7d066cd8 100644 --- a/quickstep/src/com/android/quickstep/AnimatedFloat.java +++ b/quickstep/src/com/android/quickstep/AnimatedFloat.java @@ -42,6 +42,8 @@ public class AnimatedFloat { private final Runnable mUpdateCallback; private ObjectAnimator mValueAnimator; + // Only non-null when an animation is playing to this value. + private Float mEndValue; public float value; @@ -67,10 +69,18 @@ public class AnimatedFloat { cancelAnimation(); mValueAnimator = ObjectAnimator.ofFloat(this, VALUE, start, end); mValueAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animator) { + if (mValueAnimator == animator) { + mEndValue = end; + } + } + @Override public void onAnimationEnd(Animator animator) { if (mValueAnimator == animator) { mValueAnimator = null; + mEndValue = null; } } }); @@ -103,4 +113,15 @@ public class AnimatedFloat { public ObjectAnimator getCurrentAnimation() { return mValueAnimator; } + + public boolean isAnimating() { + return mValueAnimator != null; + } + + /** + * Returns whether we are currently animating, and the animation's end value matches the given. + */ + public boolean isAnimatingToValue(float endValue) { + return isAnimating() && mEndValue != null && mEndValue == endValue; + } } From bb530e9058e085bb1668a42ed9dc81f079af6304 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 21 Jan 2022 06:17:10 +0000 Subject: [PATCH 07/37] Add fallback for missing remote animation callbacks - In some cases WM won't callback the remote animation callbacks (neither start nor cancel) and Launcher never finishes executing the pending command (preventing the subsequent commands from running). For the time being, just cancel the current state to allow the commands to be processed. Bug: 194011186 Test: Mash on overview and home buttons with a 3p launcher Signed-off-by: Winson Chung Change-Id: I1b1296fab316b979f441ebb474d1475e3fa68f95 Merged-In: I1b1296fab316b979f441ebb474d1475e3fa68f95 --- .../quickstep/OverviewCommandHelper.java | 9 +++++++++ .../android/quickstep/RecentsActivity.java | 19 +++++++++++++++++++ .../quickstep/TouchInteractionService.java | 3 +++ 3 files changed, 31 insertions(+) diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java index 75e8dd1f7a..17baa3ad91 100644 --- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java +++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java @@ -38,6 +38,7 @@ import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.InteractionJankMonitorWrapper; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; @@ -271,6 +272,14 @@ public class OverviewCommandHelper { scheduleNextTask(cmd); } + public void dump(PrintWriter pw) { + pw.println("OverviewCommandHelper:"); + pw.println(" mPendingCommands=" + mPendingCommands.size()); + if (!mPendingCommands.isEmpty()) { + pw.println(" pendingCommandType=" + mPendingCommands.get(0).type); + } + } + private static class CommandInfo { public final long createTime = SystemClock.elapsedRealtime(); public final int type; diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index 103f350c0f..1dc49339b6 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -99,6 +99,7 @@ public final class RecentsActivity extends StatefulActivity { private Handler mUiHandler = new Handler(Looper.getMainLooper()); private static final long HOME_APPEAR_DURATION = 250; + private static final long RECENTS_ANIMATION_TIMEOUT = 1000; private RecentsDragLayer mDragLayer; private ScrimView mScrimView; @@ -115,6 +116,11 @@ public final class RecentsActivity extends StatefulActivity { // Strong refs to runners which are cleared when the activity is destroyed private RemoteAnimationFactory mActivityLaunchAnimationRunner; + // For handling degenerate cases where starting an activity doesn't actually trigger the remote + // animation callback + private final Handler mHandler = new Handler(); + private final Runnable mAnimationStartTimeoutRunnable = this::onAnimationStartTimeout; + /** * Init drag layer and overview panel views. */ @@ -219,6 +225,16 @@ public final class RecentsActivity extends StatefulActivity { // TODO(b/137318995) This should go home, but doing so removes freeform windows } + /** + * Called if the remote animation callback from #getActivityLaunchOptions() hasn't called back + * in a reasonable time due to a conflict with the recents animation. + */ + private void onAnimationStartTimeout() { + if (mActivityLaunchAnimationRunner != null) { + mActivityLaunchAnimationRunner.onAnimationCancelled(); + } + } + @Override public ActivityOptionsWrapper getActivityLaunchOptions(final View v, @Nullable ItemInfo item) { if (!(v instanceof TaskView)) { @@ -233,6 +249,7 @@ public final class RecentsActivity extends StatefulActivity { public void onCreateAnimation(int transit, RemoteAnimationTargetCompat[] appTargets, RemoteAnimationTargetCompat[] wallpaperTargets, RemoteAnimationTargetCompat[] nonAppTargets, AnimationResult result) { + mHandler.removeCallbacks(mAnimationStartTimeoutRunnable); AnimatorSet anim = composeRecentsLaunchAnimator(taskView, appTargets, wallpaperTargets, nonAppTargets); anim.addListener(resetStateListener()); @@ -242,6 +259,7 @@ public final class RecentsActivity extends StatefulActivity { @Override public void onAnimationCancelled() { + mHandler.removeCallbacks(mAnimationStartTimeoutRunnable); onEndCallback.executeAllAndDestroy(); } }; @@ -256,6 +274,7 @@ public final class RecentsActivity extends StatefulActivity { ActivityOptionsCompat.makeRemoteAnimation(adapterCompat), onEndCallback); activityOptions.options.setSplashscreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); + mHandler.postDelayed(mAnimationStartTimeoutRunnable, RECENTS_ANIMATION_TIMEOUT); return activityOptions; } diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 539239d36a..1f6a974c23 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -967,6 +967,9 @@ public class TouchInteractionService extends Service if (mOverviewComponentObserver != null) { mOverviewComponentObserver.dump(pw); } + if (mOverviewCommandHelper != null) { + mOverviewCommandHelper.dump(pw); + } if (mGestureState != null) { mGestureState.dump(pw); } From d97da07a548f5be496da1da503297c89d36e7e59 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 25 Jan 2022 18:09:35 +0000 Subject: [PATCH 08/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I9829ed62bfe1ab6f6cdaf011e8b1c75d43b68625 --- quickstep/res/values-af/strings.xml | 3 +-- quickstep/res/values-am/strings.xml | 3 +-- quickstep/res/values-ar/strings.xml | 3 +-- quickstep/res/values-as/strings.xml | 3 +-- quickstep/res/values-az/strings.xml | 3 +-- quickstep/res/values-b+sr+Latn/strings.xml | 3 +-- quickstep/res/values-be/strings.xml | 3 +-- quickstep/res/values-bg/strings.xml | 3 +-- quickstep/res/values-bn/strings.xml | 3 +-- quickstep/res/values-bs/strings.xml | 3 +-- quickstep/res/values-ca/strings.xml | 3 +-- quickstep/res/values-cs/strings.xml | 3 +-- quickstep/res/values-da/strings.xml | 3 +-- quickstep/res/values-de/strings.xml | 3 +-- quickstep/res/values-el/strings.xml | 3 +-- quickstep/res/values-en-rAU/strings.xml | 3 +-- quickstep/res/values-en-rCA/strings.xml | 3 +-- quickstep/res/values-en-rGB/strings.xml | 3 +-- quickstep/res/values-en-rIN/strings.xml | 3 +-- quickstep/res/values-en-rXC/strings.xml | 3 +-- quickstep/res/values-es-rUS/strings.xml | 3 +-- quickstep/res/values-es/strings.xml | 3 +-- quickstep/res/values-et/strings.xml | 3 +-- quickstep/res/values-eu/strings.xml | 3 +-- quickstep/res/values-fa/strings.xml | 3 +-- quickstep/res/values-fi/strings.xml | 3 +-- quickstep/res/values-fr-rCA/strings.xml | 3 +-- quickstep/res/values-fr/strings.xml | 3 +-- quickstep/res/values-gl/strings.xml | 3 +-- quickstep/res/values-gu/strings.xml | 3 +-- quickstep/res/values-hi/strings.xml | 3 +-- quickstep/res/values-hr/strings.xml | 3 +-- quickstep/res/values-hu/strings.xml | 3 +-- quickstep/res/values-hy/strings.xml | 3 +-- quickstep/res/values-in/strings.xml | 3 +-- quickstep/res/values-is/strings.xml | 3 +-- quickstep/res/values-it/strings.xml | 3 +-- quickstep/res/values-iw/strings.xml | 3 +-- quickstep/res/values-ja/strings.xml | 3 +-- quickstep/res/values-ka/strings.xml | 3 +-- quickstep/res/values-kk/strings.xml | 3 +-- quickstep/res/values-km/strings.xml | 3 +-- quickstep/res/values-kn/strings.xml | 3 +-- quickstep/res/values-ko/strings.xml | 3 +-- quickstep/res/values-ky/strings.xml | 3 +-- quickstep/res/values-lo/strings.xml | 3 +-- quickstep/res/values-lt/strings.xml | 3 +-- quickstep/res/values-lv/strings.xml | 3 +-- quickstep/res/values-mk/strings.xml | 3 +-- quickstep/res/values-ml/strings.xml | 3 +-- quickstep/res/values-mn/strings.xml | 3 +-- quickstep/res/values-mr/strings.xml | 3 +-- quickstep/res/values-ms/strings.xml | 3 +-- quickstep/res/values-my/strings.xml | 3 +-- quickstep/res/values-nb/strings.xml | 3 +-- quickstep/res/values-ne/strings.xml | 3 +-- quickstep/res/values-nl/strings.xml | 3 +-- quickstep/res/values-or/strings.xml | 3 +-- quickstep/res/values-pa/strings.xml | 3 +-- quickstep/res/values-pl/strings.xml | 3 +-- quickstep/res/values-pt-rPT/strings.xml | 3 +-- quickstep/res/values-pt/strings.xml | 3 +-- quickstep/res/values-ro/strings.xml | 3 +-- quickstep/res/values-ru/strings.xml | 3 +-- quickstep/res/values-si/strings.xml | 3 +-- quickstep/res/values-sk/strings.xml | 3 +-- quickstep/res/values-sl/strings.xml | 3 +-- quickstep/res/values-sq/strings.xml | 3 +-- quickstep/res/values-sr/strings.xml | 3 +-- quickstep/res/values-sv/strings.xml | 3 +-- quickstep/res/values-sw/strings.xml | 3 +-- quickstep/res/values-ta/strings.xml | 3 +-- quickstep/res/values-te/strings.xml | 3 +-- quickstep/res/values-th/strings.xml | 3 +-- quickstep/res/values-tl/strings.xml | 3 +-- quickstep/res/values-tr/strings.xml | 3 +-- quickstep/res/values-uk/strings.xml | 3 +-- quickstep/res/values-ur/strings.xml | 3 +-- quickstep/res/values-uz/strings.xml | 3 +-- quickstep/res/values-vi/strings.xml | 3 +-- quickstep/res/values-zh-rCN/strings.xml | 3 +-- quickstep/res/values-zh-rHK/strings.xml | 3 +-- quickstep/res/values-zh-rTW/strings.xml | 3 +-- quickstep/res/values-zu/strings.xml | 3 +-- 84 files changed, 84 insertions(+), 168 deletions(-) diff --git a/quickstep/res/values-af/strings.xml b/quickstep/res/values-af/strings.xml index 6b51cb5348..a842d3caea 100644 --- a/quickstep/res/values-af/strings.xml +++ b/quickstep/res/values-af/strings.xml @@ -25,8 +25,7 @@ "Programgebruikinstellings" "Vee alles uit" "Onlangse programme" - - + "Taak is toegemaak" "%1$s, %2$s" "< 1 minuut" "%1$s oor vandag" diff --git a/quickstep/res/values-am/strings.xml b/quickstep/res/values-am/strings.xml index a9215c46dd..ce14b54467 100644 --- a/quickstep/res/values-am/strings.xml +++ b/quickstep/res/values-am/strings.xml @@ -25,8 +25,7 @@ "የመተግበሪያ አጠቃቀም ቅንብሮች" "ሁሉንም አጽዳ" "የቅርብ ጊዜ መተግበሪያዎች" - - + "ተግባር ተዘግቷል" "%1$s%2$s" "< 1 ደቂቃ" "ዛሬ %1$s ቀርቷል" diff --git a/quickstep/res/values-ar/strings.xml b/quickstep/res/values-ar/strings.xml index c00f8f0312..df51dab681 100644 --- a/quickstep/res/values-ar/strings.xml +++ b/quickstep/res/values-ar/strings.xml @@ -25,8 +25,7 @@ "إعدادات استخدام التطبيق" "محو الكل" "التطبيقات المستخدمة مؤخرًا" - - + "تم إغلاق المهمة." "%1$s، %2$s" "أقل من دقيقة" "يتبقى اليوم %1$s." diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml index 1efad70c1d..62c472e05c 100644 --- a/quickstep/res/values-as/strings.xml +++ b/quickstep/res/values-as/strings.xml @@ -25,8 +25,7 @@ "এপে ব্যৱহাৰ কৰা ডেটাৰ ছেটিং" "আটাইবোৰ মচক" "শেহতীয়া এপসমূহ" - - + "কাৰ্য বন্ধ কৰা হ’ল" "%1$s, %2$s" "< ১ মিনিট" "আজি %1$s বাকী আছ" diff --git a/quickstep/res/values-az/strings.xml b/quickstep/res/values-az/strings.xml index 3349e6e8f3..91d09f57cd 100644 --- a/quickstep/res/values-az/strings.xml +++ b/quickstep/res/values-az/strings.xml @@ -25,8 +25,7 @@ "Tətbiq istifadə ayarları" "Hamısını silin" "Son tətbiqlər" - - + "Tapşırıq bağlanıb" "%1$s, %2$s" "< 1 dəq" "Bu gün %1$s qaldı" diff --git a/quickstep/res/values-b+sr+Latn/strings.xml b/quickstep/res/values-b+sr+Latn/strings.xml index 5a2ec1d6ca..92fd21dfb2 100644 --- a/quickstep/res/values-b+sr+Latn/strings.xml +++ b/quickstep/res/values-b+sr+Latn/strings.xml @@ -25,8 +25,7 @@ "Podešavanja korišćenja aplikacije" "Obriši sve" "Nedavne aplikacije" - - + "Zadatak je zatvoren" "%1$s, %2$s" "< 1 min" "Još %1$s danas" diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml index 31a532e25d..eae4ba18ec 100644 --- a/quickstep/res/values-be/strings.xml +++ b/quickstep/res/values-be/strings.xml @@ -25,8 +25,7 @@ "Налады выкарыстання праграмы" "Ачысціць усё" "Нядаўнія праграмы" - - + "Задача закрыта" "%1$s, %2$s" "< 1 хв" "Сёння засталося %1$s" diff --git a/quickstep/res/values-bg/strings.xml b/quickstep/res/values-bg/strings.xml index 7e86f2d95f..fd9a3cd48e 100644 --- a/quickstep/res/values-bg/strings.xml +++ b/quickstep/res/values-bg/strings.xml @@ -25,8 +25,7 @@ "Настройки за използването на приложенията" "Изчистване на всички" "Скорошни приложения" - - + "Задачата е затворена" "%1$s, %2$s" "< 1 мин" "Оставащо време днес: %1$s" diff --git a/quickstep/res/values-bn/strings.xml b/quickstep/res/values-bn/strings.xml index a1adf76f39..799fe0b18d 100644 --- a/quickstep/res/values-bn/strings.xml +++ b/quickstep/res/values-bn/strings.xml @@ -25,8 +25,7 @@ "অ্যাপ ব্যবহারের সেটিংস" "সবকিছু খালি করুন" "সম্প্রতি ব্যবহৃত অ্যাপ" - - + "টাস্ক বন্ধ করা হয়েছে" "%1$s, %2$s" "< ১ মি." "আজকে %1$s বাকি আছে" diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml index 754c73fa4c..3e4933fb76 100644 --- a/quickstep/res/values-bs/strings.xml +++ b/quickstep/res/values-bs/strings.xml @@ -25,8 +25,7 @@ "Postavke korištenja aplikacije" "Obriši sve" "Nedavne aplikacije" - - + "Zadatak je zatvoren" "%1$s, %2$s" "< 1 min" "Preostalo vrijeme: %1$s" diff --git a/quickstep/res/values-ca/strings.xml b/quickstep/res/values-ca/strings.xml index a87fc6f257..2e57be3025 100644 --- a/quickstep/res/values-ca/strings.xml +++ b/quickstep/res/values-ca/strings.xml @@ -25,8 +25,7 @@ "Configuració d\'ús d\'aplicacions" "Esborra-ho tot" "Aplicacions recents" - - + "Tasca tancada" "%1$s; %2$s" "< 1 minut" "temps restant avui: %1$s" diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml index 3f4aa23ffc..272973ff88 100644 --- a/quickstep/res/values-cs/strings.xml +++ b/quickstep/res/values-cs/strings.xml @@ -25,8 +25,7 @@ "Nastavení využití aplikací" "Vymazat vše" "Poslední aplikace" - - + "Úkol byl zavřen" "%1$s, %2$s" "< 1 minuta" "dnes zbývá: %1$s" diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml index 80ed39f905..2747cc082d 100644 --- a/quickstep/res/values-da/strings.xml +++ b/quickstep/res/values-da/strings.xml @@ -25,8 +25,7 @@ "Indstillinger for appforbrug" "Ryd alt" "Seneste apps" - - + "Opgaven er lukket" "%1$s, %2$s" "< 1 min" "%1$s tilbage i dag" diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml index 1faa1413a3..2004849a9d 100644 --- a/quickstep/res/values-de/strings.xml +++ b/quickstep/res/values-de/strings.xml @@ -25,8 +25,7 @@ "Einstellungen zur App-Nutzung" "Alle Apps schließen" "Kürzlich geöffnete Apps" - - + "Aufgabe geschlossen" "%1$s, %2$s" "< 1 Min." "Heute noch %1$s" diff --git a/quickstep/res/values-el/strings.xml b/quickstep/res/values-el/strings.xml index d2354cc4e9..e1f709d5ec 100644 --- a/quickstep/res/values-el/strings.xml +++ b/quickstep/res/values-el/strings.xml @@ -25,8 +25,7 @@ "Ρυθμίσεις χρήσης εφαρμογής" "Διαγραφή όλων" "Πρόσφατες εφαρμογές" - - + "Η εργασία έκλεισε" "%1$s, %2$s" "< 1 λ." "Απομένουν %1$s σήμερα" diff --git a/quickstep/res/values-en-rAU/strings.xml b/quickstep/res/values-en-rAU/strings.xml index f291971669..487ea729c5 100644 --- a/quickstep/res/values-en-rAU/strings.xml +++ b/quickstep/res/values-en-rAU/strings.xml @@ -25,8 +25,7 @@ "App usage settings" "Clear all" "Recent apps" - - + "Task closed" "%1$s, %2$s" "< 1 minute" "%1$s left today" diff --git a/quickstep/res/values-en-rCA/strings.xml b/quickstep/res/values-en-rCA/strings.xml index f291971669..487ea729c5 100644 --- a/quickstep/res/values-en-rCA/strings.xml +++ b/quickstep/res/values-en-rCA/strings.xml @@ -25,8 +25,7 @@ "App usage settings" "Clear all" "Recent apps" - - + "Task closed" "%1$s, %2$s" "< 1 minute" "%1$s left today" diff --git a/quickstep/res/values-en-rGB/strings.xml b/quickstep/res/values-en-rGB/strings.xml index f291971669..487ea729c5 100644 --- a/quickstep/res/values-en-rGB/strings.xml +++ b/quickstep/res/values-en-rGB/strings.xml @@ -25,8 +25,7 @@ "App usage settings" "Clear all" "Recent apps" - - + "Task closed" "%1$s, %2$s" "< 1 minute" "%1$s left today" diff --git a/quickstep/res/values-en-rIN/strings.xml b/quickstep/res/values-en-rIN/strings.xml index f291971669..487ea729c5 100644 --- a/quickstep/res/values-en-rIN/strings.xml +++ b/quickstep/res/values-en-rIN/strings.xml @@ -25,8 +25,7 @@ "App usage settings" "Clear all" "Recent apps" - - + "Task closed" "%1$s, %2$s" "< 1 minute" "%1$s left today" diff --git a/quickstep/res/values-en-rXC/strings.xml b/quickstep/res/values-en-rXC/strings.xml index ea81b38c10..fa9e467b84 100644 --- a/quickstep/res/values-en-rXC/strings.xml +++ b/quickstep/res/values-en-rXC/strings.xml @@ -25,8 +25,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎App usage settings‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎Clear all‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎Recent apps‎‏‎‎‏‎" - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎Task Closed‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎< 1 minute‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ left today‎‏‎‎‏‎" diff --git a/quickstep/res/values-es-rUS/strings.xml b/quickstep/res/values-es-rUS/strings.xml index 43e1092c9c..e3f3cdf7e0 100644 --- a/quickstep/res/values-es-rUS/strings.xml +++ b/quickstep/res/values-es-rUS/strings.xml @@ -25,8 +25,7 @@ "Configuración de uso de la app" "Borrar todo" "Apps recientes" - - + "Se cerró la tarea" "%1$s (%2$s)" "< 1 minuto" "Tiempo restante: %1$s" diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml index 7b447242da..d858e11784 100644 --- a/quickstep/res/values-es/strings.xml +++ b/quickstep/res/values-es/strings.xml @@ -25,8 +25,7 @@ "Ajustes de uso de la aplicación" "Borrar todo" "Aplicaciones recientes" - - + "Tarea cerrada" "%1$s (%2$s)" "<1 minuto" "tiempo restante: %1$s" diff --git a/quickstep/res/values-et/strings.xml b/quickstep/res/values-et/strings.xml index 88bbca5caa..67523842f9 100644 --- a/quickstep/res/values-et/strings.xml +++ b/quickstep/res/values-et/strings.xml @@ -25,8 +25,7 @@ "Rakenduse kasutuse seaded" "Sule kõik" "Hiljutised rakendused" - - + "Ülesanne suleti" "%1$s %2$s" "< 1 minut" "Tääna jäänud %1$s" diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml index 8243af7c9c..18586255d7 100644 --- a/quickstep/res/values-eu/strings.xml +++ b/quickstep/res/values-eu/strings.xml @@ -25,8 +25,7 @@ "Aplikazioen erabileraren ezarpenak" "Garbitu guztiak" "Azken aplikazioak" - - + "Itxi da zeregina" "%1$s (%2$s)" "< 1 min" "%1$s gelditzen dira gaur" diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml index 9e0a56354c..3ba42721cc 100644 --- a/quickstep/res/values-fa/strings.xml +++ b/quickstep/res/values-fa/strings.xml @@ -25,8 +25,7 @@ "تنظیمات استفاده از برنامه" "پاک کردن همه" "برنامه‌های اخیر" - - + "تکلیف بسته شد" "%1$s، %2$s" "< ۱ دقیقه" "%1$s باقی‌مانده برای امروز" diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml index 9bb67a1975..9244c6b5fb 100644 --- a/quickstep/res/values-fi/strings.xml +++ b/quickstep/res/values-fi/strings.xml @@ -25,8 +25,7 @@ "Sovelluksen käyttöasetukset" "Poista kaikki" "Viimeisimmät sovellukset" - - + "Tehtävä suljettu" "%1$s, %2$s" "< 1 min" "%1$s jäljellä tänään" diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml index 2e5a8785f8..0ba184fd28 100644 --- a/quickstep/res/values-fr-rCA/strings.xml +++ b/quickstep/res/values-fr-rCA/strings.xml @@ -25,8 +25,7 @@ "Paramètres d\'utilisation de l\'application" "Tout effacer" "Applications récentes" - - + "Tâche fermée" "%1$s : %2$s" "< 1 min" "Il reste %1$s aujourd\'hui" diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml index 6cfde85035..a33a7513b0 100644 --- a/quickstep/res/values-fr/strings.xml +++ b/quickstep/res/values-fr/strings.xml @@ -25,8 +25,7 @@ "Paramètres de consommation de l\'application" "Tout effacer" "Applications récentes" - - + "Tâche fermée" "%1$s, %2$s" "< 1 min" "Encore %1$s aujourd\'hui" diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml index a8360aed6b..234d6119fa 100644 --- a/quickstep/res/values-gl/strings.xml +++ b/quickstep/res/values-gl/strings.xml @@ -25,8 +25,7 @@ "Configuración do uso de aplicacións" "Borrar todo" "Apps recentes" - - + "Tarefa pechada" "%1$s (%2$s)" "<1 min" "Tempo restante hoxe %1$s" diff --git a/quickstep/res/values-gu/strings.xml b/quickstep/res/values-gu/strings.xml index ae2625145a..4b2e177b3f 100644 --- a/quickstep/res/values-gu/strings.xml +++ b/quickstep/res/values-gu/strings.xml @@ -25,8 +25,7 @@ "ઍપ વપરાશનું સેટિંગ" "બધું સાફ કરો" "તાજેતરની ઍપ" - - + "કાર્ય બંધ કર્યું" "%1$s, %2$s" "< 1 મિનિટ" "%1$s આજે બાકી" diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml index 885a52dc52..dbb6c710e1 100644 --- a/quickstep/res/values-hi/strings.xml +++ b/quickstep/res/values-hi/strings.xml @@ -25,8 +25,7 @@ "ऐप्लिकेशन इस्तेमाल की सेटिंग" "सभी ऐप्लिकेशन बंद करें" "हाल ही में इस्तेमाल किए गए ऐप्लिकेशन" - - + "टास्क बंद किया गया" "%1$s, %2$s" "<1 मिनट" "आज %1$s और चलेगा" diff --git a/quickstep/res/values-hr/strings.xml b/quickstep/res/values-hr/strings.xml index ac18e423a3..32876a04d5 100644 --- a/quickstep/res/values-hr/strings.xml +++ b/quickstep/res/values-hr/strings.xml @@ -25,8 +25,7 @@ "Postavke upotrebe aplikacija" "Izbriši sve" "Nedavne aplikacije" - - + "Zadatak je zatvoren" "%1$s, %2$s" "< 1 min" "Još %1$s danas" diff --git a/quickstep/res/values-hu/strings.xml b/quickstep/res/values-hu/strings.xml index 0fcd367cfb..b0e53ce3f1 100644 --- a/quickstep/res/values-hu/strings.xml +++ b/quickstep/res/values-hu/strings.xml @@ -25,8 +25,7 @@ "Alkalmazáshasználati beállítások" "Összes törlése" "Legutóbbi alkalmazások" - - + "A feladat bezárult" "%1$s, %2$s" "< 1 perc" "Ma még %1$s van hátra" diff --git a/quickstep/res/values-hy/strings.xml b/quickstep/res/values-hy/strings.xml index 1148c54976..a2e498f5f6 100644 --- a/quickstep/res/values-hy/strings.xml +++ b/quickstep/res/values-hy/strings.xml @@ -25,8 +25,7 @@ "Հավելվածի օգտագործման կարգավորումներ" "Փակել բոլորը" "Վերջին օգտագործած հավելվածները" - - + "Առաջադրանքը փակված է" "%1$s, %2$s" "< 1 ր" "Այսօր մնացել է՝ %1$s" diff --git a/quickstep/res/values-in/strings.xml b/quickstep/res/values-in/strings.xml index 306fb03534..47b4c57b38 100644 --- a/quickstep/res/values-in/strings.xml +++ b/quickstep/res/values-in/strings.xml @@ -25,8 +25,7 @@ "Setelan penggunaan aplikasi" "Hapus semua" "Aplikasi terbaru" - - + "Tugas Ditutup" "%1$s, %2$s" "< 1 menit" "%1$s tersisa hari ini" diff --git a/quickstep/res/values-is/strings.xml b/quickstep/res/values-is/strings.xml index 79f04c473f..22099e4f51 100644 --- a/quickstep/res/values-is/strings.xml +++ b/quickstep/res/values-is/strings.xml @@ -25,8 +25,7 @@ "Notkunarstillingar forrits" "Hreinsa allt" "Nýleg forrit" - - + "Verkefni lokað" "%1$s, %2$s" "< 1 mín." "%1$s eftir í dag" diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml index f383d5b1fc..0d91ccff8b 100644 --- a/quickstep/res/values-it/strings.xml +++ b/quickstep/res/values-it/strings.xml @@ -25,8 +25,7 @@ "Impostazioni di utilizzo delle app" "Cancella tutto" "App recenti" - - + "Attività chiusa" "%1$s, %2$s" "< 1 min" "Rimanente oggi: %1$s" diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml index 3ebafa1a71..4feb9ee685 100644 --- a/quickstep/res/values-iw/strings.xml +++ b/quickstep/res/values-iw/strings.xml @@ -25,8 +25,7 @@ "הגדרות שימוש באפליקציה" "ניקוי הכול" "אפליקציות אחרונות" - - + "המשימה סגורה" "%1$s, %2$s" "‏< דקה" "הזמן שנותר להיום: %1$s" diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml index 30f1c6ae36..a88f621cce 100644 --- a/quickstep/res/values-ja/strings.xml +++ b/quickstep/res/values-ja/strings.xml @@ -25,8 +25,7 @@ "アプリの使用状況の設定" "すべてクリア" "最近使ったアプリ" - - + "タスクを閉じました" "%1$s%2$s" "1 分未満" "今日はあと %1$sです" diff --git a/quickstep/res/values-ka/strings.xml b/quickstep/res/values-ka/strings.xml index e813238c29..a5c411c655 100644 --- a/quickstep/res/values-ka/strings.xml +++ b/quickstep/res/values-ka/strings.xml @@ -25,8 +25,7 @@ "აპების გამოყენების პარამეტრები" "ყველას გასუფთავება" "ბოლოდროინდელი აპები" - - + "ამოცანა დაიხურა" "%1$s, %2$s" "< 1 წუთი" "დღეს დარჩენილია %1$s" diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml index 55142d446e..38bfeb29f8 100644 --- a/quickstep/res/values-kk/strings.xml +++ b/quickstep/res/values-kk/strings.xml @@ -25,8 +25,7 @@ "Қолданбаны пайдалану параметрлері" "Барлығын өшіру" "Соңғы пайдаланылған қолданбалар" - - + "Тапсырма жабылды." "%1$s, %2$s" "< 1 мин" "Бүгін %1$s қалды" diff --git a/quickstep/res/values-km/strings.xml b/quickstep/res/values-km/strings.xml index 62bf5547cd..9b8c997bbc 100644 --- a/quickstep/res/values-km/strings.xml +++ b/quickstep/res/values-km/strings.xml @@ -25,8 +25,7 @@ "ការកំណត់​ការប្រើប្រាស់​កម្មវិធី" "សម្អាត​ទាំងអស់" "កម្មវិធី​ថ្មីៗ" - - + "បានបិទ​កិច្ចការ" "%1$s, %2$s" "< 1 នាទី" "នៅសល់ %1$s ទៀត​នៅថ្ងៃនេះ" diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml index 9b866e8206..a8b1182db4 100644 --- a/quickstep/res/values-kn/strings.xml +++ b/quickstep/res/values-kn/strings.xml @@ -25,8 +25,7 @@ "ಆ್ಯಪ್‌ ಬಳಕೆಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳು" "ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ" "ಇತ್ತೀಚಿನ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು" - - + "ಕಾರ್ಯವನ್ನು ಮುಚ್ಚಲಾಗಿದೆ" "%1$s, %2$s" "< 1 ನಿ" "ಇಂದು %1$s ಸಮಯ ಉಳಿದಿದೆ" diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml index 40226da8e9..c46efa493e 100644 --- a/quickstep/res/values-ko/strings.xml +++ b/quickstep/res/values-ko/strings.xml @@ -25,8 +25,7 @@ "앱 사용 설정" "모두 삭제" "최근 앱" - - + "작업 종료됨" "%1$s, %2$s" "< 1분" "오늘 %1$s 남음" diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml index 609bb8649b..bc39735832 100644 --- a/quickstep/res/values-ky/strings.xml +++ b/quickstep/res/values-ky/strings.xml @@ -25,8 +25,7 @@ "Колдонмону пайдалануу жөндөөлөрү" "Баарын тазалоо" "Акыркы колдонмолор" - - + "Тапшырма жабылды" "%1$s, %2$s" "< 1 мүнөт" "Бүгүн %1$s мүнөт калды" diff --git a/quickstep/res/values-lo/strings.xml b/quickstep/res/values-lo/strings.xml index a8e1c40992..c1ca1a3138 100644 --- a/quickstep/res/values-lo/strings.xml +++ b/quickstep/res/values-lo/strings.xml @@ -25,8 +25,7 @@ "ການຕັ້ງຄ່າການນຳໃຊ້ແອັບ" "ລຶບລ້າງທັງໝົດ" "ແອັບຫຼ້າສຸດ" - - + "ປິດໜ້າວຽກແລ້ວ" "%1$s, %2$s" "< 1 ນາທີ" "ເຫຼືອ %1$s ມື້ນີ້" diff --git a/quickstep/res/values-lt/strings.xml b/quickstep/res/values-lt/strings.xml index 4e86e5fca5..0b1301c30b 100644 --- a/quickstep/res/values-lt/strings.xml +++ b/quickstep/res/values-lt/strings.xml @@ -25,8 +25,7 @@ "Programos naudojimo nustatymai" "Išvalyti viską" "Naujausios programos" - - + "Užduotis uždaryta" "%1$s, %2$s" "< 1 min." "Šiandien liko: %1$s" diff --git a/quickstep/res/values-lv/strings.xml b/quickstep/res/values-lv/strings.xml index 02f1c5a90d..c56cd5b1ff 100644 --- a/quickstep/res/values-lv/strings.xml +++ b/quickstep/res/values-lv/strings.xml @@ -25,8 +25,7 @@ "Lietotņu izmantošanas iestatījumi" "Notīrīt visu" "Pēdējās izmantotās lietotnes" - - + "Uzdevums ir aizvērts" "%1$s, %2$s" "<1 minūte" "Šodien atlicis: %1$s" diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml index 0e37c73c13..1afe079e82 100644 --- a/quickstep/res/values-mk/strings.xml +++ b/quickstep/res/values-mk/strings.xml @@ -25,8 +25,7 @@ "Поставки за користење на апликациите" "Избриши ги сите" "Неодамнешни апликации" - - + "Задачата е затворена" "%1$s, %2$s" "< 1 минута" "Уште %1$s за денес" diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml index 553c59084f..eed4a7ae69 100644 --- a/quickstep/res/values-ml/strings.xml +++ b/quickstep/res/values-ml/strings.xml @@ -25,8 +25,7 @@ "ആപ്പ് ഉപയോഗ ക്രമീകരണം" "എല്ലാം മായ്‌ക്കുക" "സമീപകാല ആപ്പുകൾ" - - + "ടാസ്ക്ക് അടച്ചു" "%1$s, %2$s" "< 1 മിനിറ്റ്" "ഇന്ന് %1$s ശേഷിക്കുന്നു" diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml index fb19dfc75b..4e6464931d 100644 --- a/quickstep/res/values-mn/strings.xml +++ b/quickstep/res/values-mn/strings.xml @@ -25,8 +25,7 @@ "Апп ашиглалтын тохиргоо" "Бүгдийг устгах" "Саяхны аппууд" - - + "Ажлыг хаасан" "%1$s, %2$s" "< 1 минут" "Өнөөдөр %1$s үлдсэн" diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml index fe8335026a..897c7f3775 100644 --- a/quickstep/res/values-mr/strings.xml +++ b/quickstep/res/values-mr/strings.xml @@ -25,8 +25,7 @@ "अ‍ॅप वापर सेटिंग्ज" "सर्व साफ करा" "अलीकडील अ‍ॅप्स" - - + "टास्क बंद केली" "%1$s, %2$s" "१मिहून कमी" "आज %1$sशिल्लक आहे" diff --git a/quickstep/res/values-ms/strings.xml b/quickstep/res/values-ms/strings.xml index c9c33dc3a9..794465583e 100644 --- a/quickstep/res/values-ms/strings.xml +++ b/quickstep/res/values-ms/strings.xml @@ -25,8 +25,7 @@ "Tetapan penggunaan apl" "Kosongkan semua" "Apl terbaharu" - - + "Tugas Ditutup" "%1$s, %2$s" "< 1 minit" "%1$s lagi hari ini" diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml index 803319da62..57d5f31a39 100644 --- a/quickstep/res/values-my/strings.xml +++ b/quickstep/res/values-my/strings.xml @@ -25,8 +25,7 @@ "အက်ပ်အသုံးပြုမှု ဆက်တင်များ" "အားလုံးရှင်းရန်" "လတ်တလောသုံး အက်ပ်များ" - - + "လုပ်ဆောင်စရာ ပိတ်ထားသည်" "%1$s%2$s" "< ၁ မိနစ်" "ယနေ့ %1$s ခု ကျန်သည်" diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml index 96d12cf1dc..5c4121081f 100644 --- a/quickstep/res/values-nb/strings.xml +++ b/quickstep/res/values-nb/strings.xml @@ -25,8 +25,7 @@ "Innstillinger for appbruk" "Fjern alt" "Nylige apper" - - + "Oppgaven er lukket" "%1$s, %2$s" "< 1 minutt" "%1$s gjenstår i dag" diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml index 2b0cbdb9ae..8f316e4999 100644 --- a/quickstep/res/values-ne/strings.xml +++ b/quickstep/res/values-ne/strings.xml @@ -25,8 +25,7 @@ "एपको उपयोगका सेटिङहरू" "सबै मेटाउनुहोस्" "हालसालैका एपहरू" - - + "कार्य बन्द गरियो" "%1$s, %2$s" "< १ मिनेट" "आज: %1$s बाँकी" diff --git a/quickstep/res/values-nl/strings.xml b/quickstep/res/values-nl/strings.xml index 2f63f5e405..61dacbb479 100644 --- a/quickstep/res/values-nl/strings.xml +++ b/quickstep/res/values-nl/strings.xml @@ -25,8 +25,7 @@ "Instellingen voor app-gebruik" "Alles wissen" "Recente apps" - - + "Taak gesloten" "%1$s, %2$s" "< 1 minuut" "Nog %1$s vandaag" diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index 2a6e7a1a96..38d7e1b743 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -25,8 +25,7 @@ "ଆପ୍‍ ବ୍ୟବହାର ସେଟିଂସ୍‍" "ସବୁ ଖାଲି କରନ୍ତୁ" "ବର୍ତ୍ତମାନର ଆପ୍‌" - - + "ଟାସ୍କ ବନ୍ଦ ହୋଇଯାଇଛି" "%1$s %2$s" "< 1 ମିନିଟ୍" "ଆଜି %1$s ବାକି ଅଛି" diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml index 9a7e104180..341eaeb835 100644 --- a/quickstep/res/values-pa/strings.xml +++ b/quickstep/res/values-pa/strings.xml @@ -25,8 +25,7 @@ "ਐਪ ਵਰਤੋਂ ਦੀਆਂ ਸੈਟਿੰਗਾਂ" "ਸਭ ਕਲੀਅਰ ਕਰੋ" "ਹਾਲੀਆ ਐਪਾਂ" - - + "ਕਾਰਜ ਬੰਦ" "%1$s, %2$s" "< 1 ਮਿੰਟ" "ਅੱਜ %1$s ਬਾਕੀ" diff --git a/quickstep/res/values-pl/strings.xml b/quickstep/res/values-pl/strings.xml index 65b97e0048..1b4617ff15 100644 --- a/quickstep/res/values-pl/strings.xml +++ b/quickstep/res/values-pl/strings.xml @@ -25,8 +25,7 @@ "Ustawienia użycia aplikacji" "Wyczyść wszystko" "Ostatnie aplikacje" - - + "Zadanie zamknięte" "%1$s, %2$s" "> 1 min" "Na dziś zostało %1$s" diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml index 140420061d..2519d003f4 100644 --- a/quickstep/res/values-pt-rPT/strings.xml +++ b/quickstep/res/values-pt-rPT/strings.xml @@ -25,8 +25,7 @@ "Definições de utilização de aplicações" "Limpar tudo" "Apps recentes" - - + "Tarefa fechada" "%1$s, %2$s" "< 1 minuto" "Resta(m) %1$s hoje." diff --git a/quickstep/res/values-pt/strings.xml b/quickstep/res/values-pt/strings.xml index 3be045d777..a8e6d6efd9 100644 --- a/quickstep/res/values-pt/strings.xml +++ b/quickstep/res/values-pt/strings.xml @@ -25,8 +25,7 @@ "Configurações de uso do app" "Limpar tudo" "Apps recentes" - - + "Tarefa encerrada" "%1$s, %2$s" "< 1 min" "%1$s restante(s) hoje" diff --git a/quickstep/res/values-ro/strings.xml b/quickstep/res/values-ro/strings.xml index 20b90fdd82..062827b202 100644 --- a/quickstep/res/values-ro/strings.xml +++ b/quickstep/res/values-ro/strings.xml @@ -25,8 +25,7 @@ "Setări de utilizare a aplicației" "Ștergeți tot" "Aplicații recente" - - + "Activitatea s-a încheiat" "%1$s, %2$s" "< 1 minut" "Au mai rămas %1$s astăzi" diff --git a/quickstep/res/values-ru/strings.xml b/quickstep/res/values-ru/strings.xml index 8639bfb04c..105da96682 100644 --- a/quickstep/res/values-ru/strings.xml +++ b/quickstep/res/values-ru/strings.xml @@ -25,8 +25,7 @@ "Настройки использования приложения" "Очистить все" "Недавние приложения" - - + "Задача закрыта" "%1$s: %2$s" "< 1 мин." "Осталось сегодня: %1$s" diff --git a/quickstep/res/values-si/strings.xml b/quickstep/res/values-si/strings.xml index 38d865052d..2cf745730e 100644 --- a/quickstep/res/values-si/strings.xml +++ b/quickstep/res/values-si/strings.xml @@ -25,8 +25,7 @@ "යෙදුම් භාවිත සැකසීම්" "සියල්ල හිස් කරන්න" "මෑත යෙදුම්" - - + "කාර්යය අවසන් කරන ලදි" "%1$s, %2$s" "< 1 විනාඩියක්" "අද %1$sක් ඉතුරුයි" diff --git a/quickstep/res/values-sk/strings.xml b/quickstep/res/values-sk/strings.xml index 3a9fe99c10..46467ac3bb 100644 --- a/quickstep/res/values-sk/strings.xml +++ b/quickstep/res/values-sk/strings.xml @@ -25,8 +25,7 @@ "Nastavenia využívania aplikácie" "Vymazať všetko" "Nedávne aplikácie" - - + "Úloha bola zavretá" "%1$s, %2$s" "Menej ako 1 minúta" "Dnes ešte zostáva: %1$s" diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml index 90a2eb0477..d9aade77c7 100644 --- a/quickstep/res/values-sl/strings.xml +++ b/quickstep/res/values-sl/strings.xml @@ -25,8 +25,7 @@ "Nastavitve uporabe aplikacij" "Počisti vse" "Nedavne aplikacije" - - + "Opravilo je zaprto" "%1$s, %2$s" "< 1 min" "Danes je ostalo še %1$s" diff --git a/quickstep/res/values-sq/strings.xml b/quickstep/res/values-sq/strings.xml index ba7b3d1502..f973b068ca 100644 --- a/quickstep/res/values-sq/strings.xml +++ b/quickstep/res/values-sq/strings.xml @@ -25,8 +25,7 @@ "Cilësimet e përdorimit të aplikacionit" "Pastroji të gjitha" "Aplikacionet e fundit" - - + "Detyra u mbyll" "%1$s, %2$s" "< 1 minutë" "%1$s të mbetura sot" diff --git a/quickstep/res/values-sr/strings.xml b/quickstep/res/values-sr/strings.xml index 62de5298dd..9bbf89b416 100644 --- a/quickstep/res/values-sr/strings.xml +++ b/quickstep/res/values-sr/strings.xml @@ -25,8 +25,7 @@ "Подешавања коришћења апликације" "Обриши све" "Недавне апликације" - - + "Задатак је затворен" "%1$s, %2$s" "< 1 мин" "Још %1$s данас" diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml index 38ce4306bb..0852fb7983 100644 --- a/quickstep/res/values-sv/strings.xml +++ b/quickstep/res/values-sv/strings.xml @@ -25,8 +25,7 @@ "Inställningar för appanvändning" "Rensa alla" "Senaste apparna" - - + "Uppgiften har stängts" "%1$s, %2$s" "< 1 min" "%1$s kvar i dag" diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml index 43972a7292..8655576af5 100644 --- a/quickstep/res/values-sw/strings.xml +++ b/quickstep/res/values-sw/strings.xml @@ -25,8 +25,7 @@ "Mipangilio ya matumizi ya programu" "Ondoa zote" "Programu za hivi karibuni" - - + "Jukumu Limefungwa" "%1$s, %2$s" "< dak 1" "Umebakisha %1$s leo" diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml index 5a30cb6d71..a6f8530ee6 100644 --- a/quickstep/res/values-ta/strings.xml +++ b/quickstep/res/values-ta/strings.xml @@ -25,8 +25,7 @@ "ஆப்ஸ் உபயோக அமைப்புகள்" "எல்லாம் அழி" "சமீபத்திய ஆப்ஸ்" - - + "பணி முடிந்தது" "%1$s, %2$s" "< 1 நி" "இன்று %1$s மீதமுள்ளது" diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml index d2bc6ad5e4..d6f1e48715 100644 --- a/quickstep/res/values-te/strings.xml +++ b/quickstep/res/values-te/strings.xml @@ -25,8 +25,7 @@ "యాప్ వినియోగ సెట్టింగ్‌లు" "అన్నీ తీసివేయండి" "ఇటీవలి యాప్‌లు" - - + "టాస్క్ మూసివేయబడింది" "%1$s, %2$s" "< 1 నిమిషం" "నేటికి %1$s మిగిలి ఉంది" diff --git a/quickstep/res/values-th/strings.xml b/quickstep/res/values-th/strings.xml index 53927b59ae..2caa53610b 100644 --- a/quickstep/res/values-th/strings.xml +++ b/quickstep/res/values-th/strings.xml @@ -25,8 +25,7 @@ "การตั้งค่าการใช้แอป" "ล้างทั้งหมด" "แอปล่าสุด" - - + "ปิดงานแล้ว" "%1$s %2$s" "<1 นาที" "วันนี้เหลืออีก %1$s" diff --git a/quickstep/res/values-tl/strings.xml b/quickstep/res/values-tl/strings.xml index e2b9349d8a..1a23e6fde2 100644 --- a/quickstep/res/values-tl/strings.xml +++ b/quickstep/res/values-tl/strings.xml @@ -25,8 +25,7 @@ "Mga setting ng paggamit ng app" "I-clear lahat" "Mga kamakailang app" - - + "Isinara ang Gawain" "%1$s, %2$s" "< 1 min" "%1$s na lang ngayon" diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml index 0e646d1018..51f60f1c69 100644 --- a/quickstep/res/values-tr/strings.xml +++ b/quickstep/res/values-tr/strings.xml @@ -25,8 +25,7 @@ "Uygulama kullanım ayarları" "Tümünü temizle" "Son uygulamalar" - - + "Görev Kapatıldı" "%1$s, %2$s" "< 1 dk." "Bugün %1$s kaldı" diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml index 9c6d121de5..f96c83577a 100644 --- a/quickstep/res/values-uk/strings.xml +++ b/quickstep/res/values-uk/strings.xml @@ -25,8 +25,7 @@ "Налаштування використання додатка" "Очистити все" "Нещодавні додатки" - - + "Завдання закрито" "%1$s, %2$s" "< 1 хв" "Сьогодні залишилося %1$s" diff --git a/quickstep/res/values-ur/strings.xml b/quickstep/res/values-ur/strings.xml index 7a9cd98b45..3760caab4d 100644 --- a/quickstep/res/values-ur/strings.xml +++ b/quickstep/res/values-ur/strings.xml @@ -25,8 +25,7 @@ "ایپ کے استعمال کی ترتیبات" "سبھی کو صاف کریں" "حالیہ ایپس" - - + "ٹاسک بند ہے" "%1$s،%2$s" "‏< 1 منٹ" "آج %1$s بچا ہے" diff --git a/quickstep/res/values-uz/strings.xml b/quickstep/res/values-uz/strings.xml index abff7ac8f2..4e75ee2251 100644 --- a/quickstep/res/values-uz/strings.xml +++ b/quickstep/res/values-uz/strings.xml @@ -25,8 +25,7 @@ "Ilovadan foydalanish sozlamalari" "Hammasini tozalash" "Yaqinda ishlatilgan ilovalar" - - + "Vazifalar yopildi" "%1$s, %2$s" "< 1 daqiqa" "Bugun %1$s qoldi" diff --git a/quickstep/res/values-vi/strings.xml b/quickstep/res/values-vi/strings.xml index 8bda9bc86e..2cfc475bff 100644 --- a/quickstep/res/values-vi/strings.xml +++ b/quickstep/res/values-vi/strings.xml @@ -25,8 +25,7 @@ "Cài đặt mức sử dụng ứng dụng" "Xóa tất cả" "Ứng dụng gần đây" - - + "Đã đóng tác vụ" "%1$s, %2$s" "< 1 phút" "Hôm nay còn %1$s" diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml index 00fe7b5699..58407daafc 100644 --- a/quickstep/res/values-zh-rCN/strings.xml +++ b/quickstep/res/values-zh-rCN/strings.xml @@ -25,8 +25,7 @@ "应用使用设置" "全部清除" "最近用过的应用" - - + "任务已关闭" "%1$s%2$s)" "不到 1 分钟" "今天还可使用 %1$s" diff --git a/quickstep/res/values-zh-rHK/strings.xml b/quickstep/res/values-zh-rHK/strings.xml index f13a926a4c..ed23e166fa 100644 --- a/quickstep/res/values-zh-rHK/strings.xml +++ b/quickstep/res/values-zh-rHK/strings.xml @@ -25,8 +25,7 @@ "應用程式使用情況設定" "全部清除" "最近使用的應用程式" - - + "閂咗工作" "%1$s%2$s" "少於 1 分鐘" "今天剩餘時間:%1$s" diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml index 27ff971ebf..469a95920b 100644 --- a/quickstep/res/values-zh-rTW/strings.xml +++ b/quickstep/res/values-zh-rTW/strings.xml @@ -25,8 +25,7 @@ "應用程式使用情況設定" "全部清除" "最近使用的應用程式" - - + "工作已關閉" "%1$s (%2$s)" "< 1 分鐘" "今天還能使用 %1$s" diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml index 1683449247..2a97d536d7 100644 --- a/quickstep/res/values-zu/strings.xml +++ b/quickstep/res/values-zu/strings.xml @@ -25,8 +25,7 @@ "Izilungiselelo zokusetshenziswa kohlelo lokusebenza" "Sula konke" "Izinhlelo zokusebenza zakamuva" - - + "Umsebenzi Uvaliwe" "%1$s, %2$s" "< 1 iminithi" "%1$s esele namhlanje" From 5f0a5eb87782432dbec3fbd04ff2dd373b2bc88b Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Tue, 18 Jan 2022 09:13:43 -0800 Subject: [PATCH 09/37] Utilities.trim never returns null. This fixes a crash loop I was seeing on my device and also preemptively fixes similar NullPointerExceptions. Bug: 213931730 Test: Manually verified crash loop stopped with this change. Change-Id: I8d2fc8475d42ac60b7fdc9219421a8c9733c7b9f (cherry picked from commit 56be73be80a81df05e34999c42df9203c276b0af) --- src/com/android/launcher3/BubbleTextView.java | 3 ++- src/com/android/launcher3/Utilities.java | 3 ++- src/com/android/launcher3/model/LoaderCursor.java | 3 +-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 1f1d57adc9..163b442b6e 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -35,6 +35,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.icu.text.MessageFormat; import android.text.TextPaint; +import android.text.TextUtils; import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; import android.util.Property; @@ -785,7 +786,7 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, invalidate(); } } - if (itemInfo.contentDescription != null) { + if (!TextUtils.isEmpty(itemInfo.contentDescription)) { if (itemInfo.isDisabled()) { setContentDescription(getContext().getString(R.string.disabled_app_label, itemInfo.contentDescription)); diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index d2fe483c96..63313f770f 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -460,9 +460,10 @@ public final class Utilities { * Trims the string, removing all whitespace at the beginning and end of the string. * Non-breaking whitespaces are also removed. */ + @NonNull public static String trim(CharSequence s) { if (s == null) { - return null; + return ""; } // Just strip any sequence of whitespace or java space characters from the beginning and end diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java index 08b38e88ac..178fbdb7b8 100644 --- a/src/com/android/launcher3/model/LoaderCursor.java +++ b/src/com/android/launcher3/model/LoaderCursor.java @@ -202,8 +202,7 @@ public class LoaderCursor extends CursorWrapper { * Returns the title or empty string */ private String getTitle() { - String title = getString(titleIndex); - return TextUtils.isEmpty(title) ? "" : Utilities.trim(title); + return Utilities.trim(getString(titleIndex)); } /** From a8dae26d394709b64e6027f9951d44635e3b40da Mon Sep 17 00:00:00 2001 From: Schneider Victor-tulias Date: Thu, 20 Jan 2022 12:46:21 -0800 Subject: [PATCH 10/37] Fix taskbar icon dragging issues - Fixed icons disappearing when initiating dragging - Fixed incorrect icon location when initiating dragging after rotating the screen to an orientation other than what launcher started in Fixes: 215418478 Fixes: 214025075 Fixes: 210460544 Test: dragged icons from the workspace and taskbar Change-Id: I848138af28802f7d806708c77c25b8de307c70d8 (cherry picked from commit 312b68fde4799597a021476e96f54b75269acbcb) Merged-In: I848138af28802f7d806708c77c25b8de307c70d8 --- .../taskbar/TaskbarActivityContext.java | 21 ++++++++++++++----- .../taskbar/TaskbarDragController.java | 2 +- .../launcher3/taskbar/TaskbarManager.java | 7 +++++++ src/com/android/launcher3/Workspace.java | 2 +- .../popup/PopupContainerWithArrow.java | 8 ++++++- 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 5308a8f3e8..3b6d5fbfdd 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -90,11 +90,12 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ private static final String WINDOW_TITLE = "Taskbar"; - private final DeviceProfile mDeviceProfile; private final LayoutInflater mLayoutInflater; private final TaskbarDragLayer mDragLayer; private final TaskbarControllers mControllers; + private DeviceProfile mDeviceProfile; + private final WindowManager mWindowManager; private final @Nullable RoundedCorner mLeftCorner, mRightCorner; private final int mTaskbarHeightForIme; @@ -125,10 +126,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), 0); final Resources resources = getResources(); - float taskbarIconSize = resources.getDimension(R.dimen.taskbar_icon_size); - mDeviceProfile.updateIconSize(1, resources); - float iconScale = taskbarIconSize / mDeviceProfile.iconSizePx; - mDeviceProfile.updateIconSize(iconScale, resources); + updateIconSize(resources); mTaskbarHeightForIme = resources.getDimensionPixelSize(R.dimen.taskbar_ime_size); @@ -211,6 +209,19 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ mWindowManager.addView(mDragLayer, mWindowLayoutParams); } + /** Updates the Device profile instance to the latest representation of the screen. */ + public void updateDeviceProfile(DeviceProfile dp) { + mDeviceProfile = dp; + updateIconSize(getResources()); + } + + private void updateIconSize(Resources resources) { + float taskbarIconSize = resources.getDimension(R.dimen.taskbar_icon_size); + mDeviceProfile.updateIconSize(1, resources); + float iconScale = taskbarIconSize / mDeviceProfile.iconSizePx; + mDeviceProfile.updateIconSize(iconScale, resources); + } + public void onConfigurationChanged(@Config int configChanges) { mControllers.onConfigurationChanged(configChanges); } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java index b3a9f8db7c..21d7411a56 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java @@ -145,7 +145,7 @@ public class TaskbarDragController extends DragController popupContainer = mControllers.taskbarPopupController.showForIcon(btv); if (popupContainer != null) { - dragOptions.preDragCondition = popupContainer.createPreDragCondition(); + dragOptions.preDragCondition = popupContainer.createPreDragCondition(false); } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java index 3cdcdf7f89..bec717d8a9 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java @@ -110,6 +110,13 @@ public class TaskbarManager implements DisplayController.DisplayInfoChangeListen } else { // Config change might be handled without re-creating the taskbar if (mTaskbarActivityContext != null) { + DeviceProfile dp = mUserUnlocked + ? LauncherAppState.getIDP(mContext).getDeviceProfile(mContext) + : null; + + if (dp != null && dp.isTaskbarPresent) { + mTaskbarActivityContext.updateDeviceProfile(dp.copy(mContext)); + } mTaskbarActivityContext.onConfigurationChanged(configDiff); } } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 281dfea492..c8dd003991 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1686,7 +1686,7 @@ public class Workspace extends PagedView PopupContainerWithArrow popupContainer = PopupContainerWithArrow .showForIcon((BubbleTextView) child); if (popupContainer != null) { - dragOptions.preDragCondition = popupContainer.createPreDragCondition(); + dragOptions.preDragCondition = popupContainer.createPreDragCondition(true); } } diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index b96395052c..b2619701b8 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -396,7 +396,7 @@ public class PopupContainerWithArrow * Current behavior: * - Start the drag if the touch passes a certain distance from the original touch down. */ - public DragOptions.PreDragCondition createPreDragCondition() { + public DragOptions.PreDragCondition createPreDragCondition(boolean updateIconUi) { return new DragOptions.PreDragCondition() { @Override @@ -406,6 +406,9 @@ public class PopupContainerWithArrow @Override public void onPreDragStart(DropTarget.DragObject dragObject) { + if (!updateIconUi) { + return; + } if (mIsAboveIcon) { // Hide only the icon, keep the text visible. mOriginalIcon.setIconVisible(false); @@ -418,6 +421,9 @@ public class PopupContainerWithArrow @Override public void onPreDragEnd(DropTarget.DragObject dragObject, boolean dragStarted) { + if (!updateIconUi) { + return; + } mOriginalIcon.setIconVisible(true); if (dragStarted) { // Make sure we keep the original icon hidden while it is being dragged. From 478abd32c35143a210153a9d007df724ac22ab91 Mon Sep 17 00:00:00 2001 From: Bob Badour Date: Thu, 27 Jan 2022 20:30:50 -0800 Subject: [PATCH 11/37] Fix licenses and license texts. Entire project is 1p. Bug: 210912771 Test: m nothing Change-Id: I1d76cab983a7d1f9078c0e2f1252f5409692f300 Merged-in: Id941d93786882aca78f214ac692433a353b84ed3 Merged-in: I1d76cab983a7d1f9078c0e2f1252f5409692f300 --- Android.bp | 16 +--- Android.mk | 9 +- NOTICE | 190 ------------------------------------- quickstep/Android.bp | 6 +- tests/Android.bp | 6 +- tests/dummy_app/Android.bp | 3 +- 6 files changed, 12 insertions(+), 218 deletions(-) delete mode 100644 NOTICE diff --git a/Android.bp b/Android.bp index bab994add5..e07d69d045 100644 --- a/Android.bp +++ b/Android.bp @@ -13,24 +13,12 @@ // limitations under the License. package { - default_applicable_licenses: ["packages_apps_Launcher3_license"], + // See: http://go/android-license-faq + default_applicable_licenses: ["Android-Apache-2.0"], } min_launcher3_sdk_version = "26" -// Added automatically by a large-scale-change -// See: http://go/android-license-faq -license { - name: "packages_apps_Launcher3_license", - visibility: [":__subpackages__"], - license_kinds: [ - "SPDX-license-identifier-Apache-2.0", - ], - license_text: [ - "NOTICE", - ], -} - android_library { name: "launcher-aosp-tapl", libs: [ diff --git a/Android.mk b/Android.mk index ceaaf138f2..1bc8b283c7 100644 --- a/Android.mk +++ b/Android.mk @@ -49,7 +49,8 @@ LOCAL_MANIFEST_FILE := go/AndroidManifest.xml LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.* LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice -LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE +LOCAL_LICENSE_PACKAGE_NAME := Android Launcher3 +LOCAL_NOTICE_FILE := build/soong/licenses/LICENSE include $(BUILD_PACKAGE) # @@ -85,7 +86,8 @@ LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.* LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice -LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE +LOCAL_LICENSE_PACKAGE_NAME := Android Launcher3 +LOCAL_NOTICE_FILE := build/soong/licenses/LICENSE include $(BUILD_PACKAGE) @@ -136,7 +138,8 @@ LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.* LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice -LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE +LOCAL_LICENSE_PACKAGE_NAME := Android Launcher3 +LOCAL_NOTICE_FILE := build/soong/licenses/LICENSE include $(BUILD_PACKAGE) diff --git a/NOTICE b/NOTICE deleted file mode 100644 index c5b1efa7aa..0000000000 --- a/NOTICE +++ /dev/null @@ -1,190 +0,0 @@ - - Copyright (c) 2005-2008, The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - diff --git a/quickstep/Android.bp b/quickstep/Android.bp index 7b3e6c45a2..70b1438c38 100644 --- a/quickstep/Android.bp +++ b/quickstep/Android.bp @@ -14,11 +14,7 @@ package { // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "packages_apps_Launcher3_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["packages_apps_Launcher3_license"], + default_applicable_licenses: ["Android-Apache-2.0"], } filegroup { diff --git a/tests/Android.bp b/tests/Android.bp index 3670c37add..4f6e8a3390 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -13,11 +13,7 @@ // limitations under the License. package { // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "packages_apps_Launcher3_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["packages_apps_Launcher3_license"], + default_applicable_licenses: ["Android-Apache-2.0"], } // Source code used for test diff --git a/tests/dummy_app/Android.bp b/tests/dummy_app/Android.bp index 4f83bb706e..08ce2f7503 100644 --- a/tests/dummy_app/Android.bp +++ b/tests/dummy_app/Android.bp @@ -15,7 +15,8 @@ // package { - default_applicable_licenses: ["packages_apps_Launcher3_license"], + // See: http://go/android-license-faq + default_applicable_licenses: ["Android-Apache-2.0"], } android_app { From 90e0fe39237b57d6d61715db00d27e09db186e7e Mon Sep 17 00:00:00 2001 From: Vinit Nayak Date: Wed, 9 Feb 2022 15:30:19 -0800 Subject: [PATCH 12/37] Add null check for mRemoteTargetHandles for side task launch * Other checks haven't changed, only pulled them out into separate block Fixes: 215699962 Test: Unable to repro the crash, I tried ending the activity and starting via adb shell, but I was never able to get into the original if-block that triggered the NPE Change-Id: I83320634f1d059de610176f9031682ca287bd589 --- .../android/quickstep/views/RecentsView.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 13a2bda048..8e772f680a 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -984,13 +984,17 @@ public abstract class RecentsView Date: Wed, 9 Feb 2022 15:59:13 -0800 Subject: [PATCH 13/37] Add null check for null task in getItemInfo() * Pass back an empty WorkspaceItemInfo with correct itemType set on it so at least it can be identified if remaining fields are missing. Fixes: 218625473 Test: Wasn't able to repro crash Change-Id: If20d8fa648edf6c210ad5398905bf78e173b23a1 --- quickstep/src/com/android/quickstep/views/TaskView.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index 6a2c997e05..d046fefda8 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -462,11 +462,15 @@ public class TaskView extends FrameLayout implements Reusable { return getItemInfo(mTask); } - protected WorkspaceItemInfo getItemInfo(Task task) { - ComponentKey componentKey = TaskUtils.getLaunchComponentKeyForTask(task.key); + protected WorkspaceItemInfo getItemInfo(@Nullable Task task) { WorkspaceItemInfo stubInfo = new WorkspaceItemInfo(); stubInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_TASK; stubInfo.container = LauncherSettings.Favorites.CONTAINER_TASKSWITCHER; + if (task == null) { + return stubInfo; + } + + ComponentKey componentKey = TaskUtils.getLaunchComponentKeyForTask(task.key); stubInfo.user = componentKey.user; stubInfo.intent = new Intent().setComponent(componentKey.componentName); stubInfo.title = task.title; From 7faaffa56a61df629b341293e99e41d0c0a4d7ff Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 21 Jan 2022 23:51:08 +0000 Subject: [PATCH 14/37] Prevent lingering divider animators in AbsSwipeUpHandler - Refactor the util method to create the animator and track the existing animation in AbsSwipeUpHandler to be able to cancel it if another call to change the visbility comes in. Note that this doesn't address the case where the launch animation overlaps with swipe up (though that hopefully shouldn't happen in normal usage) Bug: 213403679 Test: Tap in the gesture space while split Change-Id: I078a7d0f22c2ef2ba847796ec79e740c789ce1ae Merged-In: I078a7d0f22c2ef2ba847796ec79e740c789ce1ae --- .../android/quickstep/AbsSwipeUpHandler.java | 31 ++++++---- .../com/android/quickstep/TaskViewUtils.java | 59 ++++++++----------- .../android/quickstep/views/RecentsView.java | 9 ++- 3 files changed, 51 insertions(+), 48 deletions(-) diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 9f1e47f15a..2f52c9d6c3 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -249,6 +249,8 @@ public abstract class AbsSwipeUpHandler, private RunningWindowAnim[] mRunningWindowAnim; // Possible second animation running at the same time as mRunningWindowAnim private Animator mParallelRunningAnim; + // Current running divider animation + private ValueAnimator mDividerAnimator; private boolean mIsMotionPaused; private boolean mHasMotionEverBeenPaused; @@ -831,8 +833,8 @@ public abstract class AbsSwipeUpHandler, // Notify when the animation starts flushOnRecentsAnimationAndLauncherBound(); - TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, - false /*shown*/, true /*animate*/); + // Start hiding the divider + setDividerShown(false, false /* immediate */); // Only add the callback to enable the input consumer after we actually have the controller mStateCallback.runOnceAtState(STATE_APP_CONTROLLER_RECEIVED | STATE_GESTURE_STARTED, @@ -849,8 +851,7 @@ public abstract class AbsSwipeUpHandler, mStateCallback.setStateOnUiThread(STATE_GESTURE_CANCELLED | STATE_HANDLER_INVALIDATED); if (mRecentsAnimationTargets != null) { - TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, - true /*shown*/, true /*animate*/); + setDividerShown(true, false /* immediate */); } // Defer clearing the controller and the targets until after we've updated the state @@ -1000,8 +1001,7 @@ public abstract class AbsSwipeUpHandler, mStateCallback.setState(STATE_RESUME_LAST_TASK); } if (mRecentsAnimationTargets != null) { - TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, - true /*shown*/, false /*animate*/); + setDividerShown(true, true /* immediate */); } break; } @@ -1653,8 +1653,7 @@ public abstract class AbsSwipeUpHandler, mActivityInterface.onTransitionCancelled(wasVisible, mGestureState.getEndTarget()); if (mRecentsAnimationTargets != null) { - TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, - true /*shown*/, false /*animate*/); + setDividerShown(true, true /* immediate */); } // Leave the pending invisible flag, as it may be used by wallpaper open animation. @@ -1920,8 +1919,7 @@ public abstract class AbsSwipeUpHandler, @Override public void onRecentsAnimationFinished(RecentsAnimationController controller) { if (!controller.getFinishTargetIsLauncher()) { - TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, - true /*shown*/, true /*animate*/); + setDividerShown(true, false /* immediate */); } mRecentsAnimationController = null; mRecentsAnimationTargets = null; @@ -2026,6 +2024,19 @@ public abstract class AbsSwipeUpHandler, return scaleProgress; } + private void setDividerShown(boolean shown, boolean immediate) { + if (mDividerAnimator != null) { + mDividerAnimator.cancel(); + } + mDividerAnimator = TaskViewUtils.createSplitAuxiliarySurfacesAnimator( + mRecentsAnimationTargets.nonApps, shown, (dividerAnimator) -> { + dividerAnimator.start(); + if (immediate) { + dividerAnimator.end(); + } + }); + } + /** * Used for winscope tracing, see launcher_trace.proto * @see com.android.systemui.shared.tracing.ProtoTraceable#writeToProto diff --git a/quickstep/src/com/android/quickstep/TaskViewUtils.java b/quickstep/src/com/android/quickstep/TaskViewUtils.java index 5d9a537165..30e225a932 100644 --- a/quickstep/src/com/android/quickstep/TaskViewUtils.java +++ b/quickstep/src/com/android/quickstep/TaskViewUtils.java @@ -85,6 +85,7 @@ import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat. import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; /** * Utility class for helpful methods related to {@link TaskView} objects and their tasks. @@ -538,8 +539,16 @@ public final class TaskViewUtils { nonAppTargets, depthController, pa); if (launcherClosing) { // TODO(b/182592057): differentiate between "restore split" vs "launch fullscreen app" - TaskViewUtils.setSplitAuxiliarySurfacesShown(nonAppTargets, - true /*shown*/, true /*animate*/, pa); + TaskViewUtils.createSplitAuxiliarySurfacesAnimator(nonAppTargets, true /*shown*/, + (dividerAnimator) -> { + // If split apps are launching, we want to delay showing the divider bar + // until the very end once the apps are mostly in place. This is because we + // aren't moving the divider leash in the relative position with the + // launching apps. + dividerAnimator.setStartDelay(pa.getDuration() + - SPLIT_DIVIDER_ANIM_DURATION); + pa.add(dividerAnimator); + }); } Animator childStateAnimation = null; @@ -594,16 +603,17 @@ public final class TaskViewUtils { anim.addListener(windowAnimEndListener); } - public static void setSplitAuxiliarySurfacesShown(RemoteAnimationTargetCompat[] nonApps, - boolean shown, boolean animate) { - setSplitAuxiliarySurfacesShown(nonApps, shown, animate,null); - } - - private static void setSplitAuxiliarySurfacesShown( - @NonNull RemoteAnimationTargetCompat[] nonApps, boolean shown, boolean animate, - @Nullable PendingAnimation splitLaunchAnimation) { + /** + * Creates an animation to show/hide the auxiliary surfaces (aka. divider bar), only calling + * {@param animatorHandler} if there are valid surfaces to animate. + * + * @return the animator animating the surfaces + */ + public static ValueAnimator createSplitAuxiliarySurfacesAnimator( + RemoteAnimationTargetCompat[] nonApps, boolean shown, + Consumer animatorHandler) { if (nonApps == null || nonApps.length == 0) { - return; + return null; } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); @@ -618,20 +628,7 @@ public final class TaskViewUtils { } } if (!hasSurfaceToAnimate) { - return; - } - - if (!animate) { - for (SurfaceControl leash : auxiliarySurfaces) { - t.setAlpha(leash, shown ? 1 : 0); - if (shown) { - t.show(leash); - } else { - t.hide(leash); - } - } - t.apply(); - return; + return null; } ValueAnimator dockFadeAnimator = ValueAnimator.ofFloat(0f, 1f); @@ -668,15 +665,7 @@ public final class TaskViewUtils { } }); dockFadeAnimator.setDuration(SPLIT_DIVIDER_ANIM_DURATION); - if (splitLaunchAnimation != null) { - // If split apps are launching, we want to delay showing the divider bar until the very - // end once the apps are mostly in place. This is because we aren't moving the divider - // leash in the relative position with the launching apps. - dockFadeAnimator.setStartDelay( - splitLaunchAnimation.getDuration() - SPLIT_DIVIDER_ANIM_DURATION); - splitLaunchAnimation.add(dockFadeAnimator); - } else { - dockFadeAnimator.start(); - } + animatorHandler.accept(dockFadeAnimator); + return dockFadeAnimator; } } diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 02261af499..57c3b1d746 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -4235,9 +4235,12 @@ public abstract class RecentsView { + dividerAnimator.start(); + dividerAnimator.end(); + }); } if (ENABLE_QUICKSTEP_LIVE_TILE.get() && tv.isRunningTask()) { finishRecentsAnimation(false /* toRecents */, null); From 35d294387cca5ed467a830cf408c3c8866e847bc Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Mon, 14 Feb 2022 14:39:01 -0800 Subject: [PATCH 15/37] Init FloatingIconView properties before fetching drawable. & Make sure properties are reset when recycled. This fixes the bug that causes BubbleTextView drawable not to get set. Bug: 207389002 Test: locally disable loading AdaptiveIcons, ensure BubbleTextView drawable always gets drawn for closing animation Change-Id: Ifdbf3e733e27918c57a5e9b23e5a11b65f8f338c (cherry picked from commit b2670d205131eb7d22c700e0149085031d21db39) Merged-In: Ifdbf3e733e27918c57a5e9b23e5a11b65f8f338c --- .../android/launcher3/views/FloatingIconView.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java index dc3ee43548..0a800c3c6e 100644 --- a/src/com/android/launcher3/views/FloatingIconView.java +++ b/src/com/android/launcher3/views/FloatingIconView.java @@ -564,6 +564,12 @@ public class FloatingIconView extends FrameLayout implements launcher, parent); view.recycle(); + // Init properties before getting the drawable. + view.mIsVerticalBarLayout = launcher.getDeviceProfile().isVerticalBarLayout(); + view.mIsOpening = isOpening; + view.mOriginalIcon = originalView; + view.mPositionOut = positionOut; + // Get the drawable on the background thread boolean shouldLoadIcon = originalView.getTag() instanceof ItemInfo && hideOriginal; if (shouldLoadIcon) { @@ -577,11 +583,6 @@ public class FloatingIconView extends FrameLayout implements } sIconLoadResult = null; - view.mIsVerticalBarLayout = launcher.getDeviceProfile().isVerticalBarLayout(); - view.mIsOpening = isOpening; - view.mOriginalIcon = originalView; - view.mPositionOut = positionOut; - // Match the position of the original view. view.matchPositionOf(launcher, originalView, isOpening, positionOut); @@ -639,6 +640,7 @@ public class FloatingIconView extends FrameLayout implements mLoadIconSignal = null; mEndRunnable = null; mFinalDrawableBounds.setEmpty(); + mIsOpening = false; mPositionOut = null; mListenerView.setListener(null); mOriginalIcon = null; From a2ba15674c96c3de948c5d4a50342b09d335f417 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Fri, 18 Feb 2022 09:22:58 +0000 Subject: [PATCH 16/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I90d6a4aacc6b554740d489cc7e7689b632c9a2eb --- res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index d83776caa3..d87d71c6a7 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -105,7 +105,7 @@ "Ordner: %1$s, %2$d oder mehr Elemente" "Hintergründe" "Hintergrund & Stil" - "Startbildschirm-Einstellungen" + "Einstellungen" "Von deinem Administrator deaktiviert" "Drehen des Startbildschirms zulassen" "Beim Drehen des Smartphones" From 634ddc934f81019e43fcadfa6ec0b7d391ab9755 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Fri, 18 Feb 2022 09:23:37 +0000 Subject: [PATCH 17/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I1a4cc201486cc623554b6169e59f00e31f17542a --- res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 4a3853f9b8..794ca4ec12 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -107,7 +107,7 @@ "Ordner: %1$s, %2$d oder mehr Elemente" "Hintergründe" "Hintergrund & Stil" - "Startbildschirm-Einstellungen" + "Einstellungen" "Von deinem Administrator deaktiviert" "Drehen des Startbildschirms zulassen" "Beim Drehen des Smartphones" From 98fda41b313ec9ae9b015a3880dcc55e907735d5 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Fri, 18 Feb 2022 09:24:16 +0000 Subject: [PATCH 18/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ie685cf732f6d413b10232c12c0b2faea1469b723 --- res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index a0c784f1fb..1ddd6528f5 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -103,7 +103,7 @@ "Ordner: %1$s, %2$d oder mehr Elemente" "Hintergründe" "Hintergrund & Stil" - "Startbildschirm-Einstellungen" + "Einstellungen" "Von deinem Administrator deaktiviert" "Drehen des Startbildschirms zulassen" "Beim Drehen des Smartphones" From 8aa4b05d2244ddc57ecd7cdc986f4cddad37f093 Mon Sep 17 00:00:00 2001 From: Brian Isganitis Date: Fri, 18 Feb 2022 11:11:25 -0800 Subject: [PATCH 19/37] Remove popup container drag listener on close complete. Bug: 217162588 Test: Verified removal once drag is finished. Verified working on secondary display launcher. Change-Id: I16515518c6d488b74450456306abbfff646ac11b Merged-In: I16515518c6d488b74450456306abbfff646ac11b --- src/com/android/launcher3/popup/PopupContainerWithArrow.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index b2619701b8..6d2b12f451 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -486,6 +486,9 @@ public class PopupContainerWithArrow @Override protected void closeComplete() { super.closeComplete(); + if (mActivityContext.getDragController() != null) { + mActivityContext.getDragController().removeDragListener(this); + } PopupContainerWithArrow openPopup = getOpen(mActivityContext); if (openPopup == null || openPopup.mOriginalIcon != mOriginalIcon) { mOriginalIcon.setTextVisibility(mOriginalIcon.shouldTextBeVisible()); From c519538bca3f51b7632e5d62af9bfc4c2feff49e Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Fri, 18 Feb 2022 14:24:39 +0100 Subject: [PATCH 20/37] Passing in the launch cookie for widget broadcast trampolines The launch cookie can now be transfered via the broadcast Fixes: 220290671 Test: add Photos widget, return properly to widget Merged-In: Ibfe9e5232317837f3111459212a4b016b5828ef4 Change-Id: Ibfe9e5232317837f3111459212a4b016b5828ef4 --- .../launcher3/BaseQuickstepLauncher.java | 28 ++++++++++++++----- .../QuickstepInteractionHandler.java | 14 ++++++---- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java index 4269f2d906..4ceb1957ad 100644 --- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java @@ -39,6 +39,7 @@ import android.hardware.SensorManager; import android.hardware.devicestate.DeviceStateManager; import android.os.Bundle; import android.os.CancellationSignal; +import android.os.IBinder; import android.view.View; import android.view.WindowInsets; import android.window.SplashScreen; @@ -513,11 +514,26 @@ public abstract class BaseQuickstepLauncher extends Launcher } /** - * Adds a new launch cookie for the activity launch of the given {@param info} if supported. + * Adds a new launch cookie for the activity launch if supported. + * + * @param info the item info for the launch + * @param opts the options to set the launchCookie on. */ public void addLaunchCookie(ItemInfo info, ActivityOptions opts) { + IBinder launchCookie = getLaunchCookie(info); + if (launchCookie != null) { + opts.setLaunchCookie(launchCookie); + } + } + + /** + * Return a new launch cookie for the activity launch if supported. + * + * @param info the item info for the launch + */ + public IBinder getLaunchCookie(ItemInfo info) { if (info == null) { - return; + return null; } switch (info.container) { case LauncherSettings.Favorites.CONTAINER_DESKTOP: @@ -531,8 +547,7 @@ public abstract class BaseQuickstepLauncher extends Launcher break; } // Reset any existing launch cookies associated with the cookie - opts.setLaunchCookie(ObjectWrapper.wrap(NO_MATCHING_ID)); - return; + return ObjectWrapper.wrap(NO_MATCHING_ID); } switch (info.itemType) { case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION: @@ -543,10 +558,9 @@ public abstract class BaseQuickstepLauncher extends Launcher break; default: // Reset any existing launch cookies associated with the cookie - opts.setLaunchCookie(ObjectWrapper.wrap(NO_MATCHING_ID)); - return; + return ObjectWrapper.wrap(NO_MATCHING_ID); } - opts.setLaunchCookie(ObjectWrapper.wrap(new Integer(info.id))); + return ObjectWrapper.wrap(new Integer(info.id)); } public void setHintUserWillBeActive() { diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java index 1cf50f7f64..ed71562643 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java @@ -21,6 +21,7 @@ import android.app.ActivityOptions; import android.app.ActivityTaskManager; import android.app.PendingIntent; import android.content.Intent; +import android.os.IBinder; import android.os.RemoteException; import android.util.Log; import android.util.Pair; @@ -58,6 +59,12 @@ class QuickstepInteractionHandler implements RemoteViews.InteractionHandler { Pair options = remoteResponse.getLaunchOptions(view); ActivityOptionsWrapper activityOptions = mLauncher.getAppTransitionManager() .getActivityLaunchOptions(hostView); + Object itemInfo = hostView.getTag(); + IBinder launchCookie = null; + if (itemInfo instanceof ItemInfo) { + launchCookie = mLauncher.getLaunchCookie((ItemInfo) itemInfo); + activityOptions.options.setLaunchCookie(launchCookie); + } if (Utilities.ATLEAST_S && !pendingIntent.isActivity()) { // In the event this pending intent eventually launches an activity, i.e. a trampoline, // use the Quickstep transition animation. @@ -65,17 +72,14 @@ class QuickstepInteractionHandler implements RemoteViews.InteractionHandler { ActivityTaskManager.getService() .registerRemoteAnimationForNextActivityStart( pendingIntent.getCreatorPackage(), - activityOptions.options.getRemoteAnimationAdapter()); + activityOptions.options.getRemoteAnimationAdapter(), + launchCookie); } catch (RemoteException e) { // Do nothing. } } activityOptions.options.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activityOptions.options.setSplashscreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_EMPTY); - Object itemInfo = hostView.getTag(); - if (itemInfo instanceof ItemInfo) { - mLauncher.addLaunchCookie((ItemInfo) itemInfo, activityOptions.options); - } options = Pair.create(options.first, activityOptions.options); if (pendingIntent.isActivity()) { logAppLaunch(itemInfo); From 8e5a164e059500f5d98e8394a66bdf0c4541287a Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 23 Feb 2022 13:32:49 -0800 Subject: [PATCH 21/37] Removing unnecessary AM.getTasks() call on every touch Bug: 220906427 Test: Verified on device Change-Id: I58ed22c4d6069f10198ec30ec02fa8c2f7c55cbe (cherry picked from commit d2ec834fac0b9a08ddf08fad188206a47b123c5a) --- .../RecentsAnimationDeviceState.java | 6 +-- .../quickstep/TouchInteractionService.java | 40 ++++++++----------- 2 files changed, 19 insertions(+), 27 deletions(-) diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java index 73d14246a0..99a02e15ce 100644 --- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java +++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java @@ -554,15 +554,13 @@ public class RecentsAnimationDeviceState implements /** * @param ev An ACTION_DOWN motion event - * @param task Info for the currently running task * @return whether the given motion event can trigger the assistant over the current task. */ - public boolean canTriggerAssistantAction(MotionEvent ev, ActivityManager.RunningTaskInfo task) { + public boolean canTriggerAssistantAction(MotionEvent ev) { return mAssistantAvailable && !QuickStepContract.isAssistantGestureDisabled(mSystemUiStateFlags) && mRotationTouchHelper.touchInAssistantRegion(ev) - && !isLockToAppActive() - && !isGestureBlockedActivity(task); + && !isLockToAppActive(); } /** diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 1f6a974c23..af8fec23fb 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -37,7 +37,6 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_N import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_TRACING_ENABLED; import android.annotation.TargetApi; -import android.app.ActivityManager; import android.app.PendingIntent; import android.app.RemoteAction; import android.app.Service; @@ -600,26 +599,14 @@ public class TouchInteractionService extends Service ActiveGestureLog.INSTANCE.addLog("setInputConsumer: " + mConsumer.getName()); mUncheckedConsumer = mConsumer; - } else if (mDeviceState.isUserUnlocked() && mDeviceState.isFullyGesturalNavMode()) { + } else if (mDeviceState.isUserUnlocked() && mDeviceState.isFullyGesturalNavMode() + && mDeviceState.canTriggerAssistantAction(event)) { mGestureState = createGestureState(mGestureState); - ActivityManager.RunningTaskInfo runningTask = mGestureState.getRunningTask(); - if (mDeviceState.canTriggerAssistantAction(event, runningTask)) { - // Do not change mConsumer as if there is an ongoing QuickSwitch gesture, we - // should not interrupt it. QuickSwitch assumes that interruption can only - // happen if the next gesture is also quick switch. - mUncheckedConsumer = new AssistantInputConsumer( - this, - mGestureState, - InputConsumer.NO_OP, mInputMonitorCompat, - mDeviceState, - event); - } else if (mDeviceState.canTriggerOneHandedAction(event)) { - // Consume gesture event for triggering one handed feature. - mUncheckedConsumer = new OneHandedModeInputConsumer(this, mDeviceState, - InputConsumer.NO_OP, mInputMonitorCompat); - } else { - mUncheckedConsumer = InputConsumer.NO_OP; - } + // Do not change mConsumer as if there is an ongoing QuickSwitch gesture, we + // should not interrupt it. QuickSwitch assumes that interruption can only + // happen if the next gesture is also quick switch. + mUncheckedConsumer = tryCreateAssistantInputConsumer( + InputConsumer.NO_OP, mGestureState, event); } else if (mDeviceState.canTriggerOneHandedAction(event)) { // Consume gesture event for triggering one handed feature. mUncheckedConsumer = new OneHandedModeInputConsumer(this, mDeviceState, @@ -666,6 +653,14 @@ public class TouchInteractionService extends Service ProtoTracer.INSTANCE.get(this).scheduleFrameUpdate(); } + private InputConsumer tryCreateAssistantInputConsumer(InputConsumer base, + GestureState gestureState, MotionEvent motionEvent) { + return mDeviceState.isGestureBlockedActivity(gestureState.getRunningTask()) + ? base + : new AssistantInputConsumer(this, gestureState, base, mInputMonitorCompat, + mDeviceState, motionEvent); + } + public GestureState createGestureState(GestureState previousGestureState) { GestureState gestureState = new GestureState(mOverviewComponentObserver, ActiveGestureLog.INSTANCE.generateAndSetLogId()); @@ -711,9 +706,8 @@ public class TouchInteractionService extends Service handleOrientationSetup(base); } if (mDeviceState.isFullyGesturalNavMode()) { - if (mDeviceState.canTriggerAssistantAction(event, newGestureState.getRunningTask())) { - base = new AssistantInputConsumer(this, newGestureState, base, mInputMonitorCompat, - mDeviceState, event); + if (mDeviceState.canTriggerAssistantAction(event)) { + base = tryCreateAssistantInputConsumer(base, newGestureState, event); } // If Taskbar is present, we listen for long press to unstash it. From cc9382570a05dbc92a9f0803ecd4d2cd45e8846b Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:20:30 +0000 Subject: [PATCH 22/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I57c21d14d353866fb131d8977ef7f3d85bfdb7b6 --- quickstep/res/values-or/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index 9488021139..4663936b23 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -22,7 +22,7 @@ "ପିନ୍‍" "ଫ୍ରିଫର୍ମ" "କୌଣସି ସାମ୍ପ୍ରତିକ ଆଇଟମ୍ ନାହିଁ" - "ଆପ୍‍ ବ୍ୟବହାର ସେଟିଂସ୍‍" + "ଆପ ବ୍ୟବହାର ସେଟିଂସ" "ସବୁ ଖାଲି କରନ୍ତୁ" "ବର୍ତ୍ତମାନର ଆପ୍‌" "%1$s %2$s" @@ -38,7 +38,7 @@ "ଆପଣଙ୍କର ସବୁଠାରୁ ଅଧିକ-ବ୍ୟବହୃତ ଆପଗୁଡ଼ିକୁ, ସିଧା ମୂଳ ସ୍କ୍ରିନରେ ସହଜରେ ଆକ୍ସେସ୍ କରନ୍ତୁ। ଆପଣଙ୍କ ରୁଟିନଗୁଡ଼ିକ ଆଧାରରେ ପରାମର୍ଶଗୁଡ଼ିକ ପରିବର୍ତ୍ତିତ ହେବ। ତଳ ଧାଡ଼ିରେ ଥିବା ଆପଗୁଡ଼ିକ ଏକ ନୂଆ ଫୋଲ୍ଡରକୁ ମୁଭ୍ କରିଯିବ।" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ପାଆନ୍ତୁ" "ନାହିଁ, ଥାଉ" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ସବୁଠାରୁ ଅଧିକ-ବ୍ୟବହୃତ ଆପଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯାଏ ଏବଂ ରୁଟିନଗୁଡ଼ିକ ଆଧାରରେ ପରିବର୍ତ୍ତିତ ହୋଇଥାଏ" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ପାଇବାକୁ ଆପଗୁଡ଼ିକୁ ତଳ ଧାଡ଼ିରୁ ଟାଣି ଆଣନ୍ତୁ" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ଖାଲି ସ୍ଥାନରେ ଯୋଗ କରାଯାଇଛି" @@ -69,14 +69,14 @@ "ଆପଗୁଡ଼ିକ ମଧ୍ୟରେ ସ୍ୱିଚ୍ କରିବାକୁ, ସ୍କ୍ରିନର ତଳୁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ, ଧରି ରଖନ୍ତୁ, ତା\'ପରେ ରିଲିଜ୍ କରନ୍ତୁ।" "ସବୁ ପ୍ରସ୍ତୁତ" "ହୋଇଗଲା" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" "ବଢ଼ିଆ!" "ଟ୍ୟୁଟୋରିଆଲ୍ %1$d/%2$d" "ସମ୍ପୂର୍ଣ୍ଣ ଭାବେ ପ୍ରସ୍ତୁତ!" "ମୂଳପୃଷ୍ଠାକୁ ଯିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ" "ଆପଣ ଆପଣଙ୍କ ଫୋନ୍ ବ୍ୟବହାର କରିବା ପାଇଁ ପ୍ରସ୍ତୁତ ଅଛନ୍ତି" - "ସିଷ୍ଟମ୍ ନାଭିଗେସନ୍ ସେଟିଂସ୍" + "ସିଷ୍ଟମ ନାଭିଗେସନ ସେଟିଂସ" "ସେୟାର୍ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟ୍" "ଆପ୍ କିମ୍ବା ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ଏହି କାର୍ଯ୍ୟକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" From be2d610046ca26f89c05138836a024ab5add09c0 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:21:03 +0000 Subject: [PATCH 23/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ia078f388a0273f2cf3788557cb8d3df729e645c8 --- quickstep/res/values-or/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index 9488021139..4663936b23 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -22,7 +22,7 @@ "ପିନ୍‍" "ଫ୍ରିଫର୍ମ" "କୌଣସି ସାମ୍ପ୍ରତିକ ଆଇଟମ୍ ନାହିଁ" - "ଆପ୍‍ ବ୍ୟବହାର ସେଟିଂସ୍‍" + "ଆପ ବ୍ୟବହାର ସେଟିଂସ" "ସବୁ ଖାଲି କରନ୍ତୁ" "ବର୍ତ୍ତମାନର ଆପ୍‌" "%1$s %2$s" @@ -38,7 +38,7 @@ "ଆପଣଙ୍କର ସବୁଠାରୁ ଅଧିକ-ବ୍ୟବହୃତ ଆପଗୁଡ଼ିକୁ, ସିଧା ମୂଳ ସ୍କ୍ରିନରେ ସହଜରେ ଆକ୍ସେସ୍ କରନ୍ତୁ। ଆପଣଙ୍କ ରୁଟିନଗୁଡ଼ିକ ଆଧାରରେ ପରାମର୍ଶଗୁଡ଼ିକ ପରିବର୍ତ୍ତିତ ହେବ। ତଳ ଧାଡ଼ିରେ ଥିବା ଆପଗୁଡ଼ିକ ଏକ ନୂଆ ଫୋଲ୍ଡରକୁ ମୁଭ୍ କରିଯିବ।" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ପାଆନ୍ତୁ" "ନାହିଁ, ଥାଉ" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ସବୁଠାରୁ ଅଧିକ-ବ୍ୟବହୃତ ଆପଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯାଏ ଏବଂ ରୁଟିନଗୁଡ଼ିକ ଆଧାରରେ ପରିବର୍ତ୍ତିତ ହୋଇଥାଏ" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ପାଇବାକୁ ଆପଗୁଡ଼ିକୁ ତଳ ଧାଡ଼ିରୁ ଟାଣି ଆଣନ୍ତୁ" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ଖାଲି ସ୍ଥାନରେ ଯୋଗ କରାଯାଇଛି" @@ -69,14 +69,14 @@ "ଆପଗୁଡ଼ିକ ମଧ୍ୟରେ ସ୍ୱିଚ୍ କରିବାକୁ, ସ୍କ୍ରିନର ତଳୁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ, ଧରି ରଖନ୍ତୁ, ତା\'ପରେ ରିଲିଜ୍ କରନ୍ତୁ।" "ସବୁ ପ୍ରସ୍ତୁତ" "ହୋଇଗଲା" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" "ବଢ଼ିଆ!" "ଟ୍ୟୁଟୋରିଆଲ୍ %1$d/%2$d" "ସମ୍ପୂର୍ଣ୍ଣ ଭାବେ ପ୍ରସ୍ତୁତ!" "ମୂଳପୃଷ୍ଠାକୁ ଯିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ" "ଆପଣ ଆପଣଙ୍କ ଫୋନ୍ ବ୍ୟବହାର କରିବା ପାଇଁ ପ୍ରସ୍ତୁତ ଅଛନ୍ତି" - "ସିଷ୍ଟମ୍ ନାଭିଗେସନ୍ ସେଟିଂସ୍" + "ସିଷ୍ଟମ ନାଭିଗେସନ ସେଟିଂସ" "ସେୟାର୍ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟ୍" "ଆପ୍ କିମ୍ବା ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ଏହି କାର୍ଯ୍ୟକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" From bf37866067710cada754e114e96350bd28b59474 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:21:36 +0000 Subject: [PATCH 24/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ie305e6a08bf74c0302f843d72786222a519bdf7b --- quickstep/res/values-or/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index 38d7e1b743..2197695a88 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -22,7 +22,7 @@ "ପିନ୍‍" "ଫ୍ରିଫର୍ମ" "କୌଣସି ସାମ୍ପ୍ରତିକ ଆଇଟମ୍ ନାହିଁ" - "ଆପ୍‍ ବ୍ୟବହାର ସେଟିଂସ୍‍" + "ଆପ ବ୍ୟବହାର ସେଟିଂସ" "ସବୁ ଖାଲି କରନ୍ତୁ" "ବର୍ତ୍ତମାନର ଆପ୍‌" "ଟାସ୍କ ବନ୍ଦ ହୋଇଯାଇଛି" @@ -38,7 +38,7 @@ "ଆପଣଙ୍କର ସବୁଠାରୁ ଅଧିକ-ବ୍ୟବହୃତ ଆପଗୁଡ଼ିକୁ, ସିଧା ମୂଳ ସ୍କ୍ରିନରେ ସହଜରେ ଆକ୍ସେସ୍ କରନ୍ତୁ। ଆପଣଙ୍କ ରୁଟିନଗୁଡ଼ିକ ଆଧାରରେ ପରାମର୍ଶଗୁଡ଼ିକ ପରିବର୍ତ୍ତିତ ହେବ। ତଳ ଧାଡ଼ିରେ ଥିବା ଆପଗୁଡ଼ିକ ଏକ ନୂଆ ଫୋଲ୍ଡରକୁ ମୁଭ୍ କରିଯିବ।" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ପାଆନ୍ତୁ" "ନାହିଁ, ଥାଉ" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ସବୁଠାରୁ ଅଧିକ-ବ୍ୟବହୃତ ଆପଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯାଏ ଏବଂ ରୁଟିନଗୁଡ଼ିକ ଆଧାରରେ ପରିବର୍ତ୍ତିତ ହୋଇଥାଏ" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ପାଇବାକୁ ଆପଗୁଡ଼ିକୁ ତଳ ଧାଡ଼ିରୁ ଟାଣି ଆଣନ୍ତୁ" "ଆପ୍ ପରାମର୍ଶଗୁଡ଼ିକ ଖାଲି ସ୍ଥାନରେ ଯୋଗ କରାଯାଇଛି" @@ -69,14 +69,14 @@ "ଆପଗୁଡ଼ିକ ମଧ୍ୟରେ ସ୍ୱିଚ୍ କରିବାକୁ, ସ୍କ୍ରିନର ତଳୁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ, ଧରି ରଖନ୍ତୁ, ତା\'ପରେ ରିଲିଜ୍ କରନ୍ତୁ।" "ସବୁ ପ୍ରସ୍ତୁତ" "ହୋଇଗଲା" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" "ବଢ଼ିଆ!" "ଟ୍ୟୁଟୋରିଆଲ୍ %1$d/%2$d" "ସମ୍ପୂର୍ଣ୍ଣ ଭାବେ ପ୍ରସ୍ତୁତ!" "ମୂଳପୃଷ୍ଠାକୁ ଯିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ" "ଆପଣ ଆପଣଙ୍କ ଫୋନ୍ ବ୍ୟବହାର କରିବା ପାଇଁ ପ୍ରସ୍ତୁତ ଅଛନ୍ତି" - "ସିଷ୍ଟମ୍ ନାଭିଗେସନ୍ ସେଟିଂସ୍" + "ସିଷ୍ଟମ ନାଭିଗେସନ ସେଟିଂସ" "ସେୟାର୍ କରନ୍ତୁ" "ସ୍କ୍ରିନସଟ୍" "ସ୍ପ୍ଲିଟ୍" From 17a9ba37d88dc7806a3f0e0d304c1a67ca6d0e11 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:22:28 +0000 Subject: [PATCH 25/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I73a5932f37eb0ebd2219c309901052aa4cf7e9a3 --- go/quickstep/res/values-or/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go/quickstep/res/values-or/strings.xml b/go/quickstep/res/values-or/strings.xml index df8febf331..db328ece9e 100644 --- a/go/quickstep/res/values-or/strings.xml +++ b/go/quickstep/res/values-or/strings.xml @@ -7,13 +7,13 @@ "Lens" "ବୁଝିଗଲି" "ବାତିଲ୍ କରନ୍ତୁ" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ସ୍କିନରେ ଥିବା ଟେକ୍ସଟକୁ ଅନୁବାଦ କରନ୍ତୁ କିମ୍ବା ଶୁଣନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଟେକ୍ସଟ୍, ୱେବ୍ ଠିକଣା ଏବଂ ସ୍କ୍ରିନସଟଗୁଡ଼ିକ ପରି ସୂଚନାକୁ Google ସହ ସେୟାର୍ କରାଯାଇପାରେ।\n\nଆପଣ କେଉଁ ସୂଚନା ସେୟାର୍ କରନ୍ତି ତାହା ପରିବର୍ତ୍ତନ କରିବାକୁ, ""ସେଟିଂସ୍ > ଆପ୍ସ > ଡିଫଲ୍ଟ ଆପ୍ସ > ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପ""କୁ ଯାଆନ୍ତୁ।" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଟେକ୍ସଟ, ୱେବ ଠିକଣା ଏବଂ ସ୍କ୍ରିନସଟଗୁଡ଼ିକ ପରି ସୂଚନାକୁ Google ସହ ସେୟାର କରାଯାଇପାରେ।\n\nଆପଣ କେଉଁ ସୂଚନାକୁ ସେୟାର କରନ୍ତି ତାହା ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ, ""ସେଟିଂସ > ଆପ୍ସ > ଡିଫଲ୍ଟ ଆପ୍ସ > Digital assistant ଆପ""କୁ ଯାଆନ୍ତୁ।" "ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିବାକୁ ଏକ ଆସିଷ୍ଟାଣ୍ଟ ବାଛନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ କିମ୍ବା ଅନୁବାଦ କରିବାକୁ, ସେଟିଂସରେ ଏକ ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପ୍ ଚୟନ କରନ୍ତୁ" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା କିମ୍ବା ଅନୁବାଦ କରିବା ପାଇଁ, ସେଟିଂସରେ ଏକ digital assistant ଆପ ବାଛନ୍ତୁ" "ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିବା ପାଇଁ ଆପଣଙ୍କ ଆସିଷ୍ଟାଣ୍ଟକୁ ବଦଳାନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ କିମ୍ବା ଅନୁବାଦ କରିବାକୁ, ସେଟିଂସରେ ଆପଣଙ୍କ ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପକୁ ବଦଳାନ୍ତୁ" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା କିମ୍ବା ଅନୁବାଦ କରିବା ପାଇଁ, ସେଟିଂସରେ ଆପଣଙ୍କ Digital assistant ଆପକୁ ବଦଳାନ୍ତୁ" "ଏହି ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ ଏଠାରେ ଟାପ୍ କରନ୍ତୁ" "ଏହି ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଅନୁବାଦ କରିବା ପାଇଁ ଏଠାରେ ଟାପ୍ କରନ୍ତୁ" From 15d906fc53aaa1a867182eb45b3750da04306484 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:23:03 +0000 Subject: [PATCH 26/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ie2ef0f6786c71b48b24e27dc720dfca6271ddc12 --- go/quickstep/res/values-or/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go/quickstep/res/values-or/strings.xml b/go/quickstep/res/values-or/strings.xml index df8febf331..db328ece9e 100644 --- a/go/quickstep/res/values-or/strings.xml +++ b/go/quickstep/res/values-or/strings.xml @@ -7,13 +7,13 @@ "Lens" "ବୁଝିଗଲି" "ବାତିଲ୍ କରନ୍ତୁ" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ସ୍କିନରେ ଥିବା ଟେକ୍ସଟକୁ ଅନୁବାଦ କରନ୍ତୁ କିମ୍ବା ଶୁଣନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଟେକ୍ସଟ୍, ୱେବ୍ ଠିକଣା ଏବଂ ସ୍କ୍ରିନସଟଗୁଡ଼ିକ ପରି ସୂଚନାକୁ Google ସହ ସେୟାର୍ କରାଯାଇପାରେ।\n\nଆପଣ କେଉଁ ସୂଚନା ସେୟାର୍ କରନ୍ତି ତାହା ପରିବର୍ତ୍ତନ କରିବାକୁ, ""ସେଟିଂସ୍ > ଆପ୍ସ > ଡିଫଲ୍ଟ ଆପ୍ସ > ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପ""କୁ ଯାଆନ୍ତୁ।" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଟେକ୍ସଟ, ୱେବ ଠିକଣା ଏବଂ ସ୍କ୍ରିନସଟଗୁଡ଼ିକ ପରି ସୂଚନାକୁ Google ସହ ସେୟାର କରାଯାଇପାରେ।\n\nଆପଣ କେଉଁ ସୂଚନାକୁ ସେୟାର କରନ୍ତି ତାହା ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ, ""ସେଟିଂସ > ଆପ୍ସ > ଡିଫଲ୍ଟ ଆପ୍ସ > Digital assistant ଆପ""କୁ ଯାଆନ୍ତୁ।" "ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିବାକୁ ଏକ ଆସିଷ୍ଟାଣ୍ଟ ବାଛନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ କିମ୍ବା ଅନୁବାଦ କରିବାକୁ, ସେଟିଂସରେ ଏକ ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପ୍ ଚୟନ କରନ୍ତୁ" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା କିମ୍ବା ଅନୁବାଦ କରିବା ପାଇଁ, ସେଟିଂସରେ ଏକ digital assistant ଆପ ବାଛନ୍ତୁ" "ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିବା ପାଇଁ ଆପଣଙ୍କ ଆସିଷ୍ଟାଣ୍ଟକୁ ବଦଳାନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ କିମ୍ବା ଅନୁବାଦ କରିବାକୁ, ସେଟିଂସରେ ଆପଣଙ୍କ ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପକୁ ବଦଳାନ୍ତୁ" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା କିମ୍ବା ଅନୁବାଦ କରିବା ପାଇଁ, ସେଟିଂସରେ ଆପଣଙ୍କ Digital assistant ଆପକୁ ବଦଳାନ୍ତୁ" "ଏହି ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ ଏଠାରେ ଟାପ୍ କରନ୍ତୁ" "ଏହି ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଅନୁବାଦ କରିବା ପାଇଁ ଏଠାରେ ଟାପ୍ କରନ୍ତୁ" From c57229d4c0b6ba369e9ce4bf9755f595d87c32be Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:23:30 +0000 Subject: [PATCH 27/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: If881db80f5ac6599b60a439e8aaa0bdd71784b65 --- go/quickstep/res/values-or/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go/quickstep/res/values-or/strings.xml b/go/quickstep/res/values-or/strings.xml index df8febf331..db328ece9e 100644 --- a/go/quickstep/res/values-or/strings.xml +++ b/go/quickstep/res/values-or/strings.xml @@ -7,13 +7,13 @@ "Lens" "ବୁଝିଗଲି" "ବାତିଲ୍ କରନ୍ତୁ" - "ସେଟିଂସ୍" + "ସେଟିଂସ" "ସ୍କିନରେ ଥିବା ଟେକ୍ସଟକୁ ଅନୁବାଦ କରନ୍ତୁ କିମ୍ବା ଶୁଣନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଟେକ୍ସଟ୍, ୱେବ୍ ଠିକଣା ଏବଂ ସ୍କ୍ରିନସଟଗୁଡ଼ିକ ପରି ସୂଚନାକୁ Google ସହ ସେୟାର୍ କରାଯାଇପାରେ।\n\nଆପଣ କେଉଁ ସୂଚନା ସେୟାର୍ କରନ୍ତି ତାହା ପରିବର୍ତ୍ତନ କରିବାକୁ, ""ସେଟିଂସ୍ > ଆପ୍ସ > ଡିଫଲ୍ଟ ଆପ୍ସ > ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପ""କୁ ଯାଆନ୍ତୁ।" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଟେକ୍ସଟ, ୱେବ ଠିକଣା ଏବଂ ସ୍କ୍ରିନସଟଗୁଡ଼ିକ ପରି ସୂଚନାକୁ Google ସହ ସେୟାର କରାଯାଇପାରେ।\n\nଆପଣ କେଉଁ ସୂଚନାକୁ ସେୟାର କରନ୍ତି ତାହା ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ, ""ସେଟିଂସ > ଆପ୍ସ > ଡିଫଲ୍ଟ ଆପ୍ସ > Digital assistant ଆପ""କୁ ଯାଆନ୍ତୁ।" "ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିବାକୁ ଏକ ଆସିଷ୍ଟାଣ୍ଟ ବାଛନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ କିମ୍ବା ଅନୁବାଦ କରିବାକୁ, ସେଟିଂସରେ ଏକ ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପ୍ ଚୟନ କରନ୍ତୁ" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା କିମ୍ବା ଅନୁବାଦ କରିବା ପାଇଁ, ସେଟିଂସରେ ଏକ digital assistant ଆପ ବାଛନ୍ତୁ" "ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିବା ପାଇଁ ଆପଣଙ୍କ ଆସିଷ୍ଟାଣ୍ଟକୁ ବଦଳାନ୍ତୁ" - "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ କିମ୍ବା ଅନୁବାଦ କରିବାକୁ, ସେଟିଂସରେ ଆପଣଙ୍କ ଡିଜିଟାଲ୍ ଆସିଷ୍ଟାଣ୍ଟ ଆପକୁ ବଦଳାନ୍ତୁ" + "ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା କିମ୍ବା ଅନୁବାଦ କରିବା ପାଇଁ, ସେଟିଂସରେ ଆପଣଙ୍କ Digital assistant ଆପକୁ ବଦଳାନ୍ତୁ" "ଏହି ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ ଏଠାରେ ଟାପ୍ କରନ୍ତୁ" "ଏହି ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଅନୁବାଦ କରିବା ପାଇଁ ଏଠାରେ ଟାପ୍ କରନ୍ତୁ" From 10791cf6ad5e3abc3697dede8574c2df63eafec2 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:24:08 +0000 Subject: [PATCH 28/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I12007784ccad2cd862bf51324182399b070c3340 --- res/values-or/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index e0f1865ca9..383a9d8e34 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -55,9 +55,9 @@ "ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ" "ଉପଯୋଗୀ ସୂଚନା ଆପଣଙ୍କ ପାଖରେ ସହଜରେ ଉପଲବ୍ଧ" "ଆପଗୁଡ଼ିକୁ ନଖୋଲି ସୂଚନା ପାଇବା ପାଇଁ, ଆପଣ ଆପଣଙ୍କ ମୂଳସ୍କ୍ରିନରେ ୱିଜେଟଗୁଡ଼ିକୁ ଯୋଗ କରିପାରିବେ" - "ୱିଜେଟ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" + "ୱିଜେଟ ସେଟିଂସ ପରିବର୍ତ୍ତନ କରିବାକୁ ଟାପ କରନ୍ତୁ" "ବୁଝିଗଲି" - "ୱିଜେଟ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" + "ୱିଜେଟ ସେଟିଂସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ଆପ୍‌ ଖୋଜନ୍ତୁ" "ଆପ୍‌ ଲୋଡ୍‌ ହେଉଛି..." "\"%1$s\" ସହିତ ମେଳ ହେଉଥିବା କୌଣସି ଆପ୍‌ ମିଳିଲା ନାହିଁ" @@ -79,10 +79,10 @@ "ପୂର୍ବାନୁମାନକୁ ପିନ୍ କରନ୍ତୁ" "ସର୍ଟକଟ୍‍ ଇନଷ୍ଟଲ୍‌ କରନ୍ତୁ" "ୟୁଜରଙ୍କ ବିନା ହସ୍ତକ୍ଷେପରେ ଶର୍ଟକଟ୍‌ ଯୋଡ଼ିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।" - "ହୋମ୍‌ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ପଢ଼ନ୍ତୁ" - "ହୋମରେ ସେଟିଙ୍ଗ ପଢ଼ିବାକୁ ଆପ ଏବଂ ଶର୍ଟକଟକୁ ଅନୁମତି ଦିଏ।" - "ହୋମ୍‌ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ଲେଖନ୍ତୁ" - "ହୋମରେ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ପରିବର୍ତ୍ତନ କରିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।" + "ହୋମ ସେଟିଂସ ଏବଂ ସର୍ଟକଟ ପଢ଼ନ୍ତୁ" + "ହୋମରେ ସେଟିଂସ ଏବଂ ସର୍ଟକଟକୁ ପଢ଼ିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।" + "ହୋମ ସେଟିଂସ ଏବଂ ସର୍ଟକଟ ଲେଖନ୍ତୁ" + "ହୋମରେ ସେଟିଂସ ଏବଂ ସର୍ଟକଟକୁ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।" "ଫୋନ୍‌ କଲ୍‌ କରିବାକୁ %1$sକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" "ୱିଜେଟ୍ ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ" "ସେଟ୍ ଅପ୍ ସମ୍ପୂର୍ଣ୍ଣ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ" @@ -105,7 +105,7 @@ "ଫୋଲ୍ଡର୍: %1$s, %2$d କିମ୍ବା ଅଧିକ ଆଇଟମ୍" "ୱାଲପେପର୍‌" "ୱାଲପେପର୍ ଏବଂ ଷ୍ଟାଇଲ୍" - "ହୋମ୍‌ ସେଟିଂସ୍" + "ହୋମ ସେଟିଂସ" "ଆପଣଙ୍କ ଆଡମିନଙ୍କ ଦ୍ୱାରା ଅକ୍ଷମ କରାଯାଇଛି" "ହୋମ୍‌ ସ୍କ୍ରିନ୍ ବୁଲାଇବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ" "ଯେତେବେଳେ ଫୋନକୁ ବୁଲାଯାଇଥାଏ" @@ -114,7 +114,7 @@ "ବନ୍ଦ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି ଆକ୍ସେସ୍‌ ଆବଶ୍ୟକ ଅଟେ" "ବିଜ୍ଞପ୍ତି ବିନ୍ଦୁ ଦେଖାଇବାକୁ, %1$s ପାଇଁ ଆପ୍‌ ବିଜ୍ଞପ୍ତି ଅନ୍‌ କରନ୍ତୁ" - "ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" + "ସେଟିଂସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି ଡଟ୍‌ଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ" "ହୋମ୍ ସ୍କ୍ରିନରେ ଆପ୍ ଆଇକନଗୁଡ଼ିକୁ ଯୋଗ କରନ୍ତୁ" "ନୂଆ ଆପ୍‌ ପାଇଁ" From a9df81be0653c04e058132674dd6b1e18e4b6b4e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:24:46 +0000 Subject: [PATCH 29/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I4efdb8aab869b8958ca01209f54c5037413f84de --- res/values-or/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 9ee1cf3bf7..b151dec2f5 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -55,9 +55,9 @@ "ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ" "ଉପଯୋଗୀ ସୂଚନା ଆପଣଙ୍କ ପାଖରେ ସହଜରେ ଉପଲବ୍ଧ" "ଆପଗୁଡ଼ିକୁ ନଖୋଲି ସୂଚନା ପାଇବା ପାଇଁ, ଆପଣ ଆପଣଙ୍କ ମୂଳସ୍କ୍ରିନରେ ୱିଜେଟଗୁଡ଼ିକୁ ଯୋଗ କରିପାରିବେ" - "ୱିଜେଟ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" + "ୱିଜେଟ ସେଟିଂସ ପରିବର୍ତ୍ତନ କରିବାକୁ ଟାପ କରନ୍ତୁ" "ବୁଝିଗଲି" - "ୱିଜେଟ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" + "ୱିଜେଟ ସେଟିଂସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ଆପ୍‌ ଖୋଜନ୍ତୁ" "ଆପ୍‌ ଲୋଡ୍‌ ହେଉଛି..." "\"%1$s\" ସହିତ ମେଳ ହେଉଥିବା କୌଣସି ଆପ୍‌ ମିଳିଲା ନାହିଁ" @@ -80,10 +80,10 @@ "ପୂର୍ବାନୁମାନକୁ ପିନ୍ କରନ୍ତୁ" "ସର୍ଟକଟ୍‍ ଇନଷ୍ଟଲ୍‌ କରନ୍ତୁ" "ୟୁଜରଙ୍କ ବିନା ହସ୍ତକ୍ଷେପରେ ଶର୍ଟକଟ୍‌ ଯୋଡ଼ିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।" - "ହୋମ୍‌ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ପଢ଼ନ୍ତୁ" - "ହୋମରେ ସେଟିଙ୍ଗ ପଢ଼ିବାକୁ ଆପ ଏବଂ ଶର୍ଟକଟକୁ ଅନୁମତି ଦିଏ।" - "ହୋମ୍‌ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ଲେଖନ୍ତୁ" - "ହୋମରେ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ପରିବର୍ତ୍ତନ କରିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।" + "ହୋମ ସେଟିଂସ ଏବଂ ସର୍ଟକଟ ପଢ଼ନ୍ତୁ" + "ହୋମରେ ସେଟିଂସ ଏବଂ ସର୍ଟକଟକୁ ପଢ଼ିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।" + "ହୋମ ସେଟିଂସ ଏବଂ ସର୍ଟକଟ ଲେଖନ୍ତୁ" + "ହୋମରେ ସେଟିଂସ ଏବଂ ସର୍ଟକଟକୁ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।" "ଫୋନ୍‌ କଲ୍‌ କରିବାକୁ %1$sକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" "ୱିଜେଟ୍ ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ" "ୱିଜେଟ ସେଟିଂସ" @@ -107,7 +107,7 @@ "ଫୋଲ୍ଡର୍: %1$s, %2$d କିମ୍ବା ଅଧିକ ଆଇଟମ୍" "ୱାଲପେପର୍‌" "ୱାଲପେପର୍ ଏବଂ ଷ୍ଟାଇଲ୍" - "ହୋମ୍‌ ସେଟିଂସ୍" + "ହୋମ ସେଟିଂସ" "ଆପଣଙ୍କ ଆଡମିନଙ୍କ ଦ୍ୱାରା ଅକ୍ଷମ କରାଯାଇଛି" "ହୋମ୍‌ ସ୍କ୍ରିନ୍ ବୁଲାଇବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ" "ଯେତେବେଳେ ଫୋନକୁ ବୁଲାଯାଇଥାଏ" @@ -116,7 +116,7 @@ "ବନ୍ଦ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି ଆକ୍ସେସ୍‌ ଆବଶ୍ୟକ ଅଟେ" "ବିଜ୍ଞପ୍ତି ବିନ୍ଦୁ ଦେଖାଇବାକୁ, %1$s ପାଇଁ ଆପ୍‌ ବିଜ୍ଞପ୍ତି ଅନ୍‌ କରନ୍ତୁ" - "ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" + "ସେଟିଂସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି ଡଟ୍‌ଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ" "ହୋମ୍ ସ୍କ୍ରିନରେ ଆପ୍ ଆଇକନଗୁଡ଼ିକୁ ଯୋଗ କରନ୍ତୁ" "ନୂଆ ଆପ୍‌ ପାଇଁ" From dd74e5e99c8b43fe6b5656eaf5e95df28e75088c Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 2 Mar 2022 19:25:24 +0000 Subject: [PATCH 30/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I5ef1dcb01818ee0a85a3dbe46dd92f21caab3a5c --- res/values-or/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 1149e021d8..56121910b3 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -53,9 +53,9 @@ "ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ" "ଉପଯୋଗୀ ସୂଚନା ଆପଣଙ୍କ ପାଖରେ ସହଜରେ ଉପଲବ୍ଧ" "ଆପଗୁଡ଼ିକୁ ନଖୋଲି ସୂଚନା ପାଇବା ପାଇଁ, ଆପଣ ଆପଣଙ୍କ ମୂଳସ୍କ୍ରିନରେ ୱିଜେଟଗୁଡ଼ିକୁ ଯୋଗ କରିପାରିବେ" - "ୱିଜେଟ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ" + "ୱିଜେଟ ସେଟିଂସ ପରିବର୍ତ୍ତନ କରିବାକୁ ଟାପ କରନ୍ତୁ" "ବୁଝିଗଲି" - "ୱିଜେଟ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" + "ୱିଜେଟ ସେଟିଂସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ଆପ୍‌ ଖୋଜନ୍ତୁ" "ଆପ୍‌ ଲୋଡ୍‌ ହେଉଛି..." "\"%1$s\" ସହିତ ମେଳ ହେଉଥିବା କୌଣସି ଆପ୍‌ ମିଳିଲା ନାହିଁ" @@ -79,10 +79,10 @@ "ପୂର୍ବାନୁମାନକୁ ପିନ୍ କରନ୍ତୁ" "ସର୍ଟକଟ୍‍ ଇନଷ୍ଟଲ୍‌ କରନ୍ତୁ" "ୟୁଜରଙ୍କ ବିନା ହସ୍ତକ୍ଷେପରେ ଶର୍ଟକଟ୍‌ ଯୋଡ଼ିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।" - "ହୋମ୍‌ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ପଢ଼ନ୍ତୁ" - "ହୋମରେ ସେଟିଙ୍ଗ ପଢ଼ିବାକୁ ଆପ ଏବଂ ଶର୍ଟକଟକୁ ଅନୁମତି ଦିଏ।" - "ହୋମ୍‌ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ଲେଖନ୍ତୁ" - "ହୋମରେ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ପରିବର୍ତ୍ତନ କରିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।" + "ହୋମ ସେଟିଂସ ଏବଂ ସର୍ଟକଟ ପଢ଼ନ୍ତୁ" + "ହୋମରେ ସେଟିଂସ ଏବଂ ସର୍ଟକଟକୁ ପଢ଼ିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।" + "ହୋମ ସେଟିଂସ ଏବଂ ସର୍ଟକଟ ଲେଖନ୍ତୁ" + "ହୋମରେ ସେଟିଂସ ଏବଂ ସର୍ଟକଟକୁ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।" "ଫୋନ୍‌ କଲ୍‌ କରିବାକୁ %1$sକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" "ୱିଜେଟ୍ ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ" "ୱିଜେଟ ସେଟିଂସ" @@ -103,7 +103,7 @@ "ଫୋଲ୍ଡର୍: %1$s, %2$d କିମ୍ବା ଅଧିକ ଆଇଟମ୍" "ୱାଲପେପର୍‌" "ୱାଲପେପର୍ ଏବଂ ଷ୍ଟାଇଲ୍" - "ହୋମ୍‌ ସେଟିଂସ୍" + "ହୋମ ସେଟିଂସ" "ଆପଣଙ୍କ ଆଡମିନଙ୍କ ଦ୍ୱାରା ଅକ୍ଷମ କରାଯାଇଛି" "ହୋମ୍‌ ସ୍କ୍ରିନ୍ ବୁଲାଇବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ" "ଯେତେବେଳେ ଫୋନକୁ ବୁଲାଯାଇଥାଏ" @@ -112,7 +112,7 @@ "ବନ୍ଦ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି ଆକ୍ସେସ୍‌ ଆବଶ୍ୟକ ଅଟେ" "ବିଜ୍ଞପ୍ତି ବିନ୍ଦୁ ଦେଖାଇବାକୁ, %1$s ପାଇଁ ଆପ୍‌ ବିଜ୍ଞପ୍ତି ଅନ୍‌ କରନ୍ତୁ" - "ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" + "ସେଟିଂସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି ଡଟ୍‌ଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ" "ହୋମ୍ ସ୍କ୍ରିନରେ ଆପ୍ ଆଇକନଗୁଡ଼ିକୁ ଯୋଗ କରନ୍ତୁ" "ନୂଆ ଆପ୍‌ ପାଇଁ" From b2068f2eda618400e37bffa4a349c3a20bc63791 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Tue, 8 Mar 2022 16:37:35 -0800 Subject: [PATCH 31/37] Never look for matching view in All Apps when swiping up to go home. The swiping up gesture will never return an app in All Apps, so we can ignore All Apps state in those cases. This fixes an edge case where user swipes up and launcher state is still in All Apps. This causes us to animate the icon to where it would be in All Apps, even though by the time the animation starts we are actually in Normal state. Bug: 222124240 Test: open app from all apps then quickly swipe up to go home Change-Id: I756a870660a397d6629aec82e4f5ec4914ed0669 (cherry picked from commit b42e124f5b189eb28d7dd2694ef6dab77985aa07) --- .../com/android/launcher3/QuickstepTransitionManager.java | 4 ++-- .../src/com/android/quickstep/LauncherSwipeHandlerV2.java | 3 ++- src/com/android/launcher3/Launcher.java | 7 +++++-- src/com/android/launcher3/views/FloatingSurfaceView.java | 3 ++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 49b2cc5894..8339985a9c 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -1274,8 +1274,8 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener } } - return mLauncher.getFirstMatchForAppClose(launchCookieItemId, - packageName, UserHandle.of(runningTaskTarget.taskInfo.userId)); + return mLauncher.getFirstMatchForAppClose(launchCookieItemId, packageName, + UserHandle.of(runningTaskTarget.taskInfo.userId), true /* supportsAllAppsState */); } private @NonNull RectF getDefaultWindowTargetRect() { diff --git a/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java b/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java index a72935b250..4fb03c4de4 100644 --- a/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java +++ b/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java @@ -246,7 +246,8 @@ public class LauncherSwipeHandlerV2 extends return mActivity.getFirstMatchForAppClose(launchCookieItemId, runningTaskView.getTask().key.getComponent().getPackageName(), - UserHandle.of(runningTaskView.getTask().key.userId)); + UserHandle.of(runningTaskView.getTask().key.userId), + false /* supportsAllAppsState */); } @Override diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 81a0d5b1be..307b9e734d 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2688,8 +2688,11 @@ public class Launcher extends StatefulActivity implements Launche * @param preferredItemId The id of the preferred item to match to if it exists. * @param packageName The package name of the app to match. * @param user The user of the app to match. + * @param supportsAllAppsState If true and we are in All Apps state, looks for view in All Apps. + * Else we only looks on the workspace. */ - public View getFirstMatchForAppClose(int preferredItemId, String packageName, UserHandle user) { + public View getFirstMatchForAppClose(int preferredItemId, String packageName, UserHandle user, + boolean supportsAllAppsState) { final ItemInfoMatcher preferredItem = (info, cn) -> info != null && info.id == preferredItemId; final ItemInfoMatcher packageAndUserAndApp = (info, cn) -> @@ -2700,7 +2703,7 @@ public class Launcher extends StatefulActivity implements Launche && TextUtils.equals(info.getTargetComponent().getPackageName(), packageName); - if (isInState(LauncherState.ALL_APPS)) { + if (supportsAllAppsState && isInState(LauncherState.ALL_APPS)) { return getFirstMatch(Collections.singletonList(mAppsView.getActiveRecyclerView()), preferredItem, packageAndUserAndApp); } else { diff --git a/src/com/android/launcher3/views/FloatingSurfaceView.java b/src/com/android/launcher3/views/FloatingSurfaceView.java index f32f904981..09c8c64087 100644 --- a/src/com/android/launcher3/views/FloatingSurfaceView.java +++ b/src/com/android/launcher3/views/FloatingSurfaceView.java @@ -159,7 +159,8 @@ public class FloatingSurfaceView extends AbstractFloatingView implements return; } View icon = mLauncher.getFirstMatchForAppClose(-1, - mContract.componentName.getPackageName(), mContract.user); + mContract.componentName.getPackageName(), mContract.user, + false /* supportsAllAppsState */); boolean iconChanged = mIcon != icon; if (iconChanged) { From f6365d5b85f785b67e00da2a95e60ad6af35996c Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Thu, 10 Mar 2022 08:46:01 -0800 Subject: [PATCH 32/37] Add debug logs for bad launcher state. Bug: 223498680 Bug: 221658803 Bug: 223499269 Test: manual Change-Id: I138a7ab031269009fa8ca492cd0bd48085aa4e68 (cherry picked from commit 7ebe209c2119c50cb9767f01d4e2d1c215f734e7) Merged-In: I138a7ab031269009fa8ca492cd0bd48085aa4e68 --- .../launcher3/QuickstepTransitionManager.java | 24 +++++++++++++++ .../BaseRecentsViewStateController.java | 14 +++++++-- .../NoButtonQuickSwitchTouchController.java | 21 ++++++++++++++ .../QuickSwitchTouchController.java | 3 ++ .../android/quickstep/RecentsActivity.java | 4 +++ .../com/android/quickstep/TaskViewUtils.java | 26 +++++++++++++++++ .../fallback/FallbackRecentsView.java | 5 ++++ .../util/RecentsAtomicAnimationFactory.java | 29 ++++++++++++++++++- .../quickstep/views/LauncherRecentsView.java | 6 ++++ src/com/android/launcher3/Launcher.java | 25 ++++++++++++++++ src/com/android/launcher3/Workspace.java | 2 ++ .../launcher3/testing/TestProtocol.java | 2 ++ 12 files changed, 158 insertions(+), 3 deletions(-) diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 49b2cc5894..266ea52ae7 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -44,6 +44,7 @@ import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS; import static com.android.launcher3.model.data.ItemInfo.NO_MATCHING_ID; import static com.android.launcher3.statehandlers.DepthController.DEPTH; import static com.android.launcher3.util.DisplayController.getSingleFrameMs; +import static com.android.launcher3.testing.TestProtocol.BAD_STATE; import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION; import static com.android.launcher3.views.FloatingIconView.getFloatingIconView; import static com.android.quickstep.TaskViewUtils.findTaskViewToLaunch; @@ -75,6 +76,8 @@ import android.os.IBinder; import android.os.Looper; import android.os.SystemProperties; import android.os.UserHandle; +import android.provider.Settings; +import android.util.Log; import android.util.Pair; import android.util.Size; import android.view.SurfaceControl; @@ -133,6 +136,7 @@ import com.android.systemui.shared.system.WindowManagerWrapper; import com.android.wm.shell.startingsurface.IStartingWindowListener; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; @@ -609,9 +613,28 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener RecentsView overview = mLauncher.getOverviewPanel(); ObjectAnimator alpha = ObjectAnimator.ofFloat(overview, RecentsView.CONTENT_ALPHA, alphas); + Log.d(BAD_STATE, "QTM composeViewContentAnimator alphas=" + Arrays.toString(alphas)); + alpha.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + Log.d(BAD_STATE, "QTM composeViewContentAnimator onStart"); + } + + @Override + public void onAnimationCancel(Animator animation) { + float alpha = overview == null ? -1 : RecentsView.CONTENT_ALPHA.get(overview); + Log.d(BAD_STATE, "QTM composeViewContentAnimator onCancel, alpha=" + alpha); + } + + @Override + public void onAnimationEnd(Animator animation) { + Log.d(BAD_STATE, "QTM composeViewContentAnimator onEnd"); + } + }); alpha.setDuration(CONTENT_ALPHA_DURATION); alpha.setInterpolator(LINEAR); anim.play(alpha); + Log.d(BAD_STATE, "QTM composeViewContentAnimator setFreezeVisibility=true"); overview.setFreezeViewVisibility(true); ObjectAnimator scaleAnim = ObjectAnimator.ofFloat(overview, SCALE_PROPERTY, scales); @@ -620,6 +643,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener anim.play(scaleAnim); return () -> { + Log.d(BAD_STATE, "QTM composeViewContentAnimator onEnd setFreezeVisibility=false"); overview.setFreezeViewVisibility(false); SCALE_PROPERTY.set(overview, 1f); mLauncher.getStateManager().reapplyState(); diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index 0eaea83801..84b3839825 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -26,12 +26,14 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_SC import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_X; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_Y; import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW; +import static com.android.launcher3.testing.TestProtocol.BAD_STATE; import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET; import static com.android.quickstep.views.RecentsView.RECENTS_GRID_PROGRESS; import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY; import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_TRANSLATION; import android.util.FloatProperty; +import android.util.Log; import androidx.annotation.NonNull; @@ -65,7 +67,10 @@ public abstract class BaseRecentsViewStateController ADJACENT_PAGE_HORIZONTAL_OFFSET.set(mRecentsView, scaleAndOffset[1]); TASK_SECONDARY_TRANSLATION.set(mRecentsView, 0f); - getContentAlphaProperty().set(mRecentsView, state.overviewUi ? 1f : 0); + float recentsAlpha = state.overviewUi ? 1f : 0; + Log.d(BAD_STATE, "BaseRecentsViewStateController setState state=" + state + + ", alpha=" + recentsAlpha); + getContentAlphaProperty().set(mRecentsView, recentsAlpha); getTaskModalnessProperty().set(mRecentsView, state.getOverviewModalness()); RECENTS_GRID_PROGRESS.set(mRecentsView, state.displayOverviewTasksAsGrid(mLauncher.getDeviceProfile()) ? 1f : 0f); @@ -74,6 +79,8 @@ public abstract class BaseRecentsViewStateController @Override public void setStateWithAnimation(LauncherState toState, StateAnimationConfig config, PendingAnimation builder) { + Log.d(BAD_STATE, "BaseRecentsViewStateController setStateWithAnimation state=" + toState + + ", config.skipOverview=" + config.hasAnimationFlag(SKIP_OVERVIEW)); if (config.hasAnimationFlag(SKIP_OVERVIEW)) { return; } @@ -97,7 +104,10 @@ public abstract class BaseRecentsViewStateController setter.setFloat(mRecentsView, TASK_SECONDARY_TRANSLATION, 0f, config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, LINEAR)); - setter.setFloat(mRecentsView, getContentAlphaProperty(), toState.overviewUi ? 1 : 0, + float recentsAlpha = toState.overviewUi ? 1 : 0; + Log.d(BAD_STATE, "BaseRecentsViewStateController setStateWithAnimationInternal toState=" + + toState + ", alpha=" + recentsAlpha); + setter.setFloat(mRecentsView, getContentAlphaProperty(), recentsAlpha, config.getInterpolator(ANIM_OVERVIEW_FADE, AGGRESSIVE_EASE_IN_OUT)); setter.setFloat( diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java index f6148a7c8f..dadc706cf0 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java @@ -38,6 +38,7 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_S import static com.android.launcher3.states.StateAnimationConfig.SKIP_ALL_ANIMATIONS; import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW; import static com.android.launcher3.states.StateAnimationConfig.SKIP_SCRIM; +import static com.android.launcher3.testing.TestProtocol.BAD_STATE; import static com.android.launcher3.touch.BothAxesSwipeDetector.DIRECTION_RIGHT; import static com.android.launcher3.touch.BothAxesSwipeDetector.DIRECTION_UP; import static com.android.launcher3.util.DisplayController.getSingleFrameMs; @@ -54,6 +55,7 @@ import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.graphics.PointF; +import android.util.Log; import android.view.MotionEvent; import android.view.animation.Interpolator; @@ -224,6 +226,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController, // Set RecentView's initial properties. RECENTS_SCALE_PROPERTY.set(mRecentsView, fromState.getOverviewScaleAndOffset(mLauncher)[0]); ADJACENT_PAGE_HORIZONTAL_OFFSET.set(mRecentsView, 1f); + Log.d(BAD_STATE, "NBQSTC setupOverviewAnimators setContentAlpha=1"); mRecentsView.setContentAlpha(1); mRecentsView.setFullscreenProgress(fromState.getOverviewFullscreenProgress()); mLauncher.getActionsView().getVisibilityAlpha().setValue( @@ -242,6 +245,24 @@ public class NoButtonQuickSwitchTouchController implements TouchController, QUICK_SWITCH.getWorkspaceScrimColor(mLauncher), LINEAR); if (mRecentsView.getTaskViewCount() == 0) { xAnim.addFloat(mRecentsView, CONTENT_ALPHA, 0f, 1f, LINEAR); + Log.d(BAD_STATE, "NBQSTC setupOverviewAnimators from: 0 to: 1"); + xAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + Log.d(BAD_STATE, "NBQSTC setupOverviewAnimators onStart"); + } + + @Override + public void onAnimationCancel(Animator animation) { + float alpha = mRecentsView == null ? -1 : CONTENT_ALPHA.get(mRecentsView); + Log.d(BAD_STATE, "NBQSTC setupOverviewAnimators onCancel, alpha=" + alpha); + } + + @Override + public void onAnimationEnd(Animator animation) { + Log.d(BAD_STATE, "NBQSTC setupOverviewAnimators onEnd"); + } + }); } mXOverviewAnim = xAnim.createPlaybackController(); mXOverviewAnim.dispatchOnStart(); diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java index f0ef9cc2d7..59c2859d12 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java @@ -29,6 +29,7 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TR import static com.android.launcher3.states.StateAnimationConfig.ANIM_VERTICAL_PROGRESS; import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_FADE; import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_TRANSLATE; +import static com.android.launcher3.testing.TestProtocol.BAD_STATE; import static com.android.launcher3.util.SystemUiController.UI_STATE_FULLSCREEN_TASK; import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET; import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY; @@ -36,6 +37,7 @@ import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHO import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; +import android.util.Log; import android.view.MotionEvent; import com.android.launcher3.Launcher; @@ -112,6 +114,7 @@ public class QuickSwitchTouchController extends AbstractStateChangeTouchControll RECENTS_SCALE_PROPERTY.set(mOverviewPanel, QUICK_SWITCH.getOverviewScaleAndOffset(mLauncher)[0] * 0.85f); ADJACENT_PAGE_HORIZONTAL_OFFSET.set(mOverviewPanel, 1f); + Log.d(BAD_STATE, "QuickSwitchTouchController initCurrentAnimation setContentAlpha=1"); mOverviewPanel.setContentAlpha(1); mCurrentAnimation = mLauncher.getStateManager() diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index 1dc49339b6..e6424d7642 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -24,6 +24,7 @@ import static com.android.launcher3.QuickstepTransitionManager.STATUS_BAR_TRANSI import static com.android.launcher3.Utilities.createHomeIntent; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; import static com.android.launcher3.graphics.SysUiScrim.SYSUI_PROGRESS; +import static com.android.launcher3.testing.TestProtocol.BAD_STATE; import static com.android.launcher3.testing.TestProtocol.OVERVIEW_STATE_ORDINAL; import static com.android.quickstep.TaskUtils.taskIsATargetWithMode; import static com.android.quickstep.TaskViewUtils.createRecentsWindowAnimator; @@ -38,6 +39,8 @@ import android.content.res.Configuration; import android.os.Bundle; import android.os.Handler; import android.os.Looper; +import android.util.Log; +import android.view.Display; import android.view.SurfaceControl.Transaction; import android.view.View; import android.window.SplashScreen; @@ -308,6 +311,7 @@ public final class RecentsActivity extends StatefulActivity { protected void onStart() { // Set the alpha to 1 before calling super, as it may get set back to 0 due to // onActivityStart callback. + Log.d(BAD_STATE, "RecentsActivity onStart mFallbackRecentsView.setContentAlpha(1)"); mFallbackRecentsView.setContentAlpha(1); super.onStart(); mFallbackRecentsView.updateLocusId(); diff --git a/quickstep/src/com/android/quickstep/TaskViewUtils.java b/quickstep/src/com/android/quickstep/TaskViewUtils.java index 30e225a932..dbf8acf39b 100644 --- a/quickstep/src/com/android/quickstep/TaskViewUtils.java +++ b/quickstep/src/com/android/quickstep/TaskViewUtils.java @@ -36,6 +36,8 @@ import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLAT import static com.android.launcher3.anim.Interpolators.clampToProgress; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; import static com.android.launcher3.statehandlers.DepthController.DEPTH; +import static com.android.launcher3.testing.TestProtocol.BAD_STATE; +import static com.android.quickstep.TaskAnimationManager.ENABLE_SHELL_TRANSITIONS; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING; @@ -52,6 +54,7 @@ import android.graphics.Matrix.ScaleToFit; import android.graphics.Rect; import android.graphics.RectF; import android.os.Build; +import android.util.Log; import android.view.SurfaceControl; import android.view.View; import android.window.TransitionInfo; @@ -561,6 +564,29 @@ public final class TaskViewUtils { launcherAnim = dp.overviewShowAsGrid ? ObjectAnimator.ofFloat(recentsView, RecentsView.CONTENT_ALPHA, 0) : recentsView.createAdjacentPageAnimForTaskLaunch(taskView); + if (dp.isTablet) { + Log.d(BAD_STATE, "TVU composeRecentsLaunchAnimator alpha=" + 0); + launcherAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + Log.d(BAD_STATE, "TVU composeRecentsLaunchAnimator onStart"); + } + + @Override + public void onAnimationCancel(Animator animation) { + float alpha = recentsView == null + ? -1 + : RecentsView.CONTENT_ALPHA.get(recentsView); + Log.d(BAD_STATE, "TVU composeRecentsLaunchAnimator onCancel, alpha=" + + alpha); + } + + @Override + public void onAnimationEnd(Animator animation) { + Log.d(BAD_STATE, "TVU composeRecentsLaunchAnimator onEnd"); + } + }); + } launcherAnim.setInterpolator(Interpolators.TOUCH_RESPONSE_INTERPOLATOR); launcherAnim.setDuration(RECENTS_LAUNCH_DURATION); diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java index 6d22b17bfb..d7da74b5c6 100644 --- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java +++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java @@ -15,6 +15,7 @@ */ package com.android.quickstep.fallback; +import static com.android.launcher3.testing.TestProtocol.BAD_STATE; import static com.android.quickstep.GestureState.GestureEndTarget.RECENTS; import static com.android.quickstep.fallback.RecentsState.DEFAULT; import static com.android.quickstep.fallback.RecentsState.HOME; @@ -27,6 +28,7 @@ import android.app.ActivityManager.RunningTaskInfo; import android.content.Context; import android.os.Build; import android.util.AttributeSet; +import android.util.Log; import android.view.MotionEvent; import androidx.annotation.Nullable; @@ -219,6 +221,7 @@ public class FallbackRecentsView extends RecentsView implements Launche AlphaProperty property = mDragLayer.getAlphaProperty(ALPHA_INDEX_LAUNCHER_LOAD); if (property.getValue() < 1) { ObjectAnimator anim = ObjectAnimator.ofFloat(property, MultiValueAlpha.VALUE, 1); + + Log.d(BAD_STATE, "Launcher onInitialBindComplete toAlpha=" + 1); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + Log.d(BAD_STATE, "Launcher onInitialBindComplete onStart"); + } + + @Override + public void onAnimationCancel(Animator animation) { + float alpha = mDragLayer == null + ? -1 + : mDragLayer.getAlphaProperty(ALPHA_INDEX_LAUNCHER_LOAD).getValue(); + Log.d(BAD_STATE, "Launcher onInitialBindComplete onCancel, alpha=" + alpha); + } + + @Override + public void onAnimationEnd(Animator animation) { + Log.d(BAD_STATE, "Launcher onInitialBindComplete onEnd"); + } + }); + anim.addListener(AnimatorListeners.forEndCallback(executor::onLoadAnimationCompleted)); anim.start(); } else { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index c8dd003991..f18ff3bee3 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -30,6 +30,7 @@ import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_OVERLAY; import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPELEFT; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPERIGHT; +import static com.android.launcher3.testing.TestProtocol.BAD_STATE; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -1254,6 +1255,7 @@ public class Workspace extends PagedView // different effects based on device performance. On at least one relatively high-end // device I've tried, translating the launcher causes things to get quite laggy. mLauncher.getDragLayer().setTranslationX(transX); + Log.d(BAD_STATE, "Workspace onOverlayScrollChanged DragLayer ALPHA_INDEX_OVERLAY=" + alpha); mLauncher.getDragLayer().getAlphaProperty(ALPHA_INDEX_OVERLAY).setValue(alpha); } diff --git a/src/com/android/launcher3/testing/TestProtocol.java b/src/com/android/launcher3/testing/TestProtocol.java index 673b0116ed..28e7553e78 100644 --- a/src/com/android/launcher3/testing/TestProtocol.java +++ b/src/com/android/launcher3/testing/TestProtocol.java @@ -125,4 +125,6 @@ public final class TestProtocol { public static final String TASK_VIEW_ID_CRASH = "b/195430732"; public static final String NO_DROP_TARGET = "b/195031154"; public static final String NULL_INT_SET = "b/200572078"; + + public static final String BAD_STATE = "b/223498680"; } From 1ccb68a9fdb0e26f3d6b10ef385e9e2023018fd7 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 16 Mar 2022 10:06:25 -0700 Subject: [PATCH 33/37] RESTRICT AUTOMERGE Hide keyboard when launcher is resumed for misbehaving apps Test: Open keyboard in Discord, swipe home; repeat 20 times and ensure keyboard never shows on home Fixes: 207613784 Change-Id: Ie9a84729bf1d0c22783e986bbe93ff222502718c --- src/com/android/launcher3/Launcher.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 0e41c797f5..87eb222c62 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -989,6 +989,9 @@ public class Launcher extends StatefulActivity implements Launche DiscoveryBounce.showForHomeIfNeeded(this); mAppWidgetHost.setActivityResumed(true); + + // Temporary workaround for apps using SHOW_FORCED IME flag. + hideKeyboard(); } private void logStopAndResume(boolean isResume) { From 487a62c361eaf1aba096e7e9780f303537ecb9ae Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 17 Mar 2022 02:59:04 +0000 Subject: [PATCH 34/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I25ea0d6596cffa1269137572a2fe565da433926b --- go/quickstep/res/values-bn/strings.xml | 2 +- go/quickstep/res/values-gu/strings.xml | 2 +- go/quickstep/res/values-kk/strings.xml | 2 +- go/quickstep/res/values-ml/strings.xml | 2 +- go/quickstep/res/values-mn/strings.xml | 2 +- go/quickstep/res/values-ms/strings.xml | 2 +- go/quickstep/res/values-ta/strings.xml | 2 +- go/quickstep/res/values-zu/strings.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go/quickstep/res/values-bn/strings.xml b/go/quickstep/res/values-bn/strings.xml index 4fb714da7a..5485d6bbf5 100644 --- a/go/quickstep/res/values-bn/strings.xml +++ b/go/quickstep/res/values-bn/strings.xml @@ -4,7 +4,7 @@ "অ্যাপ শেয়ার করুন" "শুনুন" "অনুবাদ করুন" - "লেন্স" + "Lens" "বুঝেছি" "বাতিল করুন" "সেটিংস" diff --git a/go/quickstep/res/values-gu/strings.xml b/go/quickstep/res/values-gu/strings.xml index 7c627e18f8..9cd1101e7c 100644 --- a/go/quickstep/res/values-gu/strings.xml +++ b/go/quickstep/res/values-gu/strings.xml @@ -4,7 +4,7 @@ "ઍપ શેર કરો" "સાંભળો" "અનુવાદ કરો" - "લેન્સ" + "Lens" "સમજાઈ ગયું" "રદ કરો" "સેટિંગ" diff --git a/go/quickstep/res/values-kk/strings.xml b/go/quickstep/res/values-kk/strings.xml index b68ab3e86b..9720e2ab0a 100644 --- a/go/quickstep/res/values-kk/strings.xml +++ b/go/quickstep/res/values-kk/strings.xml @@ -4,7 +4,7 @@ "Қолданбаны бөлісу" "Тыңдау" "Аудару" - "Объектив" + "Lens" "ТҮСІНІКТІ" "БАС ТАРТУ" "ПАРАМЕТРЛЕР" diff --git a/go/quickstep/res/values-ml/strings.xml b/go/quickstep/res/values-ml/strings.xml index 04e8b0aa41..d34a5f1b3f 100644 --- a/go/quickstep/res/values-ml/strings.xml +++ b/go/quickstep/res/values-ml/strings.xml @@ -4,7 +4,7 @@ "ആപ്പ് പങ്കിടുക" "കേൾക്കുക" "വിവർത്തനം ചെയ്യുക" - "ലെൻസ്" + "Lens" "മനസ്സിലായി" "റദ്ദാക്കുക" "ക്രമീകരണം" diff --git a/go/quickstep/res/values-mn/strings.xml b/go/quickstep/res/values-mn/strings.xml index cf20677db6..d1144ee648 100644 --- a/go/quickstep/res/values-mn/strings.xml +++ b/go/quickstep/res/values-mn/strings.xml @@ -4,7 +4,7 @@ "Аппыг хуваалцах" "Сонсох" "Орчуулах" - "Дуран" + "Lens" "ОЙЛГОЛОО" "ЦУЦЛАХ" "ТОХИРГОО" diff --git a/go/quickstep/res/values-ms/strings.xml b/go/quickstep/res/values-ms/strings.xml index 8169256bfb..9ecbe99133 100644 --- a/go/quickstep/res/values-ms/strings.xml +++ b/go/quickstep/res/values-ms/strings.xml @@ -4,7 +4,7 @@ "Kongsi Apl" "Dengar" "Terjemah" - "Kanta" + "Lens" "OK" "BATAL" "TETAPAN" diff --git a/go/quickstep/res/values-ta/strings.xml b/go/quickstep/res/values-ta/strings.xml index 896c7c6e8c..89848d5213 100644 --- a/go/quickstep/res/values-ta/strings.xml +++ b/go/quickstep/res/values-ta/strings.xml @@ -4,7 +4,7 @@ "ஆப்ஸைப் பகிருங்கள்" "கேளுங்கள்" "மொழிபெயர்" - "லென்ஸ்" + "Lens" "சரி" "ரத்துசெய்" "அமைப்புகள்" diff --git a/go/quickstep/res/values-zu/strings.xml b/go/quickstep/res/values-zu/strings.xml index 64b163549f..20b7894a1f 100644 --- a/go/quickstep/res/values-zu/strings.xml +++ b/go/quickstep/res/values-zu/strings.xml @@ -4,7 +4,7 @@ "Yabelana nge-App" "Lalela" "Humusha" - "Ilensi" + "Lens" "NGIYITHOLILE" "KHANSELA" "AMASETHINGI" From 7933df7269a1152630f2d7cca591e5ce204f736b Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 17 Mar 2022 02:59:43 +0000 Subject: [PATCH 35/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I480f37dd715c29100722f29e601013255513fb28 --- res/values-ar/strings.xml | 6 +++--- res/values-it/strings.xml | 6 +++--- res/values-pt-rPT/strings.xml | 6 +++--- res/values-ru/strings.xml | 4 ++-- res/values-te/strings.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 8571d46711..e420d87532 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -40,19 +40,19 @@ "يمكنك النقر على الأداة مع الاستمرار لتحريكها على الشاشة الرئيسية." "إضافة إلى الشاشة الرئيسية" "تمت إضافة الأداة %1$s إلى الشاشة الرئيسية." - "{count,plural, =1{أداة واحدة}zero{# أداة}two{أداتان}few{# أدوات}many{# أداة}other{# أداة}}" + "{count,plural, =1{تطبيق مصغّر واحد}zero{# تطبيق مصغّر}two{تطبيقان مصغّران}few{# تطبيقات مصغّرة}many{# تطبيقًا مصغّرًا}other{# تطبيق مصغّر}}" "{count,plural, =1{اختصار واحد}zero{# اختصار}two{اختصاران}few{# اختصارات}many{# اختصارًا}other{# اختصار}}" "%1$s، %2$s" "الأدوات" "بحث" "محو النص من مربّع البحث" "الأدوات والاختصارات غير متاحة." - "لم يتم العثور على أدوات أو اختصارات." + "لم يتم العثور على تطبيقات مصغّرة أو اختصارات." "الأدوات الشخصية" "أدوات العمل" "المحادثات" "معلومات مفيدة في متناول يديك" - "للحصول على معلومات بدون فتح التطبيقات، يمكنك إضافة الأدوات إلى الشاشة الرئيسية." + "للحصول على معلومات بدون فتح التطبيقات، يمكنك إضافة التطبيقات المصغّرة إلى الشاشة الرئيسية." "انقر لتغيير إعدادات الأداة" "حسنًا" "تغيير إعدادات الأداة" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index ff0b6c03ee..2bf2fc717e 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -40,8 +40,8 @@ "Tocca e tieni premuto il widget per spostarlo nella schermata Home" "Aggiungi a schermata Home" "Widget %1$s aggiunto alla schermata Home" - "{count,plural, =1{# widget}one{# widget}other{# widget}}" - "{count,plural, =1{# scorciatoia}one{# scorciatoia}other{# scorciatoie}}" + "{count,plural, =1{# widget}other{# widget}}" + "{count,plural, =1{# scorciatoia}other{# scorciatoie}}" "%1$s, %2$s" "Widget" "Cerca" @@ -90,7 +90,7 @@ "Questa è un\'app di sistema e non può essere disinstallata." "Modifica nome" "App %1$s disattivata" - "{count,plural,offset:1 =1{{app_name} ha # notifica}one{{app_name} ha # notifica}other{{app_name} ha # notifiche}}" + "{count,plural,offset:1 =1{{app_name} ha # notifica}other{{app_name} ha # notifiche}}" "Pagina %1$d di %2$d" "Schermata Home %1$d di %2$d" "Nuova pagina Schermata Home" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 0ddef70e34..85878ad1a1 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -40,8 +40,8 @@ "Toque sem soltar no widget para o mover à volta do ecrã principal" "Adicionar ao ecrã principal" "Widget %1$s adicionado ao ecrã principal" - "{count,plural, =1{# widget}one{# widget(s)}other{# widgets}}" - "{count,plural, =1{# atalho}one{# atalho(s)}other{# atalhos}}" + "{count,plural, =1{# widget}other{# widgets}}" + "{count,plural, =1{# atalho}other{# atalhos}}" "%1$s, %2$s" "Widgets" "Pesquisar" @@ -90,7 +90,7 @@ "É uma app de sistema e não pode ser desinstalada." "Edite o nome" "%1$s desativado" - "{count,plural,offset:1 =1{A app {app_name} tem # notificação}one{A app {app_name} tem # notificação(ões)}other{A app {app_name} tem # notificações}}" + "{count,plural,offset:1 =1{A app {app_name} tem # notificação}other{A app {app_name} tem # notificações}}" "Página %1$d de %2$d" "Ecrã principal %1$d de %2$d" "Nova página do ecrã principal" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 4e72d40f63..07e14f57da 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -41,7 +41,7 @@ "Добавить на главный экран" "Виджет \"%1$s\" добавлен на главный экран" "{count,plural, =1{# виджет}one{# виджет}few{# виджета}many{# виджетов}other{# виджета}}" - "{count,plural, =1{# быстрая команда}one{# быстрая команда}few{# быстрые команды}many{# быстрых команд}other{# быстрой команды}}" + "{count,plural, =1{# ярлык}one{# ярлык}few{# ярлыка}many{# ярлыков}other{# ярлыка}}" "%1$s, %2$s" "Виджеты" "Поиск" @@ -129,7 +129,7 @@ "Добавить на главный экран" "Переместить элемент сюда" "Элемент добавлен на главный экран" - "Объект удален." + "Объект убран." "Отменить" "Переместить элемент" "Переместить в ячейку %1$s %2$s" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index ce364bdef7..73c2e1a390 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -140,7 +140,7 @@ "%1$s గల ఫోల్డర్‌కు జోడించు" "అంశం ఫోల్డర్‌కు జోడించబడింది" "ఈ పేరుతో ఫోల్డర్‌ను క్రియేట్ చేయండి: %1$s" - "ఫోల్డర్ సృష్టించబడింది" + "ఫోల్డర్ క్రియేట్ చేయబడింది" "హోమ్‌స్క్రీన్‌కు తరలించు" "పరిమాణం మార్చు" "వెడల్పును పెంచు" From 9f5fe666e00f70b1393162c8052e814a0b637eb5 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 24 Mar 2022 05:35:02 +0000 Subject: [PATCH 36/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I37c082ae9b255c6a2ec997f2d39b41e1bd432ad7 --- go/quickstep/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/quickstep/res/values-ar/strings.xml b/go/quickstep/res/values-ar/strings.xml index bbe35f5a5f..323e7b09d9 100644 --- a/go/quickstep/res/values-ar/strings.xml +++ b/go/quickstep/res/values-ar/strings.xml @@ -4,7 +4,7 @@ "مشاركة التطبيق" "استماع" "‏ترجمة Google" - "‏عدسة Google" + "عدسة" "حسنًا" "إلغاء" "الإعدادات" From 5b0608e0c2ce86cb6a1c4004870ae22e55dec1be Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 24 Mar 2022 05:35:40 +0000 Subject: [PATCH 37/37] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I2481624f80c74293e15a1b520a1ee471fc741171 --- res/values-ar/strings.xml | 2 +- res/values-iw/strings.xml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index e420d87532..a208704478 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -43,7 +43,7 @@ "{count,plural, =1{تطبيق مصغّر واحد}zero{# تطبيق مصغّر}two{تطبيقان مصغّران}few{# تطبيقات مصغّرة}many{# تطبيقًا مصغّرًا}other{# تطبيق مصغّر}}" "{count,plural, =1{اختصار واحد}zero{# اختصار}two{اختصاران}few{# اختصارات}many{# اختصارًا}other{# اختصار}}" "%1$s، %2$s" - "الأدوات" + "التطبيقات المصغّرة" "بحث" "محو النص من مربّع البحث" "الأدوات والاختصارات غير متاحة." diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 3d0774f10a..1d5edd2558 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -92,8 +92,8 @@ "%1$s מושבתת" "{count,plural,offset:1 =1{לאפליקציה {app_name} יש התראה אחת}two{לאפליקציה {app_name} יש # התראות}many{לאפליקציה {app_name} יש # התראות}other{לאפליקציה {app_name} יש # התראות}}" "‏דף %1$d מתוך %2$d" - "‏מסך דף הבית %1$d מתוך %2$d" - "מסך דף הבית חדש" + "‏מסך הבית %1$d מתוך %2$d" + "מסך הבית חדש" "תיקייה פתוחה, %1$d על %2$d" "יש להקיש כדי לסגור את התיקייה" "יש להקיש כדי לשמור שינוי שם" @@ -128,7 +128,7 @@ "רשימת הווידג\'טים נסגרה" "הוספה למסך דף הבית" "העברת הפריט לכאן" - "הפריט הועבר אל מסך דף הבית" + "הפריט הועבר אל מסך הבית" "הפריט הוסר" "ביטול" "העברת הפריט" @@ -141,7 +141,7 @@ "הפריט נוסף לתיקייה" "יצירת תיקייה עם: %1$s" "התיקייה נוצרה" - "העבר אל מסך דף הבית" + "העבר אל מסך הבית" "שינוי גודל" "הגדלת רוחב" "הגדלת גובה"