From 0a8edb92abe8ac299a475fa6e6ca15104512d5c5 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Mon, 31 May 2021 17:19:54 +0800 Subject: [PATCH] [app] Navigation fixes (#707) * [app] Update fragment animation * [app] Use safe args * [app] Fix tablet ui --- app/build.gradle.kts | 1 + .../ui/activity/base/BaseActivity.java | 26 ++--- .../manager/ui/fragment/AppListFragment.java | 5 +- .../manager/ui/fragment/BaseFragment.java | 10 -- .../manager/ui/fragment/HomeFragment.java | 10 +- .../manager/ui/fragment/ModulesFragment.java | 10 +- .../manager/ui/fragment/RepoFragment.java | 5 +- app/src/main/res/anim/fragment_enter.xml | 33 +++++++ app/src/main/res/anim/fragment_enter_pop.xml | 33 +++++++ app/src/main/res/anim/fragment_exit.xml | 33 +++++++ app/src/main/res/anim/fragment_exit_pop.xml | 33 +++++++ .../main/res/layout-sw600dp/fragment_main.xml | 18 ++-- app/src/main/res/navigation/nav_graph.xml | 99 ++++++++++++++++--- app/src/main/res/navigation/sub_nav_graph.xml | 73 ++++++++++++-- build.gradle.kts | 1 + 15 files changed, 314 insertions(+), 76 deletions(-) create mode 100644 app/src/main/res/anim/fragment_enter.xml create mode 100644 app/src/main/res/anim/fragment_enter_pop.xml create mode 100644 app/src/main/res/anim/fragment_exit.xml create mode 100644 app/src/main/res/anim/fragment_exit_pop.xml 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 @@ - -