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

Commit 6e02fa01 authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge changes I4fc1b47e,Icc6d6b25,I8c6bb864

* changes:
  Support for an activity to change and/or query it's associated stack
  Support creating/launching a task with non-fullscreen bounds
  Support finishing a task with any finishing activity in the task.
parents a1a96445 868a5e16
Loading
Loading
Loading
Loading
+37 −7
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.transition.Scene;
import android.transition.TransitionManager;
import android.util.ArrayMap;
import android.util.SuperNotCalledException;
import android.view.Window.WindowStackCallback;
import android.widget.Toolbar;

import com.android.internal.app.IVoiceInteractor;
@@ -672,7 +673,7 @@ public class Activity extends ContextThemeWrapper
        implements LayoutInflater.Factory2,
        Window.Callback, KeyEvent.Callback,
        OnCreateContextMenuListener, ComponentCallbacks2,
        Window.OnWindowDismissedCallback {
        Window.OnWindowDismissedCallback, WindowStackCallback {
    private static final String TAG = "Activity";
    private static final boolean DEBUG_LIFECYCLE = false;

@@ -683,6 +684,13 @@ public class Activity extends ContextThemeWrapper
    /** Start of user-defined activity results. */
    public static final int RESULT_FIRST_USER   = 1;

    /** @hide Task isn't finished when activity is finished */
    public static final int DONT_FINISH_TASK_WITH_ACTIVITY = 0;
    /** @hide Task is finished if the finishing activity is the root of the task */
    public static final int FINISH_TASK_WITH_ROOT_ACTIVITY = 1;
    /** @hide Task is finished along with the finishing activity*/
    public static final int FINISH_TASK_WITH_ACTIVITY = 2;

    static final String FRAGMENTS_TAG = "android:fragments";

    private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState";
@@ -2699,8 +2707,30 @@ public class Activity extends ContextThemeWrapper
     * @hide
     */
    @Override
    public void onWindowDismissed() {
        finish();
    public void onWindowDismissed(boolean finishTask) {
        finish(finishTask ? FINISH_TASK_WITH_ACTIVITY : DONT_FINISH_TASK_WITH_ACTIVITY);
    }


    /** Called to move the window and its activity/task to a different stack container.
     * For example, a window can move between
     * {@link android.app.ActivityManager#FULLSCREEN_WORKSPACE_STACK_ID} stack and
     * {@link android.app.ActivityManager#FREEFORM_WORKSPACE_STACK_ID} stack.
     *
     * @param stackId stack Id to change to.
     * @hide
     */
    @Override
    public void changeWindowStack(int stackId) throws RemoteException {
        ActivityManagerNative.getDefault().moveActivityToStack(mToken, stackId);
    }

    /** Returns the current stack Id for the window.
     * @hide
     */
    @Override
    public int getWindowStackId() throws RemoteException {
        return ActivityManagerNative.getDefault().getActivityStackId(mToken);
    }

    /**
@@ -4848,7 +4878,7 @@ public class Activity extends ContextThemeWrapper
     * Finishes the current activity and specifies whether to remove the task associated with this
     * activity.
     */
    private void finish(boolean finishTask) {
    private void finish(int finishTask) {
        if (mParent == null) {
            int resultCode;
            Intent resultData;
@@ -4879,7 +4909,7 @@ public class Activity extends ContextThemeWrapper
     * onActivityResult().
     */
    public void finish() {
        finish(false);
        finish(DONT_FINISH_TASK_WITH_ACTIVITY);
    }

    /**
@@ -4979,10 +5009,10 @@ public class Activity extends ContextThemeWrapper

    /**
     * Call this when your activity is done and should be closed and the task should be completely
     * removed as a part of finishing the Activity.
     * removed as a part of finishing the root activity of the task.
     */
    public void finishAndRemoveTask() {
        finish(true);
        finish(FINISH_TASK_WITH_ROOT_ACTIVITY);
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -405,7 +405,7 @@ public class ActivityManager {
    public static final int COMPAT_MODE_TOGGLE = 2;

    /**
     * First static stack stack ID.
     * First static stack ID.
     * @hide
     */
    public static final int FIRST_STATIC_STACK_ID = 0;
+46 −3
Original line number Diff line number Diff line
@@ -346,7 +346,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            if (data.readInt() != 0) {
                resultData = Intent.CREATOR.createFromParcel(data);
            }
            boolean finishTask = (data.readInt() != 0);
            int finishTask = data.readInt();
            boolean res = finishActivity(token, resultCode, resultData, finishTask);
            reply.writeNoException();
            reply.writeInt(res ? 1 : 0);
@@ -2636,6 +2636,22 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            reply.writeInt(res ? 1 : 0);
            return true;
        }
        case GET_ACTIVITY_STACK_ID_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            IBinder token = data.readStrongBinder();
            int stackId = getActivityStackId(token);
            reply.writeNoException();
            reply.writeInt(stackId);
            return true;
        }
        case MOVE_ACTIVITY_TO_STACK_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            IBinder token = data.readStrongBinder();
            int stackId = data.readInt();
            moveActivityToStack(token, stackId);
            reply.writeNoException();
            return true;
        }
        }

        return super.onTransact(code, data, reply, flags);
@@ -2949,7 +2965,7 @@ class ActivityManagerProxy implements IActivityManager
        data.recycle();
        return result;
    }
    public boolean finishActivity(IBinder token, int resultCode, Intent resultData, boolean finishTask)
    public boolean finishActivity(IBinder token, int resultCode, Intent resultData, int finishTask)
            throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
@@ -2962,7 +2978,7 @@ class ActivityManagerProxy implements IActivityManager
        } else {
            data.writeInt(0);
        }
        data.writeInt(finishTask ? 1 : 0);
        data.writeInt(finishTask);
        mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
        reply.readException();
        boolean res = reply.readInt() != 0;
@@ -6101,5 +6117,32 @@ class ActivityManagerProxy implements IActivityManager
        return res != 0;
    }

    @Override
    public void moveActivityToStack(IBinder token, int stackId) throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeInterfaceToken(IActivityManager.descriptor);
        data.writeStrongBinder(token);
        data.writeInt(stackId);
        mRemote.transact(MOVE_ACTIVITY_TO_STACK_TRANSACTION, data, reply, 0);
        reply.readException();
        data.recycle();
        reply.recycle();
    }

    @Override
    public int getActivityStackId(IBinder token) throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeInterfaceToken(IActivityManager.descriptor);
        data.writeStrongBinder(token);
        mRemote.transact(GET_ACTIVITY_STACK_ID_TRANSACTION, data, reply, 0);
        reply.readException();
        int stackId = reply.readInt();
        data.recycle();
        reply.recycle();
        return stackId;
    }

    private IBinder mRemote;
}
+4 −2
Original line number Diff line number Diff line
@@ -2555,7 +2555,8 @@ public final class ActivityThread {
            // manager to stop us.
            try {
                ActivityManagerNative.getDefault()
                    .finishActivity(r.token, Activity.RESULT_CANCELED, null, false);
                    .finishActivity(r.token, Activity.RESULT_CANCELED, null,
                            Activity.DONT_FINISH_TASK_WITH_ACTIVITY);
            } catch (RemoteException ex) {
                // Ignore
            }
@@ -3281,7 +3282,8 @@ public final class ActivityThread {
            // just end this activity.
            try {
                ActivityManagerNative.getDefault()
                    .finishActivity(token, Activity.RESULT_CANCELED, null, false);
                    .finishActivity(token, Activity.RESULT_CANCELED, null,
                            Activity.DONT_FINISH_TASK_WITH_ACTIVITY);
            } catch (RemoteException ex) {
            }
        }
+8 −8
Original line number Diff line number Diff line
@@ -733,7 +733,7 @@ public class Dialog implements DialogInterface, Window.Callback,

    /** @hide */
    @Override
    public void onWindowDismissed() {
    public void onWindowDismissed(boolean finishTask) {
        dismiss();
    }

Loading