diff options
author | Danning Chen <danningc@google.com> | 2020-02-18 23:50:44 -0800 |
---|---|---|
committer | Danning Chen <danningc@google.com> | 2020-02-20 22:36:52 +0000 |
commit | 3fc66d03ef38bfcb4997eb33645465f5dc622853 (patch) | |
tree | 1048ffcd903240bc92d53fb19d9edc0293810dc8 /services/people | |
parent | 876a4ab9c0c3265a873e832509ef75a1f5da0570 (diff) |
Listen to the shortcut add/update/delete changes from PeopleService
Bug: 146522621
Bug: 149556516
Test: atest com.android.server.people.data.DataManagerTest
Change-Id: I8752b50179c0fb67880324da79e51276c67d0ee9
Diffstat (limited to 'services/people')
-rw-r--r-- | services/people/java/com/android/server/people/data/DataManager.java | 53 |
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 27c169227637..cc54ecf05d9f 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(); @@ -363,7 +370,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) { @@ -622,14 +629,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); @@ -637,6 +642,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. */ @@ -789,6 +818,10 @@ public class DataManager { return Executors.newSingleThreadScheduledExecutor(); } + Executor getBackgroundExecutor() { + return BackgroundThread.getExecutor(); + } + ContactsQueryHelper createContactsQueryHelper(Context context) { return new ContactsQueryHelper(context); } |