diff options
5 files changed, 19 insertions, 19 deletions
diff --git a/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt index 97dcee6e4b70..e0e1b7202347 100644 --- a/config/hiddenapi-greylist.txt +++ b/config/hiddenapi-greylist.txt @@ -56,7 +56,6 @@ Landroid/app/IActivityManager$Stub$Proxy;->getConfiguration()Landroid/content/re Landroid/app/IActivityManager$Stub$Proxy;->getLaunchedFromUid(Landroid/os/IBinder;)I Landroid/app/IActivityManager$Stub$Proxy;->getProcessLimit()I Landroid/app/IActivityManager$Stub$Proxy;->getProcessPss([I)[J -Landroid/app/IActivityManager$Stub$Proxy;->isAppForeground(I)Z Landroid/app/IActivityManager$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/IActivityManager$Stub$Proxy;->setActivityController(Landroid/app/IActivityController;Z)V Landroid/app/IActivityManager$Stub$Proxy;->updatePersistentConfiguration(Landroid/content/res/Configuration;)V diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 0b509169010c..9d44e58112c5 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -314,4 +314,7 @@ public abstract class ActivityManagerInternal { /** Returns mount mode for process running with given pid */ public abstract int getStorageMountMode(int pid, int uid); + + /** Returns true if the given uid is the app in the foreground. */ + public abstract boolean isAppForeground(int uid); } diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index fb519b625012..347973ea3387 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -421,7 +421,6 @@ interface IActivityManager { void resizeDockedStack(in Rect dockedBounds, in Rect tempDockedTaskBounds, in Rect tempDockedTaskInsetBounds, in Rect tempOtherTaskBounds, in Rect tempOtherTaskInsetBounds); - boolean isAppForeground(int uid); void removeStack(int stackId); void makePackageIdle(String packageName, int userId); int getMemoryTrimLevel(); diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java index 5d44144f3a21..b01117c438f0 100644 --- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java +++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java @@ -39,6 +39,7 @@ import static com.android.server.backup.internal.BackupHandler.MSG_SCHEDULE_BACK import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManager; +import android.app.ActivityManagerInternal; import android.app.AlarmManager; import android.app.AppGlobals; import android.app.IActivityManager; @@ -103,6 +104,7 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.Preconditions; import com.android.server.AppWidgetBackupBridge; import com.android.server.EventLogTags; +import com.android.server.LocalServices; import com.android.server.backup.fullbackup.FullBackupEntry; import com.android.server.backup.fullbackup.PerformFullTransportBackupTask; import com.android.server.backup.internal.BackupHandler; @@ -247,10 +249,11 @@ public class UserBackupManagerService { private final TransportManager mTransportManager; private final HandlerThread mUserBackupThread; - private final Context mContext; - private final PackageManager mPackageManager; - private final IPackageManager mPackageManagerBinder; - private final IActivityManager mActivityManager; + private Context mContext; + private PackageManager mPackageManager; + private IPackageManager mPackageManagerBinder; + private IActivityManager mActivityManager; + private ActivityManagerInternal mActivityManagerInternal; private PowerManager mPowerManager; private final AlarmManager mAlarmManager; private final IStorageManager mStorageManager; @@ -460,6 +463,7 @@ public class UserBackupManagerService { mPackageManager = context.getPackageManager(); mPackageManagerBinder = AppGlobals.getPackageManager(); mActivityManager = ActivityManager.getService(); + mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); @@ -2074,7 +2078,8 @@ public class UserBackupManagerService { final int privFlags = appInfo.applicationInfo.privateFlags; headBusy = (privFlags & PRIVATE_FLAG_BACKUP_IN_FOREGROUND) == 0 - && mActivityManager.isAppForeground(appInfo.applicationInfo.uid); + && mActivityManagerInternal.isAppForeground( + appInfo.applicationInfo.uid); if (headBusy) { final long nextEligible = System.currentTimeMillis() @@ -2097,8 +2102,6 @@ public class UserBackupManagerService { // queue entirely and move on, but if there's nothing else in the queue // we should bail entirely. headBusy cannot have been set to true yet. runBackup = (mFullBackupQueue.size() > 1); - } catch (RemoteException e) { - // Cannot happen; the Activity Manager is in the same process } } } while (headBusy); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 62ebc5d871db..4f21ee8d8624 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -5329,16 +5329,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } - @Override - public boolean isAppForeground(int uid) { - int callerUid = Binder.getCallingUid(); - if (UserHandle.isCore(callerUid) || callerUid == uid) { - return isAppForegroundInternal(uid); - } - return false; - } - - private boolean isAppForegroundInternal(int uid) { + private boolean isAppForeground(int uid) { synchronized (this) { UidRecord uidRec = mActiveUids.get(uid); if (uidRec == null || uidRec.idle) { @@ -19694,6 +19685,11 @@ public class ActivityManagerService extends IActivityManager.Stub return pr == null ? Zygote.MOUNT_EXTERNAL_NONE : pr.mountMode; } } + + @Override + public boolean isAppForeground(int uid) { + return ActivityManagerService.this.isAppForeground(uid); + } } long inputDispatchingTimedOut(int pid, final boolean aboveSystem, String reason) { |