OSDN Git Service

Abstract logic for setting components enabled / disabled
[android-x86/packages-apps-Taskbar.git] / app / src / main / java / com / farmerbb / taskbar / ui / TaskbarController.java
index cc2a46c..58a4cdd 100644 (file)
@@ -83,7 +83,6 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 import android.widget.LinearLayout;
 import android.widget.Space;
 import android.widget.TextView;
@@ -95,6 +94,7 @@ import com.farmerbb.taskbar.R;
 import com.farmerbb.taskbar.activity.HomeActivity;
 import com.farmerbb.taskbar.activity.InvisibleActivityFreeform;
 import com.farmerbb.taskbar.activity.SecondaryHomeActivity;
+import com.farmerbb.taskbar.content.TaskbarIntent;
 import com.farmerbb.taskbar.util.AppEntry;
 import com.farmerbb.taskbar.util.DisplayInfo;
 import com.farmerbb.taskbar.util.FreeformHackHelper;
@@ -148,16 +148,12 @@ public class TaskbarController implements UIController {
     private boolean sysTrayEnabled = false;
 
     private List<String> currentTaskbarIds = new ArrayList<>();
-    private List<String> currentRunningAppIds = new ArrayList<>();
-    private List<String> prevRunningAppIds = new ArrayList<>();
     private int numOfPinnedApps = -1;
 
     private int cellStrength = -1;
 
-    private View.OnClickListener ocl = view -> {
-        Intent intent = new Intent("com.farmerbb.taskbar.TOGGLE_START_MENU");
-        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
-    };
+    private View.OnClickListener ocl = view ->
+            U.sendBroadcast(context, TaskbarIntent.ACTION_TOGGLE_START_MENU);
 
     private BroadcastReceiver showReceiver = new BroadcastReceiver() {
         @Override
@@ -399,9 +395,8 @@ public class TaskbarController implements UIController {
                 break;
         }
 
-        LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
-        lbm.sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
-        lbm.sendBroadcast(new Intent("com.farmerbb.taskbar.UPDATE_HOME_SCREEN_MARGINS"));
+        U.sendBroadcast(context, TaskbarIntent.ACTION_HIDE_START_MENU);
+        U.sendBroadcast(context, TaskbarIntent.ACTION_UPDATE_HOME_SCREEN_MARGINS);
 
         if(altButtonConfig) {
             button = layout.findViewById(R.id.hide_taskbar_button_alt);
@@ -440,7 +435,8 @@ public class TaskbarController implements UIController {
             layout.findViewById(R.id.square5).setBackgroundColor(accentColor);
             layout.findViewById(R.id.square6).setBackgroundColor(accentColor);
 
-            dashboardButton.setOnClickListener(v -> LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("com.farmerbb.taskbar.TOGGLE_DASHBOARD")));
+            dashboardButton.setOnClickListener(v ->
+                    U.sendBroadcast(context, TaskbarIntent.ACTION_TOGGLE_DASHBOARD));
         } else
             dashboardButton.setVisibility(View.GONE);
 
@@ -628,24 +624,17 @@ public class TaskbarController implements UIController {
             U.showHideNavigationBar(context, false);
 
         if(FreeformHackHelper.getInstance().isTouchAbsorberActive()) {
-            lbm.sendBroadcast(new Intent("com.farmerbb.taskbar.FINISH_FREEFORM_ACTIVITY"));
+            U.sendBroadcast(context, TaskbarIntent.ACTION_FINISH_FREEFORM_ACTIVITY);
 
             new Handler().postDelayed(() -> U.startTouchAbsorberActivity(context), 500);
         }
 
-        lbm.unregisterReceiver(showReceiver);
-        lbm.unregisterReceiver(hideReceiver);
-        lbm.unregisterReceiver(tempShowReceiver);
-        lbm.unregisterReceiver(tempHideReceiver);
-        lbm.unregisterReceiver(startMenuAppearReceiver);
-        lbm.unregisterReceiver(startMenuDisappearReceiver);
-
-        lbm.registerReceiver(showReceiver, new IntentFilter("com.farmerbb.taskbar.SHOW_TASKBAR"));
-        lbm.registerReceiver(hideReceiver, new IntentFilter("com.farmerbb.taskbar.HIDE_TASKBAR"));
-        lbm.registerReceiver(tempShowReceiver, new IntentFilter("com.farmerbb.taskbar.TEMP_SHOW_TASKBAR"));
-        lbm.registerReceiver(tempHideReceiver, new IntentFilter("com.farmerbb.taskbar.TEMP_HIDE_TASKBAR"));
-        lbm.registerReceiver(startMenuAppearReceiver, new IntentFilter("com.farmerbb.taskbar.START_MENU_APPEARING"));
-        lbm.registerReceiver(startMenuDisappearReceiver, new IntentFilter("com.farmerbb.taskbar.START_MENU_DISAPPEARING"));
+        U.registerReceiver(context, showReceiver, TaskbarIntent.ACTION_SHOW_TASKBAR);
+        U.registerReceiver(context, hideReceiver, TaskbarIntent.ACTION_HIDE_TASKBAR);
+        U.registerReceiver(context, tempShowReceiver, TaskbarIntent.ACTION_TEMP_SHOW_TASKBAR);
+        U.registerReceiver(context, tempHideReceiver, TaskbarIntent.ACTION_TEMP_HIDE_TASKBAR);
+        U.registerReceiver(context, startMenuAppearReceiver, TaskbarIntent.ACTION_START_MENU_APPEARING);
+        U.registerReceiver(context, startMenuDisappearReceiver, TaskbarIntent.ACTION_START_MENU_DISAPPEARING);
 
         startRefreshingRecents();
 
@@ -718,11 +707,8 @@ public class TaskbarController implements UIController {
         int realNumOfPinnedApps = 0;
         boolean fullLength = pref.getBoolean("full_length", context.getResources().getBoolean(R.bool.tb_def_full_length));
 
-        if(runningAppsOnly)
-            currentRunningAppIds.clear();
-
         PinnedBlockedApps pba = PinnedBlockedApps.getInstance(context);
-        List<AppEntry> pinnedApps = setTimeLastUsedFor(pba.getPinnedApps());
+        List<AppEntry> pinnedApps = pba.getPinnedApps();
         List<AppEntry> blockedApps = pba.getBlockedApps();
         List<String> applicationIdsToRemove = new ArrayList<>();
 
@@ -922,7 +908,6 @@ public class TaskbarController implements UIController {
             }
 
             if(finalApplicationIds.size() != currentTaskbarIds.size()
-                    || (runningAppsOnly && currentRunningAppIds.size() != prevRunningAppIds.size())
                     || numOfPinnedApps != realNumOfPinnedApps)
                 shouldRedrawTaskbar = true;
             else {
@@ -932,26 +917,12 @@ public class TaskbarController implements UIController {
                         break;
                     }
                 }
-
-                if(!shouldRedrawTaskbar && runningAppsOnly) {
-                    for(int i = 0; i < currentRunningAppIds.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;
@@ -1059,6 +1030,9 @@ public class TaskbarController implements UIController {
                             taskbar.addView(getView(entries, i));
                         }
 
+                        if(runningAppsOnly)
+                            updateRunningAppIndicators(pinnedApps, usageStatsList, entries);
+
                         isShowingRecents = true;
                         if(shouldRefreshRecents && scrollView.getVisibility() != View.VISIBLE) {
                             if(firstRefresh)
@@ -1099,7 +1073,8 @@ public class TaskbarController implements UIController {
                         scrollView.setVisibility(View.GONE);
                     }
                 });
-            }
+            } else if(runningAppsOnly)
+                handler.post(() -> updateRunningAppIndicators(pinnedApps, usageStatsList, entries));
         } else if(firstRefresh || currentTaskbarIds.size() > 0) {
             currentTaskbarIds.clear();
             handler.post(() -> {
@@ -1109,6 +1084,33 @@ public class TaskbarController implements UIController {
         }
     }
 
+    private void updateRunningAppIndicators(List<AppEntry> pinnedApps, List<AppEntry> usageStatsList, List<AppEntry> entries) {
+        if(taskbar.getChildCount() != entries.size())
+            return;
+
+        List<String> pinnedPackageList = new ArrayList<>();
+        List<String> runningPackageList = new ArrayList<>();
+
+        for(AppEntry entry : pinnedApps)
+            pinnedPackageList.add(entry.getPackageName());
+
+        for(AppEntry entry : usageStatsList)
+            runningPackageList.add(entry.getPackageName());
+
+        for(int i = 0; i < taskbar.getChildCount(); i++) {
+            View convertView = taskbar.getChildAt(i);
+            String packageName = entries.get(i).getPackageName();
+
+            ImageView runningAppIndicator = convertView.findViewById(R.id.running_app_indicator);
+            if(pinnedPackageList.contains(packageName) && !runningPackageList.contains(packageName))
+                runningAppIndicator.setVisibility(View.GONE);
+            else {
+                runningAppIndicator.setVisibility(View.VISIBLE);
+                runningAppIndicator.setColorFilter(U.getAccentColor(context));
+            }
+        }
+    }
+
     private void toggleTaskbar(boolean userInitiated) {
         if(userInitiated && Build.BRAND.equalsIgnoreCase("essential")) {
             SharedPreferences pref = U.getSharedPreferences(context);
@@ -1154,7 +1156,8 @@ public class TaskbarController implements UIController {
 
             updateButton(false);
 
-            new Handler().post(() -> LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("com.farmerbb.taskbar.SHOW_START_MENU_SPACE")));
+            new Handler().post(() ->
+                    U.sendBroadcast(context, TaskbarIntent.ACTION_SHOW_START_MENU_SPACE));
         }
     }
 
@@ -1189,11 +1192,12 @@ public class TaskbarController implements UIController {
             updateButton(true);
 
             if(clearVariables) {
-                LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
-                LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_DASHBOARD"));
+                U.sendBroadcast(context, TaskbarIntent.ACTION_HIDE_START_MENU);
+                U.sendBroadcast(context, TaskbarIntent.ACTION_HIDE_DASHBOARD);
             }
 
-            new Handler().post(() -> LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU_SPACE")));
+            new Handler().post(() ->
+                    U.sendBroadcast(context, TaskbarIntent.ACTION_HIDE_START_MENU_SPACE));
         }
     }
 
@@ -1294,14 +1298,12 @@ public class TaskbarController implements UIController {
         } else if(pref.getBoolean("auto_hide_navbar", false))
             U.showHideNavigationBar(context, true);
 
-        LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
-
-        lbm.unregisterReceiver(showReceiver);
-        lbm.unregisterReceiver(hideReceiver);
-        lbm.unregisterReceiver(tempShowReceiver);
-        lbm.unregisterReceiver(tempHideReceiver);
-        lbm.unregisterReceiver(startMenuAppearReceiver);
-        lbm.unregisterReceiver(startMenuDisappearReceiver);
+        U.unregisterReceiver(context, showReceiver);
+        U.unregisterReceiver(context, hideReceiver);
+        U.unregisterReceiver(context, tempShowReceiver);
+        U.unregisterReceiver(context, tempHideReceiver);
+        U.unregisterReceiver(context, startMenuAppearReceiver);
+        U.unregisterReceiver(context, startMenuDisappearReceiver);
 
         if(sysTrayEnabled) {
             TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
@@ -1435,15 +1437,6 @@ public class TaskbarController implements UIController {
             });
         }
 
-        if(runningAppsOnly) {
-            ImageView runningAppIndicator = convertView.findViewById(R.id.running_app_indicator);
-            if(entry.getLastTimeUsed() > 0) {
-                runningAppIndicator.setVisibility(View.VISIBLE);
-                runningAppIndicator.setColorFilter(U.getAccentColor(context));
-            } else
-                runningAppIndicator.setVisibility(View.GONE);
-        }
-
         return convertView;
     }
 
@@ -1486,7 +1479,6 @@ public class TaskbarController implements UIController {
                 try {
                     Field field = ActivityManager.RecentTaskInfo.class.getField("firstActiveTime");
                     newEntry.setLastTimeUsed(field.getLong(recentTaskInfo));
-                    currentRunningAppIds.add(packageName);
                 } catch (Exception e) {
                     newEntry.setLastTimeUsed(i);
                 }
@@ -1498,31 +1490,6 @@ public class TaskbarController implements UIController {
         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);
@@ -1676,13 +1643,13 @@ public class TaskbarController implements UIController {
 
         return getDrawableForSysTray(id);
     }
-    
+
     private Drawable getDrawableForSysTray(int id) {
         Drawable drawable = null;
         try {
             drawable = ContextCompat.getDrawable(context, id);
         } catch (Resources.NotFoundException e) { /* Gracefully fail */ }
-        
+
         if(drawable == null) return null;
 
         drawable.setTint(U.getAccentColor(context));