diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index af2ddb21..cb6274f0 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -24,6 +24,7 @@ import java.nio.file.Paths
plugins {
id("org.gradle.idea")
id("com.android.application")
+ id("androidx.navigation.safeargs")
kotlin("android")
}
diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/base/BaseActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/base/BaseActivity.java
index cc2c7c89..9ef8081d 100644
--- a/app/src/main/java/org/lsposed/manager/ui/activity/base/BaseActivity.java
+++ b/app/src/main/java/org/lsposed/manager/ui/activity/base/BaseActivity.java
@@ -53,18 +53,20 @@ public class BaseActivity extends MaterialActivity {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- // make sure the versions are consistent
- String coreVersionStr = ConfigManager.getXposedVersionName();
- if (coreVersionStr != null) {
- if (!BuildConfig.VERSION_NAME.equals(coreVersionStr)) {
- new AlertDialog.Builder(this)
- .setMessage(R.string.outdated_manager)
- .setPositiveButton(android.R.string.ok, (dialog, id) -> {
- NavUtil.startURL(this, getString(R.string.about_source));
- finish();
- })
- .setCancelable(false)
- .show();
+ if (!BuildConfig.DEBUG) {
+ // make sure the versions are consistent
+ String coreVersionStr = ConfigManager.getXposedVersionName();
+ if (coreVersionStr != null) {
+ if (!BuildConfig.VERSION_NAME.equals(coreVersionStr)) {
+ new AlertDialog.Builder(this)
+ .setMessage(R.string.outdated_manager)
+ .setPositiveButton(android.R.string.ok, (dialog, id) -> {
+ NavUtil.startURL(this, getString(R.string.about_source));
+ finish();
+ })
+ .setCancelable(false)
+ .show();
+ }
}
}
}
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 915ded4f..c5b22580 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
@@ -92,8 +92,9 @@ public class AppListFragment extends BaseFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- String modulePackageName = getArguments().getString("modulePackageName");
- int moduleUserId = getArguments().getInt("moduleUserId", -1);
+ AppListFragmentArgs args = AppListFragmentArgs.fromBundle(getArguments());
+ String modulePackageName = args.getModulePackageName();
+ int moduleUserId = args.getModuleUserId();
module = ModuleUtil.getInstance().getModule(modulePackageName, moduleUserId);
if (module == null) {
diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/BaseFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/BaseFragment.java
index 56796209..1de222bc 100644
--- a/app/src/main/java/org/lsposed/manager/ui/fragment/BaseFragment.java
+++ b/app/src/main/java/org/lsposed/manager/ui/fragment/BaseFragment.java
@@ -24,7 +24,6 @@ import android.view.View;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.navigation.NavController;
-import androidx.navigation.NavOptions;
import androidx.navigation.Navigation;
import org.lsposed.manager.R;
@@ -65,13 +64,4 @@ public class BaseFragment extends Fragment {
onPrepareOptionsMenu(toolbar.getMenu());
}
}
-
- public NavOptions getNavOptions() {
- return new NavOptions.Builder()
- .setEnterAnim(R.anim.nav_default_enter_anim)
- .setExitAnim(R.anim.nav_default_exit_anim)
- .setPopEnterAnim(R.anim.nav_default_pop_enter_anim)
- .setPopExitAnim(R.anim.nav_default_pop_exit_anim)
- .build();
- }
}
diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java
index bfba5861..afbb8804 100644
--- a/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java
+++ b/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java
@@ -77,10 +77,10 @@ public class HomeFragment extends BaseFragment {
NavUtil.startURL(activity, getString(R.string.about_source));
}
});
- binding.modules.setOnClickListener(new StartFragmentListener(R.id.action_main_fragment_to_modules_fragment, true));
- binding.download.setOnClickListener(new StartFragmentListener(R.id.action_main_fragment_to_repo_fragment, false));
- binding.logs.setOnClickListener(new StartFragmentListener(R.id.action_main_fragment_to_logs_fragment, true));
- binding.settings.setOnClickListener(new StartFragmentListener(R.id.action_main_fragment_to_settings_fragment, false));
+ binding.modules.setOnClickListener(new StartFragmentListener(R.id.action_modules_fragment, true));
+ binding.download.setOnClickListener(new StartFragmentListener(R.id.action_repo_fragment, false));
+ binding.logs.setOnClickListener(new StartFragmentListener(R.id.action_logs_fragment, true));
+ binding.settings.setOnClickListener(new StartFragmentListener(R.id.action_settings_fragment, false));
binding.about.setOnClickListener(v -> {
DialogAboutBinding binding = DialogAboutBinding.inflate(LayoutInflater.from(requireActivity()), null, false);
binding.sourceCode.setMovementMethod(LinkMovementMethod.getInstance());
@@ -152,7 +152,7 @@ public class HomeFragment extends BaseFragment {
if (requireInstalled && ConfigManager.getXposedVersionName() == null) {
Snackbar.make(snackbar, R.string.lsposed_not_active, Snackbar.LENGTH_LONG).show();
} else {
- getNavController().navigate(fragment, null, getNavOptions());
+ getNavController().navigate(fragment);
}
}
}
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 123c6e3a..9fed5cc5 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
@@ -314,10 +314,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
.show();
return true;
} else if (itemId == R.id.menu_repo) {
- Bundle bundle = new Bundle();
- bundle.putString("modulePackageName", selectedModule.packageName);
- bundle.putString("moduleName", selectedModule.getAppName());
- getNavController().navigate(R.id.action_modules_fragment_to_repo_item_fragment, bundle, getNavOptions());
+ getNavController().navigate(ModulesFragmentDirections.actionModulesFragmentToRepoItemFragment(selectedModule.packageName, selectedModule.getAppName()));
return true;
}
return super.onContextItemSelected(item);
@@ -456,10 +453,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
if (!isPick) {
holder.root.setAlpha(moduleUtil.isModuleEnabled(item.packageName) ? 1.0f : .5f);
holder.itemView.setOnClickListener(v -> {
- Bundle bundle = new Bundle();
- bundle.putString("modulePackageName", item.packageName);
- bundle.putInt("moduleUserId", item.userId);
- getNavController().navigate(R.id.action_modules_fragment_to_app_list_fragment, bundle, getNavOptions());
+ getNavController().navigate(ModulesFragmentDirections.actionModulesFragmentToAppListFragment(item.packageName, item.userId));
});
holder.itemView.setOnLongClickListener(v -> {
selectedModule = item;
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 6d73fced..e4c335ba 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
@@ -203,10 +203,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.Listener {
}
holder.appDescription.setText(sb);
holder.itemView.setOnClickListener(v -> {
- Bundle bundle = new Bundle();
- bundle.putString("modulePackageName", module.getName());
- bundle.putString("moduleName", module.getDescription());
- getNavController().navigate(R.id.action_repo_fragment_to_repo_item_fragment, bundle, getNavOptions());
+ getNavController().navigate(RepoFragmentDirections.actionRepoFragmentToRepoItemFragment(module.getName(), module.getDescription()));
});
}
diff --git a/app/src/main/res/anim/fragment_enter.xml b/app/src/main/res/anim/fragment_enter.xml
new file mode 100644
index 00000000..729cbef6
--- /dev/null
+++ b/app/src/main/res/anim/fragment_enter.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/anim/fragment_enter_pop.xml b/app/src/main/res/anim/fragment_enter_pop.xml
new file mode 100644
index 00000000..7e863ffb
--- /dev/null
+++ b/app/src/main/res/anim/fragment_enter_pop.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/anim/fragment_exit.xml b/app/src/main/res/anim/fragment_exit.xml
new file mode 100644
index 00000000..c4ccf0dc
--- /dev/null
+++ b/app/src/main/res/anim/fragment_exit.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/anim/fragment_exit_pop.xml b/app/src/main/res/anim/fragment_exit_pop.xml
new file mode 100644
index 00000000..efb2c235
--- /dev/null
+++ b/app/src/main/res/anim/fragment_exit_pop.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout-sw600dp/fragment_main.xml b/app/src/main/res/layout-sw600dp/fragment_main.xml
index e0f33ff2..c06d65ab 100644
--- a/app/src/main/res/layout-sw600dp/fragment_main.xml
+++ b/app/src/main/res/layout-sw600dp/fragment_main.xml
@@ -30,30 +30,24 @@
android:layout_width="0dp"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toStartOf="@id/guideline"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent">
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintHorizontal_weight="1">
-
-
-
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 9d7ddf8d..d23a0100 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -1,5 +1,4 @@
-
-