diff options
| -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); |