Browse Source
Convert PostsLayoutPreferencesDialogFragment to kotlin
renovate/androidx.fragment-fragment-ktx-1.x
Convert PostsLayoutPreferencesDialogFragment to kotlin
renovate/androidx.fragment-fragment-ktx-1.x
2 changed files with 180 additions and 205 deletions
-
205app/src/main/java/awais/instagrabber/dialogs/PostsLayoutPreferencesDialogFragment.java
-
180app/src/main/java/awais/instagrabber/dialogs/PostsLayoutPreferencesDialogFragment.kt
@ -1,205 +0,0 @@ |
|||||
package awais.instagrabber.dialogs; |
|
||||
|
|
||||
import android.app.Dialog; |
|
||||
import android.content.Context; |
|
||||
import android.os.Bundle; |
|
||||
import android.view.LayoutInflater; |
|
||||
import android.view.View; |
|
||||
|
|
||||
import androidx.annotation.NonNull; |
|
||||
import androidx.annotation.Nullable; |
|
||||
import androidx.fragment.app.DialogFragment; |
|
||||
|
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder; |
|
||||
|
|
||||
import awais.instagrabber.R; |
|
||||
import awais.instagrabber.databinding.DialogPostLayoutPreferencesBinding; |
|
||||
import awais.instagrabber.models.PostsLayoutPreferences; |
|
||||
|
|
||||
import static awais.instagrabber.utils.Utils.settingsHelper; |
|
||||
|
|
||||
public class PostsLayoutPreferencesDialogFragment extends DialogFragment { |
|
||||
|
|
||||
private final OnApplyListener onApplyListener; |
|
||||
private final PostsLayoutPreferences.Builder preferencesBuilder; |
|
||||
private final String layoutPreferenceKey; |
|
||||
private DialogPostLayoutPreferencesBinding binding; |
|
||||
private Context context; |
|
||||
|
|
||||
public PostsLayoutPreferencesDialogFragment(final String layoutPreferenceKey, |
|
||||
@NonNull final OnApplyListener onApplyListener) { |
|
||||
this.layoutPreferenceKey = layoutPreferenceKey; |
|
||||
final PostsLayoutPreferences preferences = PostsLayoutPreferences.fromJson(settingsHelper.getString(layoutPreferenceKey)); |
|
||||
this.preferencesBuilder = PostsLayoutPreferences.builder().mergeFrom(preferences); |
|
||||
this.onApplyListener = onApplyListener; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onAttach(@NonNull final Context context) { |
|
||||
super.onAttach(context); |
|
||||
this.context = context; |
|
||||
} |
|
||||
|
|
||||
@NonNull |
|
||||
@Override |
|
||||
public Dialog onCreateDialog(@Nullable final Bundle savedInstanceState) { |
|
||||
binding = DialogPostLayoutPreferencesBinding.inflate(LayoutInflater.from(context), null, false); |
|
||||
init(); |
|
||||
return new MaterialAlertDialogBuilder(context) |
|
||||
.setView(binding.getRoot()) |
|
||||
.setPositiveButton(R.string.apply, (dialog, which) -> { |
|
||||
final PostsLayoutPreferences preferences = preferencesBuilder.build(); |
|
||||
final String json = preferences.getJson(); |
|
||||
settingsHelper.putString(layoutPreferenceKey, json); |
|
||||
onApplyListener.onApply(preferences); |
|
||||
}) |
|
||||
.create(); |
|
||||
} |
|
||||
|
|
||||
private void init() { |
|
||||
initLayoutToggle(); |
|
||||
if (preferencesBuilder.getType() != PostsLayoutPreferences.PostsLayoutType.LINEAR) { |
|
||||
initStaggeredOrGridOptions(); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void initStaggeredOrGridOptions() { |
|
||||
initColCountToggle(); |
|
||||
initNamesToggle(); |
|
||||
initAvatarsToggle(); |
|
||||
initCornersToggle(); |
|
||||
initGapToggle(); |
|
||||
} |
|
||||
|
|
||||
private void initLayoutToggle() { |
|
||||
final int selectedLayoutId = getSelectedLayoutId(); |
|
||||
binding.layoutToggle.check(selectedLayoutId); |
|
||||
if (selectedLayoutId == R.id.layout_linear) { |
|
||||
binding.staggeredOrGridOptions.setVisibility(View.GONE); |
|
||||
} |
|
||||
binding.layoutToggle.addOnButtonCheckedListener((group, checkedId, isChecked) -> { |
|
||||
if (isChecked) { |
|
||||
if (checkedId == R.id.layout_linear) { |
|
||||
preferencesBuilder.setType(PostsLayoutPreferences.PostsLayoutType.LINEAR); |
|
||||
preferencesBuilder.setColCount(1); |
|
||||
binding.staggeredOrGridOptions.setVisibility(View.GONE); |
|
||||
} else if (checkedId == R.id.layout_staggered) { |
|
||||
preferencesBuilder.setType(PostsLayoutPreferences.PostsLayoutType.STAGGERED_GRID); |
|
||||
if (preferencesBuilder.getColCount() == 1) { |
|
||||
preferencesBuilder.setColCount(2); |
|
||||
} |
|
||||
binding.staggeredOrGridOptions.setVisibility(View.VISIBLE); |
|
||||
initStaggeredOrGridOptions(); |
|
||||
} else { |
|
||||
preferencesBuilder.setType(PostsLayoutPreferences.PostsLayoutType.GRID); |
|
||||
if (preferencesBuilder.getColCount() == 1) { |
|
||||
preferencesBuilder.setColCount(2); |
|
||||
} |
|
||||
binding.staggeredOrGridOptions.setVisibility(View.VISIBLE); |
|
||||
initStaggeredOrGridOptions(); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void initColCountToggle() { |
|
||||
binding.colCountToggle.check(getSelectedColCountId()); |
|
||||
binding.colCountToggle.addOnButtonCheckedListener((group, checkedId, isChecked) -> { |
|
||||
if (!isChecked) return; |
|
||||
if (checkedId == R.id.col_count_two) { |
|
||||
preferencesBuilder.setColCount(2); |
|
||||
} else { |
|
||||
preferencesBuilder.setColCount(3); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void initAvatarsToggle() { |
|
||||
binding.showAvatarToggle.setChecked(preferencesBuilder.isAvatarVisible()); |
|
||||
binding.avatarSizeToggle.check(getSelectedAvatarSizeId()); |
|
||||
binding.showAvatarToggle.setOnCheckedChangeListener((buttonView, isChecked) -> { |
|
||||
preferencesBuilder.setAvatarVisible(isChecked); |
|
||||
binding.labelAvatarSize.setVisibility(isChecked ? View.VISIBLE : View.GONE); |
|
||||
binding.avatarSizeToggle.setVisibility(isChecked ? View.VISIBLE : View.GONE); |
|
||||
}); |
|
||||
binding.labelAvatarSize.setVisibility(preferencesBuilder.isAvatarVisible() ? View.VISIBLE : View.GONE); |
|
||||
binding.avatarSizeToggle.setVisibility(preferencesBuilder.isAvatarVisible() ? View.VISIBLE : View.GONE); |
|
||||
binding.avatarSizeToggle.addOnButtonCheckedListener((group, checkedId, isChecked) -> { |
|
||||
if (!isChecked) return; |
|
||||
if (checkedId == R.id.avatar_size_tiny) { |
|
||||
preferencesBuilder.setProfilePicSize(PostsLayoutPreferences.ProfilePicSize.TINY); |
|
||||
} else if (checkedId == R.id.avatar_size_small) { |
|
||||
preferencesBuilder.setProfilePicSize(PostsLayoutPreferences.ProfilePicSize.SMALL); |
|
||||
} else { |
|
||||
preferencesBuilder.setProfilePicSize(PostsLayoutPreferences.ProfilePicSize.REGULAR); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void initNamesToggle() { |
|
||||
binding.showNamesToggle.setChecked(preferencesBuilder.isNameVisible()); |
|
||||
binding.showNamesToggle.setOnCheckedChangeListener((buttonView, isChecked) -> preferencesBuilder.setNameVisible(isChecked)); |
|
||||
} |
|
||||
|
|
||||
private void initCornersToggle() { |
|
||||
binding.cornersToggle.check(getSelectedCornersId()); |
|
||||
binding.cornersToggle.addOnButtonCheckedListener((group, checkedId, isChecked) -> { |
|
||||
if (!isChecked) return; |
|
||||
if (checkedId == R.id.corners_round) { |
|
||||
preferencesBuilder.setHasRoundedCorners(true); |
|
||||
return; |
|
||||
} |
|
||||
preferencesBuilder.setHasRoundedCorners(false); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void initGapToggle() { |
|
||||
binding.showGapToggle.setChecked(preferencesBuilder.getHasGap()); |
|
||||
binding.showGapToggle.setOnCheckedChangeListener((buttonView, isChecked) -> preferencesBuilder.setHasGap(isChecked)); |
|
||||
} |
|
||||
|
|
||||
private int getSelectedLayoutId() { |
|
||||
switch (preferencesBuilder.getType()) { |
|
||||
case STAGGERED_GRID: |
|
||||
return R.id.layout_staggered; |
|
||||
case LINEAR: |
|
||||
return R.id.layout_linear; |
|
||||
default: |
|
||||
case GRID: |
|
||||
return R.id.layout_grid; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private int getSelectedColCountId() { |
|
||||
switch (preferencesBuilder.getColCount()) { |
|
||||
case 2: |
|
||||
return R.id.col_count_two; |
|
||||
case 3: |
|
||||
default: |
|
||||
return R.id.col_count_three; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private int getSelectedCornersId() { |
|
||||
if (preferencesBuilder.getHasRoundedCorners()) { |
|
||||
return R.id.corners_round; |
|
||||
} |
|
||||
return R.id.corners_square; |
|
||||
} |
|
||||
|
|
||||
private int getSelectedAvatarSizeId() { |
|
||||
switch (preferencesBuilder.getProfilePicSize()) { |
|
||||
case TINY: |
|
||||
return R.id.avatar_size_tiny; |
|
||||
case SMALL: |
|
||||
return R.id.avatar_size_small; |
|
||||
case REGULAR: |
|
||||
default: |
|
||||
return R.id.avatar_size_regular; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public interface OnApplyListener { |
|
||||
void onApply(final PostsLayoutPreferences preferences); |
|
||||
} |
|
||||
} |
|
@ -0,0 +1,180 @@ |
|||||
|
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, null, false) |
||||
|
init() |
||||
|
return MaterialAlertDialogBuilder(requireContext()).apply { |
||||
|
setView(binding.root) |
||||
|
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) |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue