private boolean navbarButtonsEnabled = false;
private List<String> currentTaskbarIds = new ArrayList<>();
+ private List<String> currentRunningAppIds = new ArrayList<>();
+ private List<String> prevRunningAppIds = new ArrayList<>();
private int numOfPinnedApps = -1;
private View.OnClickListener ocl = view -> {
int realNumOfPinnedApps = 0;
boolean fullLength = pref.getBoolean("full_length", false);
+ if(runningAppsOnly)
+ currentRunningAppIds.clear();
+
PinnedBlockedApps pba = PinnedBlockedApps.getInstance(context);
- List<AppEntry> pinnedApps = pba.getPinnedApps();
+ List<AppEntry> pinnedApps = setTimeLastUsedFor(pba.getPinnedApps());
List<AppEntry> blockedApps = pba.getBlockedApps();
List<String> applicationIdsToRemove = new ArrayList<>();
}
if(finalApplicationIds.size() != currentTaskbarIds.size()
+ || (runningAppsOnly && currentRunningAppIds.size() != prevRunningAppIds.size())
|| numOfPinnedApps != realNumOfPinnedApps)
shouldRedrawTaskbar = true;
else {
break;
}
}
+
+ if(!shouldRedrawTaskbar && runningAppsOnly) {
+ for(int i = 0; i < finalApplicationIds.size(); i++) {
+ if(!currentRunningAppIds.get(i).equals(prevRunningAppIds.get(i))) {
+ shouldRedrawTaskbar = true;
+ break;
+ }
+ }
+ }
}
if(shouldRedrawTaskbar) {
currentTaskbarIds = finalApplicationIds;
numOfPinnedApps = realNumOfPinnedApps;
+ if(runningAppsOnly) {
+ prevRunningAppIds.clear();
+ prevRunningAppIds.addAll(currentRunningAppIds);
+ }
+
UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
int launcherAppCachePos = -1;
try {
Field field = ActivityManager.RecentTaskInfo.class.getField("firstActiveTime");
newEntry.setLastTimeUsed(field.getLong(recentTaskInfo));
+ currentRunningAppIds.add(packageName);
} catch (Exception e) {
newEntry.setLastTimeUsed(i);
}
return entries;
}
+ @SuppressWarnings("deprecation")
+ @TargetApi(Build.VERSION_CODES.M)
+ private List<AppEntry> setTimeLastUsedFor(List<AppEntry> pinnedApps) {
+ if(!runningAppsOnly || pinnedApps.size() == 0)
+ return pinnedApps;
+
+ ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+ List<ActivityManager.RecentTaskInfo> recentTasks = mActivityManager.getRecentTasks(Integer.MAX_VALUE, 0);
+
+ for(AppEntry entry : pinnedApps) {
+ for(ActivityManager.RecentTaskInfo task : recentTasks) {
+ if(task.id != -1 && task.baseActivity.getPackageName().equals(entry.getPackageName())) {
+ try {
+ Field field = ActivityManager.RecentTaskInfo.class.getField("firstActiveTime");
+ entry.setLastTimeUsed(field.getLong(task));
+ currentRunningAppIds.add(entry.getPackageName());
+ break;
+ } catch (Exception e) { /* Gracefully fail */ }
+ }
+ }
+ }
+
+ return pinnedApps;
+ }
+
@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
private List<AppEntry> getAppEntriesUsingUsageStats() {
UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);