OSDN Git Service

More progress on HomeActivity UI host changes
authorBraden Farmer <farmerbb@gmail.com>
Sat, 22 Jun 2019 04:02:22 +0000 (22:02 -0600)
committerBraden Farmer <farmerbb@gmail.com>
Sat, 22 Jun 2019 04:02:22 +0000 (22:02 -0600)
app/src/androidx86/AndroidManifest.xml
app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java
app/src/main/java/com/farmerbb/taskbar/fragment/AdvancedFragment.java
app/src/main/java/com/farmerbb/taskbar/util/U.java
app/src/playstore/AndroidManifest.xml

index 8bee35a..e8e60d3 100644 (file)
 
                 <category android:name="android.intent.category.DEFAULT"/>
                 <category android:name="android.intent.category.HOME"/>
+                <category android:name="android.intent.category.SECONDARY_HOME"/>
             </intent-filter>
         </activity>
         <activity
 
                 <category android:name="android.intent.category.DEFAULT"/>
                 <category android:name="android.intent.category.APP_MAPS" />
-                <category android:name="android.intent.category.APP_CALENDAR" />
             </intent-filter>
         </activity>
         <activity
index 5022378..27d7c90 100644 (file)
@@ -36,7 +36,10 @@ import android.view.WindowManager;
 import android.widget.FrameLayout;
 
 import com.farmerbb.taskbar.R;
+import com.farmerbb.taskbar.service.DashboardService;
 import com.farmerbb.taskbar.service.NotificationService;
+import com.farmerbb.taskbar.service.StartMenuService;
+import com.farmerbb.taskbar.service.TaskbarService;
 import com.farmerbb.taskbar.ui.DashboardController;
 import com.farmerbb.taskbar.ui.Host;
 import com.farmerbb.taskbar.ui.ViewParams;
@@ -76,6 +79,15 @@ public class HomeActivityDelegate extends Activity implements Host {
         }
     };
 
