diff options
| author | 2014-04-07 19:45:27 -0700 | |
|---|---|---|
| committer | 2014-04-08 20:51:07 -0700 | |
| commit | 13014b5fe5967b3c7e232ffaf81581ed178e6df6 (patch) | |
| tree | 4771e759f79cdffe26ac7480983ea2e1f0988082 | |
| parent | ad9ef191f50767d8d5b6f0fbd4b59bb1400dcd25 (diff) | |
Move certain internal activity manager methods to new class.
This is a little bit of refactoring in preparation for changing how
the power manager notifies system components about changes in power
state.
Deleted the startRunning method since it is no longer useful.
Bug: 13133142
Change-Id: I7f845c61ecc7ee890154ed0cbd90795de609b7ea
5 files changed, 56 insertions, 120 deletions
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java new file mode 100644 index 000000000000..5262a5f2b2b2 --- /dev/null +++ b/core/java/android/app/ActivityManagerInternal.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +/** + * Activity manager local system service interface. + * + * @hide Only for use within the system server. + */ +public abstract class ActivityManagerInternal { + // Called by the power manager. + public abstract void goingToSleep(); + public abstract void wakingUp(); +} diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 7695eccabc60..0b8568626465 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -1199,20 +1199,6 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } - case GOING_TO_SLEEP_TRANSACTION: { - data.enforceInterface(IActivityManager.descriptor); - goingToSleep(); - reply.writeNoException(); - return true; - } - - case WAKING_UP_TRANSACTION: { - data.enforceInterface(IActivityManager.descriptor); - wakingUp(); - reply.writeNoException(); - return true; - } - case SET_LOCK_SCREEN_SHOWN_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); setLockScreenShown(data.readInt() != 0); @@ -1283,17 +1269,6 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } - case START_RUNNING_TRANSACTION: { - data.enforceInterface(IActivityManager.descriptor); - String pkg = data.readString(); - String cls = data.readString(); - String action = data.readString(); - String indata = data.readString(); - startRunning(pkg, cls, action, indata); - reply.writeNoException(); - return true; - } - case HANDLE_APPLICATION_CRASH_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder app = data.readStrongBinder(); @@ -3586,26 +3561,6 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return pfd; } - public void goingToSleep() throws RemoteException - { - Parcel data = Parcel.obtain(); - Parcel reply = Parcel.obtain(); - data.writeInterfaceToken(IActivityManager.descriptor); - mRemote.transact(GOING_TO_SLEEP_TRANSACTION, data, reply, 0); - reply.readException(); - data.recycle(); - reply.recycle(); - } - public void wakingUp() throws RemoteException - { - Parcel data = Parcel.obtain(); - Parcel reply = Parcel.obtain(); - data.writeInterfaceToken(IActivityManager.descriptor); - mRemote.transact(WAKING_UP_TRANSACTION, data, reply, 0); - reply.readException(); - data.recycle(); - reply.recycle(); - } public void setLockScreenShown(boolean shown) throws RemoteException { Parcel data = Parcel.obtain(); @@ -3693,20 +3648,6 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return res; } - public void startRunning(String pkg, String cls, String action, - String indata) throws RemoteException { - Parcel data = Parcel.obtain(); - Parcel reply = Parcel.obtain(); - data.writeInterfaceToken(IActivityManager.descriptor); - data.writeString(pkg); - data.writeString(cls); - data.writeString(action); - data.writeString(indata); - mRemote.transact(START_RUNNING_TRANSACTION, data, reply, 0); - reply.readException(); - data.recycle(); - reply.recycle(); - } public boolean testIsSystemReady() { /* this base class version is never called */ diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 02a6343bf746..4e2a57ddc41b 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -228,8 +228,6 @@ public interface IActivityManager extends IInterface { public void forceStopPackage(final String packageName, int userId) throws RemoteException; // Note: probably don't want to allow applications access to these. - public void goingToSleep() throws RemoteException; - public void wakingUp() throws RemoteException; public void setLockScreenShown(boolean shown) throws RemoteException; public void unhandledBack() throws RemoteException; @@ -249,8 +247,6 @@ public interface IActivityManager extends IInterface { public boolean killProcessesBelowForeground(String reason) throws RemoteException; // Special low-level communication with activity manager. - public void startRunning(String pkg, String cls, String action, - String data) throws RemoteException; public void handleApplicationCrash(IBinder app, ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException; public boolean handleApplicationWtf(IBinder app, String tag, @@ -525,7 +521,6 @@ public interface IActivityManager extends IInterface { // Please keep these transaction codes the same -- they are also // sent by C++ code. - int START_RUNNING_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION; int HANDLE_APPLICATION_CRASH_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+1; int START_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+2; int UNHANDLED_BACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+3; @@ -561,8 +556,6 @@ public interface IActivityManager extends IInterface { int UNBIND_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+36; int PUBLISH_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+37; int ACTIVITY_RESUMED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+38; - int GOING_TO_SLEEP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+39; - int WAKING_UP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+40; int SET_DEBUG_APP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+41; int SET_ALWAYS_FINISH_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+42; int START_INSTRUMENTATION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+43; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6c3f528e491e..98cbe7d59c26 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -24,7 +24,6 @@ import static com.android.internal.util.XmlUtils.writeLongAttribute; import static com.android.server.Watchdog.NATIVE_STACKS_OF_INTEREST; import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT; import static org.xmlpull.v1.XmlPullParser.START_TAG; - import static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID; import android.app.AppOpsManager; @@ -33,6 +32,7 @@ import android.app.IActivityContainerCallback; import android.appwidget.AppWidgetManager; import android.graphics.Rect; import android.util.ArrayMap; + import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IAppOpsService; @@ -49,6 +49,7 @@ import com.android.internal.util.Preconditions; import com.android.server.AppOpsService; import com.android.server.AttributeCache; import com.android.server.IntentResolver; +import com.android.server.LocalServices; import com.android.server.ServiceThread; import com.android.server.SystemService; import com.android.server.Watchdog; @@ -61,7 +62,6 @@ import com.google.android.collect.Lists; import com.google.android.collect.Maps; import dalvik.system.Zygote; - import libcore.io.IoUtils; import org.xmlpull.v1.XmlPullParser; @@ -72,6 +72,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManager.StackInfo; +import android.app.ActivityManagerInternal; import android.app.ActivityManagerNative; import android.app.ActivityOptions; import android.app.ActivityThread; @@ -798,9 +799,8 @@ public final class ActivityManagerService extends ActivityManagerNative /** * Used to control how we initialize the service. */ - boolean mStartRunning = false; ComponentName mTopComponent; - String mTopAction; + String mTopAction = Intent.ACTION_MAIN; String mTopData; boolean mProcessesReady = false; boolean mSystemReady = false; @@ -1985,7 +1985,8 @@ public final class ActivityManagerService extends ActivityManagerNative mBatteryStatsService.publish(mContext); mUsageStatsService.publish(mContext); mAppOpsService.publish(mContext); - startRunning(null, null, null, null); + + LocalServices.addService(ActivityManagerInternal.class, new LocalService()); } @Override @@ -8164,13 +8165,7 @@ public final class ActivityManagerService extends ActivityManagerNative return mSleeping || mShuttingDown; } - public void goingToSleep() { - if (checkCallingPermission(android.Manifest.permission.DEVICE_POWER) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException("Requires permission " - + android.Manifest.permission.DEVICE_POWER); - } - + void goingToSleep() { synchronized(this) { mWentToSleep = true; updateEventDispatchingLocked(); @@ -8245,13 +8240,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } - public void wakingUp() { - if (checkCallingPermission(android.Manifest.permission.DEVICE_POWER) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException("Requires permission " - + android.Manifest.permission.DEVICE_POWER); - } - + void wakingUp() { synchronized(this) { mWentToSleep = false; updateEventDispatchingLocked(); @@ -8971,25 +8960,6 @@ public final class ActivityManagerService extends ActivityManagerNative } } - public final void startRunning(String pkg, String cls, String action, - String data) { - synchronized(this) { - if (mStartRunning) { - return; - } - mStartRunning = true; - mTopComponent = pkg != null && cls != null - ? new ComponentName(pkg, cls) : null; - mTopAction = action != null ? action : Intent.ACTION_MAIN; - mTopData = data; - if (!mSystemReady) { - return; - } - } - - systemReady(null); - } - private void retrieveSettings() { final ContentResolver resolver = mContext.getContentResolver(); String debugApp = Settings.Global.getString( @@ -9202,9 +9172,6 @@ public final class ActivityManagerService extends ActivityManagerNative mAppOpsService.systemReady(); mSystemReady = true; - if (!mStartRunning) { - return; - } } ArrayList<ProcessRecord> procsToKill = null; @@ -10884,8 +10851,7 @@ public final class ActivityManagerService extends ActivityManagerNative } if (dumpAll) { pw.println(" Total persistent processes: " + numPers); - pw.println(" mStartRunning=" + mStartRunning - + " mProcessesReady=" + mProcessesReady + pw.println(" mProcessesReady=" + mProcessesReady + " mSystemReady=" + mSystemReady); pw.println(" mBooting=" + mBooting + " mBooted=" + mBooted @@ -16529,4 +16495,16 @@ public final class ActivityManagerService extends ActivityManagerNative info.applicationInfo = getAppInfoForUser(info.applicationInfo, userId); return info; } + + private final class LocalService extends ActivityManagerInternal { + @Override + public void goingToSleep() { + ActivityManagerService.this.goingToSleep(); + } + + @Override + public void wakingUp() { + ActivityManagerService.this.wakingUp(); + } + } } diff --git a/services/core/java/com/android/server/power/Notifier.java b/services/core/java/com/android/server/power/Notifier.java index c5a71eccce02..19d53cbb823a 100644 --- a/services/core/java/com/android/server/power/Notifier.java +++ b/services/core/java/com/android/server/power/Notifier.java @@ -16,10 +16,13 @@ package com.android.server.power; +import android.app.ActivityManagerInternal; import android.app.AppOpsManager; + import com.android.internal.app.IAppOpsService; import com.android.internal.app.IBatteryStats; import com.android.server.EventLogTags; +import com.android.server.LocalServices; import android.app.ActivityManagerNative; import android.content.BroadcastReceiver; @@ -81,6 +84,7 @@ final class Notifier { private final SuspendBlocker mSuspendBlocker; private final ScreenOnBlocker mScreenOnBlocker; private final WindowManagerPolicy mPolicy; + private final ActivityManagerInternal mActivityManagerInternal; private final NotifierHandler mHandler; private final Intent mScreenOnIntent; @@ -115,6 +119,7 @@ final class Notifier { mSuspendBlocker = suspendBlocker; mScreenOnBlocker = screenOnBlocker; mPolicy = policy; + mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); mHandler = new NotifierHandler(looper); mScreenOnIntent = new Intent(Intent.ACTION_SCREEN_ON); @@ -379,12 +384,7 @@ final class Notifier { EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 1, 0, 0, 0); mPolicy.screenTurningOn(mScreenOnListener); - - try { - ActivityManagerNative.getDefault().wakingUp(); - } catch (RemoteException e) { - // ignore it - } + mActivityManagerInternal.wakingUp(); if (ActivityManagerNative.isSystemReady()) { mContext.sendOrderedBroadcastAsUser(mScreenOnIntent, UserHandle.ALL, null, @@ -435,11 +435,7 @@ final class Notifier { EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 0, why, 0, 0); mPolicy.screenTurnedOff(why); - try { - ActivityManagerNative.getDefault().goingToSleep(); - } catch (RemoteException e) { - // ignore it. - } + mActivityManagerInternal.goingToSleep(); if (ActivityManagerNative.isSystemReady()) { mContext.sendOrderedBroadcastAsUser(mScreenOffIntent, UserHandle.ALL, null, |