Use MenuProvider (#2436)
This commit is contained in:
parent
af1223e4a5
commit
880dc4d719
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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<RepoAdapter.ViewHolder> implements Filterable {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue