use of android.content.pm.LauncherActivityInfo in project KISS by Neamar.
the class IconsHandler method getDefaultAppDrawable.
public Drawable getDefaultAppDrawable(ComponentName componentName, UserHandle userHandle) {
try {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
LauncherApps launcher = (LauncherApps) ctx.getSystemService(Context.LAUNCHER_APPS_SERVICE);
LauncherActivityInfo info = launcher.getActivityList(componentName.getPackageName(), userHandle.getRealHandle()).get(0);
return info.getBadgedIcon(0);
} else {
return pm.getActivityIcon(componentName);
}
} catch (NameNotFoundException | IndexOutOfBoundsException e) {
Log.e(TAG, "Unable to found component " + componentName.toString() + e);
return null;
}
}
use of android.content.pm.LauncherActivityInfo in project KISS by Neamar.
the class LoadAppPojos method doInBackground.
@Override
protected ArrayList<AppPojo> doInBackground(Void... params) {
long start = System.nanoTime();
ArrayList<AppPojo> apps = new ArrayList<>();
String excludedAppList = PreferenceManager.getDefaultSharedPreferences(context).getString("excluded-apps-list", context.getPackageName() + ";");
List excludedApps = Arrays.asList(excludedAppList.split(";"));
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UserManager manager = (UserManager) context.getSystemService(Context.USER_SERVICE);
LauncherApps launcher = (LauncherApps) context.getSystemService(Context.LAUNCHER_APPS_SERVICE);
// Handle multi-profile support introduced in Android 5 (#542)
for (android.os.UserHandle profile : manager.getUserProfiles()) {
UserHandle user = new UserHandle(manager.getSerialNumberForUser(profile), profile);
for (LauncherActivityInfo activityInfo : launcher.getActivityList(null, profile)) {
ApplicationInfo appInfo = activityInfo.getApplicationInfo();
String fullPackageName = user.addUserSuffixToString(appInfo.packageName, '#');
if (!excludedApps.contains(fullPackageName)) {
AppPojo app = new AppPojo();
app.id = user.addUserSuffixToString(pojoScheme + appInfo.packageName + "/" + activityInfo.getName(), '/');
app.setName(activityInfo.getLabel().toString());
app.packageName = appInfo.packageName;
app.activityName = activityInfo.getName();
// Wrap Android user handle in opaque container that will work across
// all Android versions
app.userHandle = user;
app.setTags(tagsHandler.getTags(app.id));
apps.add(app);
}
}
}
} else {
PackageManager manager = context.getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
for (ResolveInfo info : manager.queryIntentActivities(mainIntent, 0)) {
ApplicationInfo appInfo = info.activityInfo.applicationInfo;
if (!excludedApps.contains(appInfo.packageName)) {
AppPojo app = new AppPojo();
app.id = pojoScheme + appInfo.packageName + "/" + info.activityInfo.name;
app.setName(info.loadLabel(manager).toString());
app.packageName = appInfo.packageName;
app.activityName = info.activityInfo.name;
app.userHandle = new UserHandle();
app.setTags(tagsHandler.getTags(app.id));
apps.add(app);
}
}
}
// Apply app sorting preference
if (prefs.getString("sort-apps", "alphabetical").equals("invertedAlphabetical")) {
Collections.sort(apps, Collections.reverseOrder(new AppPojo.NameComparator()));
} else {
Collections.sort(apps, new AppPojo.NameComparator());
}
long end = System.nanoTime();
Log.i("time", Long.toString((end - start) / 1000000) + " milliseconds to list apps");
return apps;
}
use of android.content.pm.LauncherActivityInfo in project Taskbar by farmerbb.
the class StartMenuService method refreshApps.
private void refreshApps(final String query, final boolean firstDraw) {
if (thread != null)
thread.interrupt();
handler = new Handler();
thread = new Thread(() -> {
if (pm == null)
pm = getPackageManager();
UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
LauncherApps launcherApps = (LauncherApps) getSystemService(Context.LAUNCHER_APPS_SERVICE);
final List<UserHandle> userHandles = userManager.getUserProfiles();
final List<LauncherActivityInfo> unfilteredList = new ArrayList<>();
for (UserHandle handle : userHandles) {
unfilteredList.addAll(launcherApps.getActivityList(null, handle));
}
final List<LauncherActivityInfo> topAppsList = new ArrayList<>();
final List<LauncherActivityInfo> allAppsList = new ArrayList<>();
final List<LauncherActivityInfo> list = new ArrayList<>();
TopApps topApps = TopApps.getInstance(StartMenuService.this);
for (LauncherActivityInfo appInfo : unfilteredList) {
if (topApps.isTopApp(appInfo.getComponentName().flattenToString()) || topApps.isTopApp(appInfo.getName()))
topAppsList.add(appInfo);
}
Blacklist blacklist = Blacklist.getInstance(StartMenuService.this);
for (LauncherActivityInfo appInfo : unfilteredList) {
if (!(blacklist.isBlocked(appInfo.getComponentName().flattenToString()) || blacklist.isBlocked(appInfo.getName())) && !(topApps.isTopApp(appInfo.getComponentName().flattenToString()) || topApps.isTopApp(appInfo.getName())))
allAppsList.add(appInfo);
}
Collections.sort(topAppsList, comparator);
Collections.sort(allAppsList, comparator);
list.addAll(topAppsList);
list.addAll(allAppsList);
topAppsList.clear();
allAppsList.clear();
List<LauncherActivityInfo> queryList;
if (query == null)
queryList = list;
else {
queryList = new ArrayList<>();
for (LauncherActivityInfo appInfo : list) {
if (appInfo.getLabel().toString().toLowerCase().contains(query.toLowerCase()))
queryList.add(appInfo);
}
}
// Now that we've generated the list of apps,
// we need to determine if we need to redraw the start menu or not
boolean shouldRedrawStartMenu = false;
List<String> finalApplicationIds = new ArrayList<>();
if (query == null && !firstDraw) {
for (LauncherActivityInfo appInfo : queryList) {
finalApplicationIds.add(appInfo.getApplicationInfo().packageName);
}
if (finalApplicationIds.size() != currentStartMenuIds.size())
shouldRedrawStartMenu = true;
else {
for (int i = 0; i < finalApplicationIds.size(); i++) {
if (!finalApplicationIds.get(i).equals(currentStartMenuIds.get(i))) {
shouldRedrawStartMenu = true;
break;
}
}
}
} else
shouldRedrawStartMenu = true;
if (shouldRedrawStartMenu) {
if (query == null)
currentStartMenuIds = finalApplicationIds;
Drawable defaultIcon = pm.getDefaultActivityIcon();
final List<AppEntry> entries = new ArrayList<>();
for (LauncherActivityInfo appInfo : queryList) {
// Attempt to work around frequently reported OutOfMemoryErrors
String label;
Drawable icon;
try {
label = appInfo.getLabel().toString();
icon = IconCache.getInstance(StartMenuService.this).getIcon(StartMenuService.this, pm, appInfo);
} catch (OutOfMemoryError e) {
System.gc();
label = appInfo.getApplicationInfo().packageName;
icon = defaultIcon;
}
AppEntry newEntry = new AppEntry(appInfo.getApplicationInfo().packageName, new ComponentName(appInfo.getApplicationInfo().packageName, appInfo.getName()).flattenToString(), label, icon, false);
newEntry.setUserId(userManager.getSerialNumberForUser(appInfo.getUser()));
entries.add(newEntry);
}
handler.post(() -> {
String queryText = searchView.getQuery().toString();
if (query == null && queryText.length() == 0 || query != null && query.equals(queryText)) {
StartMenuAdapter adapter;
SharedPreferences pref = U.getSharedPreferences(StartMenuService.this);
if (pref.getString("start_menu_layout", "list").equals("grid")) {
startMenu.setNumColumns(3);
adapter = new StartMenuAdapter(StartMenuService.this, R.layout.row_alt, entries);
} else
adapter = new StartMenuAdapter(StartMenuService.this, R.layout.row, entries);
int position = startMenu.getFirstVisiblePosition();
startMenu.setAdapter(adapter);
startMenu.setSelection(position);
if (adapter.getCount() > 0)
textView.setText(null);
else if (query != null)
textView.setText(getString(Patterns.WEB_URL.matcher(query).matches() ? R.string.press_enter_alt : R.string.press_enter));
else
textView.setText(getString(R.string.nothing_to_see_here));
}
});
}
});
thread.start();
}
use of android.content.pm.LauncherActivityInfo in project Taskbar by farmerbb.
the class TaskbarService method updateRecentApps.
@SuppressWarnings("Convert2streamapi")
@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
private void updateRecentApps(final boolean firstRefresh) {
if (isScreenOff())
return;
SharedPreferences pref = U.getSharedPreferences(this);
final PackageManager pm = getPackageManager();
final List<AppEntry> entries = new ArrayList<>();
List<LauncherActivityInfo> launcherAppCache = new ArrayList<>();
int maxNumOfEntries = U.getMaxNumOfEntries(this);
int realNumOfPinnedApps = 0;
boolean fullLength = pref.getBoolean("full_length", false);
PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
List<AppEntry> pinnedApps = pba.getPinnedApps();
List<AppEntry> blockedApps = pba.getBlockedApps();
List<String> applicationIdsToRemove = new ArrayList<>();
// Filter out anything on the pinned/blocked apps lists
if (pinnedApps.size() > 0) {
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
for (AppEntry entry : pinnedApps) {
boolean packageEnabled = launcherApps.isPackageEnabled(entry.getPackageName(), userManager.getUserForSerialNumber(entry.getUserId(this)));
if (packageEnabled)
entries.add(entry);
else
realNumOfPinnedApps--;
applicationIdsToRemove.add(entry.getPackageName());
}
realNumOfPinnedApps = realNumOfPinnedApps + pinnedApps.size();
}
if (blockedApps.size() > 0) {
for (AppEntry entry : blockedApps) {
applicationIdsToRemove.add(entry.getPackageName());
}
}
// Get list of all recently used apps
List<AppEntry> usageStatsList = realNumOfPinnedApps < maxNumOfEntries ? getAppEntries() : new ArrayList<>();
if (usageStatsList.size() > 0 || realNumOfPinnedApps > 0 || fullLength) {
if (realNumOfPinnedApps < maxNumOfEntries) {
List<AppEntry> usageStatsList2 = new ArrayList<>();
List<AppEntry> usageStatsList3 = new ArrayList<>();
List<AppEntry> usageStatsList4 = new ArrayList<>();
List<AppEntry> usageStatsList5 = new ArrayList<>();
List<AppEntry> usageStatsList6;
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo defaultLauncher = pm.resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY);
// Also filter out the current launcher, and Taskbar itself
for (AppEntry packageInfo : usageStatsList) {
if (hasLauncherIntent(packageInfo.getPackageName()) && !packageInfo.getPackageName().contains(BuildConfig.BASE_APPLICATION_ID) && !packageInfo.getPackageName().equals(defaultLauncher.activityInfo.packageName))
usageStatsList2.add(packageInfo);
}
// Filter out apps that don't fall within our current search interval
for (AppEntry stats : usageStatsList2) {
if (stats.getLastTimeUsed() > searchInterval || runningAppsOnly)
usageStatsList3.add(stats);
}
// Sort apps by either most recently used, or most time used
if (!runningAppsOnly && sortOrder.contains("most_used")) {
Collections.sort(usageStatsList3, (us1, us2) -> Long.compare(us2.getTotalTimeInForeground(), us1.getTotalTimeInForeground()));
} else {
Collections.sort(usageStatsList3, (us1, us2) -> Long.compare(us2.getLastTimeUsed(), us1.getLastTimeUsed()));
}
// Filter out any duplicate entries
List<String> applicationIds = new ArrayList<>();
for (AppEntry stats : usageStatsList3) {
if (!applicationIds.contains(stats.getPackageName())) {
usageStatsList4.add(stats);
applicationIds.add(stats.getPackageName());
}
}
// Filter out the currently running foreground app, if requested by the user
if (pref.getBoolean("hide_foreground", false)) {
UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService(USAGE_STATS_SERVICE);
UsageEvents events = mUsageStatsManager.queryEvents(searchInterval, System.currentTimeMillis());
UsageEvents.Event eventCache = new UsageEvents.Event();
String currentForegroundApp = null;
while (events.hasNextEvent()) {
events.getNextEvent(eventCache);
if (eventCache.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
if (!(eventCache.getPackageName().contains(BuildConfig.BASE_APPLICATION_ID) && !eventCache.getClassName().equals(MainActivity.class.getCanonicalName()) && !eventCache.getClassName().equals(HomeActivity.class.getCanonicalName()) && !eventCache.getClassName().equals(InvisibleActivityFreeform.class.getCanonicalName())))
currentForegroundApp = eventCache.getPackageName();
}
}
if (!applicationIdsToRemove.contains(currentForegroundApp))
applicationIdsToRemove.add(currentForegroundApp);
}
for (AppEntry stats : usageStatsList4) {
if (!applicationIdsToRemove.contains(stats.getPackageName())) {
usageStatsList5.add(stats);
}
}
// Truncate list to a maximum length
if (usageStatsList5.size() > maxNumOfEntries)
usageStatsList6 = usageStatsList5.subList(0, maxNumOfEntries);
else
usageStatsList6 = usageStatsList5;
// Determine if we need to reverse the order
boolean needToReverseOrder;
switch(U.getTaskbarPosition(this)) {
case "bottom_right":
case "top_right":
needToReverseOrder = sortOrder.contains("false");
break;
default:
needToReverseOrder = sortOrder.contains("true");
break;
}
if (needToReverseOrder) {
Collections.reverse(usageStatsList6);
}
// Generate the AppEntries for TaskbarAdapter
int number = usageStatsList6.size() == maxNumOfEntries ? usageStatsList6.size() - realNumOfPinnedApps : usageStatsList6.size();
UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
LauncherApps launcherApps = (LauncherApps) getSystemService(Context.LAUNCHER_APPS_SERVICE);
final List<UserHandle> userHandles = userManager.getUserProfiles();
for (int i = 0; i < number; i++) {
for (UserHandle handle : userHandles) {
String packageName = usageStatsList6.get(i).getPackageName();
List<LauncherActivityInfo> list = launcherApps.getActivityList(packageName, handle);
if (!list.isEmpty()) {
// Google App workaround
if (!packageName.equals("com.google.android.googlequicksearchbox"))
launcherAppCache.add(list.get(0));
else {
boolean added = false;
for (LauncherActivityInfo info : list) {
if (info.getName().equals("com.google.android.googlequicksearchbox.SearchActivity")) {
launcherAppCache.add(info);
added = true;
}
}
if (!added)
launcherAppCache.add(list.get(0));
}
AppEntry newEntry = new AppEntry(packageName, null, null, null, false);
newEntry.setUserId(userManager.getSerialNumberForUser(handle));
entries.add(newEntry);
break;
}
}
}
}
while (entries.size() > maxNumOfEntries) {
try {
entries.remove(entries.size() - 1);
launcherAppCache.remove(launcherAppCache.size() - 1);
} catch (ArrayIndexOutOfBoundsException e) {
/* Gracefully fail */
}
}
// Determine if we need to reverse the order again
if (U.getTaskbarPosition(this).contains("vertical")) {
Collections.reverse(entries);
Collections.reverse(launcherAppCache);
}
// Now that we've generated the list of apps,
// we need to determine if we need to redraw the Taskbar or not
boolean shouldRedrawTaskbar = firstRefresh;
List<String> finalApplicationIds = new ArrayList<>();
for (AppEntry entry : entries) {
finalApplicationIds.add(entry.getPackageName());
}
if (finalApplicationIds.size() != currentTaskbarIds.size() || numOfPinnedApps != realNumOfPinnedApps)
shouldRedrawTaskbar = true;
else {
for (int i = 0; i < finalApplicationIds.size(); i++) {
if (!finalApplicationIds.get(i).equals(currentTaskbarIds.get(i))) {
shouldRedrawTaskbar = true;
break;
}
}
}
if (shouldRedrawTaskbar) {
currentTaskbarIds = finalApplicationIds;
numOfPinnedApps = realNumOfPinnedApps;
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
int launcherAppCachePos = -1;
for (int i = 0; i < entries.size(); i++) {
if (entries.get(i).getComponentName() == null) {
launcherAppCachePos++;
LauncherActivityInfo appInfo = launcherAppCache.get(launcherAppCachePos);
String packageName = entries.get(i).getPackageName();
entries.remove(i);
AppEntry newEntry = new AppEntry(packageName, appInfo.getComponentName().flattenToString(), appInfo.getLabel().toString(), IconCache.getInstance(TaskbarService.this).getIcon(TaskbarService.this, pm, appInfo), false);
newEntry.setUserId(userManager.getSerialNumberForUser(appInfo.getUser()));
entries.add(i, newEntry);
}
}
final int numOfEntries = Math.min(entries.size(), maxNumOfEntries);
handler.post(() -> {
if (numOfEntries > 0 || fullLength) {
ViewGroup.LayoutParams params = scrollView.getLayoutParams();
DisplayMetrics metrics = U.getRealDisplayMetrics(this);
int recentsSize = getResources().getDimensionPixelSize(R.dimen.icon_size) * numOfEntries;
float maxRecentsSize = fullLength ? Float.MAX_VALUE : recentsSize;
if (U.getTaskbarPosition(TaskbarService.this).contains("vertical")) {
int maxScreenSize = metrics.heightPixels - U.getStatusBarHeight(TaskbarService.this) - U.getBaseTaskbarSize(TaskbarService.this);
params.height = (int) Math.min(maxRecentsSize, maxScreenSize) + getResources().getDimensionPixelSize(R.dimen.divider_size);
if (fullLength && U.getTaskbarPosition(this).contains("bottom")) {
try {
Space whitespace = U.findViewById(layout, R.id.whitespace);
ViewGroup.LayoutParams params2 = whitespace.getLayoutParams();
params2.height = maxScreenSize - recentsSize;
whitespace.setLayoutParams(params2);
} catch (NullPointerException e) {
/* Gracefully fail */
}
}
} else {
int maxScreenSize = metrics.widthPixels - U.getBaseTaskbarSize(TaskbarService.this);
params.width = (int) Math.min(maxRecentsSize, maxScreenSize) + getResources().getDimensionPixelSize(R.dimen.divider_size);
if (fullLength && U.getTaskbarPosition(this).contains("right")) {
try {
Space whitespace = U.findViewById(layout, R.id.whitespace);
ViewGroup.LayoutParams params2 = whitespace.getLayoutParams();
params2.width = maxScreenSize - recentsSize;
whitespace.setLayoutParams(params2);
} catch (NullPointerException e) {
/* Gracefully fail */
}
}
}
scrollView.setLayoutParams(params);
taskbar.removeAllViews();
for (int i = 0; i < entries.size(); i++) {
taskbar.addView(getView(entries, i));
}
isShowingRecents = true;
if (shouldRefreshRecents && scrollView.getVisibility() != View.VISIBLE) {
if (firstRefresh)
scrollView.setVisibility(View.INVISIBLE);
else
scrollView.setVisibility(View.VISIBLE);
}
if (firstRefresh && scrollView.getVisibility() != View.VISIBLE)
new Handler().post(() -> {
switch(U.getTaskbarPosition(TaskbarService.this)) {
case "bottom_left":
case "bottom_right":
case "top_left":
case "top_right":
if (sortOrder.contains("false"))
scrollView.scrollTo(0, 0);
else if (sortOrder.contains("true"))
scrollView.scrollTo(taskbar.getWidth(), taskbar.getHeight());
break;
case "bottom_vertical_left":
case "bottom_vertical_right":
case "top_vertical_left":
case "top_vertical_right":
if (sortOrder.contains("false"))
scrollView.scrollTo(taskbar.getWidth(), taskbar.getHeight());
else if (sortOrder.contains("true"))
scrollView.scrollTo(0, 0);
break;
}
if (shouldRefreshRecents) {
scrollView.setVisibility(View.VISIBLE);
}
});
} else {
isShowingRecents = false;
scrollView.setVisibility(View.GONE);
}
});
}
} else if (firstRefresh || currentTaskbarIds.size() > 0) {
currentTaskbarIds.clear();
handler.post(() -> {
isShowingRecents = false;
scrollView.setVisibility(View.GONE);
});
}
}
use of android.content.pm.LauncherActivityInfo in project Taskbar by farmerbb.
the class ContextMenuActivity method onPreferenceClick.
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.N_MR1)
@Override
public boolean onPreferenceClick(Preference p) {
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
boolean appIsValid = isStartButton || isOverflowMenu || !launcherApps.getActivityList(getIntent().getStringExtra("package_name"), userManager.getUserForSerialNumber(userId)).isEmpty();
if (appIsValid)
switch(p.getKey()) {
case "app_info":
U.launchApp(this, () -> launcherApps.startAppDetailsActivity(ComponentName.unflattenFromString(componentName), userManager.getUserForSerialNumber(userId), null, U.getActivityOptionsBundle(ApplicationType.APPLICATION)));
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "uninstall":
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && isInMultiWindowMode() && !U.isChromeOs(this)) {
Intent intent2 = new Intent(ContextMenuActivity.this, DummyActivity.class);
intent2.putExtra("uninstall", packageName);
intent2.putExtra("user_id", userId);
try {
startActivity(intent2);
} catch (IllegalArgumentException e) {
/* Gracefully fail */
}
} else {
Intent intent2 = new Intent(Intent.ACTION_DELETE, Uri.parse("package:" + packageName));
intent2.putExtra(Intent.EXTRA_USER, userManager.getUserForSerialNumber(userId));
new Handler().post(() -> {
try {
startActivity(intent2);
} catch (ActivityNotFoundException | IllegalArgumentException e) {
/* Gracefully fail */
}
});
}
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "open_taskbar_settings":
U.launchApp(this, () -> {
Intent intent2 = new Intent(this, MainActivity.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
try {
startActivity(intent2, U.getActivityOptionsBundle(ApplicationType.APPLICATION));
} catch (IllegalArgumentException e) {
/* Gracefully fail */
}
});
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "quit_taskbar":
Intent quitIntent = new Intent("com.farmerbb.taskbar.QUIT");
quitIntent.setPackage(BuildConfig.APPLICATION_ID);
sendBroadcast(quitIntent);
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "pin_app":
PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
if (pba.isPinned(componentName))
pba.removePinnedApp(this, componentName);
else {
Intent intent = new Intent();
intent.setComponent(ComponentName.unflattenFromString(componentName));
LauncherActivityInfo appInfo = launcherApps.resolveActivity(intent, userManager.getUserForSerialNumber(userId));
if (appInfo != null) {
AppEntry newEntry = new AppEntry(packageName, componentName, appName, IconCache.getInstance(this).getIcon(this, getPackageManager(), appInfo), true);
newEntry.setUserId(userId);
pba.addPinnedApp(this, newEntry);
}
}
break;
case "block_app":
PinnedBlockedApps pba2 = PinnedBlockedApps.getInstance(this);
if (pba2.isBlocked(componentName))
pba2.removeBlockedApp(this, componentName);
else {
pba2.addBlockedApp(this, new AppEntry(packageName, componentName, appName, null, false));
}
break;
case "show_window_sizes":
generateWindowSizes();
if (U.hasBrokenSetLaunchBoundsApi())
U.showToastLong(this, R.string.window_sizes_not_available);
getListView().setOnItemLongClickListener((parent, view, position, id) -> {
String[] windowSizes = { "standard", "large", "fullscreen", "half_left", "half_right", "phone_size" };
SavedWindowSizes.getInstance(ContextMenuActivity.this).setWindowSize(ContextMenuActivity.this, packageName, windowSizes[position]);
generateWindowSizes();
return true;
});
secondaryMenu = true;
break;
case "window_size_standard":
case "window_size_large":
case "window_size_fullscreen":
case "window_size_half_left":
case "window_size_half_right":
case "window_size_phone_size":
String windowSize = p.getKey().replace("window_size_", "");
SharedPreferences pref2 = U.getSharedPreferences(this);
if (pref2.getBoolean("save_window_sizes", true)) {
SavedWindowSizes.getInstance(this).setWindowSize(this, packageName, windowSize);
}
U.launchApp(getApplicationContext(), packageName, componentName, userId, windowSize, false, true);
if (U.hasBrokenSetLaunchBoundsApi())
U.cancelToast();
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "app_shortcuts":
getPreferenceScreen().removeAll();
generateShortcuts();
secondaryMenu = true;
break;
case "shortcut_1":
case "shortcut_2":
case "shortcut_3":
case "shortcut_4":
case "shortcut_5":
U.startShortcut(getApplicationContext(), packageName, componentName, shortcuts.get(Integer.parseInt(p.getKey().replace("shortcut_", "")) - 1));
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "start_menu_apps":
Intent intent = null;
SharedPreferences pref3 = U.getSharedPreferences(this);
switch(pref3.getString("theme", "light")) {
case "light":
intent = new Intent(this, SelectAppActivity.class);
break;
case "dark":
intent = new Intent(this, SelectAppActivityDark.class);
break;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && pref3.getBoolean("freeform_hack", false) && intent != null && isInMultiWindowMode()) {
intent.putExtra("no_shadow", true);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
U.launchAppMaximized(getApplicationContext(), intent);
} else {
try {
startActivity(intent);
} catch (IllegalArgumentException e) {
/* Gracefully fail */
}
}
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "volume":
AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE);
audio.adjustSuggestedStreamVolume(AudioManager.ADJUST_SAME, AudioManager.USE_DEFAULT_STREAM_TYPE, AudioManager.FLAG_SHOW_UI);
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "file_manager":
U.launchApp(this, () -> {
Intent fileManagerIntent;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1)
fileManagerIntent = new Intent(Intent.ACTION_VIEW);
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
fileManagerIntent = new Intent("android.provider.action.BROWSE");
else {
fileManagerIntent = new Intent("android.provider.action.BROWSE_DOCUMENT_ROOT");
fileManagerIntent.setComponent(ComponentName.unflattenFromString("com.android.documentsui/.DocumentsActivity"));
}
fileManagerIntent.addCategory(Intent.CATEGORY_DEFAULT);
fileManagerIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
fileManagerIntent.setData(Uri.parse("content://com.android.externalstorage.documents/root/primary"));
try {
startActivity(fileManagerIntent, U.getActivityOptionsBundle(ApplicationType.APPLICATION));
} catch (ActivityNotFoundException e) {
U.showToast(this, R.string.lock_device_not_supported);
} catch (IllegalArgumentException e) {
/* Gracefully fail */
}
});
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "system_settings":
U.launchApp(this, () -> {
Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivity(settingsIntent, U.getActivityOptionsBundle(ApplicationType.APPLICATION));
} catch (ActivityNotFoundException e) {
U.showToast(this, R.string.lock_device_not_supported);
} catch (IllegalArgumentException e) {
/* Gracefully fail */
}
});
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "lock_device":
U.lockDevice(this);
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "power_menu":
U.sendAccessibilityAction(this, AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "change_wallpaper":
Intent intent3 = Intent.createChooser(new Intent(Intent.ACTION_SET_WALLPAPER), getString(R.string.set_wallpaper));
intent3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
U.launchAppMaximized(getApplicationContext(), intent3);
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
case "close":
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses(packageName);
showStartMenu = false;
shouldHideTaskbar = true;
contextMenuFix = false;
break;
}
if (!secondaryMenu)
finish();
return true;
}
Aggregations