ActivityManagerInternal.java revision fe762344f4475a3a336bb46aef2d59c1fabf32ab
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.app;
18
19import android.annotation.NonNull;
20import android.annotation.Nullable;
21import android.content.ComponentName;
22import android.content.IIntentSender;
23import android.content.Intent;
24import android.content.res.Configuration;
25import android.os.Bundle;
26import android.os.IBinder;
27import android.service.voice.IVoiceInteractionSession;
28
29import com.android.internal.app.IVoiceInteractor;
30
31import java.util.List;
32
33/**
34 * Activity manager local system service interface.
35 *
36 * @hide Only for use within the system server.
37 */
38public abstract class ActivityManagerInternal {
39
40    /**
41     * Type for {@link #notifyAppTransitionStarting}: The transition was started because we had
42     * the surface saved.
43     */
44    public static final int APP_TRANSITION_SAVED_SURFACE = 0;
45
46    /**
47     * Type for {@link #notifyAppTransitionStarting}: The transition was started because we drew
48     * the starting window.
49     */
50    public static final int APP_TRANSITION_STARTING_WINDOW = 1;
51
52    /**
53     * Type for {@link #notifyAppTransitionStarting}: The transition was started because we all
54     * app windows were drawn
55     */
56    public static final int APP_TRANSITION_WINDOWS_DRAWN = 2;
57
58    /**
59     * Type for {@link #notifyAppTransitionStarting}: The transition was started because of a
60     * timeout.
61     */
62    public static final int APP_TRANSITION_TIMEOUT = 3;
63
64    // Called by the power manager.
65    public abstract void onWakefulnessChanged(int wakefulness);
66
67    public abstract int startIsolatedProcess(String entryPoint, String[] mainArgs,
68            String processName, String abiOverride, int uid, Runnable crashHandler);
69
70    /**
71     * Acquires a sleep token with the specified tag.
72     *
73     * @param tag A string identifying the purpose of the token (eg. "Dream").
74     */
75    public abstract SleepToken acquireSleepToken(@NonNull String tag);
76
77    /**
78     * Sleep tokens cause the activity manager to put the top activity to sleep.
79     * They are used by components such as dreams that may hide and block interaction
80     * with underlying activities.
81     */
82    public static abstract class SleepToken {
83
84        /**
85         * Releases the sleep token.
86         */
87        public abstract void release();
88    }
89
90    /**
91     * Returns home activity for the specified user.
92     *
93     * @param userId ID of the user or {@link android.os.UserHandle#USER_ALL}
94     */
95    public abstract ComponentName getHomeActivityForUser(int userId);
96
97    /**
98     * Called when a user has been deleted. This can happen during normal device usage
99     * or just at startup, when partially removed users are purged. Any state persisted by the
100     * ActivityManager should be purged now.
101     *
102     * @param userId The user being cleaned up.
103     */
104    public abstract void onUserRemoved(int userId);
105
106    public abstract void onLocalVoiceInteractionStarted(IBinder callingActivity,
107            IVoiceInteractionSession mSession,
108            IVoiceInteractor mInteractor);
109
110    /**
111     * Callback for window manager to let activity manager know that the starting window has been
112     * drawn
113     */
114    public abstract void notifyStartingWindowDrawn();
115
116    /**
117     * Callback for window manager to let activity manager know that we are finally starting the
118     * app transition;
119     *
120     * @param reason The reason why the app transition started. Must be one of the APP_TRANSITION_*
121     *               values.
122     */
123    public abstract void notifyAppTransitionStarting(int reason);
124
125    /**
126     * Callback for window manager to let activity manager know that the app transition was
127     * cancelled.
128     */
129    public abstract void notifyAppTransitionCancelled();
130
131    /**
132     * Callback for window manager to let activity manager know that the app transition is finished.
133     */
134    public abstract void notifyAppTransitionFinished();
135
136    /**
137     * Returns the top activity from each of the currently visible stacks. The first entry will be
138     * the focused activity.
139     */
140    public abstract List<IBinder> getTopVisibleActivities();
141
142    /**
143     * Callback for window manager to let activity manager know that docked stack changes its
144     * minimized state.
145     */
146    public abstract void notifyDockedStackMinimizedChanged(boolean minimized);
147
148    /**
149     * Kill foreground apps from the specified user.
150     */
151    public abstract void killForegroundAppsForUser(int userHandle);
152
153    /**
154     *  Sets how long a {@link PendingIntent} can be temporarily whitelist to by bypass restrictions
155     *  such as Power Save mode.
156     */
157    public abstract void setPendingIntentWhitelistDuration(IIntentSender target, long duration);
158
159    /**
160     * Updates and persists the {@link Configuration} for a given user.
161     *
162     * @param values the configuration to update
163     * @param userId the user to update the configuration for
164     */
165    public abstract void updatePersistentConfigurationForUser(@NonNull Configuration values,
166            int userId);
167
168    /**
169     * Start activity {@code intents} as if {@code packageName} on user {@code userId} did it.
170     *
171     * @return error codes used by {@link IActivityManager#startActivity} and its siblings.
172     */
173    public abstract int startActivitiesAsPackage(String packageName,
174            int userId, Intent[] intents, Bundle bOptions);
175
176    /**
177     * Get the procstate for the UID.  The return value will be between
178     * {@link ActivityManager#MIN_PROCESS_STATE} and {@link ActivityManager#MAX_PROCESS_STATE}.
179     * Note if the UID doesn't exist, it'll return {@link ActivityManager#PROCESS_STATE_NONEXISTENT}
180     * (-1).
181     */
182    public abstract int getUidProcessState(int uid);
183
184    /**
185     * Called when Keyguard flags might have changed.
186     *
187     * @param callback Callback to run after activity visibilities have been reevaluated. This can
188     *                 be used from window manager so that when the callback is called, it's
189     *                 guaranteed that all apps have their visibility updated accordingly.
190     */
191    public abstract void notifyKeyguardFlagsChanged(@Nullable Runnable callback);
192}
193