From: utzcoz Date: Thu, 11 Jun 2020 12:16:55 +0000 (+0800) Subject: Add back button for freeform window X-Git-Url: http://git.osdn.net/view?p=android-x86%2Fframeworks-base.git;a=commitdiff_plain;h=b30338164bb2c0e69cd6421c8a165c16803ad423 Add back button for freeform window Signed-off-by: utzcoz --- diff --git a/config/hiddenapi-private-dex.txt b/config/hiddenapi-private-dex.txt index 2c4865514c22..1615ff202934 100644 --- a/config/hiddenapi-private-dex.txt +++ b/config/hiddenapi-private-dex.txt @@ -113705,6 +113705,8 @@ Lcom/android/internal/R$drawable;->decor_close_button_dark:I Lcom/android/internal/R$drawable;->decor_close_button_light:I Lcom/android/internal/R$drawable;->decor_maximize_button_dark:I Lcom/android/internal/R$drawable;->decor_maximize_button_light:I +Lcom/android/internal/R$drawable;->decor_back_button_dark:I +Lcom/android/internal/R$drawable;->decor_back_button_light:I Lcom/android/internal/R$drawable;->default_lock_wallpaper:I Lcom/android/internal/R$drawable;->default_wallpaper:I Lcom/android/internal/R$drawable;->dialog_frame:I diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index bac802e28b5f..2b2e5ca3424f 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -1994,7 +1994,12 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind } private void setLightDecorCaptionShade(DecorCaptionView view) { - view.findViewById(R.id.pip_window).setBackgroundResource( + // region @boringdroid + view.findViewById(R.id.back_window).setBackgroundResource( + R.drawable.decor_back_button_light + ); + // endregion + view.findViewById(R.id.pip_window).setBackgroundResource( R.drawable.decor_pip_button_light); view.findViewById(R.id.minimize_window).setBackgroundResource( R.drawable.decor_minimize_button_light); @@ -2005,6 +2010,11 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind } private void setDarkDecorCaptionShade(DecorCaptionView view) { + // region @boringdroid + view.findViewById(R.id.back_window).setBackgroundResource( + R.drawable.decor_back_button_dark + ); + // endregion view.findViewById(R.id.pip_window).setBackgroundResource( R.drawable.decor_pip_button_dark); view.findViewById(R.id.minimize_window).setBackgroundResource( diff --git a/core/java/com/android/internal/widget/DecorCaptionView.java b/core/java/com/android/internal/widget/DecorCaptionView.java index ac05c9b1c916..f4763f6ee1bf 100644 --- a/core/java/com/android/internal/widget/DecorCaptionView.java +++ b/core/java/com/android/internal/widget/DecorCaptionView.java @@ -16,6 +16,7 @@ package com.android.internal.widget; +import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.graphics.Rect; @@ -107,6 +108,10 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, private final Rect mMinimizeRect = new Rect(); private final Rect mPipRect = new Rect(); private View mClickTarget; + // region @boringdroid + private View mBack; + private final Rect mBackRect = new Rect(); + // endregion public DecorCaptionView(Context context) { super(context); @@ -147,6 +152,9 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, // By changing the outline provider to BOUNDS, the window can remove its // background without removing the shadow. mOwner.getDecorView().setOutlineProvider(ViewOutlineProvider.BOUNDS); + // region @boringdroid + mBack = findViewById(R.id.back_window); + // endregion mPip = findViewById(R.id.pip_window); mMinimize = findViewById(R.id.minimize_window); mMaximize = findViewById(R.id.maximize_window); @@ -160,6 +168,11 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, if (ev.getAction() == MotionEvent.ACTION_DOWN) { final int x = (int) ev.getX(); final int y = (int) ev.getY(); + // region @boringdroid + if (mBackRect.contains(x, y)) { + mClickTarget = mBack; + } + // endregion // Only offset y for containment tests because the actual views are already translated. if (mPipRect.contains(x, y)) { mClickTarget = mPip; @@ -311,12 +324,18 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, if (mCaption.getVisibility() != View.GONE) { mCaption.layout(0, 0, mCaption.getMeasuredWidth(), mCaption.getMeasuredHeight()); captionHeight = mCaption.getBottom() - mCaption.getTop(); + // region @boringdroid + mBack.getHitRect(mBackRect); + // endregion mPip.getHitRect(mPipRect); mMinimize.getHitRect(mMinimizeRect); mMaximize.getHitRect(mMaximizeRect); mClose.getHitRect(mCloseRect); } else { captionHeight = 0; + // region @boringdroid + mBackRect.setEmpty(); + // endregion mPipRect.setEmpty(); mMinimizeRect.setEmpty(); mMaximizeRect.setEmpty(); @@ -333,8 +352,12 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, } // This assumes that the caption bar is at the top. - mOwner.notifyRestrictedCaptionAreaCallback(mPip.getLeft(), mMaximize.getTop(), + // region @boringdroid + // mOwner.notifyRestrictedCaptionAreaCallback(mPip.getLeft(), mMaximize.getTop(), + // mClose.getRight(), mClose.getBottom()); + mOwner.notifyRestrictedCaptionAreaCallback(mBack.getLeft(), mBack.getTop(), mClose.getRight(), mClose.getBottom()); + // endregion } /** * Determine if the workspace is entirely covered by the window. @@ -436,6 +459,16 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, @Override public boolean onSingleTapUp(MotionEvent e) { + // region @boringdroid + if (mClickTarget == mBack) { + Window.WindowControllerCallback callback = mOwner.getWindowControllerCallback(); + if (callback instanceof Activity) { + Activity activity = (Activity) callback; + activity.onBackPressed(); + } + return true; + } + // endregion if (mClickTarget == mMinimize) { minimizeWindow(); } else if (mClickTarget == mPip) { diff --git a/core/res/res/drawable/decor_back_button_dark.xml b/core/res/res/drawable/decor_back_button_dark.xml new file mode 100644 index 000000000000..ec0f6a92d230 --- /dev/null +++ b/core/res/res/drawable/decor_back_button_dark.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/core/res/res/drawable/decor_back_button_light.xml b/core/res/res/drawable/decor_back_button_light.xml new file mode 100644 index 000000000000..7b9344a0dce4 --- /dev/null +++ b/core/res/res/drawable/decor_back_button_light.xml @@ -0,0 +1,31 @@ + + + + + + + diff --git a/core/res/res/layout/decor_caption.xml b/core/res/res/layout/decor_caption.xml index 55edbfcfbb91..534d27d825eb 100644 --- a/core/res/res/layout/decor_caption.xml +++ b/core/res/res/layout/decor_caption.xml @@ -30,6 +30,22 @@ android:background="@drawable/decor_caption_title" android:focusable="false" android:descendantFocusability="blocksDescendants" > + +