From 5ee5297fb6ede47b6ffe5129cec647f0aa9bf0ce Mon Sep 17 00:00:00 2001 From: LoveSy Date: Mon, 24 Jan 2022 18:33:58 +0800 Subject: [PATCH] [app] Fix back press behavior (#1552) --- .../manager/ui/activity/MainActivity.java | 26 ++-- .../manager/ui/fragment/AppListFragment.java | 4 +- .../manager/ui/fragment/ModulesFragment.java | 6 +- .../manager/ui/fragment/RepoFragment.java | 2 +- .../drawable/ic_baseline_assignment_24.xml | 2 +- .../res/drawable/ic_baseline_extension_24.xml | 2 +- .../res/drawable/ic_baseline_get_app_24.xml | 2 +- .../res/drawable/ic_round_assignment_24.xml | 11 -- .../main/res/drawable/shortcut_ic_logs.xml | 4 +- .../main/res/drawable/shortcut_ic_modules.xml | 2 +- .../shortcut_ic_repo.xml | 2 +- .../res/drawable/shortcut_ic_settings.xml | 28 +++++ .../main/res/layout-sw600dp/activity_main.xml | 2 +- app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/menu/navigation_menu.xml | 9 +- app/src/main/res/navigation/main_nav.xml | 39 ++++++ app/src/main/res/navigation/modules_nav.xml | 59 +++++++++ app/src/main/res/navigation/nav_graph.xml | 117 ------------------ app/src/main/res/navigation/repo_nav.xml | 56 +++++++++ app/src/main/res/values-night-v31/colors.xml | 5 + app/src/main/res/values-v31/colors.xml | 5 + app/src/main/res/xml/shortcuts.xml | 18 ++- .../lspd/service/LSPManagerService.java | 4 +- 23 files changed, 241 insertions(+), 166 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_round_assignment_24.xml rename app/src/main/res/{drawable-nodpi => drawable}/shortcut_ic_repo.xml (94%) create mode 100644 app/src/main/res/drawable/shortcut_ic_settings.xml create mode 100644 app/src/main/res/navigation/main_nav.xml create mode 100644 app/src/main/res/navigation/modules_nav.xml delete mode 100644 app/src/main/res/navigation/nav_graph.xml create mode 100644 app/src/main/res/navigation/repo_nav.xml create mode 100644 app/src/main/res/values-night-v31/colors.xml create mode 100644 app/src/main/res/values-v31/colors.xml diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java index aec9b286..df3aad9e 100644 --- a/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java +++ b/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java @@ -22,6 +22,7 @@ package org.lsposed.manager.ui.activity; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import android.view.KeyEvent; @@ -30,6 +31,7 @@ import android.view.MotionEvent; import androidx.annotation.NonNull; import androidx.core.os.BuildCompat; import androidx.navigation.NavController; +import androidx.navigation.NavOptions; import androidx.navigation.Navigation; import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.ui.NavigationUI; @@ -38,7 +40,6 @@ import com.google.android.material.navigation.NavigationBarView; import org.lsposed.manager.App; import org.lsposed.manager.ConfigManager; -import org.lsposed.manager.NavGraphDirections; import org.lsposed.manager.R; import org.lsposed.manager.databinding.ActivityMainBinding; import org.lsposed.manager.repo.RepoLoader; @@ -78,7 +79,6 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene } super.onCreate(savedInstanceState); - binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); @@ -95,7 +95,6 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene NavController navController = navHostFragment.getNavController(); var nav = (NavigationBarView) binding.nav; NavigationUI.setupWithNavController(nav, navController); - nav.findViewById(R.id.modules_fragment); handleIntent(getIntent()); } @@ -115,35 +114,36 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene return; } NavController navController = navHostFragment.getNavController(); + var nav = (NavigationBarView) binding.nav; if (intent.getAction() != null && intent.getAction().equals("android.intent.action.APPLICATION_PREFERENCES")) { - navController.navigate(R.id.settings_fragment); + nav.setSelectedItemId(R.id.settings_fragment); } else if (ConfigManager.isBinderAlive()) { if (!TextUtils.isEmpty(intent.getDataString())) { switch (intent.getDataString()) { case "modules": - navController.navigate(R.id.modules_fragment); + nav.setSelectedItemId(R.id.modules_nav); break; case "logs": - navController.navigate(R.id.logs_fragment); + nav.setSelectedItemId(R.id.logs_fragment); break; case "repo": if (ConfigManager.isMagiskInstalled()) { - navController.navigate(R.id.repo_fragment); + nav.setSelectedItemId(R.id.repo_nav); } break; + case "settings": + nav.setSelectedItemId(R.id.settings_fragment); + break; default: var data = intent.getData(); - if (data.getScheme().equals("module")) { + if (data != null && data.getScheme().equals("module")) { navController.navigate( - NavGraphDirections.actionAppListFragment( - data.getHost(), - data.getPort()) - ); + new Uri.Builder().scheme("lsposed").authority("module").appendQueryParameter("modulePackageName", data.getHost()).appendQueryParameter("moduleUserId", String.valueOf(data.getPort())).build(), + new NavOptions.Builder().setEnterAnim(R.anim.fragment_enter).setExitAnim(R.anim.fragment_exit).setPopEnterAnim(R.anim.fragment_enter_pop).setPopExitAnim(R.anim.fragment_exit_pop).setLaunchSingleTop(true).setPopUpTo(navController.getGraph().getStartDestinationId(), false, true).build()); } } } } - } @Override diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/AppListFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/AppListFragment.java index fb3f63f2..06a79d5e 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/AppListFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/AppListFragment.java @@ -121,7 +121,7 @@ public class AppListFragment extends BaseFragment { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (module == null) { - getNavController().navigate(R.id.action_app_list_fragment_to_modules_fragment); + getNavController().navigate(AppListFragmentDirections.actionAppListFragmentToModulesFragment()); } } @@ -178,7 +178,7 @@ public class AppListFragment extends BaseFragment { @Override public void onDestroyView() { super.onDestroyView(); - scopeAdapter.unregisterAdapterDataObserver(observer); + if (scopeAdapter != null) scopeAdapter.unregisterAdapterDataObserver(observer); binding = null; } diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java index ac4807b5..ee3bd779 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java @@ -54,6 +54,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; +import androidx.navigation.NavOptions; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.adapter.FragmentStateAdapter; @@ -321,7 +322,10 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi .show(); return true; } else if (itemId == R.id.menu_repo) { - getNavController().navigate(ModulesFragmentDirections.actionModulesFragmentToRepoItemFragment(selectedModule.packageName, selectedModule.getAppName())); + var navController = getNavController(); + navController.navigate( + new Uri.Builder().scheme("lsposed").authority("repo").appendQueryParameter("modulePackageName", selectedModule.packageName).build(), + new NavOptions.Builder().setEnterAnim(R.anim.fragment_enter).setExitAnim(R.anim.fragment_exit).setPopEnterAnim(R.anim.fragment_enter_pop).setPopExitAnim(R.anim.fragment_exit_pop).setLaunchSingleTop(true).setPopUpTo(getNavController().getGraph().getStartDestinationId(), false, true).build()); return true; } else if (itemId == R.id.menu_compile_speed) { CompileDialogFragment.speed(getChildFragmentManager(), selectedModule.pkg.applicationInfo); diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java index 00de6e88..eb23d734 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java @@ -312,7 +312,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene holder.itemView.setOnClickListener(v -> { searchView.clearFocus(); - getNavController().navigate(RepoFragmentDirections.actionRepoFragmentToRepoItemFragment(module.getName(), module.getDescription())); + getNavController().navigate(RepoFragmentDirections.actionRepoFragmentToRepoItemFragment(module.getName())); }); holder.itemView.setTooltipText(module.getDescription()); } diff --git a/app/src/main/res/drawable/ic_baseline_assignment_24.xml b/app/src/main/res/drawable/ic_baseline_assignment_24.xml index a6c37673..6a49f3f7 100644 --- a/app/src/main/res/drawable/ic_baseline_assignment_24.xml +++ b/app/src/main/res/drawable/ic_baseline_assignment_24.xml @@ -6,6 +6,6 @@ android:tint="?attr/colorControlNormal" android:autoMirrored="true"> diff --git a/app/src/main/res/drawable/ic_baseline_extension_24.xml b/app/src/main/res/drawable/ic_baseline_extension_24.xml index 94055ba4..e010a5d3 100644 --- a/app/src/main/res/drawable/ic_baseline_extension_24.xml +++ b/app/src/main/res/drawable/ic_baseline_extension_24.xml @@ -5,6 +5,6 @@ android:viewportHeight="24" android:tint="?attr/colorControlNormal"> diff --git a/app/src/main/res/drawable/ic_baseline_get_app_24.xml b/app/src/main/res/drawable/ic_baseline_get_app_24.xml index 27bb5a3b..9a524da4 100644 --- a/app/src/main/res/drawable/ic_baseline_get_app_24.xml +++ b/app/src/main/res/drawable/ic_baseline_get_app_24.xml @@ -5,6 +5,6 @@ android:viewportHeight="24" android:tint="?attr/colorControlNormal"> diff --git a/app/src/main/res/drawable/ic_round_assignment_24.xml b/app/src/main/res/drawable/ic_round_assignment_24.xml deleted file mode 100644 index 669f4eff..00000000 --- a/app/src/main/res/drawable/ic_round_assignment_24.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/shortcut_ic_logs.xml b/app/src/main/res/drawable/shortcut_ic_logs.xml index c2927fb8..889f7d8b 100644 --- a/app/src/main/res/drawable/shortcut_ic_logs.xml +++ b/app/src/main/res/drawable/shortcut_ic_logs.xml @@ -19,11 +19,11 @@ --> - + diff --git a/app/src/main/res/drawable/shortcut_ic_modules.xml b/app/src/main/res/drawable/shortcut_ic_modules.xml index 1e0105f9..e27f6c6d 100644 --- a/app/src/main/res/drawable/shortcut_ic_modules.xml +++ b/app/src/main/res/drawable/shortcut_ic_modules.xml @@ -19,7 +19,7 @@ --> - + - + + + + + + + + + diff --git a/app/src/main/res/layout-sw600dp/activity_main.xml b/app/src/main/res/layout-sw600dp/activity_main.xml index 4a0aa526..ca466e8b 100644 --- a/app/src/main/res/layout-sw600dp/activity_main.xml +++ b/app/src/main/res/layout-sw600dp/activity_main.xml @@ -38,7 +38,7 @@ app:layout_constraintLeft_toRightOf="@id/nav" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" - app:navGraph="@navigation/nav_graph" /> + app:navGraph="@navigation/main_nav" /> + app:navGraph="@navigation/main_nav" /> diff --git a/app/src/main/res/navigation/main_nav.xml b/app/src/main/res/navigation/main_nav.xml new file mode 100644 index 00000000..f855a2f6 --- /dev/null +++ b/app/src/main/res/navigation/main_nav.xml @@ -0,0 +1,39 @@ + + + + + + + + + + diff --git a/app/src/main/res/navigation/modules_nav.xml b/app/src/main/res/navigation/modules_nav.xml new file mode 100644 index 00000000..6d07808b --- /dev/null +++ b/app/src/main/res/navigation/modules_nav.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml deleted file mode 100644 index 6732b74d..00000000 --- a/app/src/main/res/navigation/nav_graph.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/navigation/repo_nav.xml b/app/src/main/res/navigation/repo_nav.xml new file mode 100644 index 00000000..2202d968 --- /dev/null +++ b/app/src/main/res/navigation/repo_nav.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/values-night-v31/colors.xml b/app/src/main/res/values-night-v31/colors.xml new file mode 100644 index 00000000..91b4e4f1 --- /dev/null +++ b/app/src/main/res/values-night-v31/colors.xml @@ -0,0 +1,5 @@ + + + @android:color/system_accent1_800 + @android:color/system_accent1_200 + diff --git a/app/src/main/res/values-v31/colors.xml b/app/src/main/res/values-v31/colors.xml new file mode 100644 index 00000000..b08d0d82 --- /dev/null +++ b/app/src/main/res/values-v31/colors.xml @@ -0,0 +1,5 @@ + + + @android:color/system_accent1_0 + @android:color/system_accent1_600 + diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml index 5d974e29..8f37ef11 100644 --- a/app/src/main/res/xml/shortcuts.xml +++ b/app/src/main/res/xml/shortcuts.xml @@ -28,8 +28,8 @@ android:shortcutShortLabel="@string/Modules"> + + + diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java index 067e7969..9db49658 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java @@ -207,7 +207,7 @@ public class LSPManagerService extends ILSPManagerService.Stub { public static PendingIntent getNotificationIntent(String modulePackageName, int moduleUserId) { try { var intent = (Intent) getManagerIntent().clone(); - intent.setData(Uri.parse("module://" + modulePackageName + ":" + moduleUserId)); + intent.setData(new Uri.Builder().scheme("module").encodedAuthority(modulePackageName + ":" + moduleUserId).build()); return PendingIntent.getActivity(new FakeContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); } catch (Throwable e) { Log.e(TAG, "get notification intent", e); @@ -311,7 +311,7 @@ public class LSPManagerService extends ILSPManagerService.Stub { for (var shortcutInfo : sm.getPinnedShortcuts()) { if (SHORTCUT_ID.equals(shortcutInfo.getId()) && shortcutInfo.isPinned()) { var shortcutIntent = sm.createShortcutResultIntent(shortcutInfo); - var request = (LauncherApps.PinItemRequest)shortcutIntent.getParcelableExtra(LauncherApps.EXTRA_PIN_ITEM_REQUEST); + var request = (LauncherApps.PinItemRequest) shortcutIntent.getParcelableExtra(LauncherApps.EXTRA_PIN_ITEM_REQUEST); var requestInfo = request.getShortcutInfo(); // https://cs.android.com/android/platform/superproject/+/android-8.1.0_r1:frameworks/base/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java;drc=4ad6b57700bef4c484021f49e018117046562e6b;l=337 if (requestInfo.isPinned()) {