diff --git a/app/build.gradle b/app/build.gradle index 82507677..81939013 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "ml.docilealligator.infinityforreddit" minSdk 21 targetSdk 35 - versionCode 215 - versionName "8.2.0-beta1" + versionCode 217 + versionName "8.2.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java b/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java index 4f64c04a..5ae85279 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java @@ -104,6 +104,7 @@ import ml.docilealligator.infinityforreddit.settings.MainPreferenceFragment; import ml.docilealligator.infinityforreddit.settings.MiscellaneousPreferenceFragment; import ml.docilealligator.infinityforreddit.settings.NotificationPreferenceFragment; import ml.docilealligator.infinityforreddit.settings.NsfwAndSpoilerFragment; +import ml.docilealligator.infinityforreddit.settings.PostDetailsPreferenceFragment; import ml.docilealligator.infinityforreddit.settings.PostHistoryFragment; import ml.docilealligator.infinityforreddit.settings.ProxyPreferenceFragment; import ml.docilealligator.infinityforreddit.settings.SecurityPreferenceFragment; @@ -326,6 +327,8 @@ public interface AppComponent { void inject(AppAuthLoginActivity appAuthLoginActivity); + void inject(PostDetailsPreferenceFragment postDetailsPreferenceFragment); + void inject(ViewPostDetailFragmentNew viewPostDetailFragmentNew); void inject(ImportantInfoBottomSheetFragment importantInfoBottomSheetFragment); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AppModule.java b/app/src/main/java/ml/docilealligator/infinityforreddit/AppModule.java index 8dd38e9e..c8fa7b4a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/AppModule.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/AppModule.java @@ -237,8 +237,13 @@ abstract class AppModule { @Provides @Singleton - static PostDetailCommentsCacheManager providePostDetailCommentsCacheManager() { - return new PostDetailCommentsCacheManager(); + static PostDetailCommentsCacheManager providePostDetailCommentsCacheManager(@Named("post_details") SharedPreferences postDetailsSharedPreferences) { + try { + int capacity = Integer.parseInt(postDetailsSharedPreferences.getString(SharedPreferencesUtils.COMMENT_THREAD_CONTINUITY_CAPACITY, "10")); + return new PostDetailCommentsCacheManager(new AutoRemovalLinkedHashMap<>(capacity)); + } catch (NumberFormatException ignore) { + return new PostDetailCommentsCacheManager(new AutoRemovalLinkedHashMap<>(10)); + } } @Provides diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AutoRemovalLinkedHashMap.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/AutoRemovalLinkedHashMap.kt index 9e531801..f26bf31a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/AutoRemovalLinkedHashMap.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/AutoRemovalLinkedHashMap.kt @@ -1,7 +1,7 @@ package ml.docilealligator.infinityforreddit class AutoRemovalLinkedHashMap( - val maxSize: Int + var maxSize: Int ): LinkedHashMap() { override fun removeEldestEntry(eldest: Map.Entry?): Boolean { return size > maxSize diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDetailCommentsCacheManager.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDetailCommentsCacheManager.kt index 32f05842..1a5bc3bf 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDetailCommentsCacheManager.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDetailCommentsCacheManager.kt @@ -6,7 +6,7 @@ import ml.docilealligator.infinityforreddit.post.Post import ml.docilealligator.infinityforreddit.thing.SortType class PostDetailCommentsCacheManager( - val cacheMap: LinkedHashMap = AutoRemovalLinkedHashMap(10) + val cacheMap: AutoRemovalLinkedHashMap ) { fun saveCache( post: Post, @@ -41,4 +41,12 @@ class PostDetailCommentsCacheManager( fun removeCache(postId: String?) { cacheMap.remove(postId); } + + fun setCapacity(capacity: Int) { + if (capacity < 0) { + return + } + + cacheMap.maxSize = capacity + } } \ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/compose/CustomAlert.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/compose/CustomAlert.kt index 0517f786..4278a8a0 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/compose/CustomAlert.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/compose/CustomAlert.kt @@ -28,6 +28,7 @@ fun CustomAlert( ) { AlertDialog( modifier = modifier, + containerColor = Color(LocalAppTheme.current.backgroundColor), icon = iconDrawableRes?.let { @Composable { Icon(painterResource(it), contentDescription = "Example Icon") @@ -88,6 +89,7 @@ fun CustomAlert( ) { AlertDialog( modifier = modifier, + containerColor = Color(LocalAppTheme.current.backgroundColor), icon = iconDrawableRes?.let { @Composable { Icon(painterResource(it), contentDescription = "Example Icon") diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragmentBase.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragmentBase.java index 6b43e017..fc99d96a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragmentBase.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragmentBase.java @@ -511,7 +511,9 @@ public abstract class PostFragmentBase extends Fragment { } public final void videoAutoplayChangeMutingOption(boolean isMute) { - mVideoMuteManager.setMuted(isMute); + if (mVideoMuteManager.getRememberMuteOption()) { + mVideoMuteManager.setMuted(isMute); + } } public boolean getIsNsfwSubreddit() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/settings/PostDetailsPreferenceFragment.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/settings/PostDetailsPreferenceFragment.kt index 95adf04f..902ab480 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/settings/PostDetailsPreferenceFragment.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/settings/PostDetailsPreferenceFragment.kt @@ -1,18 +1,53 @@ -package ml.docilealligator.infinityforreddit.settings; +package ml.docilealligator.infinityforreddit.settings -import android.os.Bundle; +import android.os.Bundle +import androidx.preference.EditTextPreference +import androidx.preference.Preference +import androidx.preference.Preference.SummaryProvider +import ml.docilealligator.infinityforreddit.Infinity +import ml.docilealligator.infinityforreddit.PostDetailCommentsCacheManager +import ml.docilealligator.infinityforreddit.R +import ml.docilealligator.infinityforreddit.customviews.preference.CustomFontPreferenceFragmentCompat +import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils +import javax.inject.Inject -import androidx.preference.PreferenceManager; +class PostDetailsPreferenceFragment : CustomFontPreferenceFragmentCompat() { + @Inject + lateinit var mPostDetailCommentsCacheManager: PostDetailCommentsCacheManager -import ml.docilealligator.infinityforreddit.R; -import ml.docilealligator.infinityforreddit.customviews.preference.CustomFontPreferenceFragmentCompat; -import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + val preferenceManager = getPreferenceManager() + preferenceManager.setSharedPreferencesName(SharedPreferencesUtils.POST_DETAILS_SHARED_PREFERENCES_FILE) + setPreferencesFromResource(R.xml.post_details_preferences, rootKey) -public class PostDetailsPreferenceFragment extends CustomFontPreferenceFragmentCompat { - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - PreferenceManager preferenceManager = getPreferenceManager(); - preferenceManager.setSharedPreferencesName(SharedPreferencesUtils.POST_DETAILS_SHARED_PREFERENCES_FILE); - setPreferencesFromResource(R.xml.post_details_preferences, rootKey); + (mActivity.application as Infinity).appComponent.inject(this) + + val commentThreadContinuityCapacityEditTextPreference = + findPreference(SharedPreferencesUtils.COMMENT_THREAD_CONTINUITY_CAPACITY) + + if (commentThreadContinuityCapacityEditTextPreference != null) { + commentThreadContinuityCapacityEditTextPreference.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _, newValue -> + try { + val value = (newValue as String?)?.toInt() ?: -1 + if (value < 0) { + false + } else { + mPostDetailCommentsCacheManager.setCapacity(value) + true + } + } catch (_: NumberFormatException) { + false + } + } + commentThreadContinuityCapacityEditTextPreference.setSummaryProvider( + SummaryProvider { _: Preference? -> + getString( + R.string.settings_comment_thread_continuity_capacity_summary, + commentThreadContinuityCapacityEditTextPreference.text + ) + } + ) + } } -} +} \ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java index 22b014fb..21361a09 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java @@ -237,6 +237,7 @@ public class SharedPreferencesUtils { public static final String SWIPE_RIGHT_TO_GO_BACK_SENSITIVITY = "swipe_right_to_go_back_sensitivity"; public static final String SWIPE_ACTION_SENSITIVITY_IN_COMMENTS = "swipe_action_sensitivity_in_comments"; public static final String NAVIGATION_DRAWER_SWIPE_AREA = "navigation_drawer_swipe_area"; + public static final String COMMENT_THREAD_CONTINUITY_CAPACITY = "comment_thread_continuity_capacity"; public static final String CURRENT_VERSION = "current_version"; public static String getPostDetailFabPortraitX(@Nullable Display display) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index edfbe8c4..54ba0c9c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -661,6 +661,8 @@ Increase the value to show previews in higher resolution, but the app may crash unexpectedly. Post Feed Preview Max Resolution (Width * Height) Reddit Video Default Resolution + Comment Thread Continuity Capacity + %1$s comment thread(s) will be cached for seamless continuity. Easier to Watch in Full Screen Hide FAB in Post Feed Comment Divider Type diff --git a/app/src/main/res/xml-sw600dp/post_details_preferences.xml b/app/src/main/res/xml-sw600dp/post_details_preferences.xml index 71d863b5..ec4d0e36 100644 --- a/app/src/main/res/xml-sw600dp/post_details_preferences.xml +++ b/app/src/main/res/xml-sw600dp/post_details_preferences.xml @@ -56,4 +56,9 @@ app:title="@string/settings_embedded_media_type_title" app:useSimpleSummaryProvider="true" /> + + \ No newline at end of file diff --git a/app/src/main/res/xml/post_details_preferences.xml b/app/src/main/res/xml/post_details_preferences.xml index ad16db3d..97e491bf 100644 --- a/app/src/main/res/xml/post_details_preferences.xml +++ b/app/src/main/res/xml/post_details_preferences.xml @@ -50,4 +50,9 @@ app:title="@string/settings_embedded_media_type_title" app:useSimpleSummaryProvider="true" /> + + \ No newline at end of file