summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/power/PowerManagerShellCommand.java22
1 files changed, 17 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/power/PowerManagerShellCommand.java b/services/core/java/com/android/server/power/PowerManagerShellCommand.java
index f69a017fc45a..35a69a29d16a 100644
--- a/services/core/java/com/android/server/power/PowerManagerShellCommand.java
+++ b/services/core/java/com/android/server/power/PowerManagerShellCommand.java
@@ -22,6 +22,8 @@ import android.app.IAlarmListener;
import android.app.IAlarmManager;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManagerInternal;
+import android.os.Binder;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.PowerManagerInternal;
@@ -32,6 +34,9 @@ import android.os.SystemClock;
import android.util.SparseArray;
import android.view.Display;
+import com.android.server.LocalServices;
+import com.android.server.pm.pkg.AndroidPackage;
+
import java.io.PrintWriter;
import java.util.List;
@@ -266,11 +271,18 @@ class PowerManagerShellCommand extends ShellCommand {
ServiceManager.getService(Context.ALARM_SERVICE));
}
try {
- // This command is called by the shell, which has "com.android.shell" as package
- // name.
- pw.println("Schedule an alarm to wakeup in "
- + delayMillis + " ms, on behalf of shell.");
- mAlarmManager.set("com.android.shell",
+ PackageManagerInternal packageManagerInternal =
+ LocalServices.getService(PackageManagerInternal.class);
+ AndroidPackage callingPackage =
+ packageManagerInternal.getPackage(Binder.getCallingUid());
+ if (callingPackage == null) {
+ pw.println("Calling uid " + Binder.getCallingUid() + " is not an android"
+ + " package. Cannot schedule a delayed wakeup on behalf of it.");
+ return -1;
+ }
+ pw.println("Schedule an alarm to wakeup in " + delayMillis +
+ " ms, on behalf of " + callingPackage.getPackageName());
+ mAlarmManager.set(callingPackage.getPackageName(),
AlarmManager.RTC_WAKEUP, wakeUpTime,
0, 0, AlarmManager.FLAG_PRIORITIZE,
null, mAlarmListener, "PowerManagerShellCommand", null, null);