diff options
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 0000000..5262a5f --- /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 7695ecc..0b85686 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 02a6343..4e2a57d 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 6c3f528..98cbe7d 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 c5a71ec..19d53cb 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, |
