OSDN Git Service

Sort apps by first active time when showing running apps only
authorBraden Farmer <farmerbb@gmail.com>
Sat, 16 Sep 2017 01:01:47 +0000 (19:01 -0600)
committerBraden Farmer <farmerbb@gmail.com>
Sat, 16 Sep 2017 01:01:47 +0000 (19:01 -0600)
app/src/main/java/com/farmerbb/taskbar/receiver/EnableHomeReceiver.java
app/src/main/java/com/farmerbb/taskbar/service/TaskbarService.java
app/src/main/java/com/farmerbb/taskbar/util/U.java

index 41e0e49..6906459 100644 (file)
@@ -45,6 +45,7 @@ public class EnableHomeReceiver extends BroadcastReceiver {
                     editor.putString("recents_amount", "running_apps_only");
                     editor.putString("refresh_frequency", "0");
                     editor.putString("max_num_of_recents", "2147483647");
+                    editor.putString("sort_order", "true");
                     editor.putBoolean("full_length", true);
                 }
 
index 5e10164..1dd3d91 100644 (file)
@@ -65,6 +65,7 @@ import android.widget.Button;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -658,12 +659,10 @@ public class TaskbarService extends Service {
                 }
 
                 // Sort apps by either most recently used, or most time used
-                if(!runningAppsOnly) {
-                    if(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()));
-                    }
+                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
@@ -1301,21 +1300,33 @@ public class TaskbarService extends Service {
     }
 
     @SuppressWarnings("deprecation")
+    @TargetApi(Build.VERSION_CODES.M)
     private List<AppEntry> getAppEntriesUsingActivityManager(int maxNum) {
         ActivityManager mActivityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
-        List<ActivityManager.RunningTaskInfo> usageStatsList = mActivityManager.getRunningTasks(maxNum);
+        List<ActivityManager.RecentTaskInfo> usageStatsList = mActivityManager.getRecentTasks(maxNum, 0);
         List<AppEntry> entries = new ArrayList<>();
 
-        for(ActivityManager.RunningTaskInfo usageStats : usageStatsList) {
-            AppEntry newEntry = new AppEntry(
-                    usageStats.baseActivity.getPackageName(),
-                    null,
-                    null,
-                    null,
-                    false
-            );
+        for(int i = 0; i < usageStatsList.size(); i++) {
+            ActivityManager.RecentTaskInfo recentTaskInfo = usageStatsList.get(i);
+            if(recentTaskInfo.id != -1) {
+                String packageName = recentTaskInfo.baseActivity.getPackageName();
+                AppEntry newEntry = new AppEntry(
+                        packageName,
+                        null,
+                        null,
+                        null,
+                        false
+                );
 
-            entries.add(newEntry);
+                try {
+                    Field field = ActivityManager.RecentTaskInfo.class.getField("firstActiveTime");
+                    newEntry.setLastTimeUsed(field.getLong(recentTaskInfo));
+                } catch (Exception e) {
+                    newEntry.setLastTimeUsed(i);
+                }
+
+                entries.add(newEntry);
+            }
         }
 
         return entries;
index 50d1bbc..73ac95e 100644 (file)
@@ -1060,6 +1060,7 @@ public class U {
                     .putString("recents_amount", "running_apps_only")
                     .putString("refresh_frequency", "0")
                     .putString("max_num_of_recents", "2147483647")
+                    .putString("sort_order", "true")
                     .putBoolean("full_length", true)
                     .putBoolean("dashboard", true)
                     .putBoolean("android_x86_prefs", true)