diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index 4157513c1..aa8567c76 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -58,7 +58,6 @@ import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; @@ -66,7 +65,7 @@ import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; -public abstract class BaseStatusListFragment extends BaseRecyclerFragment implements PhotoViewerHost, ScrollableToTop{ +public abstract class BaseStatusListFragment extends MastodonRecyclerFragment implements PhotoViewerHost, ScrollableToTop{ protected ArrayList displayItems=new ArrayList<>(); protected DisplayItemsAdapter adapter; protected String accountID; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/MastodonRecyclerFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/MastodonRecyclerFragment.java new file mode 100644 index 000000000..6f41877f6 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/MastodonRecyclerFragment.java @@ -0,0 +1,52 @@ +package org.joinmastodon.android.fragments; + +import android.os.Bundle; +import android.view.View; +import android.widget.Toolbar; + +import org.joinmastodon.android.utils.ElevationOnScrollListener; + +import java.util.Collections; +import java.util.List; + +import androidx.annotation.CallSuper; +import me.grishka.appkit.fragments.BaseRecyclerFragment; +import me.grishka.appkit.views.FragmentRootLinearLayout; + +public abstract class MastodonRecyclerFragment extends BaseRecyclerFragment{ + protected ElevationOnScrollListener elevationOnScrollListener; + + public MastodonRecyclerFragment(int perPage){ + super(perPage); + } + + public MastodonRecyclerFragment(int layout, int perPage){ + super(layout, perPage); + } + + protected List getViewsForElevationEffect(){ + Toolbar toolbar=getToolbar(); + return toolbar!=null ? Collections.singletonList(toolbar) : Collections.emptyList(); + } + + @Override + @CallSuper + public void onViewCreated(View view, Bundle savedInstanceState){ + super.onViewCreated(view, savedInstanceState); + if(wantsElevationOnScrollEffect()) + list.addOnScrollListener(elevationOnScrollListener=new ElevationOnScrollListener((FragmentRootLinearLayout) view, getViewsForElevationEffect())); + } + + @Override + @CallSuper + protected void onUpdateToolbar(){ + super.onUpdateToolbar(); + if(elevationOnScrollListener!=null){ + elevationOnScrollListener.setViews(getViewsForElevationEffect()); + } + } + + protected boolean wantsElevationOnScrollEffect(){ + return true; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/BaseAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/BaseAccountListFragment.java index d9ab73f2f..0b7b81f66 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/BaseAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/BaseAccountListFragment.java @@ -23,6 +23,7 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships; import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed; import org.joinmastodon.android.api.session.AccountSessionManager; +import org.joinmastodon.android.fragments.MastodonRecyclerFragment; import org.joinmastodon.android.fragments.ProfileFragment; import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment; import org.joinmastodon.android.model.Account; @@ -47,7 +48,6 @@ import me.grishka.appkit.Nav; import me.grishka.appkit.api.APIRequest; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; @@ -56,7 +56,7 @@ import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; -public abstract class BaseAccountListFragment extends BaseRecyclerFragment{ +public abstract class BaseAccountListFragment extends MastodonRecyclerFragment{ protected HashMap relationships=new HashMap<>(); protected String accountID; protected ArrayList> relationshipsRequests=new ArrayList<>(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/InstanceRulesFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/InstanceRulesFragment.java index 307908f68..f5919b392 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/InstanceRulesFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/InstanceRulesFragment.java @@ -2,20 +2,14 @@ package org.joinmastodon.android.fragments.onboarding; import android.annotation.SuppressLint; import android.app.Activity; -import android.graphics.Typeface; import android.os.Build; import android.os.Bundle; import android.text.Html; -import android.text.Spannable; -import android.text.SpannableStringBuilder; -import android.text.style.StyleSpan; -import android.text.style.TypefaceSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; import android.widget.Button; -import android.widget.ImageView; import android.widget.TextView; import org.joinmastodon.android.R; diff --git a/mastodon/src/main/java/org/joinmastodon/android/utils/ElevationOnScrollListener.java b/mastodon/src/main/java/org/joinmastodon/android/utils/ElevationOnScrollListener.java index e1f847a35..62f49ff5a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/utils/ElevationOnScrollListener.java +++ b/mastodon/src/main/java/org/joinmastodon/android/utils/ElevationOnScrollListener.java @@ -5,7 +5,6 @@ import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; -import android.graphics.Color; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.view.View; @@ -26,10 +25,14 @@ import me.grishka.appkit.views.FragmentRootLinearLayout; public class ElevationOnScrollListener extends RecyclerView.OnScrollListener implements View.OnScrollChangeListener{ private boolean isAtTop; private Animator currentPanelsAnim; - private View[] views; + private List views; private FragmentRootLinearLayout fragmentRootLayout; public ElevationOnScrollListener(FragmentRootLinearLayout fragmentRootLayout, View... views){ + this(fragmentRootLayout, Arrays.asList(views)); + } + + public ElevationOnScrollListener(FragmentRootLinearLayout fragmentRootLayout, List views){ isAtTop=true; this.fragmentRootLayout=fragmentRootLayout; this.views=views; @@ -46,7 +49,11 @@ public class ElevationOnScrollListener extends RecyclerView.OnScrollListener imp } public void setViews(View... views){ - List oldViews=Arrays.asList(this.views); + setViews(Arrays.asList(views)); + } + + public void setViews(List views){ + List oldViews=this.views; this.views=views; for(View v:views){ if(oldViews.contains(v))