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()) {