Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e263e64 authored by Joanne Chung's avatar Joanne Chung Committed by Android (Google) Code Review
Browse files

Merge "Fix system toolbar doesn't use correct theme." into tm-qpr-dev

parents ebb357e1 9325f9b9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ public final class DefaultSelectionToolbarRenderService extends SelectionToolbar

        if (mToolbarCache.indexOfKey(callingUid) < 0) {
            RemoteSelectionToolbar toolbar = new RemoteSelectionToolbar(this,
                    widgetToken, showInfo.getHostInputToken(),
                    widgetToken, showInfo,
                    callbackWrapper, this::transferTouch);
            mToolbarCache.put(callingUid, new Pair<>(widgetToken, toolbar));
        }
+4 −9
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.AnimatedVectorDrawable;
@@ -162,15 +161,14 @@ final class RemoteSelectionToolbar {
    private final Rect mTempContentRectForRoot = new Rect();
    private final int[] mTempCoords = new int[2];

    RemoteSelectionToolbar(Context context, long selectionToolbarToken, IBinder hostInputToken,
    RemoteSelectionToolbar(Context context, long selectionToolbarToken, ShowInfo showInfo,
            SelectionToolbarRenderService.RemoteCallbackWrapper callbackWrapper,
            SelectionToolbarRenderService.TransferTouchListener transferTouchListener) {
        mContext = applyDefaultTheme(context);
        mContext = applyDefaultTheme(context, showInfo.isIsLightTheme());
        mSelectionToolbarToken = selectionToolbarToken;
        mCallbackWrapper = callbackWrapper;
        mTransferTouchListener = transferTouchListener;
        mHostInputToken = hostInputToken;

        mHostInputToken = showInfo.getHostInputToken();
        mContentContainer = createContentContainer(mContext);
        mMarginHorizontal = mContext.getResources()
                .getDimensionPixelSize(R.dimen.floating_toolbar_horizontal_margin);
@@ -1359,12 +1357,9 @@ final class RemoteSelectionToolbar {
    /**
     * Returns a re-themed context with controlled look and feel for views.
     */
    private static Context applyDefaultTheme(Context originalContext) {
        TypedArray a = originalContext.obtainStyledAttributes(new int[]{R.attr.isLightTheme});
        boolean isLightTheme = a.getBoolean(0, true);
    private static Context applyDefaultTheme(Context originalContext, boolean isLightTheme) {
        int themeId =
                isLightTheme ? R.style.Theme_DeviceDefault_Light : R.style.Theme_DeviceDefault;
        a.recycle();
        return new ContextThemeWrapper(originalContext, themeId);
    }

+31 −8
Original line number Diff line number Diff line
@@ -75,6 +75,11 @@ public final class ShowInfo implements Parcelable {
    @NonNull
    private final IBinder mHostInputToken;

    /**
     * If the host application uses light theme.
     */
    private final boolean mIsLightTheme;



    // Code below generated by codegen v1.0.23.
@@ -109,6 +114,8 @@ public final class ShowInfo implements Parcelable {
     * @param hostInputToken
     *   The host application's input token, this allows the remote render service to transfer
     *   the touch focus to the host application.
     * @param isLightTheme
     *   If the host application uses light theme.
     */
    @DataClass.Generated.Member
    public ShowInfo(
@@ -118,7 +125,8 @@ public final class ShowInfo implements Parcelable {
            @NonNull Rect contentRect,
            int suggestedWidth,
            @NonNull Rect viewPortOnScreen,
            @NonNull IBinder hostInputToken) {
            @NonNull IBinder hostInputToken,
            boolean isLightTheme) {
        this.mWidgetToken = widgetToken;
        this.mLayoutRequired = layoutRequired;
        this.mMenuItems = menuItems;
@@ -134,6 +142,7 @@ public final class ShowInfo implements Parcelable {
        this.mHostInputToken = hostInputToken;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mHostInputToken);
        this.mIsLightTheme = isLightTheme;

        // onConstructed(); // You can define this method to get a callback
    }
@@ -196,6 +205,14 @@ public final class ShowInfo implements Parcelable {
        return mHostInputToken;
    }

    /**
     * If the host application uses light theme.
     */
    @DataClass.Generated.Member
    public boolean isIsLightTheme() {
        return mIsLightTheme;
    }

    @Override
    @DataClass.Generated.Member
    public String toString() {
@@ -209,7 +226,8 @@ public final class ShowInfo implements Parcelable {
                "contentRect = " + mContentRect + ", " +
                "suggestedWidth = " + mSuggestedWidth + ", " +
                "viewPortOnScreen = " + mViewPortOnScreen + ", " +
                "hostInputToken = " + mHostInputToken +
                "hostInputToken = " + mHostInputToken + ", " +
                "isLightTheme = " + mIsLightTheme +
        " }";
    }

@@ -232,7 +250,8 @@ public final class ShowInfo implements Parcelable {
                && java.util.Objects.equals(mContentRect, that.mContentRect)
                && mSuggestedWidth == that.mSuggestedWidth
                && java.util.Objects.equals(mViewPortOnScreen, that.mViewPortOnScreen)
                && java.util.Objects.equals(mHostInputToken, that.mHostInputToken);
                && java.util.Objects.equals(mHostInputToken, that.mHostInputToken)
                && mIsLightTheme == that.mIsLightTheme;
    }

    @Override
@@ -249,6 +268,7 @@ public final class ShowInfo implements Parcelable {
        _hash = 31 * _hash + mSuggestedWidth;
        _hash = 31 * _hash + java.util.Objects.hashCode(mViewPortOnScreen);
        _hash = 31 * _hash + java.util.Objects.hashCode(mHostInputToken);
        _hash = 31 * _hash + Boolean.hashCode(mIsLightTheme);
        return _hash;
    }

@@ -258,9 +278,10 @@ public final class ShowInfo implements Parcelable {
        // You can override field parcelling by defining methods like:
        // void parcelFieldName(Parcel dest, int flags) { ... }

        byte flg = 0;
        int flg = 0;
        if (mLayoutRequired) flg |= 0x2;
        dest.writeByte(flg);
        if (mIsLightTheme) flg |= 0x80;
        dest.writeInt(flg);
        dest.writeLong(mWidgetToken);
        dest.writeParcelableList(mMenuItems, flags);
        dest.writeTypedObject(mContentRect, flags);
@@ -280,8 +301,9 @@ public final class ShowInfo implements Parcelable {
        // You can override field unparcelling by defining methods like:
        // static FieldType unparcelFieldName(Parcel in) { ... }

        byte flg = in.readByte();
        int flg = in.readInt();
        boolean layoutRequired = (flg & 0x2) != 0;
        boolean isLightTheme = (flg & 0x80) != 0;
        long widgetToken = in.readLong();
        List<ToolbarMenuItem> menuItems = new java.util.ArrayList<>();
        in.readParcelableList(menuItems, ToolbarMenuItem.class.getClassLoader());
@@ -305,6 +327,7 @@ public final class ShowInfo implements Parcelable {
        this.mHostInputToken = hostInputToken;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mHostInputToken);
        this.mIsLightTheme = isLightTheme;

        // onConstructed(); // You can define this method to get a callback
    }
@@ -324,10 +347,10 @@ public final class ShowInfo implements Parcelable {
    };

    @DataClass.Generated(
            time = 1643186262604L,
            time = 1645108384245L,
            codegenVersion = "1.0.23",
            sourceFile = "frameworks/base/core/java/android/view/selectiontoolbar/ShowInfo.java",
            inputSignatures = "private final  long mWidgetToken\nprivate final  boolean mLayoutRequired\nprivate final @android.annotation.NonNull java.util.List<android.view.selectiontoolbar.ToolbarMenuItem> mMenuItems\nprivate final @android.annotation.NonNull android.graphics.Rect mContentRect\nprivate final  int mSuggestedWidth\nprivate final @android.annotation.NonNull android.graphics.Rect mViewPortOnScreen\nprivate final @android.annotation.NonNull android.os.IBinder mHostInputToken\nclass ShowInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genEqualsHashCode=true)")
            inputSignatures = "private final  long mWidgetToken\nprivate final  boolean mLayoutRequired\nprivate final @android.annotation.NonNull java.util.List<android.view.selectiontoolbar.ToolbarMenuItem> mMenuItems\nprivate final @android.annotation.NonNull android.graphics.Rect mContentRect\nprivate final  int mSuggestedWidth\nprivate final @android.annotation.NonNull android.graphics.Rect mViewPortOnScreen\nprivate final @android.annotation.NonNull android.os.IBinder mHostInputToken\nprivate final  boolean mIsLightTheme\nclass ShowInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genEqualsHashCode=true)")
    @Deprecated
    private void __metadata() {}

+11 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UiThread;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
@@ -107,6 +108,7 @@ public final class RemoteFloatingToolbarPopup implements FloatingToolbarPopup {
    private int mSuggestedWidth;
    private final Rect mScreenViewPort = new Rect();
    private boolean mWidthChanged = true;
    private final boolean mIsLightTheme;

    private final int[] mCoordsOnScreen = new int[2];
    private final int[] mCoordsOnWindow = new int[2];
@@ -116,9 +118,17 @@ public final class RemoteFloatingToolbarPopup implements FloatingToolbarPopup {
        mPopupWindow = createPopupWindow(context);
        mSelectionToolbarManager = context.getSystemService(SelectionToolbarManager.class);
        mSelectionToolbarCallback = new SelectionToolbarCallbackImpl(this);
        mIsLightTheme = isLightTheme(context);
        mFloatingToolbarToken = NO_TOOLBAR_ID;
    }

    private boolean isLightTheme(Context context) {
        TypedArray a = context.obtainStyledAttributes(new int[]{R.attr.isLightTheme});
        boolean isLightTheme = a.getBoolean(0, true);
        a.recycle();
        return isLightTheme;
    }

    @UiThread
    @Override
    public void show(List<MenuItem> menuItems,
@@ -155,7 +165,7 @@ public final class RemoteFloatingToolbarPopup implements FloatingToolbarPopup {
                contentRect,
                suggestWidth,
                mScreenViewPort,
                mParent.getViewRootImpl().getInputToken());
                mParent.getViewRootImpl().getInputToken(), mIsLightTheme);
        if (DEBUG) {
            Log.v(FloatingToolbar.FLOATING_TOOLBAR_TAG,
                    "RemoteFloatingToolbarPopup.show() for " + showInfo);