From 597373f1261992387d92dd226a88d3ff9d187fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Fri, 28 Jul 2023 18:53:50 +0100 Subject: [PATCH] Allow filtering notifications from work profile apps --- .../adapter/AppBlacklistAdapter.java | 57 ++++++++++++++++++- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/AppBlacklistAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/AppBlacklistAdapter.java index 679c5c76d..b70b7bb15 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/AppBlacklistAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/AppBlacklistAdapter.java @@ -20,7 +20,12 @@ package nodomain.freeyourgadget.gadgetbridge.adapter; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.LauncherActivityInfo; +import android.content.pm.LauncherApps; import android.content.pm.PackageManager; +import android.os.Process; +import android.os.UserHandle; +import android.os.UserManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -36,6 +41,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.IdentityHashMap; +import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -47,11 +53,15 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB; import static nodomain.freeyourgadget.gadgetbridge.GBApplication.packageNameToPebbleMsgSender; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class AppBlacklistAdapter extends RecyclerView.Adapter implements Filterable { + protected static final Logger LOG = LoggerFactory.getLogger(AppBlacklistAdapter.class); public static final String STRING_EXTRA_PACKAGE_NAME = "packageName"; - private List applicationInfoList; + private final List applicationInfoList; private final int mLayoutId; private final Context mContext; private final PackageManager mPm; @@ -64,7 +74,7 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter(applicationInfoList.size()); @@ -158,9 +168,50 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter getAllApplications() { + final Set allPackageNames = new HashSet<>(); + final List ret = new LinkedList<>(); + + // Get apps for the current user + final List currentUserApps = mPm.getInstalledApplications(PackageManager.GET_META_DATA); + for (final ApplicationInfo app : currentUserApps) { + allPackageNames.add(app.packageName); + ret.add(app); + } + + // Add all apps from other users (eg. manager profile) + try { + final UserHandle currentUser = Process.myUserHandle(); + final LauncherApps launcher = (LauncherApps) mContext.getSystemService(Context.LAUNCHER_APPS_SERVICE); + final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); + final List userProfiles = um.getUserProfiles(); + for (final UserHandle userProfile : userProfiles) { + if (userProfile.equals(currentUser)) { + continue; + } + + final List userActivityList = launcher.getActivityList(null, userProfile); + + for (final LauncherActivityInfo app : userActivityList) { + if (!allPackageNames.contains(app.getApplicationInfo().packageName)) { + allPackageNames.add(app.getApplicationInfo().packageName); + ret.add(app.getApplicationInfo()); + } + } + } + } catch (final Exception e) { + LOG.error("Failed to get apps from other users", e); + } + + return ret; + } + public void checkAllApplications() { Set apps_blacklist = new HashSet<>(); - List allApps = mPm.getInstalledApplications(PackageManager.GET_META_DATA); + List allApps = getAllApplications(); for (ApplicationInfo ai : allApps) { apps_blacklist.add(ai.packageName); }