mirror of https://github.com/KokaKiwi/BarInsta
199 lines
8.0 KiB
Java
Executable File
199 lines
8.0 KiB
Java
Executable File
package awais.instagrabber.dialogs;
|
|
|
|
import android.app.Dialog;
|
|
import android.os.Bundle;
|
|
import android.text.Editable;
|
|
import android.text.TextWatcher;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.Window;
|
|
import android.view.WindowManager;
|
|
import android.widget.AdapterView;
|
|
import android.widget.CompoundButton;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.fragment.app.DialogFragment;
|
|
|
|
import java.time.Instant;
|
|
import java.time.LocalDateTime;
|
|
import java.time.ZoneId;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
import awais.instagrabber.R;
|
|
import awais.instagrabber.databinding.DialogTimeSettingsBinding;
|
|
import awais.instagrabber.utils.DateUtils;
|
|
import awais.instagrabber.utils.LocaleUtils;
|
|
import awais.instagrabber.utils.TextUtils;
|
|
|
|
public final class TimeSettingsDialog extends DialogFragment implements AdapterView.OnItemSelectedListener, CompoundButton.OnCheckedChangeListener,
|
|
View.OnClickListener, TextWatcher {
|
|
private DialogTimeSettingsBinding binding;
|
|
private final LocalDateTime magicDate;
|
|
private DateTimeFormatter currentFormat;
|
|
private String selectedFormat;
|
|
private final boolean customDateTimeFormatEnabled;
|
|
private final String customDateTimeFormat;
|
|
private final String dateTimeSelection;
|
|
private final boolean swapDateTimeEnabled;
|
|
private final OnConfirmListener onConfirmListener;
|
|
|
|
public TimeSettingsDialog(final boolean customDateTimeFormatEnabled,
|
|
final String customDateTimeFormat,
|
|
final String dateTimeSelection,
|
|
final boolean swapDateTimeEnabled,
|
|
final OnConfirmListener onConfirmListener) {
|
|
this.customDateTimeFormatEnabled = customDateTimeFormatEnabled;
|
|
this.customDateTimeFormat = customDateTimeFormat;
|
|
this.dateTimeSelection = dateTimeSelection;
|
|
this.swapDateTimeEnabled = swapDateTimeEnabled;
|
|
this.onConfirmListener = onConfirmListener;
|
|
magicDate = LocalDateTime.ofInstant(
|
|
Instant.now(),
|
|
ZoneId.systemDefault()
|
|
);
|
|
}
|
|
|
|
@Override
|
|
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
|
|
binding = DialogTimeSettingsBinding.inflate(inflater, container, false);
|
|
|
|
binding.cbCustomFormat.setOnCheckedChangeListener(this);
|
|
binding.cbCustomFormat.setChecked(customDateTimeFormatEnabled);
|
|
binding.cbSwapTimeDate.setChecked(swapDateTimeEnabled);
|
|
binding.customFormatEditText.setText(customDateTimeFormat);
|
|
|
|
final String[] dateTimeFormat = dateTimeSelection.split(";"); // output = time;separator;date
|
|
binding.spTimeFormat.setSelection(Integer.parseInt(dateTimeFormat[0]));
|
|
binding.spSeparator.setSelection(Integer.parseInt(dateTimeFormat[1]));
|
|
binding.spDateFormat.setSelection(Integer.parseInt(dateTimeFormat[2]));
|
|
|
|
binding.cbSwapTimeDate.setOnCheckedChangeListener(this);
|
|
|
|
refreshTimeFormat();
|
|
|
|
binding.spTimeFormat.setOnItemSelectedListener(this);
|
|
binding.spDateFormat.setOnItemSelectedListener(this);
|
|
binding.spSeparator.setOnItemSelectedListener(this);
|
|
|
|
binding.customFormatEditText.addTextChangedListener(this);
|
|
binding.btnConfirm.setOnClickListener(this);
|
|
binding.customFormatField.setEndIconOnClickListener(this);
|
|
|
|
return binding.getRoot();
|
|
}
|
|
|
|
private void refreshTimeFormat() {
|
|
final boolean isCustom = binding.cbCustomFormat.isChecked();
|
|
if (isCustom) {
|
|
final Editable text = binding.customFormatEditText.getText();
|
|
if (text != null) {
|
|
selectedFormat = text.toString();
|
|
}
|
|
} else {
|
|
final String sepStr = String.valueOf(binding.spSeparator.getSelectedItem());
|
|
final String timeStr = String.valueOf(binding.spTimeFormat.getSelectedItem());
|
|
final String dateStr = String.valueOf(binding.spDateFormat.getSelectedItem());
|
|
|
|
final boolean isSwapTime = binding.cbSwapTimeDate.isChecked();
|
|
final boolean isBlankSeparator = binding.spSeparator.getSelectedItemPosition() <= 0;
|
|
|
|
selectedFormat = (isSwapTime ? dateStr : timeStr)
|
|
+ (isBlankSeparator ? " " : " '" + sepStr + "' ")
|
|
+ (isSwapTime ? timeStr : dateStr);
|
|
}
|
|
|
|
binding.btnConfirm.setEnabled(true);
|
|
try {
|
|
currentFormat = DateTimeFormatter.ofPattern(selectedFormat, LocaleUtils.getCurrentLocale());
|
|
if (isCustom) {
|
|
final boolean valid = !TextUtils.isEmpty(selectedFormat) && DateUtils.checkFormatterValid(currentFormat);
|
|
binding.customFormatField.setError(valid ? null :getString(R.string.invalid_format));
|
|
if (!valid) {
|
|
binding.btnConfirm.setEnabled(false);
|
|
}
|
|
}
|
|
binding.timePreview.setText(magicDate.format(currentFormat));
|
|
} catch (Exception e) {
|
|
binding.btnConfirm.setEnabled(false);
|
|
binding.timePreview.setText(null);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onItemSelected(final AdapterView<?> p, final View v, final int pos, final long id) {
|
|
refreshTimeFormat();
|
|
}
|
|
|
|
@Override
|
|
public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
|
|
if (buttonView == binding.cbCustomFormat) {
|
|
binding.customFormatField.setVisibility(isChecked ? View.VISIBLE : View.GONE);
|
|
binding.customFormatField.setEnabled(isChecked);
|
|
|
|
binding.spTimeFormat.setEnabled(!isChecked);
|
|
binding.spDateFormat.setEnabled(!isChecked);
|
|
binding.spSeparator.setEnabled(!isChecked);
|
|
binding.cbSwapTimeDate.setEnabled(!isChecked);
|
|
}
|
|
refreshTimeFormat();
|
|
}
|
|
|
|
@Override
|
|
public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
|
|
refreshTimeFormat();
|
|
}
|
|
|
|
@Override
|
|
public void onClick(final View v) {
|
|
if (v == binding.btnConfirm) {
|
|
if (onConfirmListener != null) {
|
|
onConfirmListener.onConfirm(
|
|
binding.cbCustomFormat.isChecked(),
|
|
binding.spTimeFormat.getSelectedItemPosition(),
|
|
binding.spSeparator.getSelectedItemPosition(),
|
|
binding.spDateFormat.getSelectedItemPosition(),
|
|
selectedFormat,
|
|
binding.cbSwapTimeDate.isChecked());
|
|
}
|
|
dismiss();
|
|
} else if (v == binding.customFormatField.findViewById(R.id.text_input_end_icon)) {
|
|
binding.customPanel.setVisibility(
|
|
binding.customPanel.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE
|
|
);
|
|
|
|
}
|
|
}
|
|
|
|
public interface OnConfirmListener {
|
|
void onConfirm(boolean isCustomFormat,
|
|
int spTimeFormatSelectedItemPosition,
|
|
int spSeparatorSelectedItemPosition,
|
|
int spDateFormatSelectedItemPosition,
|
|
final String selectedFormat,
|
|
final boolean swapDateTime);
|
|
}
|
|
|
|
@Override
|
|
public void onNothingSelected(final AdapterView<?> parent) { }
|
|
|
|
@Override
|
|
public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { }
|
|
|
|
@Override
|
|
public void afterTextChanged(final Editable s) { }
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
final Dialog dialog = getDialog();
|
|
if (dialog == null) return;
|
|
final Window window = dialog.getWindow();
|
|
if (window == null) return;
|
|
final WindowManager.LayoutParams params = window.getAttributes();
|
|
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
|
window.setAttributes(params);
|
|
}
|
|
} |