android: Replace deprecated fragment menu APIs

This commit is contained in:
Tobias Brunner 2025-02-05 15:27:37 +01:00
parent 10d8b66f05
commit 9a92088bb4
3 changed files with 33 additions and 18 deletions

View File

@ -44,12 +44,13 @@ import java.util.TreeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.SearchView;
import androidx.core.view.MenuProvider;
import androidx.fragment.app.ListFragment;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.AsyncTaskLoader;
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 SortedSet<String> mSelection;
@ -58,7 +59,7 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
requireActivity().addMenuProvider(this, getViewLifecycleOwner());
final boolean readOnly = getActivity().getIntent().getBooleanExtra(VpnProfileDataSource.KEY_READ_ONLY, false);
getListView().setChoiceMode(readOnly ? ListView.CHOICE_MODE_NONE : ListView.CHOICE_MODE_MULTIPLE);
@ -134,17 +135,21 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater)
{
MenuItem item = menu.add(R.string.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());
sv.setOnQueryTextListener(this);
item.setActionView(sv);
}
super.onCreateOptionsMenu(menu, inflater);
@Override
public boolean onMenuItemSelected(@NonNull MenuItem menuItem)
{
return false;
}
@Override

View File

@ -44,13 +44,15 @@ import java.util.Map.Entry;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.view.MenuProvider;
import androidx.fragment.app.ListFragment;
import androidx.lifecycle.Lifecycle;
import androidx.loader.app.LoaderManager;
import androidx.loader.app.LoaderManager.LoaderCallbacks;
import androidx.loader.content.AsyncTaskLoader;
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";
private OnTrustedCertificateSelectedListener mListener;
@ -69,7 +71,7 @@ public class TrustedCertificateListFragment extends ListFragment implements Load
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
requireActivity().addMenuProvider(this, getViewLifecycleOwner(), Lifecycle.State.RESUMED);
setEmptyText(getString(R.string.no_certificates));
@ -105,17 +107,23 @@ public class TrustedCertificateListFragment extends ListFragment implements Load
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater)
{
MenuItem item = menu.add(R.string.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());
sv.setOnQueryTextListener(this);
item.setActionView(sv);
}
@Override
public boolean onMenuItemSelected(@NonNull MenuItem menuItem)
{
return false;
}
@Override
public boolean onQueryTextSubmit(String query)
{ /* already handled when the text changes */

View File

@ -57,10 +57,13 @@ import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import androidx.annotation.NonNull;
import androidx.core.view.MenuProvider;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
public class VpnProfileListFragment extends Fragment
public class VpnProfileListFragment extends Fragment implements MenuProvider
{
private static final String SELECTED_KEY = "SELECTED";
@ -148,6 +151,7 @@ public class VpnProfileListFragment extends Fragment
if (!mReadOnly)
{
requireActivity().addMenuProvider(this, getViewLifecycleOwner());
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
mListView.setMultiChoiceModeListener(mVpnProfileSelected);
}
@ -167,8 +171,6 @@ public class VpnProfileListFragment extends Fragment
if (!mReadOnly)
{
setHasOptionsMenu(true);
ArrayList<Integer> selected = null;
if (savedInstanceState != null)
{
@ -218,13 +220,13 @@ public class VpnProfileListFragment extends Fragment
}
@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
public void onPrepareOptionsMenu(Menu menu)
public void onPrepareMenu(@NonNull Menu menu)
{
final MenuItem addProfile = menu.findItem(R.id.add_profile);
if (addProfile != null)
@ -236,16 +238,16 @@ public class VpnProfileListFragment extends Fragment
}
@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(),
VpnProfileDetailActivity.class);
startActivity(connectionIntent);
return true;
}
return super.onOptionsItemSelected(item);
return false;
}
private final OnItemClickListener mVpnProfileClicked = new OnItemClickListener()