mirror of https://github.com/KokaKiwi/BarInsta
180 lines
7.4 KiB
Kotlin
180 lines
7.4 KiB
Kotlin
package awais.instagrabber.dialogs
|
|
|
|
import android.app.Dialog
|
|
import android.content.DialogInterface
|
|
import android.os.Bundle
|
|
import android.view.View
|
|
import android.widget.CompoundButton
|
|
import androidx.fragment.app.DialogFragment
|
|
import awais.instagrabber.R
|
|
import awais.instagrabber.databinding.DialogPostLayoutPreferencesBinding
|
|
import awais.instagrabber.models.PostsLayoutPreferences
|
|
import awais.instagrabber.models.PostsLayoutPreferences.PostsLayoutType
|
|
import awais.instagrabber.models.PostsLayoutPreferences.ProfilePicSize
|
|
import awais.instagrabber.utils.Utils
|
|
import com.google.android.material.button.MaterialButtonToggleGroup
|
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
|
|
class PostsLayoutPreferencesDialogFragment(
|
|
private val layoutPreferenceKey: String,
|
|
private val onApplyListener: OnApplyListener
|
|
) : DialogFragment() {
|
|
|
|
private lateinit var binding: DialogPostLayoutPreferencesBinding
|
|
|
|
private val preferencesBuilder: PostsLayoutPreferences.Builder
|
|
|
|
init {
|
|
val preferences = PostsLayoutPreferences.fromJson(Utils.settingsHelper.getString(layoutPreferenceKey))
|
|
preferencesBuilder = PostsLayoutPreferences.builder().mergeFrom(preferences)
|
|
}
|
|
|
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
|
binding = DialogPostLayoutPreferencesBinding.inflate(layoutInflater)
|
|
init()
|
|
return MaterialAlertDialogBuilder(requireContext())
|
|
.setView(binding.getRoot())
|
|
.setPositiveButton(R.string.apply) { _: DialogInterface?, _: Int ->
|
|
val preferences = preferencesBuilder.build()
|
|
val json = preferences.json
|
|
Utils.settingsHelper.putString(layoutPreferenceKey, json)
|
|
onApplyListener.onApply(preferences)
|
|
}
|
|
.create()
|
|
}
|
|
|
|
private fun init() {
|
|
initLayoutToggle()
|
|
if (preferencesBuilder.type != PostsLayoutType.LINEAR) {
|
|
initStaggeredOrGridOptions()
|
|
}
|
|
}
|
|
|
|
private fun initStaggeredOrGridOptions() {
|
|
initColCountToggle()
|
|
initNamesToggle()
|
|
initAvatarsToggle()
|
|
initCornersToggle()
|
|
initGapToggle()
|
|
}
|
|
|
|
private fun initLayoutToggle() {
|
|
val selectedLayoutId = selectedLayoutId
|
|
binding.layoutToggle.check(selectedLayoutId)
|
|
if (selectedLayoutId == R.id.layout_linear) {
|
|
binding.staggeredOrGridOptions.visibility = View.GONE
|
|
}
|
|
binding.layoutToggle.addOnButtonCheckedListener { _: MaterialButtonToggleGroup?, checkedId: Int, isChecked: Boolean ->
|
|
if (!isChecked) return@addOnButtonCheckedListener
|
|
when (checkedId) {
|
|
R.id.layout_linear -> {
|
|
preferencesBuilder.type = PostsLayoutType.LINEAR
|
|
preferencesBuilder.colCount = 1
|
|
binding.staggeredOrGridOptions.visibility = View.GONE
|
|
}
|
|
R.id.layout_staggered -> {
|
|
preferencesBuilder.type = PostsLayoutType.STAGGERED_GRID
|
|
if (preferencesBuilder.colCount == 1) {
|
|
preferencesBuilder.colCount = 2
|
|
}
|
|
binding.staggeredOrGridOptions.visibility = View.VISIBLE
|
|
initStaggeredOrGridOptions()
|
|
}
|
|
else -> {
|
|
preferencesBuilder.type = PostsLayoutType.GRID
|
|
if (preferencesBuilder.colCount == 1) {
|
|
preferencesBuilder.colCount = 2
|
|
}
|
|
binding.staggeredOrGridOptions.visibility = View.VISIBLE
|
|
initStaggeredOrGridOptions()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun initColCountToggle() {
|
|
binding.colCountToggle.check(selectedColCountId)
|
|
binding.colCountToggle.addOnButtonCheckedListener { _: MaterialButtonToggleGroup?, checkedId: Int, isChecked: Boolean ->
|
|
if (!isChecked) return@addOnButtonCheckedListener
|
|
preferencesBuilder.colCount = (if (checkedId == R.id.col_count_two) 2 else 3)
|
|
}
|
|
}
|
|
|
|
private fun initAvatarsToggle() {
|
|
binding.showAvatarToggle.isChecked = preferencesBuilder.isAvatarVisible
|
|
binding.avatarSizeToggle.check(selectedAvatarSizeId)
|
|
binding.showAvatarToggle.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
|
|
preferencesBuilder.isAvatarVisible = isChecked
|
|
binding.labelAvatarSize.visibility = if (isChecked) View.VISIBLE else View.GONE
|
|
binding.avatarSizeToggle.visibility = if (isChecked) View.VISIBLE else View.GONE
|
|
}
|
|
binding.labelAvatarSize.visibility = if (preferencesBuilder.isAvatarVisible) View.VISIBLE else View.GONE
|
|
binding.avatarSizeToggle.visibility = if (preferencesBuilder.isAvatarVisible) View.VISIBLE else View.GONE
|
|
binding.avatarSizeToggle.addOnButtonCheckedListener { _: MaterialButtonToggleGroup?, checkedId: Int, isChecked: Boolean ->
|
|
if (!isChecked) return@addOnButtonCheckedListener
|
|
preferencesBuilder.profilePicSize = when (checkedId) {
|
|
R.id.avatar_size_tiny -> ProfilePicSize.TINY
|
|
R.id.avatar_size_small -> ProfilePicSize.SMALL
|
|
else -> ProfilePicSize.REGULAR
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun initNamesToggle() {
|
|
binding.showNamesToggle.isChecked = preferencesBuilder.isNameVisible
|
|
binding.showNamesToggle.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
|
|
preferencesBuilder.isNameVisible = isChecked
|
|
}
|
|
}
|
|
|
|
private fun initCornersToggle() {
|
|
binding.cornersToggle.check(selectedCornersId)
|
|
binding.cornersToggle.addOnButtonCheckedListener { _: MaterialButtonToggleGroup?, checkedId: Int, isChecked: Boolean ->
|
|
if (!isChecked) return@addOnButtonCheckedListener
|
|
if (checkedId == R.id.corners_round) {
|
|
preferencesBuilder.hasRoundedCorners = true
|
|
return@addOnButtonCheckedListener
|
|
}
|
|
preferencesBuilder.hasRoundedCorners = false
|
|
}
|
|
}
|
|
|
|
private fun initGapToggle() {
|
|
binding.showGapToggle.isChecked = preferencesBuilder.hasGap
|
|
binding.showGapToggle.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
|
|
preferencesBuilder.hasGap = isChecked
|
|
}
|
|
}
|
|
|
|
private val selectedLayoutId: Int
|
|
get() = when (preferencesBuilder.type) {
|
|
PostsLayoutType.STAGGERED_GRID -> R.id.layout_staggered
|
|
PostsLayoutType.LINEAR -> R.id.layout_linear
|
|
PostsLayoutType.GRID -> R.id.layout_grid
|
|
else -> R.id.layout_grid
|
|
}
|
|
|
|
private val selectedColCountId: Int
|
|
get() = when (preferencesBuilder.colCount) {
|
|
2 -> R.id.col_count_two
|
|
3 -> R.id.col_count_three
|
|
else -> R.id.col_count_three
|
|
}
|
|
|
|
private val selectedCornersId: Int
|
|
get() = if (preferencesBuilder.hasRoundedCorners) {
|
|
R.id.corners_round
|
|
} else R.id.corners_square
|
|
|
|
private val selectedAvatarSizeId: Int
|
|
get() = when (preferencesBuilder.profilePicSize) {
|
|
ProfilePicSize.TINY -> R.id.avatar_size_tiny
|
|
ProfilePicSize.SMALL -> R.id.avatar_size_small
|
|
ProfilePicSize.REGULAR -> R.id.avatar_size_regular
|
|
else -> R.id.avatar_size_regular
|
|
}
|
|
|
|
fun interface OnApplyListener {
|
|
fun onApply(preferences: PostsLayoutPreferences)
|
|
}
|
|
} |