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

Commit bd203d05 authored by Nate Myren's avatar Nate Myren Committed by Android (Google) Code Review
Browse files

Merge "Create a API #onActivityLaunched in ActivityInterceptorCallback"

parents 50a7bb0f e8c584a8
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.wm;
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.app.ActivityOptions;
import android.app.TaskInfo;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
@@ -39,6 +40,12 @@ public abstract class ActivityInterceptorCallback {
     */
    public abstract @Nullable Intent intercept(ActivityInterceptorInfo info);

    /**
     * Called when an activity is successfully launched.
     */
    public void onActivityLaunched(TaskInfo taskInfo, ActivityInfo activityInfo) {
    }

    /**
     * The unique id of each interceptor which determines the order it will execute in.
     */
+13 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
import android.annotation.Nullable;
import android.app.ActivityOptions;
import android.app.KeyguardManager;
import android.app.TaskInfo;
import android.app.admin.DevicePolicyManagerInternal;
import android.content.Context;
import android.content.IIntentSender;
@@ -402,4 +403,16 @@ class ActivityStartInterceptor {
        mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags, null /*profilerInfo*/);
        return true;
    }

    /**
     * Called when an activity is successfully launched.
     */
    void onActivityLaunched(TaskInfo taskInfo, ActivityInfo activityInfo) {
        final SparseArray<ActivityInterceptorCallback> callbacks =
                mService.getActivityInterceptorCallbacks();
        for (int i = 0; i < callbacks.size(); i++) {
            final ActivityInterceptorCallback callback = callbacks.valueAt(i);
            callback.onActivityLaunched(taskInfo, activityInfo);
        }
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -1559,6 +1559,10 @@ class ActivityStarter {
            mService.getTaskChangeNotificationController().notifyActivityRestartAttempt(
                    targetTask.getTaskInfo(), homeTaskVisible, clearedTask, visible);
        }

        if (ActivityManager.isStartResultSuccessful(result)) {
            mInterceptor.onActivityLaunched(targetTask.getTaskInfo(), r.info);
        }
    }

    /**
+16 −0
Original line number Diff line number Diff line
@@ -19,6 +19,10 @@ package com.android.server.wm;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_DEFAULT;
import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;

@@ -327,4 +331,16 @@ public class ActivityStartInterceptorTest {
        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
        assertEquals("android.test.second", mInterceptor.mIntent.getAction());
    }

    @Test
    public void testActivityLaunchedCallback_singleCallback() {
        addMockInterceptorCallback(null);

        assertEquals(1, mActivityInterceptorCallbacks.size());
        final ActivityInterceptorCallback callback = mActivityInterceptorCallbacks.valueAt(0);
        spyOn(callback);
        mInterceptor.onActivityLaunched(null, null);

        verify(callback, times(1)).onActivityLaunched(any(), any());
    }
}