Merge branch 'nsfw_sync_server' into 'master'
Implement syncing of nsfw show preference See merge request pixeldroid/PixelDroid!605
This commit is contained in:
commit
3f85809db9
|
@ -32,6 +32,7 @@ import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import androidx.paging.ExperimentalPagingApi
|
import androidx.paging.ExperimentalPagingApi
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import androidx.viewpager2.widget.ViewPager2
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
|
@ -554,6 +555,12 @@ class MainActivity : BaseActivity() {
|
||||||
val account = api.verifyCredentials()
|
val account = api.verifyCredentials()
|
||||||
updateUserInfoDb(db, account)
|
updateUserInfoDb(db, account)
|
||||||
|
|
||||||
|
val show = api.getSettings().common.media.always_show_cw
|
||||||
|
launch {
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(applicationContext)
|
||||||
|
.edit().putBoolean("always_show_nsfw", show).commit()
|
||||||
|
}
|
||||||
|
|
||||||
//No need to update drawer account info here, the ViewModel listens to db updates
|
//No need to update drawer account info here, the ViewModel listens to db updates
|
||||||
} catch (exception: Exception) {
|
} catch (exception: Exception) {
|
||||||
Log.e("ACCOUNT UPDATE:", exception.toString())
|
Log.e("ACCOUNT UPDATE:", exception.toString())
|
||||||
|
|
|
@ -4,11 +4,13 @@ import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.activity.addCallback
|
import androidx.activity.addCallback
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import androidx.preference.CheckBoxPreference
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
@ -22,12 +24,14 @@ import org.pixeldroid.app.R
|
||||||
import org.pixeldroid.app.databinding.SettingsBinding
|
import org.pixeldroid.app.databinding.SettingsBinding
|
||||||
import org.pixeldroid.app.main.MainActivity
|
import org.pixeldroid.app.main.MainActivity
|
||||||
import org.pixeldroid.app.settings.TutorialSettingsDialog.Companion.START_TUTORIAL
|
import org.pixeldroid.app.settings.TutorialSettingsDialog.Companion.START_TUTORIAL
|
||||||
|
import org.pixeldroid.app.utils.BaseActivity
|
||||||
|
import org.pixeldroid.app.utils.api.PixelfedAPI
|
||||||
|
import org.pixeldroid.app.utils.api.objects.CommonWrapper
|
||||||
import org.pixeldroid.app.utils.setThemeFromPreferences
|
import org.pixeldroid.app.utils.setThemeFromPreferences
|
||||||
import org.pixeldroid.common.ThemedActivity
|
|
||||||
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class SettingsActivity : ThemedActivity(), SharedPreferences.OnSharedPreferenceChangeListener {
|
class SettingsActivity : BaseActivity(), SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
private var restartMainOnExit = false
|
private var restartMainOnExit = false
|
||||||
private lateinit var binding: SettingsBinding
|
private lateinit var binding: SettingsBinding
|
||||||
|
@ -105,6 +109,27 @@ class SettingsActivity : ThemedActivity(), SharedPreferences.OnSharedPreferenceC
|
||||||
"themeColor" -> {
|
"themeColor" -> {
|
||||||
recreateWithRestartStatus()
|
recreateWithRestartStatus()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"always_show_nsfw" -> {
|
||||||
|
lifecycleScope.launch {
|
||||||
|
val api: PixelfedAPI = apiHolder.api ?: apiHolder.setToCurrentUser()
|
||||||
|
try {
|
||||||
|
// Get old settings and modify just the nsfw one
|
||||||
|
val settings = api.getSettings().let { settings ->
|
||||||
|
settings.common.copy(
|
||||||
|
media = settings.common.media.copy(
|
||||||
|
always_show_cw = sharedPreferences.getBoolean(key, settings.common.media.always_show_cw)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
api.setSettings(CommonWrapper(settings))
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("Pixelfed API settings", e.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -191,6 +216,16 @@ class SettingsActivity : ThemedActivity(), SharedPreferences.OnSharedPreferenceC
|
||||||
locale?.getDisplayName(locale) ?: getString(R.string.default_system)
|
locale?.getDisplayName(locale) ?: getString(R.string.default_system)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
findPreference<CheckBoxPreference>("always_show_nsfw")?.let {
|
||||||
|
lifecycleScope.launch {
|
||||||
|
val api: PixelfedAPI = (requireActivity() as SettingsActivity).apiHolder.api ?: (requireActivity() as SettingsActivity).apiHolder.setToCurrentUser()
|
||||||
|
|
||||||
|
try {
|
||||||
|
val show = api.getSettings().common.media.always_show_cw
|
||||||
|
it.isChecked = show
|
||||||
|
} catch (_: Exception){}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Hide Notification setting for Android versions where it doesn't work
|
//Hide Notification setting for Android versions where it doesn't work
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||||
|
|
|
@ -469,4 +469,11 @@ interface PixelfedAPI {
|
||||||
@Field("forward") forward: Boolean = true
|
@Field("forward") forward: Boolean = true
|
||||||
) : Report
|
) : Report
|
||||||
|
|
||||||
|
@POST("/api/pixelfed/v1/app/settings")
|
||||||
|
suspend fun setSettings(
|
||||||
|
@Body account_id: CommonWrapper,
|
||||||
|
) : PixelfedAppSettings
|
||||||
|
|
||||||
|
@GET("/api/pixelfed/v1/app/settings")
|
||||||
|
suspend fun getSettings() : PixelfedAppSettings
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package org.pixeldroid.app.utils.api.objects
|
||||||
|
|
||||||
|
data class PixelfedAppSettings(
|
||||||
|
val id: String,
|
||||||
|
val username: String,
|
||||||
|
val updated_at: String,
|
||||||
|
val common: Common
|
||||||
|
)
|
||||||
|
data class CommonWrapper(
|
||||||
|
val common: Common
|
||||||
|
)
|
||||||
|
|
||||||
|
data class Common(
|
||||||
|
val timelines: Timelines,
|
||||||
|
val media: Media,
|
||||||
|
val appearance: Appearance
|
||||||
|
)
|
||||||
|
|
||||||
|
data class Timelines(
|
||||||
|
val show_public: Boolean,
|
||||||
|
val show_network: Boolean,
|
||||||
|
val hide_likes_shares: Boolean
|
||||||
|
)
|
||||||
|
|
||||||
|
data class Media(
|
||||||
|
val hide_public_behind_cw: Boolean,
|
||||||
|
val always_show_cw: Boolean,
|
||||||
|
val show_alt_text: Boolean
|
||||||
|
)
|
||||||
|
|
||||||
|
data class Appearance(
|
||||||
|
val links_use_in_app_browser: Boolean,
|
||||||
|
val theme: String
|
||||||
|
)
|
|
@ -33,7 +33,9 @@
|
||||||
android:summary="@string/arrange_tabs_description"
|
android:summary="@string/arrange_tabs_description"
|
||||||
android:icon="@drawable/outline_bottom_navigation" />
|
android:icon="@drawable/outline_bottom_navigation" />
|
||||||
|
|
||||||
<CheckBoxPreference app:key="always_show_nsfw" app:title="@string/always_show_nsfw"
|
<CheckBoxPreference
|
||||||
|
app:key="always_show_nsfw"
|
||||||
|
app:title="@string/always_show_nsfw"
|
||||||
app:icon="@drawable/eye_black_24dp" android:defaultValue="false"
|
app:icon="@drawable/eye_black_24dp" android:defaultValue="false"
|
||||||
android:summary="@string/summary_always_show_nsfw"/>
|
android:summary="@string/summary_always_show_nsfw"/>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue