diff options
| author | 2022-12-19 14:46:35 +0000 | |
|---|---|---|
| committer | 2022-12-22 12:27:30 +0000 | |
| commit | 33cf8ca0bb712a73dbf3c42a1291c52d12aa6bee (patch) | |
| tree | 5757906133c0e6b55c93e15812ddf8f5b5ee109a | |
| parent | 75845880e92f64e463a5a744c6c3c0fa28389d07 (diff) | |
[2/n] Makes EduAnimationController generic
Use generics to reuse EduAnimationController
Fixes: 263113045
Test: Manual
Change-Id: Ifdcf879f3c3f6050622bc893ad639ccbc05d7f23
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DialogAnimationController.java (renamed from libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduAnimationController.java) | 39 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DialogContainerSupplier.java | 36 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayout.java | 19 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManager.java | 12 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayoutTest.java | 4 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManagerTest.java | 5 |
6 files changed, 81 insertions, 34 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DialogAnimationController.java index 3061eab17d24..7475feac5b12 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DialogAnimationController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.wm.shell.compatui.letterboxedu; +package com.android.wm.shell.compatui; import static com.android.internal.R.styleable.WindowAnimation_windowEnterAnimation; import static com.android.internal.R.styleable.WindowAnimation_windowExitAnimation; @@ -38,10 +38,15 @@ import android.view.animation.Animation; import com.android.internal.policy.TransitionAnimation; /** - * Controls the enter/exit animations of the letterbox education. + * Controls the enter/exit a dialog. + * + * @param <T> The {@link DialogContainerSupplier} to use */ -class LetterboxEduAnimationController { - private static final String TAG = "LetterboxEduAnimation"; +public class DialogAnimationController<T extends DialogContainerSupplier> { + + // The alpha of a background is a number between 0 (fully transparent) to 255 (fully opaque). + // 204 is simply 255 * 0.8. + static final int BACKGROUND_DIM_ALPHA = 204; // If shell transitions are enabled, startEnterAnimation will be called after all transitions // have finished, and therefore the start delay should be shorter. @@ -49,6 +54,7 @@ class LetterboxEduAnimationController { private final TransitionAnimation mTransitionAnimation; private final String mPackageName; + private final String mTag; @AnyRes private final int mAnimStyleResId; @@ -57,23 +63,24 @@ class LetterboxEduAnimationController { @Nullable private Animator mBackgroundDimAnimator; - LetterboxEduAnimationController(Context context) { - mTransitionAnimation = new TransitionAnimation(context, /* debug= */ false, TAG); + public DialogAnimationController(Context context, String tag) { + mTransitionAnimation = new TransitionAnimation(context, /* debug= */ false, tag); mAnimStyleResId = (new ContextThemeWrapper(context, android.R.style.ThemeOverlay_Material_Dialog).getTheme()).obtainStyledAttributes( com.android.internal.R.styleable.Window).getResourceId( com.android.internal.R.styleable.Window_windowAnimationStyle, 0); mPackageName = context.getPackageName(); + mTag = tag; } /** * Starts both background dim fade-in animation and the dialog enter animation. */ - void startEnterAnimation(@NonNull LetterboxEduDialogLayout layout, Runnable endCallback) { + public void startEnterAnimation(@NonNull T layout, Runnable endCallback) { // Cancel any previous animation if it's still running. cancelAnimation(); - final View dialogContainer = layout.getDialogContainer(); + final View dialogContainer = layout.getDialogContainerView(); mDialogAnimation = loadAnimation(WindowAnimation_windowEnterAnimation); if (mDialogAnimation == null) { endCallback.run(); @@ -86,8 +93,8 @@ class LetterboxEduAnimationController { endCallback.run(); })); - mBackgroundDimAnimator = getAlphaAnimator(layout.getBackgroundDim(), - /* endAlpha= */ LetterboxEduDialogLayout.BACKGROUND_DIM_ALPHA, + mBackgroundDimAnimator = getAlphaAnimator(layout.getBackgroundDimDrawable(), + /* endAlpha= */ BACKGROUND_DIM_ALPHA, mDialogAnimation.getDuration()); mBackgroundDimAnimator.addListener(getDimAnimatorListener()); @@ -101,11 +108,11 @@ class LetterboxEduAnimationController { /** * Starts both the background dim fade-out animation and the dialog exit animation. */ - void startExitAnimation(@NonNull LetterboxEduDialogLayout layout, Runnable endCallback) { + public void startExitAnimation(@NonNull T layout, Runnable endCallback) { // Cancel any previous animation if it's still running. cancelAnimation(); - final View dialogContainer = layout.getDialogContainer(); + final View dialogContainer = layout.getDialogContainerView(); mDialogAnimation = loadAnimation(WindowAnimation_windowExitAnimation); if (mDialogAnimation == null) { endCallback.run(); @@ -119,8 +126,8 @@ class LetterboxEduAnimationController { endCallback.run(); })); - mBackgroundDimAnimator = getAlphaAnimator(layout.getBackgroundDim(), /* endAlpha= */ 0, - mDialogAnimation.getDuration()); + mBackgroundDimAnimator = getAlphaAnimator(layout.getBackgroundDimDrawable(), + /* endAlpha= */ 0, mDialogAnimation.getDuration()); mBackgroundDimAnimator.addListener(getDimAnimatorListener()); dialogContainer.startAnimation(mDialogAnimation); @@ -130,7 +137,7 @@ class LetterboxEduAnimationController { /** * Cancels all animations and resets the state of the controller. */ - void cancelAnimation() { + public void cancelAnimation() { if (mDialogAnimation != null) { mDialogAnimation.cancel(); mDialogAnimation = null; @@ -145,7 +152,7 @@ class LetterboxEduAnimationController { Animation animation = mTransitionAnimation.loadAnimationAttr(mPackageName, mAnimStyleResId, animAttr, /* translucent= */ false); if (animation == null) { - Log.e(TAG, "Failed to load animation " + animAttr); + Log.e(mTag, "Failed to load animation " + animAttr); } return animation; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DialogContainerSupplier.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DialogContainerSupplier.java new file mode 100644 index 000000000000..7eea446fce26 --- /dev/null +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DialogContainerSupplier.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 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.wm.shell.compatui; + +import android.graphics.drawable.Drawable; +import android.view.View; + +/** + * A component which can provide a {@link View} to use as a container for a Dialog + */ +public interface DialogContainerSupplier { + + /** + * @return The {@link View} to use as a container for a Dialog + */ + View getDialogContainerView(); + + /** + * @return The {@link Drawable} to use as background of the dialog. + */ + Drawable getBackgroundDimDrawable(); +} diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayout.java index 2e0b09e9d230..9232f36cf939 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayout.java @@ -26,6 +26,7 @@ import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; import com.android.wm.shell.R; +import com.android.wm.shell.compatui.DialogContainerSupplier; /** * Container for Letterbox Education Dialog and background dim. @@ -33,11 +34,7 @@ import com.android.wm.shell.R; * <p>This layout should fill the entire task and the background around the dialog acts as the * background dim which dismisses the dialog when clicked. */ -class LetterboxEduDialogLayout extends ConstraintLayout { - - // The alpha of a background is a number between 0 (fully transparent) to 255 (fully opaque). - // 204 is simply 255 * 0.8. - static final int BACKGROUND_DIM_ALPHA = 204; +class LetterboxEduDialogLayout extends ConstraintLayout implements DialogContainerSupplier { private View mDialogContainer; private TextView mDialogTitle; @@ -60,16 +57,18 @@ class LetterboxEduDialogLayout extends ConstraintLayout { super(context, attrs, defStyleAttr, defStyleRes); } - View getDialogContainer() { + @Override + public View getDialogContainerView() { return mDialogContainer; } - TextView getDialogTitle() { - return mDialogTitle; + @Override + public Drawable getBackgroundDimDrawable() { + return mBackgroundDim; } - Drawable getBackgroundDim() { - return mBackgroundDim; + TextView getDialogTitle() { + return mDialogTitle; } /** diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManager.java index 867d0ef732ac..c14c009721a1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManager.java @@ -37,6 +37,7 @@ import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.DockStateReader; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.compatui.CompatUIWindowManagerAbstract; +import com.android.wm.shell.compatui.DialogAnimationController; import com.android.wm.shell.transition.Transitions; /** @@ -63,7 +64,7 @@ public class LetterboxEduWindowManager extends CompatUIWindowManagerAbstract { */ private final SharedPreferences mSharedPreferences; - private final LetterboxEduAnimationController mAnimationController; + private final DialogAnimationController<LetterboxEduDialogLayout> mAnimationController; private final Transitions mTransitions; @@ -96,14 +97,17 @@ public class LetterboxEduWindowManager extends CompatUIWindowManagerAbstract { DisplayLayout displayLayout, Transitions transitions, Runnable onDismissCallback, DockStateReader dockStateReader) { this(context, taskInfo, syncQueue, taskListener, displayLayout, transitions, - onDismissCallback, new LetterboxEduAnimationController(context), dockStateReader); + onDismissCallback, + new DialogAnimationController<>(context, /* tag */ "LetterboxEduWindowManager"), + dockStateReader); } @VisibleForTesting LetterboxEduWindowManager(Context context, TaskInfo taskInfo, SyncTransactionQueue syncQueue, ShellTaskOrganizer.TaskListener taskListener, DisplayLayout displayLayout, Transitions transitions, Runnable onDismissCallback, - LetterboxEduAnimationController animationController, DockStateReader dockStateReader) { + DialogAnimationController<LetterboxEduDialogLayout> animationController, + DockStateReader dockStateReader) { super(context, taskInfo, syncQueue, taskListener, displayLayout); mTransitions = transitions; mOnDismissCallback = onDismissCallback; @@ -160,7 +164,7 @@ public class LetterboxEduWindowManager extends CompatUIWindowManagerAbstract { if (mLayout == null) { return; } - final View dialogContainer = mLayout.getDialogContainer(); + final View dialogContainer = mLayout.getDialogContainerView(); MarginLayoutParams marginParams = (MarginLayoutParams) dialogContainer.getLayoutParams(); final Rect taskBounds = getTaskBounds(); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayoutTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayoutTest.java index 1dee88c43806..a58620dfc6dc 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayoutTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduDialogLayoutTest.java @@ -68,11 +68,11 @@ public class LetterboxEduDialogLayoutTest extends ShellTestCase { @Test public void testOnFinishInflate() { - assertEquals(mLayout.getDialogContainer(), + assertEquals(mLayout.getDialogContainerView(), mLayout.findViewById(R.id.letterbox_education_dialog_container)); assertEquals(mLayout.getDialogTitle(), mLayout.findViewById(R.id.letterbox_education_dialog_title)); - assertEquals(mLayout.getBackgroundDim(), mLayout.getBackground()); + assertEquals(mLayout.getBackgroundDimDrawable(), mLayout.getBackground()); assertEquals(mLayout.getBackground().getAlpha(), 0); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManagerTest.java index 16517c0a0010..14190f18929c 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManagerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterboxedu/LetterboxEduWindowManagerTest.java @@ -56,6 +56,7 @@ import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.DockStateReader; import com.android.wm.shell.common.SyncTransactionQueue; +import com.android.wm.shell.compatui.DialogAnimationController; import com.android.wm.shell.transition.Transitions; import org.junit.After; @@ -98,7 +99,7 @@ public class LetterboxEduWindowManagerTest extends ShellTestCase { @Captor private ArgumentCaptor<Runnable> mRunOnIdleCaptor; - @Mock private LetterboxEduAnimationController mAnimationController; + @Mock private DialogAnimationController<LetterboxEduDialogLayout> mAnimationController; @Mock private SyncTransactionQueue mSyncTransactionQueue; @Mock private ShellTaskOrganizer.TaskListener mTaskListener; @Mock private SurfaceControlViewHost mViewHost; @@ -366,7 +367,7 @@ public class LetterboxEduWindowManagerTest extends ShellTestCase { assertThat(params.width).isEqualTo(expectedWidth); assertThat(params.height).isEqualTo(expectedHeight); MarginLayoutParams dialogParams = - (MarginLayoutParams) layout.getDialogContainer().getLayoutParams(); + (MarginLayoutParams) layout.getDialogContainerView().getLayoutParams(); int verticalMargin = (int) mContext.getResources().getDimension( R.dimen.letterbox_education_dialog_margin); assertThat(dialogParams.topMargin).isEqualTo(verticalMargin + expectedExtraTopMargin); |