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

Commit 87f67a9f authored by Charles Chen's avatar Charles Chen
Browse files

Use Builder for ActivityView

fixes: 162901735
Test: touched tests
Change-Id: I230d65d76b1bc8dfbae304b33579e7eb96d0593d
parent c9b8f551
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -156,8 +156,6 @@ package android.app {
  public class ActivityView extends android.view.ViewGroup {
    ctor public ActivityView(android.content.Context);
    ctor public ActivityView(android.content.Context, android.util.AttributeSet);
    ctor public ActivityView(android.content.Context, android.util.AttributeSet, int);
    ctor public ActivityView(android.content.Context, android.util.AttributeSet, int, boolean);
    ctor public ActivityView(@NonNull android.content.Context, @NonNull android.util.AttributeSet, int, boolean, boolean);
    method public int getVirtualDisplayId();
    method public void onLayout(boolean, int, int, int, int);
@@ -172,6 +170,17 @@ package android.app {
    method public void startActivity(@NonNull android.app.PendingIntent, @Nullable android.content.Intent, @NonNull android.app.ActivityOptions);
  }

  public static final class ActivityView.Builder {
    ctor public ActivityView.Builder(@NonNull android.content.Context);
    method @NonNull public android.app.ActivityView build();
    method @NonNull public android.app.ActivityView.Builder setAttributeSet(@Nullable android.util.AttributeSet);
    method @NonNull public android.app.ActivityView.Builder setDefaultStyle(int);
    method @NonNull public android.app.ActivityView.Builder setDisableSurfaceViewBackgroundLayer(boolean);
    method @NonNull public android.app.ActivityView.Builder setSingleInstance(boolean);
    method @NonNull public android.app.ActivityView.Builder setUsePublicVirtualDisplay(boolean);
    method @NonNull public android.app.ActivityView.Builder setUseTrustedDisplay(boolean);
  }

  public abstract static class ActivityView.StateCallback {
    ctor public ActivityView.StateCallback();
    method public abstract void onActivityViewDestroyed(android.app.ActivityView);
+99 −23
Original line number Diff line number Diff line
@@ -85,16 +85,9 @@ public class ActivityView extends ViewGroup implements android.window.TaskEmbedd
    }

    public ActivityView(Context context, AttributeSet attrs) {
        this(context, attrs, 0 /* defStyle */);
    }

    public ActivityView(Context context, AttributeSet attrs, int defStyle) {
        this(context, attrs, defStyle, false /*singleTaskInstance*/);
    }

    public ActivityView(Context context, AttributeSet attrs, int defStyle,
            boolean singleTaskInstance) {
        this(context, attrs, defStyle, singleTaskInstance, false /* usePublicVirtualDisplay */);
        this(context, attrs, 0 /* defStyle */, false /* singleTaskInstance */,
                false /* usePublicVirtualDisplay */,
                false /* disableSurfaceViewBackgroundLayer */, false /* useTrustedDisplay */);
    }

    /**
@@ -106,21 +99,11 @@ public class ActivityView extends ViewGroup implements android.window.TaskEmbedd
            @NonNull Context context, @NonNull AttributeSet attrs, int defStyle,
            boolean singleTaskInstance, boolean usePublicVirtualDisplay) {
        this(context, attrs, defStyle, singleTaskInstance, usePublicVirtualDisplay,
                false /* disableSurfaceViewBackgroundLayer */);
    }

    /** @hide */
    public ActivityView(
            @NonNull Context context, @NonNull AttributeSet attrs, int defStyle,
            boolean singleTaskInstance, boolean usePublicVirtualDisplay,
            boolean disableSurfaceViewBackgroundLayer) {
        this(context, attrs, defStyle, singleTaskInstance, usePublicVirtualDisplay,
                disableSurfaceViewBackgroundLayer, false /* useTrustedDisplay */);
                false /* disableSurfaceViewBackgroundLayer */,
                false /* useTrustedDisplay */);
    }

    // TODO(b/162901735): Refactor ActivityView with Builder
    /** @hide */
    public ActivityView(
    private ActivityView(
            @NonNull Context context, @NonNull AttributeSet attrs, int defStyle,
            boolean singleTaskInstance, boolean usePublicVirtualDisplay,
            boolean disableSurfaceViewBackgroundLayer, boolean useTrustedDisplay) {
@@ -652,4 +635,97 @@ public class ActivityView extends ViewGroup implements android.window.TaskEmbedd
            mCallback.onBackPressedOnTaskRoot(taskId);
        }
    }

    /** The builder of {@link ActivityView} */
    public static final class Builder {
        private final Context mContext;
        private AttributeSet mAttrs;
        private int mDefStyle;
        private boolean mSingleInstance;
        private boolean mUsePublicVirtualDisplay;
        private boolean mDisableSurfaceViewBackgroundLayer;
        private boolean mUseTrustedDisplay;

        public Builder(@NonNull Context context) {
            mContext = context;
            mAttrs = null;
            mDefStyle = 0;
            mSingleInstance = false;
            mUsePublicVirtualDisplay = false;
            mDisableSurfaceViewBackgroundLayer = false;
            mUseTrustedDisplay = false;
        }

        /** Sets {@link AttributeSet} to the {@link ActivityView}. */
        @NonNull
        public Builder setAttributeSet(@Nullable AttributeSet attrs) {
            mAttrs = attrs;
            return this;
        }

        /**
         * Sets {@code defStyle} to the {@link ActivityView}.
         *
         * @param defaultStyle  An attribute in the current theme that contains a
         *                      reference to a style resource that supplies default values for
         *                      the view. Can be {@code 0} to not look for defaults.
         */
        @NonNull
        public Builder setDefaultStyle(int defaultStyle) {
            mDefStyle = defaultStyle;
            return this;
        }

        /** Sets to {@code true} to make the {@link ActivityView} single instance. */
        @NonNull
        public Builder setSingleInstance(boolean singleInstance) {
            mSingleInstance = singleInstance;
            return this;
        }

        /**
         * Sets to {@code true} to use public virtual display for the {@link ActivityView}.
         * <p>
         * Note that using a public display is not recommended as it exposes it to other
         * applications, but it might be needed for backwards compatibility.
         * </p>
         */
        @NonNull
        public Builder setUsePublicVirtualDisplay(boolean usePublicVirtualDisplay) {
            mUsePublicVirtualDisplay = usePublicVirtualDisplay;
            return this;
        }

        /**
         * Sets to {@code true} to disable {@link SurfaceView} background for the
         * {@link ActivityView}.
         */
        @NonNull
        public Builder setDisableSurfaceViewBackgroundLayer(
                boolean disableSurfaceViewBackgroundLayer) {
            mDisableSurfaceViewBackgroundLayer = disableSurfaceViewBackgroundLayer;
            return this;
        }

        /**
         * Sets to {@code true} to use trusted display for the {@link ActivityView}.
         * <p>
         * It enables the {@link ActivityView} to be focused without users' first touches.
         * </p>
         */
        @NonNull
        public Builder setUseTrustedDisplay(boolean useTrustedDisplay) {
            mUseTrustedDisplay = useTrustedDisplay;
            return this;
        }

        /** Creates an {@link ActivityView} */
        @NonNull
        public ActivityView build() {
            return new ActivityView(mContext, mAttrs, mDefStyle, mSingleInstance,
                    mUsePublicVirtualDisplay, mDisableSurfaceViewBackgroundLayer,
                    mUseTrustedDisplay);
        }
    }
}
+5 −3
Original line number Diff line number Diff line
@@ -303,9 +303,11 @@ public class BubbleExpandedView extends LinearLayout {
                R.dimen.bubble_manage_button_height);
        mSettingsIcon = findViewById(R.id.settings_button);

        mActivityView = new ActivityView(mContext, null /* attrs */, 0 /* defStyle */,
                true /* singleTaskInstance */, false /* usePublicVirtualDisplay*/,
                true /* disableSurfaceViewBackgroundLayer */, true /* useTrustedDisplay */);
        mActivityView = new ActivityView.Builder(mContext)
                .setSingleInstance(true)
                .setDisableSurfaceViewBackgroundLayer(true)
                .setUseTrustedDisplay(true)
                .build();

        // Set ActivityView's alpha value as zero, since there is no view content to be shown.
        setContentVisibility(false);
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ class DetailDialog(
        private const val EXTRA_USE_PANEL = "controls.DISPLAY_IN_PANEL"
    }

    var activityView = ActivityView(context, null, 0, false)
    var activityView = ActivityView(context)

    val stateCallback: ActivityView.StateCallback = object : ActivityView.StateCallback() {
        override fun onActivityViewReady(view: ActivityView) {
+1 −2
Original line number Diff line number Diff line
@@ -609,8 +609,7 @@ public class TaskStackChangedListenerTest {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            mActivityView = new ActivityView(this, null /* attrs */, 0 /* defStyle */,
                    true /* singleTaskInstance */);
            mActivityView = new ActivityView.Builder(this).setSingleInstance(true).build();
            setContentView(mActivityView);

            ViewGroup.LayoutParams layoutParams = mActivityView.getLayoutParams();