[android] Added checking of custom back button in toolbar before setting the system nativation back/home button and refatored this code to reuse it everywhere

This commit is contained in:
alexzatsepin 2020-08-01 01:18:36 +03:00 committed by Arsentiy Milchakov
parent 8667ecc3e0
commit 4da5e9eacf
4 changed files with 41 additions and 53 deletions

View file

@ -2,10 +2,10 @@ package com.mapswithme.maps.base;
import android.content.Context;
import android.os.Bundle;
import androidx.fragment.app.ListFragment;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.ListFragment;
import com.mapswithme.maps.R;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
@ -27,18 +27,10 @@ public abstract class BaseMwmListFragment extends ListFragment
{
super.onViewCreated(view, savedInstanceState);
mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
mToolbar = view.findViewById(R.id.toolbar);
if (mToolbar != null)
{
UiUtils.showHomeUpButton(mToolbar);
mToolbar.setNavigationOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Utils.navigateToParent(getActivity());
}
});
UiUtils.setupNavigationUpListener(mToolbar, v -> Utils.navigateToParent(getActivity()));
}
}
@ -52,7 +44,7 @@ public abstract class BaseMwmListFragment extends ListFragment
{
super.onResume();
org.alohalytics.Statistics.logEvent("$onResume", getClass().getSimpleName() + ":" +
UiUtils.deviceOrientationAsString(getActivity()));
UiUtils.deviceOrientationAsString(requireActivity()));
}
@Override

View file

@ -2,18 +2,18 @@ package com.mapswithme.maps.base;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.CallSuper;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.mapswithme.maps.R;
import com.mapswithme.maps.widget.PlaceholderView;
import com.mapswithme.util.UiUtils;
@ -23,17 +23,21 @@ public abstract class BaseMwmRecyclerFragment<T extends RecyclerView.Adapter> ex
{
private Toolbar mToolbar;
@SuppressWarnings("NullableProblems")
@SuppressWarnings("NotNullFieldNotInitialized")
@NonNull
private RecyclerView mRecycler;
@Nullable
private PlaceholderView mPlaceholder;
@SuppressWarnings("NullableProblems")
@SuppressWarnings("NotNullFieldNotInitialized")
@NonNull
private T mAdapter;
@NonNull
private final View.OnClickListener mNavigationClickListener
= view -> Utils.navigateToParent(getActivity());
@NonNull
protected abstract T createAdapter();
@ -70,10 +74,7 @@ public abstract class BaseMwmRecyclerFragment<T extends RecyclerView.Adapter> ex
mToolbar = view.findViewById(R.id.toolbar);
if (mToolbar != null)
{
UiUtils.showHomeUpButton(mToolbar);
mToolbar.setNavigationOnClickListener(v -> Utils.navigateToParent(getActivity()));
}
UiUtils.setupNavigationUpListener(mToolbar, mNavigationClickListener);
mRecycler = view.findViewById(R.id.recycler);
if (mRecycler == null)
@ -112,7 +113,7 @@ public abstract class BaseMwmRecyclerFragment<T extends RecyclerView.Adapter> ex
{
super.onResume();
org.alohalytics.Statistics.logEvent("$onResume", this.getClass().getSimpleName()
+ ":" + UiUtils.deviceOrientationAsString(getActivity()));
+ ":" + UiUtils.deviceOrientationAsString(requireActivity()));
}
@Override

View file

@ -1,14 +1,14 @@
package com.mapswithme.maps.widget;
import android.app.Activity;
import android.view.View;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import com.mapswithme.maps.R;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
@ -19,14 +19,8 @@ public class ToolbarController
private final Activity mActivity;
@NonNull
private final Toolbar mToolbar;
private final View.OnClickListener mNavigationClickListener = new View.OnClickListener()
{
@Override
public void onClick(View view)
{
onUpClick();
}
};
@NonNull
private final View.OnClickListener mNavigationClickListener = view -> onUpClick();
public ToolbarController(@NonNull View root, @NonNull Activity activity)
{
@ -35,7 +29,7 @@ public class ToolbarController
if (useExtendedToolbar())
UiUtils.extendViewWithStatusBar(getToolbar());
setupNavigationListener();
UiUtils.setupNavigationUpListener(mToolbar, mNavigationClickListener);
setSupportActionBar();
}
@ -50,20 +44,6 @@ public class ToolbarController
return true;
}
private void setupNavigationListener()
{
View customNavigationButton = getToolbar().findViewById(R.id.back);
if (customNavigationButton != null)
{
customNavigationButton.setOnClickListener(mNavigationClickListener);
}
else
{
UiUtils.showHomeUpButton(getToolbar());
getToolbar().setNavigationOnClickListener(mNavigationClickListener);
}
}
@IdRes
private int getToolbarId()
{

View file

@ -476,6 +476,21 @@ public final class UiUtils
window.setStatusBarColor(ContextCompat.getColor(activity, statusBarColor));
}
public static void setupNavigationUpListener(@NonNull Toolbar toolbar,
@NonNull View.OnClickListener listener)
{
View customNavigationButton = toolbar.findViewById(R.id.back);
if (customNavigationButton != null)
{
customNavigationButton.setOnClickListener(listener);
}
else
{
UiUtils.showHomeUpButton(toolbar);
toolbar.setNavigationOnClickListener(listener);
}
}
public static int getCompassYOffset(@NonNull Context context)
{
return getStatusBarHeight(context);