parent
1e8dec42b1
commit
f0a6a55490
@ -0,0 +1,130 @@ |
|||||||
|
package io.legado.app.ui.config |
||||||
|
|
||||||
|
import android.annotation.SuppressLint |
||||||
|
import android.content.SharedPreferences |
||||||
|
import android.net.Uri |
||||||
|
import android.os.Bundle |
||||||
|
import android.view.View |
||||||
|
import androidx.preference.Preference |
||||||
|
import io.legado.app.R |
||||||
|
import io.legado.app.base.BasePreferenceFragment |
||||||
|
import io.legado.app.constant.PreferKey |
||||||
|
import io.legado.app.lib.dialogs.selector |
||||||
|
import io.legado.app.lib.theme.primaryColor |
||||||
|
import io.legado.app.model.BookCover |
||||||
|
import io.legado.app.utils.* |
||||||
|
|
||||||
|
class WelcomeConfigFragment : BasePreferenceFragment(), |
||||||
|
SharedPreferences.OnSharedPreferenceChangeListener { |
||||||
|
|
||||||
|
private val requestWelcomeImage = 221 |
||||||
|
private val requestWelcomeImageDark = 222 |
||||||
|
private val selectImage = registerForActivityResult(SelectImageContract()) { |
||||||
|
it.uri?.let { uri -> |
||||||
|
when (it.requestCode) { |
||||||
|
requestWelcomeImage -> setCoverFromUri(PreferKey.defaultCover, uri) |
||||||
|
requestWelcomeImageDark -> setCoverFromUri(PreferKey.defaultCoverDark, uri) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { |
||||||
|
addPreferencesFromResource(R.xml.pref_config_welcome) |
||||||
|
upPreferenceSummary(PreferKey.welcomeImage, getPrefString(PreferKey.welcomeImage)) |
||||||
|
upPreferenceSummary(PreferKey.welcomeImageDark, getPrefString(PreferKey.welcomeImageDark)) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { |
||||||
|
super.onViewCreated(view, savedInstanceState) |
||||||
|
activity?.setTitle(R.string.cover_config) |
||||||
|
listView.setEdgeEffectColor(primaryColor) |
||||||
|
setHasOptionsMenu(true) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) { |
||||||
|
super.onCreate(savedInstanceState) |
||||||
|
preferenceManager.sharedPreferences?.registerOnSharedPreferenceChangeListener(this) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onDestroy() { |
||||||
|
super.onDestroy() |
||||||
|
preferenceManager.sharedPreferences?.unregisterOnSharedPreferenceChangeListener(this) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { |
||||||
|
sharedPreferences ?: return |
||||||
|
when (key) { |
||||||
|
PreferKey.welcomeImage, |
||||||
|
PreferKey.welcomeImageDark -> { |
||||||
|
upPreferenceSummary(key, getPrefString(key)) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@SuppressLint("PrivateResource") |
||||||
|
override fun onPreferenceTreeClick(preference: Preference): Boolean { |
||||||
|
when (preference.key) { |
||||||
|
PreferKey.welcomeImage -> |
||||||
|
if (getPrefString(preference.key).isNullOrEmpty()) { |
||||||
|
selectImage.launch(requestWelcomeImage) |
||||||
|
} else { |
||||||
|
context?.selector( |
||||||
|
items = arrayListOf( |
||||||
|
getString(R.string.delete), |
||||||
|
getString(R.string.select_image) |
||||||
|
) |
||||||
|
) { _, i -> |
||||||
|
if (i == 0) { |
||||||
|
removePref(preference.key) |
||||||
|
BookCover.upDefaultCover() |
||||||
|
} else { |
||||||
|
selectImage.launch(requestWelcomeImage) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
PreferKey.welcomeImageDark -> |
||||||
|
if (getPrefString(preference.key).isNullOrEmpty()) { |
||||||
|
selectImage.launch(requestWelcomeImageDark) |
||||||
|
} else { |
||||||
|
context?.selector( |
||||||
|
items = arrayListOf( |
||||||
|
getString(R.string.delete), |
||||||
|
getString(R.string.select_image) |
||||||
|
) |
||||||
|
) { _, i -> |
||||||
|
if (i == 0) { |
||||||
|
removePref(preference.key) |
||||||
|
BookCover.upDefaultCover() |
||||||
|
} else { |
||||||
|
selectImage.launch(requestWelcomeImageDark) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return super.onPreferenceTreeClick(preference) |
||||||
|
} |
||||||
|
|
||||||
|
private fun upPreferenceSummary(preferenceKey: String, value: String?) { |
||||||
|
val preference = findPreference<Preference>(preferenceKey) ?: return |
||||||
|
when (preferenceKey) { |
||||||
|
PreferKey.defaultCover, |
||||||
|
PreferKey.defaultCoverDark -> preference.summary = if (value.isNullOrBlank()) { |
||||||
|
getString(R.string.select_image) |
||||||
|
} else { |
||||||
|
value |
||||||
|
} |
||||||
|
else -> preference.summary = value |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private fun setCoverFromUri(preferenceKey: String, uri: Uri) { |
||||||
|
readUri(uri) { name, bytes -> |
||||||
|
var file = requireContext().externalFiles |
||||||
|
file = FileUtils.createFileIfNotExist(file, "covers", name) |
||||||
|
file.writeBytes(bytes) |
||||||
|
putPrefString(preferenceKey, file.absolutePath) |
||||||
|
BookCover.upDefaultCover() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,66 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.prefs.SwitchPreference |
||||||
|
android:defaultValue="false" |
||||||
|
android:key="customWelcome" |
||||||
|
android:summary="@string/custom_welcome_summary" |
||||||
|
android:title="@string/custom_welcome" |
||||||
|
app:allowDividerAbove="false" |
||||||
|
app:allowDividerBelow="false" |
||||||
|
app:iconSpaceReserved="false" /> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.prefs.PreferenceCategory |
||||||
|
android:key="dayThemeCategory" |
||||||
|
android:title="@string/day" |
||||||
|
app:allowDividerAbove="true" |
||||||
|
app:allowDividerBelow="false" |
||||||
|
app:iconSpaceReserved="false" |
||||||
|
app:layout="@layout/view_preference_category"> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.prefs.Preference |
||||||
|
android:key="welcomeImagePath" |
||||||
|
android:title="@string/background_image" |
||||||
|
app:allowDividerAbove="false" |
||||||
|
app:allowDividerBelow="false" |
||||||
|
app:iconSpaceReserved="false" /> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.prefs.SwitchPreference |
||||||
|
android:defaultValue="true" |
||||||
|
android:key="welcomeShowText" |
||||||
|
android:summary="@string/welcome_text" |
||||||
|
android:title="@string/show_welcome_text" |
||||||
|
app:allowDividerAbove="false" |
||||||
|
app:allowDividerBelow="false" |
||||||
|
app:iconSpaceReserved="false" /> |
||||||
|
|
||||||
|
</io.legado.app.ui.widget.prefs.PreferenceCategory> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.prefs.PreferenceCategory |
||||||
|
android:key="nightThemeCategory" |
||||||
|
android:title="@string/night" |
||||||
|
app:allowDividerAbove="true" |
||||||
|
app:allowDividerBelow="false" |
||||||
|
app:iconSpaceReserved="false" |
||||||
|
app:layout="@layout/view_preference_category"> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.prefs.Preference |
||||||
|
android:key="welcomeImagePathDark" |
||||||
|
android:title="@string/background_image" |
||||||
|
app:allowDividerAbove="false" |
||||||
|
app:allowDividerBelow="false" |
||||||
|
app:iconSpaceReserved="false" /> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.prefs.SwitchPreference |
||||||
|
android:defaultValue="true" |
||||||
|
android:key="welcomeShowTextDark" |
||||||
|
android:summary="@string/welcome_text" |
||||||
|
android:title="@string/show_welcome_text" |
||||||
|
app:allowDividerAbove="false" |
||||||
|
app:allowDividerBelow="false" |
||||||
|
app:iconSpaceReserved="false" /> |
||||||
|
|
||||||
|
</io.legado.app.ui.widget.prefs.PreferenceCategory> |
||||||
|
|
||||||
|
</androidx.preference.PreferenceScreen> |
Loading…
Reference in new issue