+    private BroadcastReceiver restartReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if(taskbarChild != null) taskbarChild.onRecreateHost(HomeActivityDelegate.this);
+            if(startMenuChild != null) startMenuChild.onRecreateHost(HomeActivityDelegate.this);
+            if(dashboardChild != null) dashboardChild.onRecreateHost(HomeActivityDelegate.this);
+        }
+    };
+
     private BroadcastReceiver freeformToggleReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -150,6 +162,7 @@ public class HomeActivityDelegate extends Activity implements Host {
         LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
         lbm.registerReceiver(killReceiver, new IntentFilter("com.farmerbb.taskbar.KILL_HOME_ACTIVITY"));
         lbm.registerReceiver(forceTaskbarStartReceiver, new IntentFilter("com.farmerbb.taskbar.FORCE_TASKBAR_RESTART"));
+        lbm.registerReceiver(restartReceiver, new IntentFilter("com.farmerbb.taskbar.RESTART"));
 
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction("com.farmerbb.taskbar.UPDATE_FREEFORM_CHECKBOX");
@@ -177,7 +190,7 @@ public class HomeActivityDelegate extends Activity implements Host {
     protected void onResume() {
         super.onResume();
 
-        if(bootToFreeform()) {
+        if(U.canBootToFreeform(this)) {
             if(U.launcherIsDefault(this))
                 startFreeformHack();
             else {
@@ -203,8 +216,8 @@ public class HomeActivityDelegate extends Activity implements Host {
 
         LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
 
-        if(U.canDrawOverlays(this)) {
-            if(!bootToFreeform()) {
+        if(U.canDrawOverlays(this, true)) {
+            if(!U.canBootToFreeform(this)) {
                 final LauncherHelper helper = LauncherHelper.getInstance();
                 helper.setOnHomeScreen(true);
 
@@ -224,13 +237,6 @@ public class HomeActivityDelegate extends Activity implements Host {
                     null);
     }
 
-    private boolean bootToFreeform() {
-        SharedPreferences pref = U.getSharedPreferences(this);
-        return U.hasFreeformSupport(this)
-                && pref.getBoolean("freeform_hack", false)
-                && !U.isOverridingFreeformHack(this);
-    }
-
     private void startTaskbar() {
         SharedPreferences pref = U.getSharedPreferences(this);
         if(pref.getBoolean("first_run", true)) {
@@ -244,7 +250,11 @@ public class HomeActivityDelegate extends Activity implements Host {
                     null);
         }
 
-        // We always start the Taskbar and Start Menu services, even if the app isn't normally running
+        // Stop any currently running services and switch to using HomeActivityDelegate as UI host
+        stopService(new Intent(this, TaskbarService.class));
+        stopService(new Intent(this, StartMenuService.class));
+        stopService(new Intent(this, DashboardService.class));
+
         taskbarChild = new TaskbarController(this);
         startMenuChild = new StartMenuController(this);
         dashboardChild = new DashboardController(this);
@@ -272,7 +282,7 @@ public class HomeActivityDelegate extends Activity implements Host {
         super.onStop();
 
         SharedPreferences pref = U.getSharedPreferences(this);
-        if(!bootToFreeform()) {
+        if(!U.canBootToFreeform(this)) {
             LauncherHelper.getInstance().setOnHomeScreen(false);
 
             if(U.shouldCollapse(this, true))
@@ -280,13 +290,18 @@ public class HomeActivityDelegate extends Activity implements Host {
             else
                 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
 
-            // Stop the Taskbar and Start Menu services if they should normally not be active
-            if(!pref.getBoolean("taskbar_active", false) || pref.getBoolean("is_hidden", false)) {
-                taskbarChild.onDestroyHost(this);
-                startMenuChild.onDestroyHost(this);
-                dashboardChild.onDestroyHost(this);
+            if(taskbarChild != null) taskbarChild.onDestroyHost(this);
+            if(startMenuChild != null) startMenuChild.onDestroyHost(this);
+            if(dashboardChild != null) dashboardChild.onDestroyHost(this);
+
+            IconCache.getInstance(this).clearCache();
 
-                IconCache.getInstance(this).clearCache();
+            // Stop using HomeActivityDelegate as UI host and restart services if needed
+            if(pref.getBoolean("taskbar_active", false)
+                    && !pref.getBoolean("is_hidden", false)) {
+                startService(new Intent(this, TaskbarService.class));
+                startService(new Intent(this, StartMenuService.class));
+                startService(new Intent(this, DashboardService.class));
             }
         }
 
@@ -303,6 +318,7 @@ public class HomeActivityDelegate extends Activity implements Host {
         LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
         lbm.unregisterReceiver(killReceiver);
         lbm.unregisterReceiver(forceTaskbarStartReceiver);
+        lbm.unregisterReceiver(restartReceiver);
         lbm.unregisterReceiver(freeformToggleReceiver);
     }
 
@@ -314,16 +330,21 @@ public class HomeActivityDelegate extends Activity implements Host {
     private void killHomeActivity() {
         LauncherHelper.getInstance().setOnHomeScreen(false);
 
-        // Stop the Taskbar and Start Menu services if they should normally not be active
-        SharedPreferences pref = U.getSharedPreferences(this);
-        if(!pref.getBoolean("taskbar_active", false) || pref.getBoolean("is_hidden", false)) {
-            taskbarChild.onDestroyHost(this);
-            startMenuChild.onDestroyHost(this);
-            dashboardChild.onDestroyHost(this);
+        if(taskbarChild != null) taskbarChild.onDestroyHost(this);
+        if(startMenuChild != null) startMenuChild.onDestroyHost(this);
+        if(dashboardChild != null) dashboardChild.onDestroyHost(this);
 
-            IconCache.getInstance(this).clearCache();
+        IconCache.getInstance(this).clearCache();
+
+        U.stopFreeformHack(this);
 
-            U.stopFreeformHack(this);
+        // Stop using HomeActivityDelegate as UI host and restart services if needed
+        SharedPreferences pref = U.getSharedPreferences(this);
+        if(pref.getBoolean("taskbar_active", false)
+                && !pref.getBoolean("is_hidden", false)) {
+            startService(new Intent(this, TaskbarService.class));
+            startService(new Intent(this, StartMenuService.class));
+            startService(new Intent(this, DashboardService.class));
         }
 
         finish();
index a8d24f3..52d0e56 100644 (file)
@@ -164,7 +164,7 @@ public class AdvancedFragment extends SettingsFragment implements Preference.OnP
                 startActivity(clearIntent);
                 break;
             case "launcher":
-                if(U.canDrawOverlays(getActivity())) {
+                if(U.canDrawOverlays(getActivity(), true)) {
                     ComponentName component = new ComponentName(getActivity(), HomeActivity.class);
                     getActivity().getPackageManager().setComponentEnabledSetting(component,
                             ((CheckBoxPreference) p).isChecked() ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
index 2b6231d..88cf8f0 100644 (file)
@@ -23,7 +23,6 @@ import android.app.ActivityOptions;
 import android.app.AlertDialog;
 import android.app.AppOpsManager;
 import android.app.Service;
-import android.app.admin.DevicePolicyManager;
 import android.content.ActivityNotFoundException;
 import android.content.ComponentName;
 import android.content.Context;
@@ -62,6 +61,7 @@ import com.farmerbb.taskbar.BuildConfig;
 import com.farmerbb.taskbar.R;
 import com.farmerbb.taskbar.activity.ContextMenuActivity;
 import com.farmerbb.taskbar.activity.DummyActivity;
+import com.farmerbb.taskbar.activity.HomeActivityDelegate;
 import com.farmerbb.taskbar.activity.InvisibleActivityFreeform;
 import com.farmerbb.taskbar.activity.ShortcutActivity;
 import com.farmerbb.taskbar.activity.StartTaskbarActivity;
@@ -903,15 +903,28 @@ public class U {
                 && Settings.Global.getInt(context.getContentResolver(), "force_resizable_activities", 0) != 0));
     }
 
+    public static boolean canBootToFreeform(Context context) {
+        SharedPreferences pref = getSharedPreferences(context);
+        return hasFreeformSupport(context)
+                && pref.getBoolean("freeform_hack", false)
+                && !isOverridingFreeformHack(context);
+    }
+
     public static boolean isSamsungDevice() {
         return Build.MANUFACTURER.equalsIgnoreCase("Samsung");
     }
 
-    public static boolean isNvidiaDevice() {
+    private static boolean isNvidiaDevice() {
         return Build.MANUFACTURER.equalsIgnoreCase("NVIDIA");
     }
 
     public static boolean isServiceRunning(Context context, Class<? extends Service> cls) {
+        if(LauncherHelper.getInstance().isOnHomeScreen()
+                && (cls.equals(TaskbarService.class)
+                || cls.equals(StartMenuService.class)
+                || cls.equals(DashboardService.class)))
+            return true;
+
         return isServiceRunning(context, cls.getName());
     }
 
@@ -947,9 +960,15 @@ public class U {
         return pref.getInt("accent_color", context.getResources().getInteger(R.integer.translucent_white));
     }
 
-    @TargetApi(Build.VERSION_CODES.M)
     public static boolean canDrawOverlays(Context context) {
-        return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || Settings.canDrawOverlays(context);
+        return canDrawOverlays(context, false);
+    }
+
+    @TargetApi(Build.VERSION_CODES.M)
+    public static boolean canDrawOverlays(Context context, boolean forHomeScreen) {
+        return (forHomeScreen && !canBootToFreeform(context))
+                || Build.VERSION.SDK_INT < Build.VERSION_CODES.M
+                || Settings.canDrawOverlays(context);
     }
 
     public static boolean isGame(Context context, String packageName) {
@@ -1160,6 +1179,8 @@ public class U {
             stopTaskbarService(context, false);
             startTaskbarService(context, false);
         }
+
+        LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("com.farmerbb.taskbar.RESTART"));
     }
 
     public static void restartNotificationService(Context context) {
index c599c93..3aeeece 100644 (file)
 
                 <category android:name="android.intent.category.DEFAULT"/>
                 <category android:name="android.intent.category.HOME"/>
+                <category android:name="android.intent.category.SECONDARY_HOME"/>
             </intent-filter>
         </activity>
         <activity
 
                 <category android:name="android.intent.category.DEFAULT"/>
                 <category android:name="android.intent.category.APP_MAPS" />
-                <category android:name="android.intent.category.APP_CALENDAR" />
             </intent-filter>
         </activity>
         <activity