2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-22 09:58:08 +00:00

Allow filtering notifications from work profile

BUG: 412188
BUG: 422445
This commit is contained in:
José Rebelo 2025-02-17 21:48:23 +00:00 committed by Albert Vaca Cintora
parent 737c333a91
commit 0f628d4927

View File

@ -9,6 +9,8 @@ package org.kde.kdeconnect.Plugins.NotificationsPlugin;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
@ -16,6 +18,10 @@ import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -40,9 +46,10 @@ import org.kde.kdeconnect_tp.R;
import org.kde.kdeconnect_tp.databinding.ActivityNotificationFilterBinding; import org.kde.kdeconnect_tp.databinding.ActivityNotificationFilterBinding;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import kotlin.Lazy; import kotlin.Lazy;
import kotlin.LazyKt; import kotlin.LazyKt;
@ -134,17 +141,56 @@ public class NotificationFilterActivity extends BaseActivity<ActivityNotificatio
List<ApplicationInfo> appList = packageManager.getInstalledApplications(0); List<ApplicationInfo> appList = packageManager.getInstalledApplications(0);
int count = appList.size(); int count = appList.size();
AppListInfo[] allApps = new AppListInfo[count]; final Set<String> allPackageNames = new HashSet<>(count);
final List<AppListInfo> allApps = new ArrayList<>(count);
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
ApplicationInfo appInfo = appList.get(i); final ApplicationInfo appInfo = appList.get(i);
allApps[i] = new AppListInfo(); AppListInfo appListInfo = new AppListInfo();
allApps[i].pkg = appInfo.packageName; appListInfo.pkg = appInfo.packageName;
allApps[i].name = appInfo.loadLabel(packageManager).toString(); appListInfo.name = appInfo.loadLabel(packageManager).toString();
allApps[i].icon = resizeIcon(appInfo.loadIcon(packageManager), 48); appListInfo.icon = resizeIcon(appInfo.loadIcon(packageManager), 48);
allApps[i].isEnabled = appDatabase.isEnabled(appInfo.packageName); appListInfo.isEnabled = appDatabase.isEnabled(appInfo.packageName);
allApps.add(appListInfo);
allPackageNames.add(appInfo.packageName);
} }
Arrays.sort(allApps, (lhs, rhs) -> lhs.name.compareToIgnoreCase(rhs.name));
mAllApps = Arrays.asList(allApps); // Find apps from work profile
try {
final UserHandle currentUser = Process.myUserHandle();
final LauncherApps launcher = (LauncherApps) getSystemService(Context.LAUNCHER_APPS_SERVICE);
final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
final List<UserHandle> userProfiles = um.getUserProfiles();
for (final UserHandle userProfile : userProfiles) {
if (userProfile.equals(currentUser)) {
continue;
}
final List<LauncherActivityInfo> userActivityList = launcher.getActivityList(null, userProfile);
for (final LauncherActivityInfo app : userActivityList) {
if (allPackageNames.contains(app.getApplicationInfo().packageName)) {
continue;
}
final ApplicationInfo appInfo = app.getApplicationInfo();
AppListInfo appListInfo = new AppListInfo();
appListInfo.pkg = appInfo.packageName;
appListInfo.name = appInfo.loadLabel(packageManager).toString();
appListInfo.icon = resizeIcon(appInfo.loadIcon(packageManager), 48);
appListInfo.isEnabled = appDatabase.isEnabled(appInfo.packageName);
allApps.add(appListInfo);
allPackageNames.add(app.getApplicationInfo().packageName);
}
}
} catch (final Exception e) {
Log.e("NotificationFilterActiv", "Failed to get apps from work profile", e);
}
allApps.sort((lhs, rhs) -> lhs.name.compareToIgnoreCase(rhs.name));
mAllApps = allApps;
apps = new ArrayList<>(mAllApps); apps = new ArrayList<>(mAllApps);
runOnUiThread(this::displayAppList); runOnUiThread(this::displayAppList);
}); });