android: Replace deprecated fragment menu APIs

This commit is contained in:
Tobias Brunner
2025-02-18 14:12:43 +01:00
parent 10d8b66f05
commit 9a92088bb4
3 changed files with 33 additions and 18 deletions
@@ -44,12 +44,13 @@ import java.util.TreeSet;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.SearchView;
import androidx.core.view.MenuProvider;
import androidx.fragment.app.ListFragment; import androidx.fragment.app.ListFragment;
import androidx.loader.app.LoaderManager; import androidx.loader.app.LoaderManager;
import androidx.loader.content.AsyncTaskLoader; import androidx.loader.content.AsyncTaskLoader;
import androidx.loader.content.Loader; import androidx.loader.content.Loader;
public class SelectedApplicationsListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Pair<List<SelectedApplicationEntry>, List<String>>>, SearchView.OnQueryTextListener public class SelectedApplicationsListFragment extends ListFragment implements MenuProvider, LoaderManager.LoaderCallbacks<Pair<List<SelectedApplicationEntry>, List<String>>>, SearchView.OnQueryTextListener
{ {
private SelectedApplicationsAdapter mAdapter; private SelectedApplicationsAdapter mAdapter;
private SortedSet<String> mSelection; private SortedSet<String> mSelection;
@@ -58,7 +59,7 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{ {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true); requireActivity().addMenuProvider(this, getViewLifecycleOwner());
final boolean readOnly = getActivity().getIntent().getBooleanExtra(VpnProfileDataSource.KEY_READ_ONLY, false); final boolean readOnly = getActivity().getIntent().getBooleanExtra(VpnProfileDataSource.KEY_READ_ONLY, false);
getListView().setChoiceMode(readOnly ? ListView.CHOICE_MODE_NONE : ListView.CHOICE_MODE_MULTIPLE); getListView().setChoiceMode(readOnly ? ListView.CHOICE_MODE_NONE : ListView.CHOICE_MODE_MULTIPLE);
@@ -134,17 +135,21 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo
} }
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater)
{ {
MenuItem item = menu.add(R.string.search); MenuItem item = menu.add(R.string.search);
item.setIcon(android.R.drawable.ic_menu_search); item.setIcon(android.R.drawable.ic_menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
SearchView sv = new SearchView(getActivity()); SearchView sv = new SearchView(getActivity());
sv.setOnQueryTextListener(this); sv.setOnQueryTextListener(this);
item.setActionView(sv); item.setActionView(sv);
}
super.onCreateOptionsMenu(menu, inflater); @Override
public boolean onMenuItemSelected(@NonNull MenuItem menuItem)
{
return false;
} }
@Override @Override
@@ -44,13 +44,15 @@ import java.util.Map.Entry;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.view.MenuProvider;
import androidx.fragment.app.ListFragment; import androidx.fragment.app.ListFragment;
import androidx.lifecycle.Lifecycle;
import androidx.loader.app.LoaderManager; import androidx.loader.app.LoaderManager;
import androidx.loader.app.LoaderManager.LoaderCallbacks; import androidx.loader.app.LoaderManager.LoaderCallbacks;
import androidx.loader.content.AsyncTaskLoader; import androidx.loader.content.AsyncTaskLoader;
import androidx.loader.content.Loader; import androidx.loader.content.Loader;
public class TrustedCertificateListFragment extends ListFragment implements LoaderCallbacks<List<TrustedCertificateEntry>>, OnQueryTextListener public class TrustedCertificateListFragment extends ListFragment implements MenuProvider, LoaderCallbacks<List<TrustedCertificateEntry>>, OnQueryTextListener
{ {
public static final String EXTRA_CERTIFICATE_SOURCE = "certificate_source"; public static final String EXTRA_CERTIFICATE_SOURCE = "certificate_source";
private OnTrustedCertificateSelectedListener mListener; private OnTrustedCertificateSelectedListener mListener;
@@ -69,7 +71,7 @@ public class TrustedCertificateListFragment extends ListFragment implements Load
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{ {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true); requireActivity().addMenuProvider(this, getViewLifecycleOwner(), Lifecycle.State.RESUMED);
setEmptyText(getString(R.string.no_certificates)); setEmptyText(getString(R.string.no_certificates));
@@ -105,17 +107,23 @@ public class TrustedCertificateListFragment extends ListFragment implements Load
} }
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater)
{ {
MenuItem item = menu.add(R.string.search); MenuItem item = menu.add(R.string.search);
item.setIcon(android.R.drawable.ic_menu_search); item.setIcon(android.R.drawable.ic_menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
SearchView sv = new SearchView(getActivity()); SearchView sv = new SearchView(getActivity());
sv.setOnQueryTextListener(this); sv.setOnQueryTextListener(this);
item.setActionView(sv); item.setActionView(sv);
} }
@Override
public boolean onMenuItemSelected(@NonNull MenuItem menuItem)
{
return false;
}
@Override @Override
public boolean onQueryTextSubmit(String query) public boolean onQueryTextSubmit(String query)
{ /* already handled when the text changes */ { /* already handled when the text changes */
@@ -57,10 +57,13 @@ import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import androidx.annotation.NonNull;
import androidx.core.view.MenuProvider;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
public class VpnProfileListFragment extends Fragment public class VpnProfileListFragment extends Fragment implements MenuProvider
{ {
private static final String SELECTED_KEY = "SELECTED"; private static final String SELECTED_KEY = "SELECTED";
@@ -148,6 +151,7 @@ public class VpnProfileListFragment extends Fragment
if (!mReadOnly) if (!mReadOnly)
{ {
requireActivity().addMenuProvider(this, getViewLifecycleOwner());
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
mListView.setMultiChoiceModeListener(mVpnProfileSelected); mListView.setMultiChoiceModeListener(mVpnProfileSelected);
} }
@@ -167,8 +171,6 @@ public class VpnProfileListFragment extends Fragment
if (!mReadOnly) if (!mReadOnly)
{ {
setHasOptionsMenu(true);
ArrayList<Integer> selected = null; ArrayList<Integer> selected = null;
if (savedInstanceState != null) if (savedInstanceState != null)
{ {
@@ -218,13 +220,13 @@ public class VpnProfileListFragment extends Fragment
} }
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater)
{ {
inflater.inflate(R.menu.profile_list, menu); menuInflater.inflate(R.menu.profile_list, menu);
} }
@Override @Override
public void onPrepareOptionsMenu(Menu menu) public void onPrepareMenu(@NonNull Menu menu)
{ {
final MenuItem addProfile = menu.findItem(R.id.add_profile); final MenuItem addProfile = menu.findItem(R.id.add_profile);
if (addProfile != null) if (addProfile != null)
@@ -236,16 +238,16 @@ public class VpnProfileListFragment extends Fragment
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) public boolean onMenuItemSelected(@NonNull MenuItem menuItem)
{ {
if (item.getItemId() == R.id.add_profile) if (menuItem.getItemId() == R.id.add_profile)
{ {
Intent connectionIntent = new Intent(getActivity(), Intent connectionIntent = new Intent(getActivity(),
VpnProfileDetailActivity.class); VpnProfileDetailActivity.class);
startActivity(connectionIntent); startActivity(connectionIntent);
return true; return true;
} }
return super.onOptionsItemSelected(item); return false;
} }
private final OnItemClickListener mVpnProfileClicked = new OnItemClickListener() private final OnItemClickListener mVpnProfileClicked = new OnItemClickListener()