summaryrefslogtreecommitdiff
path: root/services/people
diff options
context:
space:
mode:
authorDanning Chen <danningc@google.com>2020-02-21 00:55:54 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-02-21 00:55:54 +0000
commitbbf1b376c17cc0023375e0bfa55d27543708e412 (patch)
treefec4c10846d47446f0277a5d73ef90885c84781d /services/people
parent57de2191902562a8b07d5d4b37d657dd42c85674 (diff)
parent3fc66d03ef38bfcb4997eb33645465f5dc622853 (diff)
Merge "Listen to the shortcut add/update/delete changes from PeopleService"
Diffstat (limited to 'services/people')
-rw-r--r--services/people/java/com/android/server/people/data/DataManager.java53
1 files changed, 43 insertions, 10 deletions
diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java
index a1fc5704979d..3a34c6a6be95 100644
--- a/services/people/java/com/android/server/people/data/DataManager.java
+++ b/services/people/java/com/android/server/people/data/DataManager.java
@@ -31,7 +31,9 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.LauncherApps;
import android.content.pm.LauncherApps.ShortcutQuery;
+import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager.ShareShortcutInfo;
@@ -53,6 +55,7 @@ import android.service.notification.StatusBarNotification;
import android.telecom.TelecomManager;
import android.text.format.DateUtils;
import android.util.ArraySet;
+import android.util.Slog;
import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting;
@@ -61,11 +64,13 @@ import com.android.internal.content.PackageMonitor;
import com.android.internal.os.BackgroundThread;
import com.android.internal.telephony.SmsApplication;
import com.android.server.LocalServices;
+import com.android.server.notification.NotificationManagerInternal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
@@ -80,8 +85,8 @@ import java.util.function.Function;
*/
public class DataManager {
- private static final int MY_UID = Process.myUid();
- private static final int MY_PID = Process.myPid();
+ private static final String TAG = "DataManager";
+
private static final long QUERY_EVENTS_MAX_AGE_MS = DateUtils.DAY_IN_MILLIS;
private static final long USAGE_STATS_QUERY_INTERVAL_SEC = 120L;
@@ -102,6 +107,7 @@ public class DataManager {
private ShortcutServiceInternal mShortcutServiceInternal;
private PackageManagerInternal mPackageManagerInternal;
+ private NotificationManagerInternal mNotificationManagerInternal;
private UserManager mUserManager;
public DataManager(Context context) {
@@ -120,9 +126,10 @@ public class DataManager {
public void initialize() {
mShortcutServiceInternal = LocalServices.getService(ShortcutServiceInternal.class);
mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
+ mNotificationManagerInternal = LocalServices.getService(NotificationManagerInternal.class);
mUserManager = mContext.getSystemService(UserManager.class);
- mShortcutServiceInternal.addListener(new ShortcutServiceListener());
+ mShortcutServiceInternal.addShortcutChangeCallback(new ShortcutServiceCallback());
IntentFilter shutdownIntentFilter = new IntentFilter(Intent.ACTION_SHUTDOWN);
BroadcastReceiver shutdownBroadcastReceiver = new ShutdownBroadcastReceiver();
@@ -362,7 +369,7 @@ public class DataManager {
return mShortcutServiceInternal.getShortcuts(
UserHandle.USER_SYSTEM, mContext.getPackageName(),
/*changedSince=*/ 0, packageName, shortcutIds, /*locusIds=*/ null,
- /*componentName=*/ null, queryFlags, userId, MY_PID, MY_UID);
+ /*componentName=*/ null, queryFlags, userId, Process.myPid(), Process.myUid());
}
private void forAllUnlockedUsers(Consumer<UserData> consumer) {
@@ -621,14 +628,12 @@ public class DataManager {
}
/** Listener for the shortcut data changes. */
- private class ShortcutServiceListener implements
- ShortcutServiceInternal.ShortcutChangeListener {
+ private class ShortcutServiceCallback implements LauncherApps.ShortcutChangeCallback {
@Override
- public void onShortcutChanged(@NonNull String packageName, int userId) {
- BackgroundThread.getExecutor().execute(() -> {
- List<ShortcutInfo> shortcuts = getShortcuts(packageName, userId,
- /*shortcutIds=*/ null);
+ public void onShortcutsAddedOrUpdated(@NonNull String packageName,
+ @NonNull List<ShortcutInfo> shortcuts, @NonNull UserHandle user) {
+ mInjector.getBackgroundExecutor().execute(() -> {
for (ShortcutInfo shortcut : shortcuts) {
if (isPersonShortcut(shortcut)) {
addOrUpdateConversationInfo(shortcut);
@@ -636,6 +641,30 @@ public class DataManager {
}
});
}
+
+ @Override
+ public void onShortcutsRemoved(@NonNull String packageName,
+ @NonNull List<ShortcutInfo> shortcuts, @NonNull UserHandle user) {
+ mInjector.getBackgroundExecutor().execute(() -> {
+ int uid = Process.INVALID_UID;
+ try {
+ uid = mContext.getPackageManager().getPackageUidAsUser(
+ packageName, user.getIdentifier());
+ } catch (PackageManager.NameNotFoundException e) {
+ Slog.e(TAG, "Package not found: " + packageName, e);
+ }
+ PackageData packageData = getPackage(packageName, user.getIdentifier());
+ for (ShortcutInfo shortcutInfo : shortcuts) {
+ if (packageData != null) {
+ packageData.deleteDataForConversation(shortcutInfo.getId());
+ }
+ if (uid != Process.INVALID_UID) {
+ mNotificationManagerInternal.onConversationRemoved(
+ shortcutInfo.getPackage(), uid, shortcutInfo.getId());
+ }
+ }
+ });
+ }
}
/** Listener for the notifications and their settings changes. */
@@ -788,6 +817,10 @@ public class DataManager {
return Executors.newSingleThreadScheduledExecutor();
}
+ Executor getBackgroundExecutor() {
+ return BackgroundThread.getExecutor();
+ }
+
ContactsQueryHelper createContactsQueryHelper(Context context) {
return new ContactsQueryHelper(context);
}