diff --git a/app/build.gradle b/app/build.gradle index 0c23e25..cb9b24f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,6 +93,7 @@ dependencies { implementation "dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0" implementation "dev.rikka.rikkax.insets:insets:1.2.0" implementation 'com.github.Dimezis:BlurView:version-1.6.6' + implementation 'com.github.KieronQuinn:MonetCompat:0.4.1' // Utils implementation 'com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.3' diff --git a/app/src/main/java/com/fox2code/mmm/MainActivity.java b/app/src/main/java/com/fox2code/mmm/MainActivity.java index 2a1ae8d..9cd3291 100644 --- a/app/src/main/java/com/fox2code/mmm/MainActivity.java +++ b/app/src/main/java/com/fox2code/mmm/MainActivity.java @@ -103,7 +103,6 @@ public class MainActivity extends CompatActivity implements SwipeRefreshLayout.O this.moduleList.setAdapter(this.moduleViewAdapter); this.moduleList.setLayoutManager(new LinearLayoutManager(this)); this.moduleList.setItemViewCacheSize(4); // Default is 2 - OverScrollManager.install(this.moduleList, this); this.swipeRefreshLayout.setOnRefreshListener(this); this.actionBarBlur.setBackground(this.actionBarBackground); this.actionBarBlur.setupWith(this.moduleList).setFrameClearDrawable( diff --git a/app/src/main/java/com/fox2code/mmm/OverScrollManager.java b/app/src/main/java/com/fox2code/mmm/OverScrollManager.java index 0b81b6c..aa07b2b 100644 --- a/app/src/main/java/com/fox2code/mmm/OverScrollManager.java +++ b/app/src/main/java/com/fox2code/mmm/OverScrollManager.java @@ -1,14 +1,5 @@ package com.fox2code.mmm; -import android.util.Log; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.fox2code.mmm.compat.CompatDisplay; -import com.mikepenz.aboutlibraries.LibsConfiguration; - public class OverScrollManager { private static final String TAG = "OverScrollManager"; @@ -17,76 +8,4 @@ public class OverScrollManager { int getOverScrollInsetBottom(); } - - public static class LibsOverScroll implements LibsConfiguration.LibsUIListener { - private final OverScrollHelper overScrollHelper; - - public LibsOverScroll() { - this.overScrollHelper = null; - } - - public LibsOverScroll(OverScrollHelper overScrollHelper) { - this.overScrollHelper = overScrollHelper; - } - - @NonNull - @Override - public View preOnCreateView(@NonNull View view) { - return view; - } - - @NonNull - @Override - public View postOnCreateView(@NonNull View view) { - OverScrollManager.install( - view.findViewById(R.id.cardListView), - this.overScrollHelper); - return view; - } - } - - public static void install(final RecyclerView recyclerView) { - OverScrollManager.install(recyclerView, null); - } - - public static void install(final RecyclerView recyclerView, - final OverScrollHelper overScrollHelper) { - if (recyclerView == null) return; - recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER); - recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - int prevState = -1, lastTranslation = 0; - - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - if (newState == RecyclerView.SCROLL_STATE_IDLE && this.prevState != newState) { - if (recyclerView.getOverScrollMode() != View.OVER_SCROLL_NEVER) - recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER); - final int threshold = CompatDisplay.dpToPixel(16); - final int lastTranslation = this.lastTranslation; - if (lastTranslation < threshold) { - this.prevState = newState; - return; - } - final int insetTop; - final int insetBottom; - if (overScrollHelper == null) { - insetTop = 0; - insetBottom = 0; - } else { - insetTop = overScrollHelper.getOverScrollInsetTop(); - insetBottom = overScrollHelper.getOverScrollInsetBottom(); - } - Log.d(TAG, "Overscroll: " + lastTranslation + " -> (" - + insetTop + ", " + insetBottom + ")"); - // TODO Overscroll effect for 5.0 (With settings toggle) - } - this.prevState = newState; - } - - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - this.lastTranslation = dy; - } - }); - } } diff --git a/app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java b/app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java index 35378bc..29b0489 100644 --- a/app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java +++ b/app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java @@ -12,6 +12,7 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.os.SystemProperties; +import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.view.KeyCharacterMap; @@ -20,6 +21,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewConfiguration; +import android.widget.ScrollView; import androidx.annotation.AttrRes; import androidx.annotation.CallSuper; @@ -36,10 +38,15 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.core.view.WindowInsetsCompat; +import androidx.core.widget.NestedScrollView; import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.RecyclerView; import com.fox2code.mmm.Constants; import com.fox2code.mmm.R; +import com.kieronquinn.monetcompat.app.MonetCompatActivity; +import com.kieronquinn.monetcompat.extensions.views.ViewExtensions_RecyclerViewKt; +import com.kieronquinn.monetcompat.extensions.views.ViewExtensions_ScrollViewKt; import java.lang.ref.WeakReference; import java.util.Locale; @@ -89,7 +96,16 @@ public class CompatActivity extends AppCompatActivity { protected void onCreate(@Nullable Bundle savedInstanceState) { if (!this.onCreateCalled) { this.getLayoutInflater().setFactory2(new LayoutInflaterFactory(this.getDelegate()) - .addOnViewCreatedListener(WindowInsetsHelper.Companion.getLISTENER())); + .addOnViewCreatedListeners(WindowInsetsHelper.Companion.getLISTENER(), + (view, parent, name, context, attrs) -> { + if (view instanceof RecyclerView) { + ViewExtensions_RecyclerViewKt.enableStretchOverscroll( + (RecyclerView) view, null); + } else if (view instanceof NestedScrollView) { + ViewExtensions_ScrollViewKt.enableStretchOverscroll( + (NestedScrollView) view, null); + } + })); this.hasHardwareNavBar = this.hasHardwareNavBar0(); this.onCreateCalledOnce = true; } diff --git a/app/src/main/java/com/fox2code/mmm/markdown/MarkdownActivity.java b/app/src/main/java/com/fox2code/mmm/markdown/MarkdownActivity.java index ad289c4..96adedc 100644 --- a/app/src/main/java/com/fox2code/mmm/markdown/MarkdownActivity.java +++ b/app/src/main/java/com/fox2code/mmm/markdown/MarkdownActivity.java @@ -28,6 +28,7 @@ import androidx.core.graphics.ColorUtils; import com.fox2code.mmm.Constants; import com.fox2code.mmm.MainApplication; +import com.fox2code.mmm.OverScrollManager; import com.fox2code.mmm.R; import com.fox2code.mmm.XHooks; import com.fox2code.mmm.compat.CompatActivity; diff --git a/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java b/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java index d97d0aa..a34d404 100644 --- a/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java +++ b/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java @@ -77,7 +77,6 @@ public class SettingsActivity extends CompatActivity implements LanguageActivity public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { getPreferenceManager().setSharedPreferencesName("mmm"); setPreferencesFromResource(R.xml.root_preferences, rootKey); - OverScrollManager.install(getListView()); findPreference("pref_manage_repos").setOnPreferenceClickListener(p -> { devModeStep = 0; openFragment(new RepoFragment(), R.string.manage_repos_pref); @@ -166,8 +165,7 @@ public class SettingsActivity extends CompatActivity implements LanguageActivity } final LibsBuilder libsBuilder = new LibsBuilder().withShowLoadingProgress(false) - .withLicenseShown(true).withAboutMinimalDesign(false) - .withUiListener(new OverScrollManager.LibsOverScroll()); + .withLicenseShown(true).withAboutMinimalDesign(false); Preference update = findPreference("pref_update"); update.setVisible(BuildConfig.ENABLE_AUTO_UPDATER && (BuildConfig.DEBUG || AppUpdateManager.getAppUpdateManager().peekHasUpdate())); @@ -234,7 +232,6 @@ public class SettingsActivity extends CompatActivity implements LanguageActivity public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { getPreferenceManager().setSharedPreferencesName("mmm"); setPreferencesFromResource(R.xml.repo_preferences, rootKey); - OverScrollManager.install(getListView()); setRepoData(RepoManager.MAGISK_ALT_REPO, "Magisk Modules Alt Repo", RepoManager.MAGISK_ALT_REPO_HOMEPAGE, null, null, diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4fdbda6..405847d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -20,7 +20,6 @@ android:id="@+id/module_list" android:layout_width="match_parent" android:layout_height="match_parent" - android:overScrollMode="never" app:edgeToEdge="true" />