[android] Migrate DownloaderActivity to OnBackPressedCallback

Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
Andrei Shkrob
2025-07-07 19:00:26 +02:00
committed by Konstantin Pastbin
parent 0d9514bee9
commit 9c7b39fd5b
5 changed files with 39 additions and 25 deletions

View File

@@ -2,7 +2,6 @@ package app.organicmaps.downloader;
import androidx.fragment.app.Fragment;
import app.organicmaps.base.BaseMwmFragmentActivity;
import app.organicmaps.base.OnBackPressListener;
public class DownloaderActivity extends BaseMwmFragmentActivity
{
@@ -13,13 +12,4 @@ public class DownloaderActivity extends BaseMwmFragmentActivity
{
return DownloaderFragment.class;
}
@Override
public void onBackPressed()
{
OnBackPressListener fragment =
(OnBackPressListener) getSupportFragmentManager().findFragmentById(getFragmentContentResId());
if (!fragment.onBackPressed())
super.onBackPressed();
}
}

View File

@@ -11,6 +11,7 @@ import android.text.style.StyleSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -63,6 +64,15 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
private int mListenerSlot;
private CountryItem mSelectedItem;
private final OnBackPressedCallback mBackPressedCallback = new OnBackPressedCallback(false) {
@Override
public void handleOnBackPressed()
{
goUpwards();
setEnabled(canGoUpwards());
}
};
private static class GenericItem
{
@Nullable
@@ -693,6 +703,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
lm.scrollToPosition(0);
mBackPressedCallback.setEnabled(true);
if (!refresh)
return;
@@ -724,6 +735,12 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
return true;
}
@NonNull
OnBackPressedCallback getBackPressedCallback()
{
return mBackPressedCallback;
}
void setAvailableMapsMode()
{
goDeeper(getCurrentRootItem(), false);

View File

@@ -14,7 +14,6 @@ import androidx.core.view.ViewCompat;
import androidx.recyclerview.widget.RecyclerView;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmRecyclerFragment;
import app.organicmaps.base.OnBackPressListener;
import app.organicmaps.sdk.downloader.CountryItem;
import app.organicmaps.sdk.downloader.MapManager;
import app.organicmaps.sdk.search.MapSearchListener;
@@ -26,7 +25,7 @@ import java.util.ArrayList;
import java.util.List;
public class DownloaderFragment extends BaseMwmRecyclerFragment<DownloaderAdapter>
implements OnBackPressListener, MenuBottomSheetFragment.MenuBottomSheetInterface
implements MenuBottomSheetFragment.MenuBottomSheetInterface
{
private DownloaderToolbarController mToolbarController;
@@ -154,6 +153,7 @@ public class DownloaderFragment extends BaseMwmRecyclerFragment<DownloaderAdapte
mBottomPanel = new BottomPanel(this, view);
mToolbarController = new DownloaderToolbarController(view, requireActivity(), this);
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), mToolbarController.getBackPressedCallback());
update();
}
@@ -183,18 +183,6 @@ public class DownloaderFragment extends BaseMwmRecyclerFragment<DownloaderAdapte
getRecyclerView().removeOnScrollListener(mScrollListener);
}
@Override
public boolean onBackPressed()
{
if (mToolbarController.hasQuery())
{
mToolbarController.clear();
return true;
}
return mAdapter != null && mAdapter.goUpwards();
}
@Override
protected int getLayoutRes()
{
@@ -207,6 +195,7 @@ public class DownloaderFragment extends BaseMwmRecyclerFragment<DownloaderAdapte
{
if (mAdapter == null)
mAdapter = new DownloaderAdapter(this);
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), mAdapter.getBackPressedCallback());
return mAdapter;
}

View File

@@ -9,6 +9,7 @@ import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import androidx.activity.OnBackPressedCallback;
import androidx.activity.result.ActivityResult;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -42,11 +43,22 @@ public class SearchToolbarController extends ToolbarController implements View.O
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
updateViewsVisibility(TextUtils.isEmpty(s));
final boolean isEmpty = TextUtils.isEmpty(s);
mBackPressedCallback.setEnabled(!isEmpty);
updateViewsVisibility(isEmpty);
SearchToolbarController.this.onTextChanged(s.toString());
}
};
private final OnBackPressedCallback mBackPressedCallback = new OnBackPressedCallback(false) {
@Override
public void handleOnBackPressed()
{
clear();
setEnabled(false);
}
};
public SearchToolbarController(@NonNull View root, @NonNull Activity activity)
{
super(root, activity);
@@ -226,4 +238,9 @@ public class SearchToolbarController extends ToolbarController implements View.O
{
mQuery.setHint(hint);
}
@NonNull
public OnBackPressedCallback getBackPressedCallback() {
return mBackPressedCallback;
}
}