From 760fa8dd7ee531ee83bbca1fb3e2165e1b258070 Mon Sep 17 00:00:00 2001 From: Braden Farmer Date: Wed, 18 Mar 2020 22:48:27 -0600 Subject: [PATCH] Continue work on standalone Android 10 Desktop Mode support --- .../taskbar/activity/HomeActivityDelegate.java | 48 +++++++++++++++++++++- .../taskbar/fragment/DesktopModeFragment.java | 28 +++++++++++++ .../taskbar/service/NotificationService.java | 2 +- .../com/farmerbb/taskbar/util/ApplicationType.java | 2 +- app/src/main/java/com/farmerbb/taskbar/util/U.java | 4 +- app/src/main/res/xml/tb_pref_desktop_mode.xml | 4 ++ 6 files changed, 83 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java b/app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java index b3ed5093..052b5c39 100644 --- a/app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java +++ b/app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java @@ -103,6 +103,8 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost { private int startDragIndex; private int endDragIndex; + private boolean dcvRemoved; + private GestureDetector detector; private BroadcastReceiver killReceiver = new BroadcastReceiver() { @@ -198,8 +200,14 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if(this instanceof SecondaryHomeActivity) + if(this instanceof SecondaryHomeActivity) { + if(!U.isDesktopModeActive(this)) { + finish(); + return; + } + windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); + } shouldDelayFreeformHack = true; hits = 0; @@ -343,6 +351,12 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost { || U.isLauncherPermanentlyEnabled(this)) && !U.isChromeOs(this)) { setContentView(layout); + + if(this instanceof SecondaryHomeActivity) { + dcvRemoved = false; + traverseAndRemoveDecorCaption(getWindow().getDecorView()); + } + pref.edit().putBoolean("launcher", !(this instanceof SecondaryHomeActivity)).apply(); } else killHomeActivity(); @@ -1003,4 +1017,36 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost { } else helper.setOnPrimaryHomeScreen(value); } + + @SuppressWarnings("rawtypes") + @SuppressLint("PrivateApi") + private void traverseAndRemoveDecorCaption(View view) { + if(dcvRemoved || !(view instanceof ViewGroup)) + return; + + Class dcvClass; + try { + dcvClass = Class.forName("com.android.internal.widget.DecorCaptionView"); + } catch (ClassNotFoundException e) { + return; + } + + ViewGroup viewGroup = (ViewGroup) view; + int position = -1; + + for(int i = 0; i < viewGroup.getChildCount(); i++) { + View child = viewGroup.getChildAt(i); + + if(dcvClass.isInstance(child)) { + position = i; + break; + } else + traverseAndRemoveDecorCaption(child); + } + + if(position >= 0) { + viewGroup.removeViewAt(position); + dcvRemoved = true; + } + } } diff --git a/app/src/main/java/com/farmerbb/taskbar/fragment/DesktopModeFragment.java b/app/src/main/java/com/farmerbb/taskbar/fragment/DesktopModeFragment.java index 9ba2bdf4..5a89a2a3 100644 --- a/app/src/main/java/com/farmerbb/taskbar/fragment/DesktopModeFragment.java +++ b/app/src/main/java/com/farmerbb/taskbar/fragment/DesktopModeFragment.java @@ -15,8 +15,12 @@ package com.farmerbb.taskbar.fragment; +import android.annotation.TargetApi; +import android.content.ActivityNotFoundException; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.Preference; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; @@ -35,6 +39,9 @@ public class DesktopModeFragment extends SettingsFragment { // Add preferences addPreferencesFromResource(R.xml.tb_pref_desktop_mode); + // Set OnClickListeners for certain preferences + findPreference("set_as_default").setOnPreferenceClickListener(this); + SharedPreferences pref = U.getSharedPreferences(getActivity()); if(pref.getBoolean("launcher", false)) findPreference("desktop_mode").setEnabled(false); @@ -54,4 +61,25 @@ public class DesktopModeFragment extends SettingsFragment { if(actionBar != null) actionBar.setDisplayHomeAsUpEnabled(true); } + + @TargetApi(29) + @Override + public boolean onPreferenceClick(final Preference p) { + final SharedPreferences pref = U.getSharedPreferences(getActivity()); + + switch(p.getKey()) { + case "set_as_default": + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_SECONDARY_HOME); + + try { + startActivity(intent); + } catch (Exception e) { /* Gracefully fail */ } + + break; + } + + return super.onPreferenceClick(p); + } } \ No newline at end of file diff --git a/app/src/main/java/com/farmerbb/taskbar/service/NotificationService.java b/app/src/main/java/com/farmerbb/taskbar/service/NotificationService.java index 09ee50cb..d3586ba0 100644 --- a/app/src/main/java/com/farmerbb/taskbar/service/NotificationService.java +++ b/app/src/main/java/com/farmerbb/taskbar/service/NotificationService.java @@ -237,7 +237,7 @@ public class NotificationService extends Service { Intent intent = new Intent(this, SecondaryHomeActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent, U.getActivityOptions(this, ApplicationType.GAME, null).toBundle()); + startActivity(intent, U.getActivityOptions(this, ApplicationType.APP_FULLSCREEN, null).toBundle()); }; if(shouldDelay) diff --git a/app/src/main/java/com/farmerbb/taskbar/util/ApplicationType.java b/app/src/main/java/com/farmerbb/taskbar/util/ApplicationType.java index e9f34083..73a404e1 100644 --- a/app/src/main/java/com/farmerbb/taskbar/util/ApplicationType.java +++ b/app/src/main/java/com/farmerbb/taskbar/util/ApplicationType.java @@ -15,4 +15,4 @@ package com.farmerbb.taskbar.util; -public enum ApplicationType { APP_PORTRAIT, APP_LANDSCAPE, GAME, FREEFORM_HACK, CONTEXT_MENU } \ No newline at end of file +public enum ApplicationType { APP_PORTRAIT, APP_LANDSCAPE, APP_FULLSCREEN, FREEFORM_HACK, CONTEXT_MENU } \ No newline at end of file diff --git a/app/src/main/java/com/farmerbb/taskbar/util/U.java b/app/src/main/java/com/farmerbb/taskbar/util/U.java index ce1bbe2d..7ef2a045 100644 --- a/app/src/main/java/com/farmerbb/taskbar/util/U.java +++ b/app/src/main/java/com/farmerbb/taskbar/util/U.java @@ -1048,7 +1048,7 @@ public class U { else stackId = getFullscreenWindowModeId(); break; - case GAME: + case APP_FULLSCREEN: stackId = getFullscreenWindowModeId(); break; case FREEFORM_HACK: @@ -1142,7 +1142,7 @@ public class U { @SuppressLint("SwitchIntDef") private static ApplicationType getApplicationType(Context context, AppEntry entry) { if(isGame(context, entry.getPackageName())) - return ApplicationType.GAME; + return ApplicationType.APP_FULLSCREEN; try { ActivityInfo info = context.getPackageManager().getActivityInfo( diff --git a/app/src/main/res/xml/tb_pref_desktop_mode.xml b/app/src/main/res/xml/tb_pref_desktop_mode.xml index 66310bab..f2e7d2cc 100644 --- a/app/src/main/res/xml/tb_pref_desktop_mode.xml +++ b/app/src/main/res/xml/tb_pref_desktop_mode.xml @@ -21,6 +21,10 @@ android:key="desktop_mode" android:title="@string/tb_pref_header_desktop_mode"/> + + -- 2.11.0