diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 10fd8b579b162ad868d0dff0f9a75b7988fcbd24..30392d2c9d859eee2c30d41d52270aed229e7397 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -34,6 +34,9 @@ <dimen name="navigation_handle_bottom">10dp</dimen> <dimen name="navigation_handle_sample_horizontal_margin">10dp</dimen> <dimen name="navigation_home_handle_width">108dp</dimen> + <!-- Used while animating the navbar during a long press. --> + <dimen name="navigation_home_handle_additional_width_for_animation">20dp</dimen> + <dimen name="navigation_home_handle_additional_height_for_animation">4dp</dimen> <!-- Size of the nav bar edge panels, should be greater to the edge sensitivity + the drag threshold --> diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl index dc34ef75482522a7c4cab7e156e20a71e46c3c40..26e785d9a7044d696bfa0a9787af78bbc66a9304 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl @@ -144,5 +144,15 @@ interface ISystemUiProxy { */ oneway void onStatusBarTrackpadEvent(in MotionEvent event) = 52; - // Next id = 54 + /** + * Animate the nav bar being long-pressed. + * + * @param isTouchDown {@code true} if the button is starting to be pressed ({@code false} if + * released or canceled) + * @param durationMs how long the animation should take (for the {@code isTouchDown} case, this + * should be the same as the amount of time to trigger a long-press) + */ + oneway void animateNavBarLongPress(boolean isTouchDown, long durationMs) = 54; + + // Next id = 55 } diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SystemGestureExclusionListenerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SystemGestureExclusionListenerCompat.java deleted file mode 100644 index aeb0415c8c4c21f4c34d7fd91b4837c7382586fc..0000000000000000000000000000000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SystemGestureExclusionListenerCompat.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.systemui.shared.system; - -import android.graphics.Region; -import android.os.RemoteException; -import android.util.Log; -import android.view.ISystemGestureExclusionListener; -import android.view.WindowManagerGlobal; - -/** - * Utility class to listen for exclusion rect changes. - */ -public abstract class SystemGestureExclusionListenerCompat { - - private static final String TAG = "SGEListenerCompat"; - - private final int mDisplayId; - - private ISystemGestureExclusionListener mGestureExclusionListener = - new ISystemGestureExclusionListener.Stub() { - @Override - public void onSystemGestureExclusionChanged(int displayId, - Region systemGestureExclusion, Region unrestrictedOrNull) { - if (displayId == mDisplayId) { - Region unrestricted = (unrestrictedOrNull == null) - ? systemGestureExclusion : unrestrictedOrNull; - onExclusionChanged(systemGestureExclusion, unrestricted); - } - } - }; - private boolean mRegistered; - - public SystemGestureExclusionListenerCompat(int displayId) { - mDisplayId = displayId; - } - - /** - * Called when the exclusion region has changed. - * - * TODO: remove, once all subclasses have migrated to - * {@link #onExclusionChanged(Region, Region)}. - */ - public abstract void onExclusionChanged(Region systemGestureExclusion); - - /** - * Called when the exclusion region has changed. - * - * @param systemGestureExclusion the system gesture exclusion to be applied - * @param systemGestureExclusionUnrestricted what would be the system gesture exclusion, if - * there were no restrictions being applied. For logging purposes only. - * - */ - public void onExclusionChanged(Region systemGestureExclusion, - Region systemGestureExclusionUnrestricted) { - // TODO: make abstract, once all subclasses have migrated away from - // onExclusionChanged(Region) - onExclusionChanged(systemGestureExclusion); - } - - /** - * Registers the listener for getting exclusion rect changes. - */ - public void register() { - if (!mRegistered) { - try { - WindowManagerGlobal.getWindowManagerService() - .registerSystemGestureExclusionListener( - mGestureExclusionListener, mDisplayId); - mRegistered = true; - } catch (RemoteException e) { - Log.e(TAG, "Failed to register window manager callbacks", e); - } - } - } - - /** - * Unregisters the receiver if previously registered - */ - public void unregister() { - if (mRegistered) { - try { - WindowManagerGlobal.getWindowManagerService() - .unregisterSystemGestureExclusionListener( - mGestureExclusionListener, mDisplayId); - mRegistered = false; - } catch (RemoteException e) { - Log.e(TAG, "Failed to unregister window manager callbacks", e); - } - } - } -} diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java index ad1c77d055348a3b067fa6e03d0dd6d150545e2c..a985236cb38e0ff6ed219e90b2f210330e3386e4 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java @@ -112,7 +112,6 @@ import com.android.internal.statusbar.LetterboxDetails; import com.android.internal.util.LatencyTracker; import com.android.internal.view.AppearanceRegion; import com.android.systemui.Gefingerpoken; -import com.android.systemui.res.R; import com.android.systemui.assist.AssistManager; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.DisplayId; @@ -130,6 +129,7 @@ import com.android.systemui.navigationbar.gestural.QuickswitchOrientedNavHandle; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.Recents; +import com.android.systemui.res.R; import com.android.systemui.settings.DisplayTracker; import com.android.systemui.settings.UserContextProvider; import com.android.systemui.settings.UserTracker; @@ -398,6 +398,11 @@ public class NavigationBar extends ViewController<NavigationBarView> implements mAssistManagerLazy.get().setAssistantOverridesRequested(invocationTypes); } + @Override + public void animateNavBarLongPress(boolean isTouchDown, long durationMs) { + mView.getHomeHandle().animateLongPress(isTouchDown, durationMs); + } + @Override public void onHomeRotationEnabled(boolean enabled) { mView.getRotationButtonController().setHomeRotationEnabled(enabled); diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java index 10084bd4ccada45dd1f36fdccf95323072a861ac..5fe830e6e4427c0ebb63604581799f51ad33c020 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java @@ -247,6 +247,14 @@ public class ButtonDispatcher { } } + public void animateLongPress(boolean isTouchDown, long durationMs) { + for (int i = 0; i < mViews.size(); i++) { + if (mViews.get(i) instanceof ButtonInterface) { + ((ButtonInterface) mViews.get(i)).animateLongPress(isTouchDown, durationMs); + } + } + } + public void setLongClickable(boolean isLongClickable) { mLongClickable = isLongClickable; final int N = mViews.size(); diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonInterface.java b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonInterface.java index 8d291ddf5f19733510bd707f7ed7b08cd5c98016..356b2f7c7cb873c183944421c71d38567886b3a8 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonInterface.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonInterface.java @@ -30,4 +30,14 @@ public interface ButtonInterface { void setDarkIntensity(float intensity); void setDelayTouchFeedback(boolean shouldDelay); + + /** + * Animate the button being long-pressed. + * + * @param isTouchDown {@code true} if the button is starting to be pressed ({@code false} if + * released or canceled) + * @param durationMs how long the animation should take (for the {@code isTouchDown} case, this + * should be the same as the amount of time to trigger a long-press) + */ + default void animateLongPress(boolean isTouchDown, long durationMs) {} } diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java index 5a22c385cb5192eb5a50001c596e57397f5e508f..5bfc7dc5f7ae27f73123f5a42c10ee2f4f763177 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java @@ -17,6 +17,7 @@ package com.android.systemui.navigationbar.gestural; import android.animation.ArgbEvaluator; +import android.animation.ObjectAnimator; import android.annotation.ColorInt; import android.content.Context; import android.content.res.Resources; @@ -24,12 +25,15 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.util.FloatProperty; import android.view.ContextThemeWrapper; import android.view.View; +import android.view.animation.Interpolator; +import com.android.app.animation.Interpolators; import com.android.settingslib.Utils; -import com.android.systemui.res.R; import com.android.systemui.navigationbar.buttons.ButtonInterface; +import com.android.systemui.res.R; public class NavigationHandle extends View implements ButtonInterface { @@ -38,8 +42,26 @@ public class NavigationHandle extends View implements ButtonInterface { private @ColorInt final int mDarkColor; protected final float mRadius; protected final float mBottom; + private final float mAdditionalWidthForAnimation; + private final float mAdditionalHeightForAnimation; private boolean mRequiresInvalidate; + private ObjectAnimator mPulseAnimator = null; + private float mPulseAnimationProgress; + + private static final FloatProperty<NavigationHandle> PULSE_ANIMATION_PROGRESS = + new FloatProperty<>("pulseAnimationProgress") { + @Override + public Float get(NavigationHandle controller) { + return controller.getPulseAnimationProgress(); + } + + @Override + public void setValue(NavigationHandle controller, float progress) { + controller.setPulseAnimationProgress(progress); + } + }; + public NavigationHandle(Context context) { this(context, null); } @@ -49,6 +71,10 @@ public class NavigationHandle extends View implements ButtonInterface { final Resources res = context.getResources(); mRadius = res.getDimension(R.dimen.navigation_handle_radius); mBottom = res.getDimension(R.dimen.navigation_handle_bottom); + mAdditionalWidthForAnimation = + res.getDimension(R.dimen.navigation_home_handle_additional_width_for_animation); + mAdditionalHeightForAnimation = + res.getDimension(R.dimen.navigation_home_handle_additional_height_for_animation); final int dualToneDarkTheme = Utils.getThemeAttr(context, R.attr.darkIconTheme); final int dualToneLightTheme = Utils.getThemeAttr(context, R.attr.lightIconTheme); @@ -75,23 +101,24 @@ public class NavigationHandle extends View implements ButtonInterface { // Draw that bar int navHeight = getHeight(); - float height = mRadius * 2; - int width = getWidth(); - float y = (navHeight - mBottom - height); - canvas.drawRoundRect(0, y, width, y + height, mRadius, mRadius, mPaint); + float additionalHeight = mAdditionalHeightForAnimation * mPulseAnimationProgress; + float height = mRadius * 2 + additionalHeight; + float additionalWidth = mAdditionalWidthForAnimation * mPulseAnimationProgress; + float width = getWidth() + additionalWidth; + float x = -(additionalWidth / 2); + float y = navHeight - mBottom - height - (additionalHeight / 2); + float adjustedRadius = height / 2; + canvas.drawRoundRect(x, y, width, y + height, adjustedRadius, adjustedRadius, mPaint); } @Override - public void setImageDrawable(Drawable drawable) { - } + public void setImageDrawable(Drawable drawable) {} @Override - public void abortCurrentGesture() { - } + public void abortCurrentGesture() {} @Override - public void setVertical(boolean vertical) { - } + public void setVertical(boolean vertical) {} @Override public void setDarkIntensity(float intensity) { @@ -108,6 +135,43 @@ public class NavigationHandle extends View implements ButtonInterface { } @Override - public void setDelayTouchFeedback(boolean shouldDelay) { + public void setDelayTouchFeedback(boolean shouldDelay) {} + + @Override + public void animateLongPress(boolean isTouchDown, long durationMs) { + if (mPulseAnimator != null) { + mPulseAnimator.cancel(); + } + + Interpolator interpolator; + if (isTouchDown) { + // For now we animate the navbar expanding and contracting so that the navbar is the + // original size by the end of {@code duration}. This is because a screenshot is taken + // at that point and we don't want to capture the larger navbar. + // TODO(b/306400785): Determine a way to exclude navbar from the screenshot. + + // Fraction of the touch down animation to expand; remaining is used to contract again. + float expandFraction = 0.9f; + interpolator = t -> t <= expandFraction + ? Interpolators.clampToProgress(Interpolators.LEGACY, t, 0, expandFraction) + : 1 - Interpolators.clampToProgress( + Interpolators.LINEAR, t, expandFraction, 1); + } else { + interpolator = Interpolators.LEGACY_DECELERATE; + } + + mPulseAnimator = + ObjectAnimator.ofFloat(this, PULSE_ANIMATION_PROGRESS, isTouchDown ? 1 : 0); + mPulseAnimator.setDuration(durationMs).setInterpolator(interpolator); + mPulseAnimator.start(); + } + + private void setPulseAnimationProgress(float pulseAnimationProgress) { + mPulseAnimationProgress = pulseAnimationProgress; + invalidate(); + } + + private float getPulseAnimationProgress() { + return mPulseAnimationProgress; } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index 4465504d12f571ecc331b69fe3aa8ac639808ae5..1334660ea4d5cbfe3f0c0b7a727c76f4803a99b6 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -244,6 +244,12 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis mShadeViewControllerLazy.get().handleExternalTouch(event)); } + @Override + public void animateNavBarLongPress(boolean isTouchDown, long durationMs) { + verifyCallerAndClearCallingIdentityPostMain("animateNavBarLongPress", () -> + notifyAnimateNavBarLongPress(isTouchDown, durationMs)); + } + @Override public void onBackPressed() { verifyCallerAndClearCallingIdentityPostMain("onBackPressed", () -> { @@ -914,6 +920,12 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } } + private void notifyAnimateNavBarLongPress(boolean isTouchDown, long durationMs) { + for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) { + mConnectionCallbacks.get(i).animateNavBarLongPress(isTouchDown, durationMs); + } + } + public void notifyAssistantVisibilityChanged(float visibility) { try { if (mOverviewProxy != null) { @@ -1058,6 +1070,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis default void onAssistantGestureCompletion(float velocity) {} default void startAssistant(Bundle bundle) {} default void setAssistantOverridesRequested(int[] invocationTypes) {} + default void animateNavBarLongPress(boolean isTouchDown, long durationMs) {} } /** diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java index 0b38c4a1b12626c9b7d7e71e73013042f01b2a16..837a13073eeab93ba7ab24e3df1e53cfc963ae2a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java @@ -16,6 +16,8 @@ package com.android.systemui.accessibility; +import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -29,7 +31,6 @@ import static org.mockito.Mockito.verify; import android.animation.ValueAnimator; import android.annotation.Nullable; -import android.app.Instrumentation; import android.content.Context; import android.graphics.Rect; import android.os.Handler; @@ -42,7 +43,6 @@ import android.view.WindowManagerGlobal; import android.view.accessibility.IRemoteMagnificationAnimationCallback; import android.view.animation.AccelerateInterpolator; -import androidx.test.InstrumentationRegistry; import androidx.test.filters.FlakyTest; import androidx.test.filters.LargeTest; @@ -103,7 +103,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { private SpyWindowMagnificationController mController; private WindowMagnificationController mSpyController; private WindowMagnificationAnimationController mWindowMagnificationAnimationController; - private Instrumentation mInstrumentation; + private long mWaitAnimationDuration; private long mWaitPartialAnimationDuration; @@ -113,7 +113,6 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - mInstrumentation = InstrumentationRegistry.getInstrumentation(); final WindowManager wm = mContext.getSystemService(WindowManager.class); mWindowManager = spy(new TestableWindowManager(wm)); mContext.addMockSystemService(Context.WINDOW_SERVICE, mWindowManager); @@ -135,7 +134,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { @After public void tearDown() throws Exception { - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mController.deleteWindowMagnification(); }); } @@ -199,7 +198,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float targetCenterY = DEFAULT_CENTER_Y + 100; resetMockObjects(); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.enableWindowMagnification(targetScale, targetCenterX, targetCenterY, mAnimationCallback2); mCurrentScale.set(mController.getScale()); @@ -252,7 +251,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float targetCenterY = mirrorView.getHeight() / 2.0f; Mockito.reset(mSpyController); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.enableWindowMagnification(targetScale, targetCenterX, targetCenterY, mAnimationCallback); mCurrentScale.set(mController.getScale()); @@ -288,7 +287,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float targetCenterY = DEFAULT_CENTER_Y + 100; Mockito.reset(mSpyController); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.enableWindowMagnification(targetScale, targetCenterX, targetCenterY, mAnimationCallback); mCurrentScale.set(mController.getScale()); @@ -376,7 +375,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float targetCenterY = DEFAULT_CENTER_Y + 100; Mockito.reset(mSpyController); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.enableWindowMagnification(targetScale, targetCenterX, targetCenterY, mAnimationCallback2); mCurrentScale.set(mController.getScale()); @@ -388,7 +387,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { verify(mAnimationCallback2, never()).onResult(anyBoolean()); verify(mAnimationCallback).onResult(false); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { // ValueAnimator.reverse() could not work correctly with the AnimatorTestRule since it // is using SystemClock in reverse() (b/305731398). Therefore, we call end() on the // animator directly to verify the result of animation is correct instead of querying @@ -456,7 +455,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float targetCenterY = DEFAULT_CENTER_Y + 100; Mockito.reset(mSpyController); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.enableWindowMagnification(targetScale, targetCenterX, targetCenterY, mAnimationCallback2); mCurrentScale.set(mController.getScale()); @@ -484,7 +483,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final Rect windowBounds = new Rect(mWindowManager.getCurrentWindowMetrics().getBounds()); Mockito.reset(mSpyController); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.enableWindowMagnification(DEFAULT_SCALE, windowBounds.exactCenterX(), windowBounds.exactCenterY(), offsetRatio, offsetRatio, mAnimationCallback); @@ -512,7 +511,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float targetCenterY = DEFAULT_CENTER_Y + 100; enableWindowMagnificationWithoutAnimation(); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.moveWindowMagnifierToPosition( targetCenterX, targetCenterY, mAnimationCallback); advanceTimeBy(mWaitAnimationDuration); @@ -528,7 +527,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { throws RemoteException { enableWindowMagnificationWithoutAnimation(); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.moveWindowMagnifierToPosition( DEFAULT_CENTER_X + 10, DEFAULT_CENTER_Y + 10, mAnimationCallback); mWindowMagnificationAnimationController.moveWindowMagnifierToPosition( @@ -556,7 +555,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { enableWindowMagnificationAndWaitAnimating(mWaitPartialAnimationDuration, mAnimationCallback); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.moveWindowMagnifierToPosition( targetCenterX, targetCenterY, mAnimationCallback2); advanceTimeBy(mWaitAnimationDuration); @@ -576,7 +575,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { enableWindowMagnificationAndWaitAnimating(mWaitPartialAnimationDuration, mAnimationCallback); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.moveWindowMagnifierToPosition( Float.NaN, Float.NaN, mAnimationCallback2); advanceTimeBy(mWaitAnimationDuration); @@ -648,7 +647,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { mAnimationCallback); Mockito.reset(mSpyController); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.deleteWindowMagnification( mAnimationCallback2); mCurrentScale.set(mController.getScale()); @@ -736,7 +735,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float offsetY = (float) Math.ceil(offsetX * WindowMagnificationController.HORIZONTAL_LOCK_BASE) + 1.0f; - mInstrumentation.runOnMainSync(()-> mController.moveWindowMagnifier(offsetX, offsetY)); + getInstrumentation().runOnMainSync(()-> mController.moveWindowMagnifier(offsetX, offsetY)); verify(mSpyController).moveWindowMagnifier(offsetX, offsetY); verifyFinalSpec(DEFAULT_SCALE, DEFAULT_CENTER_X, DEFAULT_CENTER_Y + offsetY); @@ -751,7 +750,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float offsetY = (float) Math.floor(offsetX * WindowMagnificationController.HORIZONTAL_LOCK_BASE) - 1.0f; - mInstrumentation.runOnMainSync(() -> + getInstrumentation().runOnMainSync(() -> mController.moveWindowMagnifier(offsetX, offsetY)); verify(mSpyController).moveWindowMagnifier(offsetX, offsetY); @@ -767,7 +766,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { (float) Math.ceil(offsetX * WindowMagnificationController.HORIZONTAL_LOCK_BASE); // while diagonal scrolling enabled, // should move with both offsetX and offsetY without regrading offsetY/offsetX - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mController.setDiagonalScrolling(true); mController.moveWindowMagnifier(offsetX, offsetY); }); @@ -782,7 +781,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { final float targetCenterY = DEFAULT_CENTER_Y + 100; enableWindowMagnificationWithoutAnimation(); - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mController.moveWindowMagnifierToPosition(targetCenterX, targetCenterY, mAnimationCallback); advanceTimeBy(mWaitAnimationDuration); @@ -809,7 +808,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { private void enableWindowMagnificationWithoutAnimation( float targetScale, float targetCenterX, float targetCenterY) { - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.enableWindowMagnification( targetScale, targetCenterX, targetCenterY, null); }); @@ -827,7 +826,7 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { float targetCenterX, float targetCenterY, @Nullable IRemoteMagnificationAnimationCallback callback) { - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.enableWindowMagnification( targetScale, targetCenterX, targetCenterY, callback); advanceTimeBy(duration); @@ -835,14 +834,14 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase { } private void deleteWindowMagnificationWithoutAnimation() { - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.deleteWindowMagnification(null); }); } private void deleteWindowMagnificationAndWaitAnimating(long duration, @Nullable IRemoteMagnificationAnimationCallback callback) { - mInstrumentation.runOnMainSync(() -> { + getInstrumentation().runOnMainSync(() -> { mWindowMagnificationAnimationController.deleteWindowMagnification(callback); advanceTimeBy(duration); }); diff --git a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java index 668cd871415cc333a4e3cae71fdc9cff065f9cf9..68082df493e9ced779a4bcab1df01f680130a7d5 100644 --- a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java +++ b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java @@ -75,6 +75,7 @@ public class BackgroundActivityStartController { private static final long ASM_GRACEPERIOD_TIMEOUT_MS = TIMEOUT_MS; private static final int ASM_GRACEPERIOD_MAX_REPEATS = 5; + private static final int NO_PROCESS_UID = -1; public static final ActivityOptions ACTIVITY_OPTIONS_SYSTEM_DEFINED = ActivityOptions.makeBasic() .setPendingIntentBackgroundActivityStartMode( @@ -649,7 +650,7 @@ public class BackgroundActivityStartController { if (PendingIntentRecord.isPendingIntentBalAllowedByPermission(checkedOptions) && ActivityManager.checkComponentPermission( android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND, - state.mRealCallingUid, -1, true) == PackageManager.PERMISSION_GRANTED) { + state.mRealCallingUid, NO_PROCESS_UID, true) == PackageManager.PERMISSION_GRANTED) { return new BalVerdict(BAL_ALLOW_PENDING_INTENT, /*background*/ false, "realCallingUid has BAL permission."); @@ -834,7 +835,7 @@ public class BackgroundActivityStartController { /* caller_activity_class_name */ sourceRecord != null ? sourceRecord.info.name : null, /* target_task_top_activity_uid */ - targetTopActivity != null ? targetTopActivity.getUid() : -1, + targetTopActivity != null ? targetTopActivity.getUid() : NO_PROCESS_UID, /* target_task_top_activity_class_name */ targetTopActivity != null ? targetTopActivity.info.name : null, /* target_task_is_different */ @@ -988,13 +989,13 @@ public class BackgroundActivityStartController { /* caller_activity_class_name */ callerActivityClassName, /* target_task_top_activity_uid */ - topActivity == null ? -1 : topActivity.getUid(), + topActivity == null ? NO_PROCESS_UID : topActivity.getUid(), /* target_task_top_activity_class_name */ topActivity == null ? null : topActivity.info.name, /* target_task_is_different */ false, /* target_activity_uid */ - -1, + NO_PROCESS_UID, /* target_activity_class_name */ null, /* target_intent_action */ diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java index a20f26c1807b2f32c1b5d5769782ed097ed7ff59..f56347fef450d3343d7833b29e8ebd2c5a93d0ee 100644 --- a/telephony/java/com/android/internal/telephony/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/RILConstants.java @@ -618,4 +618,5 @@ public interface RILConstants { int RIL_UNSOL_TRIGGER_IMS_DEREGISTRATION = 1107; int RIL_UNSOL_CONNECTION_SETUP_FAILURE = 1108; int RIL_UNSOL_NOTIFY_ANBR = 1109; + int RIL_UNSOL_IMEI_MAPPING_CHANGED = 1110; } diff --git a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/dark_landscape_credential_view_pin_or_password_emergency_call_button.png b/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/dark_landscape_credential_view_pin_or_password_emergency_call_button.png deleted file mode 100644 index 6bd8595bc097be7e107d6adc8ed22d98df6f8100..0000000000000000000000000000000000000000 Binary files a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/dark_landscape_credential_view_pin_or_password_emergency_call_button.png and /dev/null differ diff --git a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/dark_portrait_credential_view_pin_or_password_emergency_call_button.png b/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/dark_portrait_credential_view_pin_or_password_emergency_call_button.png deleted file mode 100644 index d5d6fb6c6ea4ce4e1e4f08eb74a70140cfa8502b..0000000000000000000000000000000000000000 Binary files a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/dark_portrait_credential_view_pin_or_password_emergency_call_button.png and /dev/null differ diff --git a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/light_landscape_credential_view_pin_or_password_emergency_call_button.png b/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/light_landscape_credential_view_pin_or_password_emergency_call_button.png deleted file mode 100644 index fe8dc6906108d639acb939d5a1cb4752d4eede9b..0000000000000000000000000000000000000000 Binary files a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/light_landscape_credential_view_pin_or_password_emergency_call_button.png and /dev/null differ diff --git a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/light_portrait_credential_view_pin_or_password_emergency_call_button.png b/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/light_portrait_credential_view_pin_or_password_emergency_call_button.png deleted file mode 100644 index ccd8a33ab4fd111a40fdf3e0fb2905b2206c03c6..0000000000000000000000000000000000000000 Binary files a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/phone/light_portrait_credential_view_pin_or_password_emergency_call_button.png and /dev/null differ diff --git a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/dark_landscape_credential_view_pin_or_password_emergency_call_button.png b/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/dark_landscape_credential_view_pin_or_password_emergency_call_button.png deleted file mode 100644 index de84c4aa9dae262ce464ead230426bd13c65fad4..0000000000000000000000000000000000000000 Binary files a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/dark_landscape_credential_view_pin_or_password_emergency_call_button.png and /dev/null differ diff --git a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/dark_portrait_credential_view_pin_or_password_emergency_call_button.png b/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/dark_portrait_credential_view_pin_or_password_emergency_call_button.png deleted file mode 100644 index af9d7cf74acec8949ac8ec7e6ae612891dae169b..0000000000000000000000000000000000000000 Binary files a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/dark_portrait_credential_view_pin_or_password_emergency_call_button.png and /dev/null differ diff --git a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/light_landscape_credential_view_pin_or_password_emergency_call_button.png b/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/light_landscape_credential_view_pin_or_password_emergency_call_button.png deleted file mode 100644 index 33daab9c401d6a88cc1f660e5e7a900f19845647..0000000000000000000000000000000000000000 Binary files a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/light_landscape_credential_view_pin_or_password_emergency_call_button.png and /dev/null differ diff --git a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/light_portrait_credential_view_pin_or_password_emergency_call_button.png b/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/light_portrait_credential_view_pin_or_password_emergency_call_button.png deleted file mode 100644 index 14a799c417576408869ac42f02715e758b62e8a5..0000000000000000000000000000000000000000 Binary files a/vendor/unbundled_google/packages/SystemUIGoogle/tests/screenshotBiometrics/assets/tablet/light_portrait_credential_view_pin_or_password_emergency_call_button.png and /dev/null differ