19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
194b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport com.android.internal.app.IUsageStats;
204b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport com.android.internal.os.PkgUsageStats;
21b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport com.android.internal.util.MemInfoReader;
224b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent;
26f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapuimport android.content.pm.ApplicationInfo;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ConfigurationInfo;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.IPackageDataObserver;
295320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackbornimport android.content.pm.PackageManager;
304120375d46091df8527bb701882e056fbb0e6b06Dianne Hackbornimport android.content.pm.UserInfo;
315ef44b7566566db08b62245cbb9002b548071603Kenny Rootimport android.content.res.Resources;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap;
33b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.graphics.Point;
3498365d7663cbd82979a5700faf0050220b01084dJeff Brownimport android.hardware.display.DisplayManager;
35bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brownimport android.hardware.display.DisplayManagerGlobal;
36742a67127366c376fdf188ff99ba30b27d3bf90cAmith Yamasaniimport android.os.Binder;
378078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.os.Bundle;
384f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackbornimport android.os.Debug;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
425320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackbornimport android.os.Process;
434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport android.os.RemoteException;
448d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport android.os.ServiceManager;
452c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackbornimport android.os.SystemProperties;
46f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackbornimport android.os.UserHandle;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
485ef44b7566566db08b62245cbb9002b548071603Kenny Rootimport android.util.DisplayMetrics;
498d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport android.util.Log;
50b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.util.Slog;
51b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.view.Display;
525ef44b7566566db08b62245cbb9002b548071603Kenny Root
538d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport java.util.HashMap;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List;
558d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport java.util.Map;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interact with the overall activities running in the system.
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ActivityManager {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static String TAG = "ActivityManager";
6243a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato    private static boolean localLOGV = false;
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final Context mContext;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final Handler mHandler;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
67a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
68a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
69a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * start had to be canceled.
70a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
71a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
72a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_CANCELED = -6;
73a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
74a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
75a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
76a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * thing being started is not an activity.
77a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
78a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
79a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_NOT_ACTIVITY = -5;
80a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
81a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
82a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
83a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * caller does not have permission to start the activity.
84a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
85a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
86a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_PERMISSION_DENIED = -4;
87a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
88a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
89a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
90a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * caller has requested both to forward a result and to receive
91a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * a result.
92a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
93a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
94a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FORWARD_AND_REQUEST_CONFLICT = -3;
95a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
96a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
97a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
98a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * requested class is not found.
99a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
100a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
101a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_CLASS_NOT_FOUND = -2;
102a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
103a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
104a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
105a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * given Intent could not be resolved to an activity.
106a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
107a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
108a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_INTENT_NOT_RESOLVED = -1;
109a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
110a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
111a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: the activity was started
112a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * successfully as normal.
113a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
114a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
115a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_SUCCESS = 0;
116a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
117a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
118a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: the caller asked that the Intent not
119a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * be executed if it is the recipient, and that is indeed the case.
120a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
121a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
122a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_RETURN_INTENT_TO_CALLER = 1;
123a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
124a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
125a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: activity wasn't really started, but
126a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * a task was simply brought to the foreground.
127a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
128a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
129a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_TASK_TO_FRONT = 2;
130a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
131a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
132a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: activity wasn't really started, but
133a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * the given Intent was given to the existing top activity.
134a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
135a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
136a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_DELIVERED_TO_TOP = 3;
137a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
138a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
139a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: request was canceled because
140a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * app switches are temporarily canceled to ensure the user's last request
141a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * (such as pressing home) is performed.
142a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
143a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
144a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_SWITCHES_CANCELED = 4;
145a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
146a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
147a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Flag for IActivityManaqer.startActivity: do special start mode where
148a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * a new activity is launched only if it is needed.
149a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
150a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
151a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FLAG_ONLY_IF_NEEDED = 1<<0;
152a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
153a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
154a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Flag for IActivityManaqer.startActivity: launch the app for
155a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * debugging.
156a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
157a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
158a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FLAG_DEBUG = 1<<1;
159a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
160a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
161a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Flag for IActivityManaqer.startActivity: launch the app for
162a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * OpenGL tracing.
163a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
164a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
165a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FLAG_OPENGL_TRACES = 1<<2;
166a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
167a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
168a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Flag for IActivityManaqer.startActivity: if the app is being
169a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * launched for profiling, automatically stop the profiler once done.
170a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
171a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
172a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FLAG_AUTO_STOP_PROFILER = 1<<3;
173a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
174a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
175a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.broadcastIntent: success!
176a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
177a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
178a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int BROADCAST_SUCCESS = 0;
179a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
180a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
181a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.broadcastIntent: attempt to broadcast
182a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * a sticky intent without appropriate permission.
183a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
184a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
185a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int BROADCAST_STICKY_CANT_HAVE_PERMISSION = -1;
186a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
187a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
188a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Type for IActivityManaqer.getIntentSender: this PendingIntent is
189a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * for a sendBroadcast operation.
190a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
191a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
192a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int INTENT_SENDER_BROADCAST = 1;
193a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
194a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
195a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Type for IActivityManaqer.getIntentSender: this PendingIntent is
196a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * for a startActivity operation.
197a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
198a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
199a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int INTENT_SENDER_ACTIVITY = 2;
200a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
201a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
202a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Type for IActivityManaqer.getIntentSender: this PendingIntent is
203a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * for an activity result operation.
204a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
205a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
206a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int INTENT_SENDER_ACTIVITY_RESULT = 3;
207a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
208a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
209a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Type for IActivityManaqer.getIntentSender: this PendingIntent is
210a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * for a startService operation.
211a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
212a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
213a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int INTENT_SENDER_SERVICE = 4;
214a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
21580a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    /** @hide User operation call: success! */
21680a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    public static final int USER_OP_SUCCESS = 0;
21780a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn
21880a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    /** @hide User operation call: given user id is not known. */
21980a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    public static final int USER_OP_UNKNOWN_USER = -1;
22080a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn
22180a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    /** @hide User operation call: given user id is the current user, can't be stopped. */
22280a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    public static final int USER_OP_IS_CURRENT = -2;
22380a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*package*/ ActivityManager(Context context, Handler handler) {
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHandler = handler;
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2300f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: the application most always run in
2310f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * compatibility mode.
2320f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
2330f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
2340f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_ALWAYS = -1;
2350f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
2360f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
2370f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: the application can never run in
2380f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * compatibility mode.
2390f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
2400f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
2410f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_NEVER = -2;
2420f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
2430f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
2440f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: unknown.
2450f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
2460f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
2470f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_UNKNOWN = -3;
2480f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
2490f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
2500f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: the application currently has compatibility
2510f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * mode disabled.
2520f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
2530f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
2540f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_DISABLED = 0;
2550f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
2560f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
2570f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: the application currently has compatibility
2580f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * mode enabled.
2590f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
2600f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
2610f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_ENABLED = 1;
2620f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
2630f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
2640f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: request to toggle the application's
2650f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * compatibility mode.
2660f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
2670f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
2680f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_TOGGLE = 2;
2690f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
2700f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /** @hide */
2710f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public int getFrontActivityScreenCompatMode() {
2720f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        try {
2730f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            return ActivityManagerNative.getDefault().getFrontActivityScreenCompatMode();
2740f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        } catch (RemoteException e) {
2750f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
2760f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            return 0;
2770f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
2780f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
2790f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
280df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn    /** @hide */
2810f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public void setFrontActivityScreenCompatMode(int mode) {
2820f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        try {
2830f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            ActivityManagerNative.getDefault().setFrontActivityScreenCompatMode(mode);
2840f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        } catch (RemoteException e) {
2850f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
2860f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
2870f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
2880f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
289df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn    /** @hide */
2900f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public int getPackageScreenCompatMode(String packageName) {
2910f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        try {
2920f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            return ActivityManagerNative.getDefault().getPackageScreenCompatMode(packageName);
2930f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        } catch (RemoteException e) {
2940f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
2950f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            return 0;
2960f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
2970f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
2980f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
299df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn    /** @hide */
3000f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public void setPackageScreenCompatMode(String packageName, int mode) {
3010f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        try {
3020f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            ActivityManagerNative.getDefault().setPackageScreenCompatMode(packageName, mode);
3030f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        } catch (RemoteException e) {
3040f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
3050f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
3060f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
3070f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
30836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    /** @hide */
30936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    public boolean getPackageAskScreenCompat(String packageName) {
31036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        try {
31136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            return ActivityManagerNative.getDefault().getPackageAskScreenCompat(packageName);
31236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        } catch (RemoteException e) {
31336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            // System dead, we will be dead too soon!
31436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            return false;
31536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        }
31636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    }
31736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
31836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    /** @hide */
31936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    public void setPackageAskScreenCompat(String packageName, boolean ask) {
32036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        try {
32136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            ActivityManagerNative.getDefault().setPackageAskScreenCompat(packageName, ask);
32236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        } catch (RemoteException e) {
3230f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
3240f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
3250f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
3260f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
3270f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
3282c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * Return the approximate per-application memory class of the current
3292c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * device.  This gives you an idea of how hard a memory limit you should
3302c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * impose on your application to let the overall system work best.  The
3312c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * returned value is in megabytes; the baseline Android memory class is
3322c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * 16 (which happens to be the Java heap limit of those devices); some
3332c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * device with more memory may return 24 or even higher numbers.
3342c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     */
3352c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    public int getMemoryClass() {
3362c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        return staticGetMemoryClass();
3372c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    }
3382c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn
3392c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    /** @hide */
3402c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    static public int staticGetMemoryClass() {
3412c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        // Really brain dead right now -- just take this from the configured
3422c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        // vm heap size, and assume it is in megabytes and thus ends with "m".
3437ad33c8f9e7ecd356979dbad23c6c171b4f3339dDianne Hackborn        String vmHeapSize = SystemProperties.get("dalvik.vm.heapgrowthlimit", "");
344de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn        if (vmHeapSize != null && !"".equals(vmHeapSize)) {
345de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn            return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1));
346de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn        }
347de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn        return staticGetLargeMemoryClass();
3484e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    }
3494e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn
3504e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    /**
3514e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * Return the approximate per-application memory class of the current
3524e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * device when an application is running with a large heap.  This is the
3534e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * space available for memory-intensive applications; most applications
3544e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * should not need this amount of memory, and should instead stay with the
3554e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * {@link #getMemoryClass()} limit.  The returned value is in megabytes.
3564e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * This may be the same size as {@link #getMemoryClass()} on memory
3574e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * constrained devices, or it may be significantly larger on devices with
3584e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * a large amount of available RAM.
3593b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn     *
3603b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn     * <p>The is the size of the application's Dalvik heap if it has
3613b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn     * specified <code>android:largeHeap="true"</code> in its manifest.
3624e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     */
3634e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    public int getLargeMemoryClass() {
3644e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn        return staticGetLargeMemoryClass();
3654e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    }
3664e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn
3674e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    /** @hide */
3684e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    static public int staticGetLargeMemoryClass() {
3694e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn        // Really brain dead right now -- just take this from the configured
3704e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn        // vm heap size, and assume it is in megabytes and thus ends with "m".
3712c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m");
3722c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1));
3732c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    }
3742c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn
3752c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    /**
376b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn     * Used by persistent processes to determine if they are running on a
377b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn     * higher-end device so should be okay using hardware drawing acceleration
378b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn     * (which tends to consume a lot more RAM).
379b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn     * @hide
380b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn     */
38198365d7663cbd82979a5700faf0050220b01084dJeff Brown    static public boolean isHighEndGfx() {
382b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        MemInfoReader reader = new MemInfoReader();
383b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        reader.readMemInfo();
384b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        if (reader.getTotalSize() >= (512*1024*1024)) {
385b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            // If the device has at least 512MB RAM available to the kernel,
386b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            // we can afford the overhead of graphics acceleration.
387b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            return true;
388b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        }
38998365d7663cbd82979a5700faf0050220b01084dJeff Brown
390bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown        Display display = DisplayManagerGlobal.getInstance().getRealDisplay(
391bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown                Display.DEFAULT_DISPLAY);
392b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        Point p = new Point();
393b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        display.getRealSize(p);
394b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        int pixels = p.x * p.y;
395b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        if (pixels >= (1024*600)) {
396b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            // If this is a sufficiently large screen, then there are enough
397b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            // pixels on it that we'd really like to use hw drawing.
398b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            return true;
399b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        }
400b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn        return false;
401b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn    }
402b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn
403b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn    /**
40449d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn     * Use to decide whether the running device can be considered a "large
40549d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn     * RAM" device.  Exactly what memory limit large RAM is will vary, but
40649d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn     * it essentially means there is plenty of RAM to have lots of background
40749d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn     * processes running under decent loads.
40849d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn     * @hide
40949d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn     */
41049d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn    static public boolean isLargeRAM() {
41149d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn        MemInfoReader reader = new MemInfoReader();
41249d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn        reader.readMemInfo();
41349d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn        if (reader.getTotalSize() >= (640*1024*1024)) {
41449d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn            // Currently 640MB RAM available to the kernel is the point at
41549d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn            // which we have plenty of RAM to spare.
41649d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn            return true;
41749d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn        }
41849d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn        return false;
41949d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn    }
42049d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn
42149d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn    /**
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about tasks that the user has most recently
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * started or visited.
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RecentTaskInfo implements Parcelable {
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If this task is currently running, this is the identifier for it.
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If it is not running, this will be -1.
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int id;
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
433d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn         * The true identifier of this task, valid even if it is not running.
434d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn         */
435d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        public int persistentId;
436d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn
437d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        /**
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The original Intent used to launch the task.  You can use this
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Intent to re-launch the task (if it is no longer running) or bring
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the current task to the front.
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Intent baseIntent;
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If this task was started from an alias, this is the actual
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * activity component that was initially started; the component of
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the baseIntent in this case is the name of the actual activity
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * implementation that the alias referred to.  Otherwise, this is null.
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName origActivity;
451d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn
452d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn        /**
453d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn         * Description of the task's last state.
454d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn         */
455d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn        public CharSequence description;
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RecentTaskInfo() {
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(id);
466d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn            dest.writeInt(persistentId);
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (baseIntent != null) {
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(1);
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent.writeToParcel(dest, 0);
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(0);
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(origActivity, dest);
474d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn            TextUtils.writeToParcel(description, dest,
475d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn                    Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            id = source.readInt();
480d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn            persistentId = source.readInt();
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (source.readInt() != 0) {
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent = Intent.CREATOR.createFromParcel(source);
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent = null;
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            origActivity = ComponentName.readFromParcel(source);
487d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn            description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RecentTaskInfo> CREATOR
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = new Creator<RecentTaskInfo>() {
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RecentTaskInfo createFromParcel(Parcel source) {
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RecentTaskInfo(source);
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RecentTaskInfo[] newArray(int size) {
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RecentTaskInfo[size];
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RecentTaskInfo(Parcel source) {
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #getRecentTasks}: return all tasks, even those
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that have set their
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.content.Intent#FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS} flag.
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int RECENT_WITH_EXCLUDED = 0x0001;
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
513d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn     * Provides a list that does not contain any
51453d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn     * recent tasks that currently are not available to the user.
51553d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn     */
51653d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn    public static final int RECENT_IGNORE_UNAVAILABLE = 0x0002;
517d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn
518d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn    /**
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the tasks that the user has recently launched, with
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the most recent being first and older ones after in order.
521c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
522c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging and presenting
523c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * task management user interfaces</b>.  This should never be used for
524c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * core logic in an application, such as deciding between different
525c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * behaviors based on the information found here.  Such uses are
526c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <em>not</em> supported, and will likely break in the future.  For
527c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * example, if multiple applications can be actively running at the
528c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * same time, assumptions made about the meaning of the data here for
529c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * purposes of control flow will be incorrect.</p>
530c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many tasks the
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user has started and the maximum number the system can remember.
534d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn     * @param flags Information about what to return.  May be any combination
535805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}.
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RecentTaskInfo records describing each of
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the recent tasks.
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException Throws SecurityException if the caller does
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not hold the {@link android.Manifest.permission#GET_TASKS} permission.
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RecentTaskInfo> getRecentTasks(int maxNum, int flags)
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getRecentTasks(maxNum,
547f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                    flags, UserHandle.myUserId());
5488264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        } catch (RemoteException e) {
5498264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani            // System dead, we will be dead too soon!
5508264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani            return null;
5518264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        }
5528264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    }
5538264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani
5548264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    /**
5558264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * Same as {@link #getRecentTasks(int, int)} but returns the recent tasks for a
5568264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * specific user. It requires holding
5578264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission.
5588264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @param maxNum The maximum number of entries to return in the list.  The
5598264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * actual number returned may be smaller, depending on how many tasks the
5608264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * user has started and the maximum number the system can remember.
5618264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @param flags Information about what to return.  May be any combination
5628264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}.
5638264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     *
5648264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @return Returns a list of RecentTaskInfo records describing each of
5658264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * the recent tasks.
5668264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     *
5678264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @throws SecurityException Throws SecurityException if the caller does
5688264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * not hold the {@link android.Manifest.permission#GET_TASKS} or the
5698264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permissions.
5708264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @hide
5718264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     */
5728264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    public List<RecentTaskInfo> getRecentTasksForUser(int maxNum, int flags, int userId)
5738264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani            throws SecurityException {
5748264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        try {
5758264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani            return ActivityManagerNative.getDefault().getRecentTasks(maxNum,
5768264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani                    flags, userId);
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a particular task that is currently
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "running" in the system.  Note that a running task does not mean the
5860c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * given task actually has a process it is actively running in; it simply
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * means that the user has gone to it and never closed it, but currently
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the system may have killed its process and is only holding on to its
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * last state in order to restart it when the user returns.
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningTaskInfo implements Parcelable {
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A unique identifier for this task.
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int id;
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The component launched as the first activity in the task.  This can
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be considered the "application" of this task.
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName baseActivity;
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The activity component at the top of the history stack of the task.
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * This is what the user is currently doing.
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName topActivity;
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
610805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn         * Thumbnail representation of the task's current state.  Currently
611805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn         * always null.
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Bitmap thumbnail;
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Description of the task's current state.
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public CharSequence description;
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of activities in this task.
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int numActivities;
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of activities that are currently running (not stopped
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * and persisted) in this task.
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int numRunning;
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningTaskInfo() {
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(id);
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(baseActivity, dest);
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(topActivity, dest);
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (thumbnail != null) {
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(1);
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail.writeToParcel(dest, 0);
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(0);
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TextUtils.writeToParcel(description, dest,
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(numActivities);
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(numRunning);
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            id = source.readInt();
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            baseActivity = ComponentName.readFromParcel(source);
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            topActivity = ComponentName.readFromParcel(source);
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (source.readInt() != 0) {
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail = Bitmap.CREATOR.createFromParcel(source);
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail = null;
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            numActivities = source.readInt();
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            numRunning = source.readInt();
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningTaskInfo> CREATOR = new Creator<RunningTaskInfo>() {
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningTaskInfo createFromParcel(Parcel source) {
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningTaskInfo(source);
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningTaskInfo[] newArray(int size) {
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningTaskInfo[size];
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningTaskInfo(Parcel source) {
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
681d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the tasks that are currently running, with
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the most recent being first and older ones after in order.  Note that
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "running" does not mean any of the task's code is currently loaded or
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * activity -- the task may have been frozen by the system, so that it
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can be restarted in its previous state when next brought to the
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground.
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many tasks the
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user has started.
6930b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
6940b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @param flags Optional flags
6950b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @param receiver Optional receiver for delayed thumbnails
6960b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningTaskInfo records describing each of
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the running tasks.
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7000b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * Some thumbnails may not be available at the time of this call. The optional
7010b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * receiver may be used to receive those thumbnails.
7020b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException Throws SecurityException if the caller does
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not hold the {@link android.Manifest.permission#GET_TASKS} permission.
7050b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7060b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @hide
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7080b2a6d0773211449fbde9d2706388714beeffebbJim Miller    public List<RunningTaskInfo> getRunningTasks(int maxNum, int flags, IThumbnailReceiver receiver)
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
7110b2a6d0773211449fbde9d2706388714beeffebbJim Miller            return ActivityManagerNative.getDefault().getTasks(maxNum, flags, receiver);
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7170b2a6d0773211449fbde9d2706388714beeffebbJim Miller
7180b2a6d0773211449fbde9d2706388714beeffebbJim Miller    /**
7190b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * Return a list of the tasks that are currently running, with
7200b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * the most recent being first and older ones after in order.  Note that
7210b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * "running" does not mean any of the task's code is currently loaded or
7220b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * activity -- the task may have been frozen by the system, so that it
7230b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * can be restarted in its previous state when next brought to the
7240b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * foreground.
7250b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
726c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging and presenting
727c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * task management user interfaces</b>.  This should never be used for
728c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * core logic in an application, such as deciding between different
729c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * behaviors based on the information found here.  Such uses are
730c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <em>not</em> supported, and will likely break in the future.  For
731c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * example, if multiple applications can be actively running at the
732c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * same time, assumptions made about the meaning of the data here for
733c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * purposes of control flow will be incorrect.</p>
734c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
7350b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @param maxNum The maximum number of entries to return in the list.  The
7360b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * actual number returned may be smaller, depending on how many tasks the
7370b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * user has started.
7380b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7390b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @return Returns a list of RunningTaskInfo records describing each of
7400b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * the running tasks.
7410b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7420b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @throws SecurityException Throws SecurityException if the caller does
7430b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * not hold the {@link android.Manifest.permission#GET_TASKS} permission.
7440b2a6d0773211449fbde9d2706388714beeffebbJim Miller     */
7450b2a6d0773211449fbde9d2706388714beeffebbJim Miller    public List<RunningTaskInfo> getRunningTasks(int maxNum)
7460b2a6d0773211449fbde9d2706388714beeffebbJim Miller            throws SecurityException {
7470b2a6d0773211449fbde9d2706388714beeffebbJim Miller        return getRunningTasks(maxNum, 0, null);
7480b2a6d0773211449fbde9d2706388714beeffebbJim Miller    }
7490b2a6d0773211449fbde9d2706388714beeffebbJim Miller
7500c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    /**
7510c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * Remove some end of a task's activity stack that is not part of
7520c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * the main application.  The selected activities will be finished, so
7530c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * they are no longer part of the main task.
7540c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     *
7550c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @param taskId The identifier of the task.
7560c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @param subTaskIndex The number of the sub-task; this corresponds
7570c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * to the index of the thumbnail returned by {@link #getTaskThumbnails(int)}.
7580c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @return Returns true if the sub-task was found and was removed.
7590c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     *
7600c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @hide
7610c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     */
7620c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    public boolean removeSubTask(int taskId, int subTaskIndex)
7630c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            throws SecurityException {
7640c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        try {
7650c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            return ActivityManagerNative.getDefault().removeSubTask(taskId, subTaskIndex);
7660c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        } catch (RemoteException e) {
7670c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            // System dead, we will be dead too soon!
7680c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            return false;
7690c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        }
7700c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    }
7710c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
7720c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    /**
7730c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * If set, the process of the root activity of the task will be killed
7740c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * as part of removing the task.
7750c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @hide
7760c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     */
7770c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    public static final int REMOVE_TASK_KILL_PROCESS = 0x0001;
7780c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
7790c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    /**
7800c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * Completely remove the given task.
7810c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     *
7820c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @param taskId Identifier of the task to be removed.
7830c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @param flags Additional operational flags.  May be 0 or
7840c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * {@link #REMOVE_TASK_KILL_PROCESS}.
7850c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @return Returns true if the given task was found and removed.
7860c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     *
7870c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @hide
7880c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     */
7890c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    public boolean removeTask(int taskId, int flags)
7900c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            throws SecurityException {
7910c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        try {
7920c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            return ActivityManagerNative.getDefault().removeTask(taskId, flags);
7930c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        } catch (RemoteException e) {
7940c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            // System dead, we will be dead too soon!
7950c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            return false;
7960c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        }
7970c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    }
7980c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
799d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn    /** @hide */
800f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    public static class TaskThumbnails implements Parcelable {
801f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public Bitmap mainThumbnail;
802f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
803f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public int numSubThumbbails;
804f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
805f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        /** @hide */
806f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public IThumbnailRetriever retriever;
807f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
808f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public TaskThumbnails() {
809f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
810f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
811f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public Bitmap getSubThumbnail(int index) {
812f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            try {
813f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                return retriever.getThumbnail(index);
814f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            } catch (RemoteException e) {
815f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                return null;
816f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
817f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
818f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
819f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public int describeContents() {
820f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            return 0;
821f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
822f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
823f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public void writeToParcel(Parcel dest, int flags) {
824f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            if (mainThumbnail != null) {
825f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                dest.writeInt(1);
826f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                mainThumbnail.writeToParcel(dest, 0);
827f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            } else {
828f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                dest.writeInt(0);
829f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
830f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            dest.writeInt(numSubThumbbails);
831f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            dest.writeStrongInterface(retriever);
832f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
833f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
834f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public void readFromParcel(Parcel source) {
835f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            if (source.readInt() != 0) {
836f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                mainThumbnail = Bitmap.CREATOR.createFromParcel(source);
837f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            } else {
838f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                mainThumbnail = null;
839f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
840f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            numSubThumbbails = source.readInt();
841f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            retriever = IThumbnailRetriever.Stub.asInterface(source.readStrongBinder());
842f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
843f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
844f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public static final Creator<TaskThumbnails> CREATOR = new Creator<TaskThumbnails>() {
845f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            public TaskThumbnails createFromParcel(Parcel source) {
846f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                return new TaskThumbnails(source);
847f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
848f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            public TaskThumbnails[] newArray(int size) {
849f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                return new TaskThumbnails[size];
850f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
851f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        };
852f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
853f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        private TaskThumbnails(Parcel source) {
854f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            readFromParcel(source);
855f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
856f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    }
857f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
858f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    /** @hide */
859f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    public TaskThumbnails getTaskThumbnails(int id) throws SecurityException {
860d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        try {
861f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            return ActivityManagerNative.getDefault().getTaskThumbnails(id);
862d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        } catch (RemoteException e) {
863d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn            // System dead, we will be dead too soon!
864d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn            return null;
865d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        }
866d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn    }
86715491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn
86815491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn    /** @hide */
86915491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn    public Bitmap getTaskTopThumbnail(int id) throws SecurityException {
87015491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn        try {
87115491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn            return ActivityManagerNative.getDefault().getTaskTopThumbnail(id);
87215491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn        } catch (RemoteException e) {
87315491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn            // System dead, we will be dead too soon!
87415491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn            return null;
87515491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn        }
87615491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn    }
87715491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
879621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * Flag for {@link #moveTaskToFront(int, int)}: also move the "home"
880621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * activity along with the task, so it is positioned immediately behind
881621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * the task.
882621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     */
883621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    public static final int MOVE_TASK_WITH_HOME = 0x00000001;
884621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn
885621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    /**
886d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn     * Flag for {@link #moveTaskToFront(int, int)}: don't count this as a
887d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn     * user-instigated action, so the current activity will not receive a
888d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn     * hint that the user is leaving.
889d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn     */
890d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn    public static final int MOVE_TASK_NO_USER_ACTION = 0x00000002;
891d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn
892d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn    /**
8938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Equivalent to calling {@link #moveTaskToFront(int, int, Bundle)}
8948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * with a null options argument.
8958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     *
8968078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param taskId The identifier of the task to be moved, as found in
8978078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * {@link RunningTaskInfo} or {@link RecentTaskInfo}.
8988078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param flags Additional operational flags, 0 or more of
8998078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * {@link #MOVE_TASK_WITH_HOME}.
9008078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
9018078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public void moveTaskToFront(int taskId, int flags) {
9028078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        moveTaskToFront(taskId, flags, null);
9038078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
9048078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
9058078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
906621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * Ask that the task associated with a given task ID be moved to the
907621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * front of the stack, so it is now visible to the user.  Requires that
908621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * the caller hold permission {@link android.Manifest.permission#REORDER_TASKS}
909621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * or a SecurityException will be thrown.
910621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
911621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @param taskId The identifier of the task to be moved, as found in
912621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * {@link RunningTaskInfo} or {@link RecentTaskInfo}.
913621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @param flags Additional operational flags, 0 or more of
914621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * {@link #MOVE_TASK_WITH_HOME}.
9158078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param options Additional options for the operation, either null or
9168078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * as per {@link Context#startActivity(Intent, android.os.Bundle)
9178078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Context.startActivity(Intent, Bundle)}.
918621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     */
9198078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public void moveTaskToFront(int taskId, int flags, Bundle options) {
920621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn        try {
9218078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            ActivityManagerNative.getDefault().moveTaskToFront(taskId, flags, options);
922621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn        } catch (RemoteException e) {
923621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn            // System dead, we will be dead too soon!
924621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn        }
925621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    }
926621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn
927621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    /**
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a particular Service that is
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * currently running in the system.
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningServiceInfo implements Parcelable {
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The service component.
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName service;
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If non-zero, this is the process the service is running in.
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9433025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * The UID that owns this service.
9443025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
9453025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public int uid;
9463025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
9473025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The name of the process this service runs in.
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String process;
9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if the service has asked to run as a foreground process.
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean foreground;
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9583025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * The time when the service was first made active, either by someone
9599adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn         * starting or binding to it.  This
9609adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn         * is in units of {@link android.os.SystemClock#elapsedRealtime()}.
9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long activeSince;
9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if this service has been explicitly started.
9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean started;
9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of clients connected to the service.
9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int clientCount;
9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of times the service's process has crashed while the service
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * is running.
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int crashCount;
9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The time when there was last activity in the service (either
9829adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn         * explicit requests to start it or clients binding to it).  This
9839adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn         * is in units of {@link android.os.SystemClock#uptimeMillis()}.
9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long lastActivityTime;
9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If non-zero, this service is not currently running, but scheduled to
9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * restart at the given time.
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long restarting;
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9933025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
9943025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags}: set if this service has been
9953025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * explicitly started.
9963025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
9973025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_STARTED = 1<<0;
9983025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
9993025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10003025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags}: set if the service has asked to
10013025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * run as a foreground process.
10023025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10033025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_FOREGROUND = 1<<1;
10043025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
10053025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10063025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags): set if the service is running in a
10073025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * core system process.
10083025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10093025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_SYSTEM_PROCESS = 1<<2;
10103025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
10113025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10123025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags): set if the service is running in a
10133025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * persistent process.
10143025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10153025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_PERSISTENT_PROCESS = 1<<3;
10163025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
10173025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10183025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Running flags.
10193025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10203025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public int flags;
10213025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
1022dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1023dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For special services that are bound to by system code, this is
1024dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the package that holds the binding.
1025dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1026dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public String clientPackage;
1027dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1028dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1029dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For special services that are bound to by system code, this is
1030dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * a string resource providing a user-visible label for who the
1031dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * client is.
1032dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1033dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int clientLabel;
1034dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningServiceInfo() {
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(service, dest);
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
10453025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            dest.writeInt(uid);
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(process);
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(foreground ? 1 : 0);
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(activeSince);
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(started ? 1 : 0);
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(clientCount);
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(crashCount);
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(lastActivityTime);
10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(restarting);
10543025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            dest.writeInt(this.flags);
1055dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeString(clientPackage);
1056dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(clientLabel);
10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            service = ComponentName.readFromParcel(source);
10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
10623025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            uid = source.readInt();
10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            process = source.readString();
10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            foreground = source.readInt() != 0;
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            activeSince = source.readLong();
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            started = source.readInt() != 0;
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            clientCount = source.readInt();
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            crashCount = source.readInt();
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lastActivityTime = source.readLong();
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            restarting = source.readLong();
10713025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            flags = source.readInt();
1072dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            clientPackage = source.readString();
1073dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            clientLabel = source.readInt();
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningServiceInfo> CREATOR = new Creator<RunningServiceInfo>() {
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningServiceInfo createFromParcel(Parcel source) {
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningServiceInfo(source);
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningServiceInfo[] newArray(int size) {
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningServiceInfo[size];
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningServiceInfo(Parcel source) {
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the services that are currently running.
1092c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
1093c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging or implementing
1094c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * service management type user interfaces.</b></p>
1095c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many services
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are running.
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningServiceInfo records describing each of
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the running tasks.
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RunningServiceInfo> getRunningServices(int maxNum)
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
11064b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            return ActivityManagerNative.getDefault()
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .getServices(maxNum, 0);
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1115dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * Returns a PendingIntent you can start to show a control panel for the
1116dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * given running service.  If the service does not have a control panel,
1117dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * null is returned.
1118dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     */
1119dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    public PendingIntent getRunningServiceControlPanel(ComponentName service)
1120dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            throws SecurityException {
1121dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        try {
1122dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            return ActivityManagerNative.getDefault()
1123dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn                    .getRunningServiceControlPanel(service);
1124dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        } catch (RemoteException e) {
1125dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            // System dead, we will be dead too soon!
1126dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            return null;
1127dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        }
1128dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    }
1129dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1130dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    /**
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about the available memory through
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link ActivityManager#getMemoryInfo}.
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class MemoryInfo implements Parcelable {
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
113659325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         * The available memory on the system.  This number should not
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be considered absolute: due to the nature of the kernel, a significant
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * portion of this memory is actually in use and needed for the overall
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * system to run well.
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long availMem;
114259325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn
114359325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn        /**
114459325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         * The total memory accessible by the kernel.  This is basically the
114559325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         * RAM size of the device, not including below-kernel fixed allocations
114659325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         * like DMA buffers, RAM for the baseband CPU, etc.
114759325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         */
114859325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn        public long totalMem;
114959325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The threshold of {@link #availMem} at which we consider memory to be
11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * low and start killing background services and other non-extraneous
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * processes.
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long threshold;
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if the system considers itself to currently be in a low
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * memory situation.
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean lowMemory;
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11637d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        /** @hide */
11647d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        public long hiddenAppThreshold;
11657d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        /** @hide */
11667d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        public long secondaryServerThreshold;
11677d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        /** @hide */
11687d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        public long visibleAppThreshold;
11697d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        /** @hide */
11707d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        public long foregroundAppThreshold;
11717d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public MemoryInfo() {
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(availMem);
118159325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn            dest.writeLong(totalMem);
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(threshold);
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(lowMemory ? 1 : 0);
11847d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            dest.writeLong(hiddenAppThreshold);
11857d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            dest.writeLong(secondaryServerThreshold);
11867d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            dest.writeLong(visibleAppThreshold);
11877d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            dest.writeLong(foregroundAppThreshold);
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            availMem = source.readLong();
119259325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn            totalMem = source.readLong();
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            threshold = source.readLong();
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lowMemory = source.readInt() != 0;
11957d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            hiddenAppThreshold = source.readLong();
11967d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            secondaryServerThreshold = source.readLong();
11977d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            visibleAppThreshold = source.readLong();
11987d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            foregroundAppThreshold = source.readLong();
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<MemoryInfo> CREATOR
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = new Creator<MemoryInfo>() {
12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public MemoryInfo createFromParcel(Parcel source) {
12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new MemoryInfo(source);
12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public MemoryInfo[] newArray(int size) {
12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new MemoryInfo[size];
12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private MemoryInfo(Parcel source) {
12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1216c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn    /**
1217c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * Return general information about the memory state of the system.  This
1218c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * can be used to help decide how to manage your own memory, though note
1219c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * that polling is not recommended and
1220c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * {@link android.content.ComponentCallbacks2#onTrimMemory(int)
1221c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * ComponentCallbacks2.onTrimMemory(int)} is the preferred way to do this.
1222c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * Also see {@link #getMyMemoryState} for how to retrieve the current trim
1223c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * level of your process as needed, which gives a better hint for how to
1224c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * manage its memory.
1225c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     */
12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void getMemoryInfo(MemoryInfo outInfo) {
12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ActivityManagerNative.getDefault().getMemoryInfo(outInfo);
12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean clearApplicationUserData(String packageName, IPackageDataObserver observer) {
12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().clearApplicationUserData(packageName,
12394120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn                    observer, UserHandle.myUserId());
12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about any processes that are in an error condition.
12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class ProcessErrorStateInfo implements Parcelable {
12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Condition codes
12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int NO_ERROR = 0;
12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int CRASHED = 1;
12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int NOT_RESPONDING = 2;
12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The condition that the process is in.
12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int condition;
12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The process name in which the crash or error occurred.
12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String processName;
12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The pid of this process; 0 if none
12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The kernel user-ID that has been assigned to this process;
12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * currently this is not a unique ID (multiple applications can have
12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the same uid).
12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int uid;
12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
127960d8762413e8daba5f73559786312a9ec5e3b827Dan Egnor         * The activity name associated with the error, if known.  May be null.
12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String tag;
12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A short message describing the error condition.
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String shortMsg;
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A long message describing the error condition.
12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String longMsg;
12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1294b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor         * The stack trace where the error originated.  May be null.
12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1296b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor        public String stackTrace;
1297b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor
1298b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor        /**
1299b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor         * to be deprecated: This value will always be null.
1300b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor         */
1301b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor        public byte[] crashData = null;
13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ProcessErrorStateInfo() {
13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(condition);
13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(processName);
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(uid);
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(tag);
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(shortMsg);
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(longMsg);
1318b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor            dest.writeString(stackTrace);
13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            condition = source.readInt();
13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = source.readString();
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            uid = source.readInt();
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            tag = source.readString();
13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            shortMsg = source.readString();
13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            longMsg = source.readString();
1329b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor            stackTrace = source.readString();
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<ProcessErrorStateInfo> CREATOR =
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Creator<ProcessErrorStateInfo>() {
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ProcessErrorStateInfo createFromParcel(Parcel source) {
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ProcessErrorStateInfo(source);
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ProcessErrorStateInfo[] newArray(int size) {
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ProcessErrorStateInfo[size];
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private ProcessErrorStateInfo(Parcel source) {
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a list of any processes that are currently in an error condition.  The result
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will be null if all processes are running properly at this time.
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of ProcessErrorStateInfo records, or null if there are no
13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * current error conditions (it will not return an empty list).  This list ordering is not
13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified.
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<ProcessErrorStateInfo> getProcessesInErrorState() {
13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getProcessesInErrorState();
13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a running process.
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningAppProcessInfo implements Parcelable {
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The name of the process that this object is associated with
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String processName;
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The pid of this process; 0 if none
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1377eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        /**
1378eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn         * The user id of this process.
1379eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn         */
1380eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        public int uid;
1381eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn
1382baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn        /**
1383baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         * All packages that have been loaded into the process.
1384baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         */
13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String pkgList[];
13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1388482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * Constant for {@link #flags}: this is an app that is unable to
1389482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * correctly save its state when going to the background,
1390482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * so it can not be killed while in the background.
1391482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * @hide
1392baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         */
1393482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn        public static final int FLAG_CANT_SAVE_STATE = 1<<0;
1394baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn
1395baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn        /**
1396424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn         * Constant for {@link #flags}: this process is associated with a
1397424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn         * persistent system app.
1398424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn         * @hide
1399424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn         */
1400424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn        public static final int FLAG_PERSISTENT = 1<<1;
1401424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn
1402424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn        /**
14030c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn         * Constant for {@link #flags}: this process is associated with a
14040c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn         * persistent system app.
14050c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn         * @hide
14060c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn         */
14070c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        public static final int FLAG_HAS_ACTIVITIES = 1<<2;
14080c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn
14090c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        /**
1410baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         * Flags of information.  May be any of
1411482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * {@link #FLAG_CANT_SAVE_STATE}.
1412482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * @hide
1413baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         */
1414baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn        public int flags;
141527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
141627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        /**
141727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn         * Last memory trim level reported to the process: corresponds to
141827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn         * the values supplied to {@link android.content.ComponentCallbacks2#onTrimMemory(int)
141927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn         * ComponentCallbacks2.onTrimMemory(int)}.
142027ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn         */
142127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        public int lastTrimLevel;
142227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
1423baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn        /**
1424a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn         * Constant for {@link #importance}: this is a persistent process.
1425a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn         * Only used when reporting to process observers.
1426a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn         * @hide
1427a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn         */
1428a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn        public static final int IMPORTANCE_PERSISTENT = 50;
1429a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn
1430a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn        /**
14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is running the
14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * foreground UI.
14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_FOREGROUND = 100;
14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
143732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * Constant for {@link #importance}: this process is running something
143832907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * that is actively visible to the user, though not in the immediate
143932907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * foreground.
1440860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn         */
144132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn        public static final int IMPORTANCE_VISIBLE = 200;
1442860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn
1443860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn        /**
14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is running something
144532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * that is considered to be actively perceptible to the user.  An
144632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * example would be an application performing background music playback.
14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
144832907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn        public static final int IMPORTANCE_PERCEPTIBLE = 130;
144932907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn
145032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn        /**
14515383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn         * Constant for {@link #importance}: this process is running an
14525383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn         * application that can not save its state, and thus can't be killed
14535383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn         * while in the background.
14545383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn         * @hide
145532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         */
14565383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn        public static final int IMPORTANCE_CANT_SAVE_STATE = 170;
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is contains services
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * that should remain running.
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_SERVICE = 300;
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process process contains
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * background code that is expendable.
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_BACKGROUND = 400;
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is empty of any
14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * actively running code.
14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_EMPTY = 500;
14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The relative importance level that the system places on this
14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * process.  May be one of {@link #IMPORTANCE_FOREGROUND},
14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * {@link #IMPORTANCE_VISIBLE}, {@link #IMPORTANCE_SERVICE},
14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * {@link #IMPORTANCE_BACKGROUND}, or {@link #IMPORTANCE_EMPTY}.  These
14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * constants are numbered so that "more important" values are always
14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * smaller than "less important" values.
14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int importance;
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * An additional ordering within a particular {@link #importance}
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * category, providing finer-grained information about the relative
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * utility of processes within a category.  This number means nothing
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * except that a smaller values are more recently used (and thus
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * more important).  Currently an LRU value is only maintained for
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the {@link #IMPORTANCE_BACKGROUND} category, though others may
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be maintained in the future.
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int lru;
149627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
1497dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1498dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: nothing special has
1499dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * been specified for the reason for this level.
1500dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1501dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_UNKNOWN = 0;
1502dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1503dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1504dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: one of the application's
1505dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * content providers is being used by another process.  The pid of
1506dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the client process is in {@link #importanceReasonPid} and the
1507dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * target provider in this process is in
1508dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * {@link #importanceReasonComponent}.
1509dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1510dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_PROVIDER_IN_USE = 1;
1511dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1512dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1513dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: one of the application's
1514dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * content providers is being used by another process.  The pid of
1515dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the client process is in {@link #importanceReasonPid} and the
1516dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * target provider in this process is in
1517dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * {@link #importanceReasonComponent}.
1518dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1519dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_SERVICE_IN_USE = 2;
1520dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1521dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1522dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * The reason for {@link #importance}, if any.
1523dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1524dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int importanceReasonCode;
1525dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1526dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1527dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For the specified values of {@link #importanceReasonCode}, this
1528dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * is the process ID of the other process that is a client of this
1529dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * process.  This will be 0 if no other process is using this one.
1530dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1531dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int importanceReasonPid;
1532dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1533dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1534dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For the specified values of {@link #importanceReasonCode}, this
1535dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * is the name of the component that is being used in this process.
1536dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1537dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public ComponentName importanceReasonComponent;
1538dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1539905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn        /**
1540905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn         * When {@link importanceReasonPid} is non-0, this is the importance
1541905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn         * of the other pid. @hide
1542905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn         */
1543905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn        public int importanceReasonImportance;
1544905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn
15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningAppProcessInfo() {
15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            importance = IMPORTANCE_FOREGROUND;
1547dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonCode = REASON_UNKNOWN;
15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningAppProcessInfo(String pProcessName, int pPid, String pArr[]) {
15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = pProcessName;
15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = pPid;
15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pkgList = pArr;
15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(processName);
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
1563eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            dest.writeInt(uid);
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeStringArray(pkgList);
1565baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn            dest.writeInt(this.flags);
156627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn            dest.writeInt(lastTrimLevel);
15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(importance);
15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(lru);
1569dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(importanceReasonCode);
1570dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(importanceReasonPid);
1571dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            ComponentName.writeToParcel(importanceReasonComponent, dest);
1572905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn            dest.writeInt(importanceReasonImportance);
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = source.readString();
15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
1578eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            uid = source.readInt();
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pkgList = source.readStringArray();
1580baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn            flags = source.readInt();
158127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn            lastTrimLevel = source.readInt();
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            importance = source.readInt();
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lru = source.readInt();
1584dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonCode = source.readInt();
1585dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonPid = source.readInt();
1586dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonComponent = ComponentName.readFromParcel(source);
1587905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn            importanceReasonImportance = source.readInt();
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningAppProcessInfo> CREATOR =
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            new Creator<RunningAppProcessInfo>() {
15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningAppProcessInfo createFromParcel(Parcel source) {
15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningAppProcessInfo(source);
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningAppProcessInfo[] newArray(int size) {
15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningAppProcessInfo[size];
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningAppProcessInfo(Parcel source) {
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1606f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * Returns a list of application processes installed on external media
1607f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * that are running on the device.
1608f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     *
1609c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging or building
1610c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * a user-facing process management UI.</b></p>
1611c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
1612f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * @return Returns a list of ApplicationInfo records, or null if none
1613f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * This list ordering is not specified.
1614f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * @hide
1615f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     */
1616f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu    public List<ApplicationInfo> getRunningExternalApplications() {
1617f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu        try {
1618f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu            return ActivityManagerNative.getDefault().getRunningExternalApplications();
1619f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu        } catch (RemoteException e) {
1620f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu            return null;
1621f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu        }
1622f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu    }
1623f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu
1624f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu    /**
16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a list of application processes that are running on the device.
1626c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
1627c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging or building
1628c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * a user-facing process management UI.</b></p>
1629c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningAppProcessInfo records, or null if there are no
16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running processes (it will not return an empty list).  This list ordering is not
16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified.
16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RunningAppProcessInfo> getRunningAppProcesses() {
16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getRunningAppProcesses();
16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
164127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
164227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn    /**
164327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * Return global memory state information for the calling process.  This
164427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * does not fill in all fields of the {@link RunningAppProcessInfo}.  The
164527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * only fields that will be filled in are
164627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#pid},
164727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#uid},
164827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#lastTrimLevel},
164927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#importance},
165027ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#lru}, and
165127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#importanceReasonCode}.
165227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     */
165327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn    static public void getMyMemoryState(RunningAppProcessInfo outState) {
165427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        try {
165527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn            ActivityManagerNative.getDefault().getMyMemoryState(outState);
165627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        } catch (RemoteException e) {
165727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        }
165827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn    }
165927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16614f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * Return information about the memory usage of one or more processes.
1662c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
1663c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging or building
1664c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * a user-facing process management UI.</b></p>
1665c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
16664f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * @param pids The pids of the processes whose memory usage is to be
16674f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * retrieved.
16684f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * @return Returns an array of memory information, one for each
16694f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * requested pid.
16704f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     */
16714f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) {
16724f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        try {
16734f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn            return ActivityManagerNative.getDefault().getProcessMemoryInfo(pids);
16744f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        } catch (RemoteException e) {
16754f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn            return null;
16764f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        }
16774f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    }
16784f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn
16794f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    /**
168003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * @deprecated This is now just a wrapper for
168103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * {@link #killBackgroundProcesses(String)}; the previous behavior here
168203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * is no longer available to applications because it allows them to
168303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * break other applications by removing their alarms, stopping their
168403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * services, etc.
168503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     */
168603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    @Deprecated
168703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    public void restartPackage(String packageName) {
168803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn        killBackgroundProcesses(packageName);
168903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    }
169003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn
169103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    /**
169203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * Have the system immediately kill all background processes associated
169303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * with the given package.  This is the same as the kernel killing those
169403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * processes to reclaim memory; the system will take care of restarting
169503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * these processes in the future as needed.
169603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     *
169703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * <p>You must hold the permission
169803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * {@link android.Manifest.permission#KILL_BACKGROUND_PROCESSES} to be able to
169903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * call this method.
170003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     *
170103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * @param packageName The name of the package whose processes are to
170203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * be killed.
170303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     */
170403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    public void killBackgroundProcesses(String packageName) {
170503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn        try {
17061676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn            ActivityManagerNative.getDefault().killBackgroundProcesses(packageName,
17071676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn                    UserHandle.myUserId());
170803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn        } catch (RemoteException e) {
170903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn        }
171003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    }
171103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn
171203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    /**
17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Have the system perform a force stop of everything associated with
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the given application package.  All processes that share its uid
17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will be killed, all services it has running stopped, all activities
17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removed, etc.  In addition, a {@link Intent#ACTION_PACKAGE_RESTARTED}
17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast will be sent, so that any of its registered alarms can
17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be stopped, notifications removed, etc.
17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the permission
172103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * {@link android.Manifest.permission#FORCE_STOP_PACKAGES} to be able to
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call this method.
17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param packageName The name of the package to be stopped.
172503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     *
172603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * @hide This is not available to third party applications due to
172703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * it allowing them to break other applications by stopping their
172803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * services, removing their alarms, etc.
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
173003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    public void forceStopPackage(String packageName) {
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
17321676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn            ActivityManagerNative.getDefault().forceStopPackage(packageName,
17331676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn                    UserHandle.myUserId());
17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the device configuration attributes.
17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ConfigurationInfo getDeviceConfigurationInfo() {
17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getDeviceConfigurationInfo();
17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17485ef44b7566566db08b62245cbb9002b548071603Kenny Root
17495ef44b7566566db08b62245cbb9002b548071603Kenny Root    /**
17505ef44b7566566db08b62245cbb9002b548071603Kenny Root     * Get the preferred density of icons for the launcher. This is used when
17515ef44b7566566db08b62245cbb9002b548071603Kenny Root     * custom drawables are created (e.g., for shortcuts).
17525ef44b7566566db08b62245cbb9002b548071603Kenny Root     *
17535ef44b7566566db08b62245cbb9002b548071603Kenny Root     * @return density in terms of DPI
17545ef44b7566566db08b62245cbb9002b548071603Kenny Root     */
17555ef44b7566566db08b62245cbb9002b548071603Kenny Root    public int getLauncherLargeIconDensity() {
17565ef44b7566566db08b62245cbb9002b548071603Kenny Root        final Resources res = mContext.getResources();
17575ef44b7566566db08b62245cbb9002b548071603Kenny Root        final int density = res.getDisplayMetrics().densityDpi;
1758d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn        final int sw = res.getConfiguration().smallestScreenWidthDp;
17595ef44b7566566db08b62245cbb9002b548071603Kenny Root
1760d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn        if (sw < 600) {
1761d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn            // Smaller than approx 7" tablets, use the regular icon size.
17625ef44b7566566db08b62245cbb9002b548071603Kenny Root            return density;
17635ef44b7566566db08b62245cbb9002b548071603Kenny Root        }
17645ef44b7566566db08b62245cbb9002b548071603Kenny Root
17655ef44b7566566db08b62245cbb9002b548071603Kenny Root        switch (density) {
17665ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_LOW:
17675ef44b7566566db08b62245cbb9002b548071603Kenny Root                return DisplayMetrics.DENSITY_MEDIUM;
17685ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_MEDIUM:
17695ef44b7566566db08b62245cbb9002b548071603Kenny Root                return DisplayMetrics.DENSITY_HIGH;
1770d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn            case DisplayMetrics.DENSITY_TV:
1771d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn                return DisplayMetrics.DENSITY_XHIGH;
17725ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_HIGH:
17735ef44b7566566db08b62245cbb9002b548071603Kenny Root                return DisplayMetrics.DENSITY_XHIGH;
17745ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_XHIGH:
1775d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                return DisplayMetrics.DENSITY_XXHIGH;
1776d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn            case DisplayMetrics.DENSITY_XXHIGH:
1777d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                return DisplayMetrics.DENSITY_XHIGH * 2;
17785ef44b7566566db08b62245cbb9002b548071603Kenny Root            default:
1779d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                // The density is some abnormal value.  Return some other
1780d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                // abnormal value that is a reasonable scaling of it.
1781d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn                return (int)((density*1.5f)+.5f);
17825ef44b7566566db08b62245cbb9002b548071603Kenny Root        }
17835ef44b7566566db08b62245cbb9002b548071603Kenny Root    }
17845ef44b7566566db08b62245cbb9002b548071603Kenny Root
17855ef44b7566566db08b62245cbb9002b548071603Kenny Root    /**
17865ef44b7566566db08b62245cbb9002b548071603Kenny Root     * Get the preferred launcher icon size. This is used when custom drawables
17875ef44b7566566db08b62245cbb9002b548071603Kenny Root     * are created (e.g., for shortcuts).
17885ef44b7566566db08b62245cbb9002b548071603Kenny Root     *
17895ef44b7566566db08b62245cbb9002b548071603Kenny Root     * @return dimensions of square icons in terms of pixels
17905ef44b7566566db08b62245cbb9002b548071603Kenny Root     */
17915ef44b7566566db08b62245cbb9002b548071603Kenny Root    public int getLauncherLargeIconSize() {
17925ef44b7566566db08b62245cbb9002b548071603Kenny Root        final Resources res = mContext.getResources();
17935ef44b7566566db08b62245cbb9002b548071603Kenny Root        final int size = res.getDimensionPixelSize(android.R.dimen.app_icon_size);
1794d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn        final int sw = res.getConfiguration().smallestScreenWidthDp;
17955ef44b7566566db08b62245cbb9002b548071603Kenny Root
1796d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn        if (sw < 600) {
1797d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn            // Smaller than approx 7" tablets, use the regular icon size.
17985ef44b7566566db08b62245cbb9002b548071603Kenny Root            return size;
17995ef44b7566566db08b62245cbb9002b548071603Kenny Root        }
18005ef44b7566566db08b62245cbb9002b548071603Kenny Root
18015ef44b7566566db08b62245cbb9002b548071603Kenny Root        final int density = res.getDisplayMetrics().densityDpi;
18025ef44b7566566db08b62245cbb9002b548071603Kenny Root
18035ef44b7566566db08b62245cbb9002b548071603Kenny Root        switch (density) {
18045ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_LOW:
18055ef44b7566566db08b62245cbb9002b548071603Kenny Root                return (size * DisplayMetrics.DENSITY_MEDIUM) / DisplayMetrics.DENSITY_LOW;
18065ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_MEDIUM:
18075ef44b7566566db08b62245cbb9002b548071603Kenny Root                return (size * DisplayMetrics.DENSITY_HIGH) / DisplayMetrics.DENSITY_MEDIUM;
1808d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn            case DisplayMetrics.DENSITY_TV:
1809d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn                return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH;
18105ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_HIGH:
18115ef44b7566566db08b62245cbb9002b548071603Kenny Root                return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH;
18125ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_XHIGH:
1813d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                return (size * DisplayMetrics.DENSITY_XXHIGH) / DisplayMetrics.DENSITY_XHIGH;
1814d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn            case DisplayMetrics.DENSITY_XXHIGH:
1815d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                return (size * DisplayMetrics.DENSITY_XHIGH*2) / DisplayMetrics.DENSITY_XXHIGH;
18165ef44b7566566db08b62245cbb9002b548071603Kenny Root            default:
1817d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                // The density is some abnormal value.  Return some other
1818d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                // abnormal value that is a reasonable scaling of it.
1819d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn                return (int)((size*1.5f) + .5f);
18205ef44b7566566db08b62245cbb9002b548071603Kenny Root        }
18215ef44b7566566db08b62245cbb9002b548071603Kenny Root    }
18225ef44b7566566db08b62245cbb9002b548071603Kenny Root
18239327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn    /**
18249327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn     * Returns "true" if the user interface is currently being messed with
18259327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn     * by a monkey.
18269327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn     */
18279327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn    public static boolean isUserAMonkey() {
18289327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        try {
18299327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            return ActivityManagerNative.getDefault().isUserAMonkey();
18309327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        } catch (RemoteException e) {
18319327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        }
18329327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        return false;
18339327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn    }
18343b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot
18353b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot    /**
18363b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot     * Returns "true" if device is running in a test harness.
18373b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot     */
18383b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot    public static boolean isRunningInTestHarness() {
18393b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot        return SystemProperties.getBoolean("ro.test_harness", false);
18403b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot    }
18418d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay
18428d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay    /**
18438d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay     * Returns the launch count of each installed package.
18448d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay     *
18458d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay     * @hide
18468d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay     */
18478d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay    public Map<String, Integer> getAllPackageLaunchCounts() {
18488d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay        try {
18498d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            IUsageStats usageStatsService = IUsageStats.Stub.asInterface(
18508d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay                    ServiceManager.getService("usagestats"));
18518d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            if (usageStatsService == null) {
18528d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay                return new HashMap<String, Integer>();
18538d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            }
18548d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay
1855bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay            PkgUsageStats[] allPkgUsageStats = usageStatsService.getAllPkgUsageStats();
1856bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay            if (allPkgUsageStats == null) {
1857bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay                return new HashMap<String, Integer>();
1858bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay            }
1859bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay
18608d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            Map<String, Integer> launchCounts = new HashMap<String, Integer>();
1861bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay            for (PkgUsageStats pkgUsageStats : allPkgUsageStats) {
18628d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay                launchCounts.put(pkgUsageStats.packageName, pkgUsageStats.launchCount);
18638d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            }
18648d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay
18658d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            return launchCounts;
18668d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay        } catch (RemoteException e) {
18678d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            Log.w(TAG, "Could not query launch counts", e);
18688d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            return new HashMap<String, Integer>();
18698d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay        }
18708d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay    }
18714b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
18725320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn    /** @hide */
18735320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn    public static int checkComponentPermission(String permission, int uid,
18745320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            int owningUid, boolean exported) {
18755320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // Root, system server get to do everything.
18765320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        if (uid == 0 || uid == Process.SYSTEM_UID) {
18775320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_GRANTED;
18785320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
18795320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // Isolated processes don't get any permissions.
1880f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn        if (UserHandle.isIsolated(uid)) {
18815320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_DENIED;
18825320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
18835320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // If there is a uid that owns whatever is being accessed, it has
18845320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // blanket access to it regardless of the permissions it requires.
1885f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn        if (owningUid >= 0 && UserHandle.isSameApp(uid, owningUid)) {
18865320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_GRANTED;
18875320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
18885320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // If the target is not exported, then nobody else can get to it.
18895320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        if (!exported) {
18905320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            Slog.w(TAG, "Permission denied: checkComponentPermission() owningUid=" + owningUid);
18915320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_DENIED;
18925320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
18935320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        if (permission == null) {
18945320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_GRANTED;
18955320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
18965320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        try {
18975320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return AppGlobals.getPackageManager()
18985320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn                    .checkUidPermission(permission, uid);
18995320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        } catch (RemoteException e) {
19005320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            // Should never happen, but if it does... deny!
19017d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            Slog.e(TAG, "PackageManager is dead?!?", e);
19027d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        }
19037d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        return PackageManager.PERMISSION_DENIED;
19047d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    }
19057d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
19067d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    /** @hide */
19077d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    public static int checkUidPermission(String permission, int uid) {
19087d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        try {
19097d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            return AppGlobals.getPackageManager()
19107d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                    .checkUidPermission(permission, uid);
19117d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        } catch (RemoteException e) {
19127d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            // Should never happen, but if it does... deny!
19135320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            Slog.e(TAG, "PackageManager is dead?!?", e);
19145320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
19155320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        return PackageManager.PERMISSION_DENIED;
19165320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn    }
19175320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn
19184120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    /** @hide */
19194120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    public static int handleIncomingUser(int callingPid, int callingUid, int userId,
19204120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            boolean allowAll, boolean requireFull, String name, String callerPackage) {
19214120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        if (UserHandle.getUserId(callingUid) == userId) {
19224120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            return userId;
19234120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        }
19244120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        try {
19254120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            return ActivityManagerNative.getDefault().handleIncomingUser(callingPid,
19264120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn                    callingUid, userId, allowAll, requireFull, name, callerPackage);
19274120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        } catch (RemoteException e) {
19284120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            throw new SecurityException("Failed calling activity manager", e);
19294120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        }
19304120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    }
19314120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn
19324120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    /** @hide */
19334120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    public static int getCurrentUser() {
19344120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        UserInfo ui;
19354120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        try {
19364120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            ui = ActivityManagerNative.getDefault().getCurrentUser();
19374120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            return ui != null ? ui.id : 0;
19384120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        } catch (RemoteException e) {
19394120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            return 0;
19404120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        }
19414120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    }
19424120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn
19434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    /**
19449fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy     * Returns the usage statistics of each installed package.
19459fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy     *
19469fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy     * @hide
19479fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy     */
19489fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy    public PkgUsageStats[] getAllPackageUsageStats() {
19499fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy        try {
19509fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy            IUsageStats usageStatsService = IUsageStats.Stub.asInterface(
19519fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy                    ServiceManager.getService("usagestats"));
19529fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy            if (usageStatsService != null) {
19539fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy                return usageStatsService.getAllPkgUsageStats();
19549fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy            }
19559fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy        } catch (RemoteException e) {
19569fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy            Log.w(TAG, "Could not query usage stats", e);
19579fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy        }
19589fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy        return new PkgUsageStats[0];
19599fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy    }
19609fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy
19619fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy    /**
19624b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * @param userid the user's id. Zero indicates the default user
19634b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * @hide
19644b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     */
19654b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public boolean switchUser(int userid) {
19664b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        try {
19674b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            return ActivityManagerNative.getDefault().switchUser(userid);
19684b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        } catch (RemoteException e) {
19694b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            return false;
19704b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        }
19714b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
19725e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn
19735e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn    /**
19745e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * Return whether the given user is actively running.  This means that
19755e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * the user is in the "started" state, not "stopped" -- it is currently
19765e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * allowed to run code through scheduled alarms, receiving broadcasts,
19775e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * etc.  A started user may be either the current foreground user or a
19785e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * background user; the result here does not distinguish between the two.
19795e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * @param userid the user's id. Zero indicates the default user.
19805e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * @hide
19815e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     */
19825e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn    public boolean isUserRunning(int userid) {
19835e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn        try {
1984a8a9bd65bf5865d83ef44f54552ca39522bfbcf0Dianne Hackborn            return ActivityManagerNative.getDefault().isUserRunning(userid, false);
19855e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn        } catch (RemoteException e) {
19865e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn            return false;
19875e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn        }
19885e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn    }
19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1990