Merge "Don't initialize the People Service at boot but on demand. The service is not used by any known apps and we don't used any of it's data." into main
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 61ec0e7..d1d745f 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -246,6 +246,7 @@
public static final String RESULT_ROWS_DELETED = "result_rows_deleted";
public static final String RESULT_SETTINGS_LIST = "result_settings_list";
+ public static final String SETTINGS_PROVIDER_JOBS_NS = "SettingsProviderJobsNamespace";
// Used for scheduling jobs to make a copy for the settings files
public static final int WRITE_FALLBACK_SETTINGS_FILES_JOB_ID = 1;
public static final long ONE_DAY_INTERVAL_MILLIS = 24 * 60 * 60 * 1000L;
@@ -2785,12 +2786,13 @@
*/
public void scheduleWriteFallbackFilesJob() {
final Context context = getContext();
- final JobScheduler jobScheduler =
+ JobScheduler jobScheduler =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
if (jobScheduler == null) {
// Might happen: SettingsProvider is created before JobSchedulerService in system server
return;
}
+ jobScheduler = jobScheduler.forNamespace(SETTINGS_PROVIDER_JOBS_NS);
// Check if the job is already scheduled. If so, skip scheduling another one
if (jobScheduler.getPendingJob(WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) != null) {
return;
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/WriteFallbackSettingsFilesJobService.java b/packages/SettingsProvider/src/com/android/providers/settings/WriteFallbackSettingsFilesJobService.java
index 66aa7ba..91e8bf8 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/WriteFallbackSettingsFilesJobService.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/WriteFallbackSettingsFilesJobService.java
@@ -16,6 +16,7 @@
package com.android.providers.settings;
+import static com.android.providers.settings.SettingsProvider.SETTINGS_PROVIDER_JOBS_NS;
import static com.android.providers.settings.SettingsProvider.TABLE_CONFIG;
import static com.android.providers.settings.SettingsProvider.TABLE_GLOBAL;
import static com.android.providers.settings.SettingsProvider.TABLE_SECURE;
@@ -35,7 +36,8 @@
public class WriteFallbackSettingsFilesJobService extends JobService {
@Override
public boolean onStartJob(final JobParameters params) {
- if (params.getJobId() != WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) {
+ if (!SETTINGS_PROVIDER_JOBS_NS.equals(params.getJobNamespace())
+ || params.getJobId() != WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) {
return false;
}
final List<String> settingsFiles = new ArrayList<>();
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index 9069eb2..38c6a52 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -193,8 +193,11 @@
if (IS_EMULATOR) {
mEmulatorClipboardMonitor = new EmulatorClipboardMonitor((clip) -> {
synchronized (mLock) {
- setPrimaryClipInternalLocked(getClipboardLocked(0, DEVICE_ID_DEFAULT), clip,
- android.os.Process.SYSTEM_UID, null);
+ Clipboard clipboard = getClipboardLocked(0, DEVICE_ID_DEFAULT);
+ if (clipboard != null) {
+ setPrimaryClipInternalLocked(clipboard, clip, android.os.Process.SYSTEM_UID,
+ null);
+ }
}
});
} else {
@@ -637,6 +640,9 @@
}
Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
+ if (clipboard == null) {
+ return null;
+ }
showAccessNotificationLocked(pkg, intendingUid, intendingUserId, clipboard);
notifyTextClassifierLocked(clipboard, pkg, intendingUid);
if (clipboard.primaryClip != null) {
@@ -665,7 +671,7 @@
}
synchronized (mLock) {
Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
- return clipboard.primaryClip != null
+ return (clipboard != null && clipboard.primaryClip != null)
? clipboard.primaryClip.getDescription() : null;
}
}
@@ -688,7 +694,8 @@
return false;
}
synchronized (mLock) {
- return getClipboardLocked(intendingUserId, intendingDeviceId).primaryClip != null;
+ Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
+ return clipboard != null && clipboard.primaryClip != null;
}
}
@@ -709,8 +716,11 @@
return;
}
synchronized (mLock) {
- getClipboardLocked(intendingUserId, intendingDeviceId)
- .primaryClipListeners
+ Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
+ if (clipboard == null) {
+ return;
+ }
+ clipboard.primaryClipListeners
.register(
listener,
new ListenerInfo(intendingUid, callingPackage, attributionTag));
@@ -733,8 +743,11 @@
return;
}
synchronized (mLock) {
- getClipboardLocked(intendingUserId,
- intendingDeviceId).primaryClipListeners.unregister(listener);
+ Clipboard clipboard = getClipboardLocked(intendingUserId,
+ intendingDeviceId);
+ if (clipboard != null) {
+ clipboard.primaryClipListeners.unregister(listener);
+ }
}
}
@@ -757,7 +770,7 @@
}
synchronized (mLock) {
Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
- if (clipboard.primaryClip != null) {
+ if (clipboard != null && clipboard.primaryClip != null) {
CharSequence text = clipboard.primaryClip.getItemAt(0).getText();
return text != null && text.length() > 0;
}
@@ -786,7 +799,7 @@
}
synchronized (mLock) {
Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
- if (clipboard.primaryClip != null) {
+ if (clipboard != null && clipboard.primaryClip != null) {
return clipboard.mPrimaryClipPackage;
}
return null;
@@ -808,7 +821,8 @@
final int intendingUid = msg.arg2;
final int intendingDeviceId = ((Pair<Integer, Integer>) msg.obj).second;
synchronized (mLock) {
- if (getClipboardLocked(userId, intendingDeviceId).primaryClip != null) {
+ Clipboard clipboard = getClipboardLocked(userId, intendingDeviceId);
+ if (clipboard != null && clipboard.primaryClip != null) {
FrameworkStatsLog.write(FrameworkStatsLog.CLIPBOARD_CLEARED,
FrameworkStatsLog.CLIPBOARD_CLEARED__SOURCE__AUTO_CLEAR);
setPrimaryClipInternalLocked(
@@ -824,9 +838,23 @@
};
@GuardedBy("mLock")
- private Clipboard getClipboardLocked(@UserIdInt int userId, int deviceId) {
+ private @Nullable Clipboard getClipboardLocked(@UserIdInt int userId, int deviceId) {
Clipboard clipboard = mClipboards.get(userId, deviceId);
if (clipboard == null) {
+ try {
+ if (!mUm.isUserRunning(userId)) {
+ Slog.w(TAG, "getClipboardLocked called with not running userId " + userId);
+ return null;
+ }
+ } catch (RemoteException e) {
+ Slog.e(TAG, "RemoteException calling UserManager: " + e);
+ return null;
+ }
+ if (deviceId != DEVICE_ID_DEFAULT && !mVdm.isValidVirtualDeviceId(deviceId)) {
+ Slog.w(TAG, "getClipboardLocked called with invalid (possibly released) deviceId "
+ + deviceId);
+ return null;
+ }
clipboard = new Clipboard(userId, deviceId);
mClipboards.add(userId, deviceId, clipboard);
}
@@ -876,8 +904,11 @@
final int userId = UserHandle.getUserId(uid);
// Update this user
- setPrimaryClipInternalLocked(getClipboardLocked(userId, deviceId), clip, uid,
- sourcePackage);
+ Clipboard clipboard = getClipboardLocked(userId, deviceId);
+ if (clipboard == null) {
+ return;
+ }
+ setPrimaryClipInternalLocked(clipboard, clip, uid, sourcePackage);
// Update related users
List<UserInfo> related = getRelatedProfiles(userId);
@@ -911,8 +942,11 @@
final boolean canCopyIntoProfile = !hasRestriction(
UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id);
if (canCopyIntoProfile) {
- setPrimaryClipInternalNoClassifyLocked(
- getClipboardLocked(id, deviceId), clip, uid, sourcePackage);
+ Clipboard relatedClipboard = getClipboardLocked(id, deviceId);
+ if (relatedClipboard != null) {
+ setPrimaryClipInternalNoClassifyLocked(relatedClipboard, clip, uid,
+ sourcePackage);
+ }
}
}
}
@@ -1046,6 +1080,9 @@
synchronized (mLock) {
Clipboard clipboard = getClipboardLocked(userId, deviceId);
+ if (clipboard == null) {
+ return;
+ }
if (clipboard.primaryClip == clip) {
applyClassificationAndSendBroadcastLocked(
clipboard, confidences, links, classifier);
@@ -1061,7 +1098,8 @@
UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id);
if (canCopyIntoProfile) {
Clipboard relatedClipboard = getClipboardLocked(id, deviceId);
- if (hasTextLocked(relatedClipboard, text)) {
+ if (relatedClipboard != null
+ && hasTextLocked(relatedClipboard, text)) {
applyClassificationAndSendBroadcastLocked(
relatedClipboard, confidences, links, classifier);
}
@@ -1184,9 +1222,10 @@
Binder.restoreCallingIdentity(oldIdentity);
}
Clipboard clipboard = getClipboardLocked(UserHandle.getUserId(uid), deviceId);
- if (clipboard.primaryClip != null && !clipboard.activePermissionOwners.contains(pkg)) {
+ if (clipboard != null && clipboard.primaryClip != null
+ && !clipboard.activePermissionOwners.contains(pkg)) {
final int N = clipboard.primaryClip.getItemCount();
- for (int i=0; i<N; i++) {
+ for (int i = 0; i < N; i++) {
grantItemPermission(clipboard.primaryClip.getItemAt(i), clipboard.primaryClipUid,
pkg, UserHandle.getUserId(uid));
}