• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package android.app;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.content.ComponentName;
22 import android.content.IIntentSender;
23 import android.content.Intent;
24 import android.content.res.Configuration;
25 import android.os.Bundle;
26 import android.os.IBinder;
27 import android.os.SystemClock;
28 import android.service.voice.IVoiceInteractionSession;
29 import android.util.SparseIntArray;
30 
31 import com.android.internal.app.IVoiceInteractor;
32 
33 import java.util.List;
34 
35 /**
36  * Activity manager local system service interface.
37  *
38  * @hide Only for use within the system server.
39  */
40 public abstract class ActivityManagerInternal {
41 
42     /**
43      * Type for {@link #notifyAppTransitionStarting}: The transition was started because we had
44      * the surface saved.
45      */
46     public static final int APP_TRANSITION_SAVED_SURFACE = 0;
47 
48     /**
49      * Type for {@link #notifyAppTransitionStarting}: The transition was started because we drew
50      * the splash screen.
51      */
52     public static final int APP_TRANSITION_SPLASH_SCREEN = 1;
53 
54     /**
55      * Type for {@link #notifyAppTransitionStarting}: The transition was started because we all
56      * app windows were drawn
57      */
58     public static final int APP_TRANSITION_WINDOWS_DRAWN = 2;
59 
60     /**
61      * Type for {@link #notifyAppTransitionStarting}: The transition was started because of a
62      * timeout.
63      */
64     public static final int APP_TRANSITION_TIMEOUT = 3;
65 
66     /**
67      * Type for {@link #notifyAppTransitionStarting}: The transition was started because of a
68      * we drew a task snapshot.
69      */
70     public static final int APP_TRANSITION_SNAPSHOT = 4;
71 
72     /**
73      * Grant Uri permissions from one app to another. This method only extends
74      * permission grants if {@code callingUid} has permission to them.
75      */
grantUriPermissionFromIntent(int callingUid, String targetPkg, Intent intent, int targetUserId)76     public abstract void grantUriPermissionFromIntent(int callingUid, String targetPkg,
77             Intent intent, int targetUserId);
78 
79     /**
80      * Verify that calling app has access to the given provider.
81      */
checkContentProviderAccess(String authority, int userId)82     public abstract String checkContentProviderAccess(String authority, int userId);
83 
84     // Called by the power manager.
onWakefulnessChanged(int wakefulness)85     public abstract void onWakefulnessChanged(int wakefulness);
86 
startIsolatedProcess(String entryPoint, String[] mainArgs, String processName, String abiOverride, int uid, Runnable crashHandler)87     public abstract int startIsolatedProcess(String entryPoint, String[] mainArgs,
88             String processName, String abiOverride, int uid, Runnable crashHandler);
89 
90     /**
91      * Acquires a sleep token for the specified display with the specified tag.
92      *
93      * @param tag A string identifying the purpose of the token (eg. "Dream").
94      * @param displayId The display to apply the sleep token to.
95      */
acquireSleepToken(@onNull String tag, int displayId)96     public abstract SleepToken acquireSleepToken(@NonNull String tag, int displayId);
97 
98     /**
99      * Sleep tokens cause the activity manager to put the top activity to sleep.
100      * They are used by components such as dreams that may hide and block interaction
101      * with underlying activities.
102      */
103     public static abstract class SleepToken {
104 
105         /**
106          * Releases the sleep token.
107          */
release()108         public abstract void release();
109     }
110 
111     /**
112      * Returns home activity for the specified user.
113      *
114      * @param userId ID of the user or {@link android.os.UserHandle#USER_ALL}
115      */
getHomeActivityForUser(int userId)116     public abstract ComponentName getHomeActivityForUser(int userId);
117 
118     /**
119      * Called when a user has been deleted. This can happen during normal device usage
120      * or just at startup, when partially removed users are purged. Any state persisted by the
121      * ActivityManager should be purged now.
122      *
123      * @param userId The user being cleaned up.
124      */
onUserRemoved(int userId)125     public abstract void onUserRemoved(int userId);
126 
onLocalVoiceInteractionStarted(IBinder callingActivity, IVoiceInteractionSession mSession, IVoiceInteractor mInteractor)127     public abstract void onLocalVoiceInteractionStarted(IBinder callingActivity,
128             IVoiceInteractionSession mSession,
129             IVoiceInteractor mInteractor);
130 
131     /**
132      * Callback for window manager to let activity manager know that we are finally starting the
133      * app transition;
134      *
135      * @param reasons A map from stack id to a reason integer why the transition was started,, which
136      *                must be one of the APP_TRANSITION_* values.
137      * @param timestamp The time at which the app transition started in
138      *                  {@link SystemClock#uptimeMillis()} timebase.
139      */
notifyAppTransitionStarting(SparseIntArray reasons, long timestamp)140     public abstract void notifyAppTransitionStarting(SparseIntArray reasons, long timestamp);
141 
142     /**
143      * Callback for window manager to let activity manager know that the app transition was
144      * cancelled.
145      */
notifyAppTransitionCancelled()146     public abstract void notifyAppTransitionCancelled();
147 
148     /**
149      * Callback for window manager to let activity manager know that the app transition is finished.
150      */
notifyAppTransitionFinished()151     public abstract void notifyAppTransitionFinished();
152 
153     /**
154      * Returns the top activity from each of the currently visible stacks. The first entry will be
155      * the focused activity.
156      */
getTopVisibleActivities()157     public abstract List<IBinder> getTopVisibleActivities();
158 
159     /**
160      * Callback for window manager to let activity manager know that docked stack changes its
161      * minimized state.
162      */
notifyDockedStackMinimizedChanged(boolean minimized)163     public abstract void notifyDockedStackMinimizedChanged(boolean minimized);
164 
165     /**
166      * Kill foreground apps from the specified user.
167      */
killForegroundAppsForUser(int userHandle)168     public abstract void killForegroundAppsForUser(int userHandle);
169 
170     /**
171      *  Sets how long a {@link PendingIntent} can be temporarily whitelist to by bypass restrictions
172      *  such as Power Save mode.
173      */
setPendingIntentWhitelistDuration(IIntentSender target, IBinder whitelistToken, long duration)174     public abstract void setPendingIntentWhitelistDuration(IIntentSender target,
175             IBinder whitelistToken, long duration);
176 
177     /**
178      * Allow DeviceIdleController to tell us about what apps are whitelisted.
179      */
setDeviceIdleWhitelist(int[] appids)180     public abstract void setDeviceIdleWhitelist(int[] appids);
181 
182     /**
183      * Update information about which app IDs are on the temp whitelist.
184      */
updateDeviceIdleTempWhitelist(int[] appids, int changingAppId, boolean adding)185     public abstract void updateDeviceIdleTempWhitelist(int[] appids, int changingAppId,
186             boolean adding);
187 
188     /**
189      * Updates and persists the {@link Configuration} for a given user.
190      *
191      * @param values the configuration to update
192      * @param userId the user to update the configuration for
193      */
updatePersistentConfigurationForUser(@onNull Configuration values, int userId)194     public abstract void updatePersistentConfigurationForUser(@NonNull Configuration values,
195             int userId);
196 
197     /**
198      * Start activity {@code intents} as if {@code packageName} on user {@code userId} did it.
199      *
200      * @return error codes used by {@link IActivityManager#startActivity} and its siblings.
201      */
startActivitiesAsPackage(String packageName, int userId, Intent[] intents, Bundle bOptions)202     public abstract int startActivitiesAsPackage(String packageName,
203             int userId, Intent[] intents, Bundle bOptions);
204 
205     /**
206      * Get the procstate for the UID.  The return value will be between
207      * {@link ActivityManager#MIN_PROCESS_STATE} and {@link ActivityManager#MAX_PROCESS_STATE}.
208      * Note if the UID doesn't exist, it'll return {@link ActivityManager#PROCESS_STATE_NONEXISTENT}
209      * (-1).
210      */
getUidProcessState(int uid)211     public abstract int getUidProcessState(int uid);
212 
213     /**
214      * Called when Keyguard flags might have changed.
215      *
216      * @param callback Callback to run after activity visibilities have been reevaluated. This can
217      *                 be used from window manager so that when the callback is called, it's
218      *                 guaranteed that all apps have their visibility updated accordingly.
219      */
notifyKeyguardFlagsChanged(@ullable Runnable callback)220     public abstract void notifyKeyguardFlagsChanged(@Nullable Runnable callback);
221 
222     /**
223      * @return {@code true} if system is ready, {@code false} otherwise.
224      */
isSystemReady()225     public abstract boolean isSystemReady();
226 
227     /**
228      * Called when the trusted state of Keyguard has changed.
229      */
notifyKeyguardTrustedChanged()230     public abstract void notifyKeyguardTrustedChanged();
231 
232     /**
233      * Sets if the given pid has an overlay UI or not.
234      *
235      * @param pid The pid we are setting overlay UI for.
236      * @param hasOverlayUi True if the process has overlay UI.
237      * @see android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY
238      */
setHasOverlayUi(int pid, boolean hasOverlayUi)239     public abstract void setHasOverlayUi(int pid, boolean hasOverlayUi);
240 
241     /**
242      * Called after the network policy rules are updated by
243      * {@link com.android.server.net.NetworkPolicyManagerService} for a specific {@param uid} and
244      * {@param procStateSeq}.
245      */
notifyNetworkPolicyRulesUpdated(int uid, long procStateSeq)246     public abstract void notifyNetworkPolicyRulesUpdated(int uid, long procStateSeq);
247 
248     /**
249      * Called after virtual display Id is updated by
250      * {@link com.android.server.vr.Vr2dDisplay} with a specific
251      * {@param vr2dDisplayId}.
252      */
setVr2dDisplayId(int vr2dDisplayId)253     public abstract void setVr2dDisplayId(int vr2dDisplayId);
254 
255     /**
256      * Saves the current activity manager state and includes the saved state in the next dump of
257      * activity manager.
258      */
saveANRState(String reason)259     public abstract void saveANRState(String reason);
260 
261     /**
262      * Clears the previously saved activity manager ANR state.
263      */
clearSavedANRState()264     public abstract void clearSavedANRState();
265 
266     /**
267      * Set focus on an activity.
268      * @param token The IApplicationToken for the activity
269      */
setFocusedActivity(IBinder token)270     public abstract void setFocusedActivity(IBinder token);
271 
272     /**
273      * Returns {@code true} if {@code uid} is running an activity from {@code packageName}.
274      */
hasRunningActivity(int uid, @Nullable String packageName)275     public abstract boolean hasRunningActivity(int uid, @Nullable String packageName);
276 }
277