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 01f81dd0..c60612ba 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 @@ -23,6 +23,7 @@ import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -33,6 +34,7 @@ import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.SearchView; +import androidx.core.view.MenuProvider; import androidx.recyclerview.widget.ConcatAdapter; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -49,7 +51,7 @@ import org.lsposed.manager.util.ModuleUtil; import rikka.material.app.LocaleDelegate; import rikka.recyclerview.RecyclerViewKt; -public class AppListFragment extends BaseFragment { +public class AppListFragment extends BaseFragment implements MenuProvider { public SearchView searchView; private ScopeAdapter scopeAdapter; @@ -191,16 +193,12 @@ public class AppListFragment extends BaseFragment { } @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (scopeAdapter.onOptionsItemSelected(item)) { - return true; - } - return super.onOptionsItemSelected(item); + public boolean onMenuItemSelected(@NonNull MenuItem item) { + return scopeAdapter.onOptionsItemSelected(item); } @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - super.onPrepareOptionsMenu(menu); + public void onPrepareMenu(@NonNull Menu menu) { searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); searchView.setOnQueryTextListener(searchListener); searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @@ -219,6 +217,11 @@ public class AppListFragment extends BaseFragment { scopeAdapter.onPrepareOptionsMenu(menu); } + @Override + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + + } + @Override public boolean onContextItemSelected(@NonNull MenuItem item) { if (scopeAdapter.onContextItemSelected(item)) { 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 4c98ac43..7fe530db 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 @@ -27,6 +27,7 @@ import android.widget.Toast; import androidx.annotation.IdRes; import androidx.annotation.StringRes; import androidx.appcompat.widget.Toolbar; +import androidx.core.view.MenuProvider; import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.NavDirections; @@ -43,7 +44,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; -public class BaseFragment extends Fragment { +public abstract class BaseFragment extends Fragment { private final Handler uiHandler = new Handler(Looper.getMainLooper()); public void navigateUp() { @@ -92,8 +93,11 @@ public class BaseFragment extends Fragment { if (tipsView != null) tipsView.setTooltipText(title); if (menu != -1) { toolbar.inflateMenu(menu); - toolbar.setOnMenuItemClickListener(this::onOptionsItemSelected); - onPrepareOptionsMenu(toolbar.getMenu()); + if (this instanceof MenuProvider) { + var self = (MenuProvider) this; + toolbar.setOnMenuItemClickListener(self::onMenuItemSelected); + self.onPrepareMenu(toolbar.getMenu()); + } } } @@ -149,5 +153,4 @@ public class BaseFragment extends Fragment { } }); } - } 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 8b1fc5cc..c780bf28 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 @@ -26,12 +26,15 @@ import android.os.Bundle; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.text.HtmlCompat; +import androidx.core.view.MenuProvider; import androidx.fragment.app.DialogFragment; import org.lsposed.lspd.ILSPManagerService; @@ -54,8 +57,7 @@ import java.util.HashMap; import rikka.core.util.ClipboardUtils; import rikka.material.app.LocaleDelegate; -public class HomeFragment extends BaseFragment { - +public class HomeFragment extends BaseFragment implements MenuProvider { private FragmentHomeBinding binding; @Override @@ -65,7 +67,7 @@ public class HomeFragment extends BaseFragment { } @Override - public void onPrepareOptionsMenu(Menu menu) { + public void onPrepareMenu(Menu menu) { menu.findItem(R.id.menu_about).setOnMenuItemClickListener(v -> { showAbout(); return true; @@ -76,6 +78,16 @@ public class HomeFragment extends BaseFragment { }); } + @Override + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + + } + + @Override + public boolean onMenuItemSelected(@NonNull MenuItem menuItem) { + return false; + } + @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentHomeBinding.inflate(inflater, container, false); diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java index 6a1857e3..f7c3bfb5 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java @@ -27,6 +27,7 @@ import android.os.Looper; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -36,6 +37,7 @@ import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.view.MenuProvider; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -67,7 +69,7 @@ import java.util.stream.IntStream; import rikka.material.app.LocaleDelegate; import rikka.recyclerview.RecyclerViewKt; -public class LogsFragment extends BaseFragment { +public class LogsFragment extends BaseFragment implements MenuProvider { private final Handler handler = new Handler(Looper.getMainLooper()); private FragmentPagerBinding binding; private LogPageAdapter adapter; @@ -129,7 +131,7 @@ public class LogsFragment extends BaseFragment { @SuppressLint("NotifyDataSetChanged") @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { + public boolean onMenuItemSelected(@NonNull MenuItem item) { var itemId = item.getItemId(); if (itemId == R.id.menu_save) { save(); @@ -142,20 +144,23 @@ public class LogsFragment extends BaseFragment { return true; } if (optionsItemSelectListener != null) { - if (optionsItemSelectListener.onOptionsItemSelected(item)) - return true; + return optionsItemSelectListener.onOptionsItemSelected(item); } - return super.onOptionsItemSelected(item); + return false; } @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - super.onPrepareOptionsMenu(menu); + public void onPrepareMenu(@NonNull Menu menu) { wordWrap = menu.findItem(R.id.menu_word_wrap); wordWrap.setChecked(App.getPreferences().getBoolean("enable_word_wrap", false)); binding.viewPager.setUserInputEnabled(wordWrap.isChecked()); } + @Override + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + + } + @Override public void onDestroyView() { super.onDestroyView(); 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 2dfe36ab..b2fadf0b 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 @@ -39,6 +39,7 @@ import android.text.style.TypefaceSpan; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -52,6 +53,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.SearchView; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.view.MenuProvider; import androidx.fragment.app.Fragment; import androidx.navigation.NavOptions; import androidx.recyclerview.widget.LinearLayoutManager; @@ -92,7 +94,7 @@ import rikka.core.util.ResourceUtils; import rikka.material.app.LocaleDelegate; import rikka.recyclerview.RecyclerViewKt; -public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleListener, RepoLoader.RepoListener { +public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleListener, RepoLoader.RepoListener, MenuProvider { private static final PackageManager pm = App.getInstance().getPackageManager(); private static final ModuleUtil moduleUtil = ModuleUtil.getInstance(); private static final RepoLoader repoLoader = RepoLoader.getInstance(); @@ -190,7 +192,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi } @Override - public void onPrepareOptionsMenu(Menu menu) { + public void onPrepareMenu(Menu menu) { searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); searchView.setOnQueryTextListener(searchListener); searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @@ -206,6 +208,16 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi searchView.findViewById(androidx.appcompat.R.id.search_edit_frame).setLayoutDirection(View.LAYOUT_DIRECTION_INHERIT); } + @Override + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + + } + + @Override + public boolean onMenuItemSelected(@NonNull MenuItem menuItem) { + return false; + } + @Override public void onResume() { super.onResume(); 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 fa5058f0..d8d84d23 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 @@ -34,6 +34,7 @@ import android.text.style.StyleSpan; import android.text.style.TypefaceSpan; import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -46,6 +47,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.SearchView; import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.view.MenuProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -74,7 +76,7 @@ import rikka.core.util.LabelComparator; import rikka.core.util.ResourceUtils; import rikka.recyclerview.RecyclerViewKt; -public class RepoFragment extends BaseFragment implements RepoLoader.RepoListener, ModuleUtil.ModuleListener { +public class RepoFragment extends BaseFragment implements RepoLoader.RepoListener, ModuleUtil.ModuleListener, MenuProvider { protected FragmentRepoBinding binding; protected SearchView searchView; private SearchView.OnQueryTextListener mSearchListener; @@ -173,7 +175,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene } @Override - public void onPrepareOptionsMenu(Menu menu) { + public void onPrepareMenu(Menu menu) { searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); searchView.setOnQueryTextListener(mSearchListener); searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @@ -198,6 +200,10 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene menu.findItem(R.id.item_upgradable_first).setChecked(App.getPreferences().getBoolean("upgradable_first", true)); } + @Override + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + } + @Override public void onDestroyView() { super.onDestroyView(); @@ -239,7 +245,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene } @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { + public boolean onMenuItemSelected(@NonNull MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.item_sort_by_name) { item.setChecked(true); @@ -253,8 +259,10 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene item.setChecked(!item.isChecked()); App.getPreferences().edit().putBoolean("upgradable_first", item.isChecked()).apply(); adapter.refresh(); + } else { + return false; } - return super.onOptionsItemSelected(item); + return true; } private class RepoAdapter extends EmptyStateRecyclerView.EmptyStateAdapter implements Filterable { diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoItemFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoItemFragment.java index 89832dbb..b77cccd7 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoItemFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoItemFragment.java @@ -34,6 +34,8 @@ import android.text.style.ForegroundColorSpan; import android.text.style.RelativeSizeSpan; import android.util.Log; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -48,6 +50,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.view.MenuProvider; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -100,7 +103,7 @@ import rikka.material.app.LocaleDelegate; import rikka.recyclerview.RecyclerViewKt; import rikka.widget.borderview.BorderView; -public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoListener { +public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoListener, MenuProvider { FragmentPagerBinding binding; OnlineModule module; private ReleaseAdapter releaseAdapter; @@ -222,12 +225,18 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis } @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + + } + + @Override + public boolean onMenuItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if (id == R.id.menu_open_in_browser) { NavUtil.startURL(requireActivity(), "https://modules.lsposed.org/module/" + module.getName()); + return true; } - return super.onOptionsItemSelected(item); + return false; } @Override