From 1d15d5172660a0c6db58ba3e8aba2ccceb678e2d Mon Sep 17 00:00:00 2001 From: HuanChengFly <609486518@qq.com> Date: Wed, 5 Aug 2020 20:55:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=85=81=E8=AE=B8=E6=BB=91=E5=8A=A8=E6=97=B6?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- .../huanchengfly/tieba/post/MainActivity.java | 7 +- .../huanchengfly/tieba/post/ThreadActivity.kt | 30 +++-- .../post/activities/base/BaseActivity.java | 5 + .../tieba/post/base/BaseApplication.java | 2 - .../tieba/post/fragments/BaseFragment.java | 5 + .../tieba/post/fragments/ForumFragment.kt | 31 ++--- .../fragments/PersonalizedFeedFragment.kt | 30 +++-- .../tieba/post/utils/AppPreferencesUtils.kt | 123 ++++++++++++++++++ .../res/drawable/ic_round_hourglass_full.xml | 9 ++ app/src/main/res/drawable/ic_round_outlet.xml | 9 ++ .../res/drawable/ic_round_rounded_corner.xml | 9 ++ .../main/res/drawable/ic_round_verified.xml | 9 ++ app/src/main/res/values-night/booleans.xml | 2 - app/src/main/res/values/booleans.xml | 2 - app/src/main/res/values/colors.xml | 2 + .../res/values/ic_launcher_background.xml | 4 - app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/preferences.xml | 9 ++ application.properties | 8 +- 20 files changed, 237 insertions(+), 64 deletions(-) create mode 100644 app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt create mode 100644 app/src/main/res/drawable/ic_round_hourglass_full.xml create mode 100644 app/src/main/res/drawable/ic_round_outlet.xml create mode 100644 app/src/main/res/drawable/ic_round_rounded_corner.xml create mode 100644 app/src/main/res/drawable/ic_round_verified.xml delete mode 100644 app/src/main/res/values-night/booleans.xml delete mode 100644 app/src/main/res/values/booleans.xml delete mode 100644 app/src/main/res/values/ic_launcher_background.xml diff --git a/app/build.gradle b/app/build.gradle index 71eff671..d4b678ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -111,7 +111,7 @@ dependencies { //AndroidX implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta8' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1' implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' @@ -128,7 +128,7 @@ dependencies { kapt 'com.github.bumptech.glide:compiler:4.11.0' implementation 'com.github.bumptech.glide:okhttp3-integration:4.11.0' - implementation 'com.google.android.material:material:1.2.0-beta01' + implementation 'com.google.android.material:material:1.3.0-alpha02' implementation 'com.squareup.okhttp3:okhttp:4.5.0' implementation 'com.squareup.retrofit2:retrofit:2.8.1' diff --git a/app/src/main/java/com/huanchengfly/tieba/post/MainActivity.java b/app/src/main/java/com/huanchengfly/tieba/post/MainActivity.java index 1f098796..47530385 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/MainActivity.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/MainActivity.java @@ -7,7 +7,6 @@ import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; @@ -30,7 +29,6 @@ import androidx.appcompat.app.AlertDialog; import androidx.viewpager.widget.ViewPager; -import com.flurry.android.FlurryAgent; import com.google.android.material.bottomnavigation.BottomNavigationItemView; import com.google.android.material.bottomnavigation.BottomNavigationMenuView; import com.google.android.material.bottomnavigation.BottomNavigationView; @@ -41,7 +39,6 @@ import com.huanchengfly.tieba.api.interfaces.CommonCallback; import com.huanchengfly.tieba.api.models.ChangelogBean; import com.huanchengfly.tieba.api.models.NewUpdateBean; -import com.huanchengfly.tieba.post.activities.AboutActivity; import com.huanchengfly.tieba.post.activities.NewIntroActivity; import com.huanchengfly.tieba.post.activities.UpdateInfoActivity; import com.huanchengfly.tieba.post.activities.base.BaseActivity; @@ -104,11 +101,11 @@ public void onResume() { .getBoolean("follow_system_night", false) && !TextUtils.equals(reason, ThemeUtil.REASON_MANUALLY); if (followSystemNight) { if (BaseApplication.isSystemNight() && !ThemeUtil.isNightMode(this)) { - ThemeUtil.switchToNightMode(this, ThemeUtil.REASON_FOLLOW_SYSTEM, false); SharedPreferencesUtil.put(ThemeUtil.getSharedPreferences(this), SP_SHOULD_SHOW_SNACKBAR, true); + ThemeUtil.switchToNightMode(this, ThemeUtil.REASON_FOLLOW_SYSTEM, false); } else if (!BaseApplication.isSystemNight() && ThemeUtil.isNightMode(this) && TextUtils.equals(reason, ThemeUtil.REASON_FOLLOW_SYSTEM)) { - ThemeUtil.switchFromNightMode(this, ThemeUtil.REASON_FOLLOW_SYSTEM, false); SharedPreferencesUtil.put(ThemeUtil.getSharedPreferences(this), SP_SHOULD_SHOW_SNACKBAR, true); + ThemeUtil.switchFromNightMode(this, ThemeUtil.REASON_FOLLOW_SYSTEM, false); } } super.onResume(); diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ThreadActivity.kt b/app/src/main/java/com/huanchengfly/tieba/post/ThreadActivity.kt index 7a964267..c795f485 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ThreadActivity.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ThreadActivity.kt @@ -180,21 +180,23 @@ class ThreadActivity : BaseActivity(), View.OnClickListener { addItemDecoration(ThreadDivider(this@ThreadActivity)) layoutManager = mLayoutManager adapter = mAdapter - addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { - super.onScrollStateChanged(recyclerView, newState) - if (!Util.canLoadGlide(this@ThreadActivity)) { - return - } - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - Glide.with(this@ThreadActivity) - .resumeRequests() - } else { - Glide.with(this@ThreadActivity) - .pauseRequests() + if (!appPreferences.loadPictureWhenScroll) { + addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + super.onScrollStateChanged(recyclerView, newState) + if (!Util.canLoadGlide(this@ThreadActivity)) { + return + } + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + Glide.with(this@ThreadActivity) + .resumeRequests() + } else { + Glide.with(this@ThreadActivity) + .pauseRequests() + } } - } - }) + }) + } addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { refreshTitle() diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/base/BaseActivity.java b/app/src/main/java/com/huanchengfly/tieba/post/activities/base/BaseActivity.java index c81fb6cf..aa35b0f5 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/activities/base/BaseActivity.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/base/BaseActivity.java @@ -29,6 +29,7 @@ import com.huanchengfly.tieba.post.R; import com.huanchengfly.tieba.post.base.BaseApplication; import com.huanchengfly.tieba.post.base.Config; +import com.huanchengfly.tieba.post.utils.AppPreferencesUtils; import com.huanchengfly.tieba.post.utils.HandleBackUtil; import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil; import com.huanchengfly.tieba.post.utils.ThemeUtil; @@ -54,6 +55,10 @@ protected int getLayoutId() { return NO_LAYOUT; } + protected AppPreferencesUtils getAppPreferences() { + return new AppPreferencesUtils(this); + } + @Override protected void onPause() { super.onPause(); diff --git a/app/src/main/java/com/huanchengfly/tieba/post/base/BaseApplication.java b/app/src/main/java/com/huanchengfly/tieba/post/base/BaseApplication.java index 99867794..8603aafd 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/base/BaseApplication.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/base/BaseApplication.java @@ -22,7 +22,6 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatDelegate; -import com.billy.android.preloader.PreLoader; import com.flurry.android.FlurryAgent; import com.huanchengfly.theme.interfaces.ThemeSwitcher; import com.huanchengfly.theme.utils.ThemeUtils; @@ -35,7 +34,6 @@ import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil; import com.huanchengfly.tieba.post.utils.ThemeUtil; import com.huanchengfly.tieba.post.utils.Util; -import com.huanchengfly.tieba.post.utils.preload.loaders.LikeForumListLoader; import com.huanchengfly.utils.MD5Util; import org.intellij.lang.annotations.RegExp; diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/BaseFragment.java b/app/src/main/java/com/huanchengfly/tieba/post/fragments/BaseFragment.java index 83c89ef0..7e498193 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/BaseFragment.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/BaseFragment.java @@ -17,6 +17,7 @@ import com.huanchengfly.tieba.post.interfaces.BackHandledInterface; import com.huanchengfly.tieba.post.interfaces.Refreshable; +import com.huanchengfly.tieba.post.utils.AppPreferencesUtils; import com.huanchengfly.tieba.post.utils.HandleBackUtil; import org.jetbrains.annotations.NotNull; @@ -49,6 +50,10 @@ public boolean isFirstVisible() { return isFirstVisible; } + protected AppPreferencesUtils getAppPreferences() { + return new AppPreferencesUtils(attachContext); + } + @TargetApi(23) @Override public void onAttach(Context context) { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/ForumFragment.kt b/app/src/main/java/com/huanchengfly/tieba/post/fragments/ForumFragment.kt index 4e9177f0..4f02f9c8 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/ForumFragment.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/ForumFragment.kt @@ -1,7 +1,6 @@ package com.huanchengfly.tieba.post.fragments import android.os.Bundle -import android.util.Log import android.view.View import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager @@ -127,21 +126,23 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab layoutManager = MyLinearLayoutManager(attachContext) addItemDecoration(ForumDivider(attachContext, LinearLayoutManager.VERTICAL)) adapter = mAdapter - addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { - super.onScrollStateChanged(recyclerView, newState) - if (!Util.canLoadGlide(attachContext)) { - return - } - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - Glide.with(attachContext) - .resumeRequests() - } else { - Glide.with(attachContext) - .pauseRequests() + if (!appPreferences.loadPictureWhenScroll) { + addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + super.onScrollStateChanged(recyclerView, newState) + if (!Util.canLoadGlide(attachContext)) { + return + } + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + Glide.with(attachContext) + .resumeRequests() + } else { + Glide.with(attachContext) + .pauseRequests() + } } - } - }) + }) + } addOnChildAttachStateChangeListener(object : OnChildAttachStateChangeListener { override fun onChildViewAttachedToWindow(view: View) {} override fun onChildViewDetachedFromWindow(view: View) { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/PersonalizedFeedFragment.kt b/app/src/main/java/com/huanchengfly/tieba/post/fragments/PersonalizedFeedFragment.kt index 622d7d15..acf151cc 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/PersonalizedFeedFragment.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/PersonalizedFeedFragment.kt @@ -60,21 +60,23 @@ class PersonalizedFeedFragment : BaseFragment(), PersonalizedFeedAdapter.OnRefre } recyclerView.apply { addItemDecoration(FeedDivider(attachContext)) - addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { - super.onScrollStateChanged(recyclerView, newState) - if (!Util.canLoadGlide(attachContext)) { - return - } - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - Glide.with(attachContext) - .resumeRequests() - } else { - Glide.with(attachContext) - .pauseRequests() + if (!appPreferences.loadPictureWhenScroll) { + addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + super.onScrollStateChanged(recyclerView, newState) + if (!Util.canLoadGlide(attachContext)) { + return + } + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + Glide.with(attachContext) + .resumeRequests() + } else { + Glide.with(attachContext) + .pauseRequests() + } } - } - }) + }) + } addOnChildAttachStateChangeListener(object : OnChildAttachStateChangeListener { override fun onChildViewAttachedToWindow(view: View) {} override fun onChildViewDetachedFromWindow(view: View) { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt new file mode 100644 index 00000000..0bb8c850 --- /dev/null +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt @@ -0,0 +1,123 @@ +package com.huanchengfly.tieba.post.utils + +import android.content.Context +import android.content.SharedPreferences +import kotlin.properties.ReadWriteProperty +import kotlin.reflect.KProperty + +open class AppPreferencesUtils(context: Context) { + private val preferences: SharedPreferences = + context.getSharedPreferences("settings", Context.MODE_PRIVATE) + //PreferenceManager.getDefaultSharedPreferences(context) + + var loadPictureWhenScroll by SharedPreferenceDelegates.boolean(true) + + private object SharedPreferenceDelegates { + fun int(defaultValue: Int = 0) = object : ReadWriteProperty { + override fun getValue(thisRef: AppPreferencesUtils, property: KProperty<*>): Int { + return thisRef.preferences.getInt(property.name, defaultValue) + } + + override fun setValue( + thisRef: AppPreferencesUtils, + property: KProperty<*>, + value: Int + ) { + thisRef.preferences.edit().putInt(property.name, value).apply() + } + } + + fun long(defaultValue: Long = 0L) = + object : ReadWriteProperty { + override fun getValue( + thisRef: AppPreferencesUtils, + property: KProperty<*> + ): Long { + return thisRef.preferences.getLong(property.name, defaultValue) + } + + override fun setValue( + thisRef: AppPreferencesUtils, + property: KProperty<*>, + value: Long + ) { + thisRef.preferences.edit().putLong(property.name, value).apply() + } + } + + fun boolean(defaultValue: Boolean = false) = + object : ReadWriteProperty { + override fun getValue( + thisRef: AppPreferencesUtils, + property: KProperty<*> + ): Boolean { + return thisRef.preferences.getBoolean(property.name, defaultValue) + } + + override fun setValue( + thisRef: AppPreferencesUtils, + property: KProperty<*>, + value: Boolean + ) { + thisRef.preferences.edit().putBoolean(property.name, value).apply() + } + } + + fun float(defaultValue: Float = 0.0f) = + object : ReadWriteProperty { + override fun getValue( + thisRef: AppPreferencesUtils, + property: KProperty<*> + ): Float { + return thisRef.preferences.getFloat(property.name, defaultValue) + } + + override fun setValue( + thisRef: AppPreferencesUtils, + property: KProperty<*>, + value: Float + ) { + thisRef.preferences.edit().putFloat(property.name, value).apply() + } + } + + fun string(defaultValue: String? = null) = + object : ReadWriteProperty { + override fun getValue( + thisRef: AppPreferencesUtils, + property: KProperty<*> + ): String? { + return thisRef.preferences.getString(property.name, defaultValue) + } + + override fun setValue( + thisRef: AppPreferencesUtils, + property: KProperty<*>, + value: String? + ) { + thisRef.preferences.edit().putString(property.name, value).apply() + } + } + + fun stringSet(defaultValue: Set? = null) = + object : ReadWriteProperty?> { + override fun getValue( + thisRef: AppPreferencesUtils, + property: KProperty<*> + ): Set? { + return thisRef.preferences.getStringSet(property.name, defaultValue) + } + + override fun setValue( + thisRef: AppPreferencesUtils, + property: KProperty<*>, + value: Set? + ) { + thisRef.preferences.edit().putStringSet(property.name, value).apply() + } + } + } + + val Context.appPreferences: AppPreferencesUtils + get() = AppPreferencesUtils(this) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_round_hourglass_full.xml b/app/src/main/res/drawable/ic_round_hourglass_full.xml new file mode 100644 index 00000000..a5edabe1 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_hourglass_full.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_round_outlet.xml b/app/src/main/res/drawable/ic_round_outlet.xml new file mode 100644 index 00000000..15235705 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_outlet.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_round_rounded_corner.xml b/app/src/main/res/drawable/ic_round_rounded_corner.xml new file mode 100644 index 00000000..adf397ca --- /dev/null +++ b/app/src/main/res/drawable/ic_round_rounded_corner.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_round_verified.xml b/app/src/main/res/drawable/ic_round_verified.xml new file mode 100644 index 00000000..35f0bd63 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_verified.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values-night/booleans.xml b/app/src/main/res/values-night/booleans.xml deleted file mode 100644 index a6b3daec..00000000 --- a/app/src/main/res/values-night/booleans.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/values/booleans.xml b/app/src/main/res/values/booleans.xml deleted file mode 100644 index a6b3daec..00000000 --- a/app/src/main/res/values/booleans.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f0e78057..c3a90c11 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,5 +1,7 @@ + #2E60B0 + #FFFFFF #4477E0 #FF6E7486 diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index 9641af76..00000000 --- a/app/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #2E60B0 - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 868d3105..40bb2c25 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -354,4 +354,5 @@ 跳转失败 免责声明 本软件仅供交流学习使用,严禁用于商业用途,请于下载后 24 小时内删除。 + 滑动时加载图片 diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 24082f87..4112319b 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -94,10 +94,17 @@ android:summary="@string/summary_show_top_forum_in_normal_list" /> + + @@ -139,11 +146,13 @@ android:title="@string/title_hide_explore" />