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:
parent
737c333a91
commit
0f628d4927
@ -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);
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user