remake date formatter
This commit is contained in:
parent
5f217829b8
commit
2395b3b892
@ -10,7 +10,7 @@ import com.facebook.drawee.backends.pipeline.Fresco;
|
||||
import com.facebook.imagepipeline.core.ImagePipelineConfig;
|
||||
|
||||
import java.net.CookieHandler;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.UUID;
|
||||
|
||||
import awais.instagrabber.fragments.settings.PreferenceKeys;
|
||||
@ -24,7 +24,6 @@ import static awais.instagrabber.utils.CookieUtils.NET_COOKIE_MANAGER;
|
||||
import static awais.instagrabber.utils.Utils.applicationHandler;
|
||||
import static awais.instagrabber.utils.Utils.cacheDir;
|
||||
import static awais.instagrabber.utils.Utils.clipboardManager;
|
||||
import static awais.instagrabber.utils.Utils.datetimeParser;
|
||||
import static awais.instagrabber.utils.Utils.settingsHelper;
|
||||
|
||||
public final class InstaGrabberApplication extends Application {
|
||||
@ -78,11 +77,10 @@ public final class InstaGrabberApplication extends Application {
|
||||
if (clipboardManager == null)
|
||||
clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
|
||||
if (datetimeParser == null)
|
||||
datetimeParser = new SimpleDateFormat(
|
||||
TextUtils.setFormatter(DateTimeFormatter.ofPattern(
|
||||
settingsHelper.getBoolean(PreferenceKeys.CUSTOM_DATE_TIME_FORMAT_ENABLED) ?
|
||||
settingsHelper.getString(PreferenceKeys.CUSTOM_DATE_TIME_FORMAT) :
|
||||
settingsHelper.getString(PreferenceKeys.DATE_TIME_FORMAT), LocaleUtils.getCurrentLocale());
|
||||
settingsHelper.getString(PreferenceKeys.DATE_TIME_FORMAT), LocaleUtils.getCurrentLocale()));
|
||||
|
||||
if (TextUtils.isEmpty(settingsHelper.getString(Constants.DEVICE_UUID))) {
|
||||
settingsHelper.putString(Constants.DEVICE_UUID, UUID.randomUUID().toString());
|
||||
|
@ -16,10 +16,10 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
|
||||
import awais.instagrabber.databinding.DialogTimeSettingsBinding;
|
||||
import awais.instagrabber.utils.LocaleUtils;
|
||||
@ -28,12 +28,12 @@ import awais.instagrabber.utils.TextUtils;
|
||||
public final class TimeSettingsDialog extends DialogFragment implements AdapterView.OnItemSelectedListener, CompoundButton.OnCheckedChangeListener,
|
||||
View.OnClickListener, TextWatcher {
|
||||
private DialogTimeSettingsBinding timeSettingsBinding;
|
||||
private final Date magicDate;
|
||||
private SimpleDateFormat currentFormat;
|
||||
private final LocalDateTime magicDate;
|
||||
private DateTimeFormatter currentFormat;
|
||||
private String selectedFormat;
|
||||
private boolean customDateTimeFormatEnabled;
|
||||
private String customDateTimeFormat;
|
||||
private String dateTimeSelection;
|
||||
private final boolean customDateTimeFormatEnabled;
|
||||
private final String customDateTimeFormat;
|
||||
private final String dateTimeSelection;
|
||||
private final boolean swapDateTimeEnabled;
|
||||
private final OnConfirmListener onConfirmListener;
|
||||
|
||||
@ -47,9 +47,10 @@ public final class TimeSettingsDialog extends DialogFragment implements AdapterV
|
||||
this.dateTimeSelection = dateTimeSelection;
|
||||
this.swapDateTimeEnabled = swapDateTimeEnabled;
|
||||
this.onConfirmListener = onConfirmListener;
|
||||
final Calendar instance = GregorianCalendar.getInstance();
|
||||
instance.set(2020, 5, 22, 8, 17, 13);
|
||||
magicDate = instance.getTime();
|
||||
magicDate = LocalDateTime.ofInstant(
|
||||
Instant.now(),
|
||||
ZoneId.systemDefault()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -82,10 +83,9 @@ public final class TimeSettingsDialog extends DialogFragment implements AdapterV
|
||||
}
|
||||
|
||||
private void refreshTimeFormat() {
|
||||
if (timeSettingsBinding.cbCustomFormat.isChecked()) {
|
||||
timeSettingsBinding.btnConfirm.setEnabled(false);
|
||||
checkCustomTimeFormat();
|
||||
} else {
|
||||
if (timeSettingsBinding.cbCustomFormat.isChecked())
|
||||
selectedFormat = timeSettingsBinding.etCustomFormat.getText().toString();
|
||||
else {
|
||||
final String sepStr = String.valueOf(timeSettingsBinding.spSeparator.getSelectedItem());
|
||||
final String timeStr = String.valueOf(timeSettingsBinding.spTimeFormat.getSelectedItem());
|
||||
final String dateStr = String.valueOf(timeSettingsBinding.spDateFormat.getSelectedItem());
|
||||
@ -96,24 +96,14 @@ public final class TimeSettingsDialog extends DialogFragment implements AdapterV
|
||||
selectedFormat = (isSwapTime ? dateStr : timeStr)
|
||||
+ (isBlankSeparator ? " " : " '" + sepStr + "' ")
|
||||
+ (isSwapTime ? timeStr : dateStr);
|
||||
}
|
||||
|
||||
timeSettingsBinding.btnConfirm.setEnabled(true);
|
||||
currentFormat = new SimpleDateFormat(selectedFormat, LocaleUtils.getCurrentLocale());
|
||||
timeSettingsBinding.timePreview.setText(currentFormat.format(magicDate));
|
||||
}
|
||||
}
|
||||
|
||||
private void checkCustomTimeFormat() {
|
||||
try {
|
||||
//noinspection ConstantConditions
|
||||
final String string = timeSettingsBinding.etCustomFormat.getText().toString();
|
||||
if (TextUtils.isEmpty(string)) throw new NullPointerException();
|
||||
currentFormat = new SimpleDateFormat(string, LocaleUtils.getCurrentLocale());
|
||||
final String format = currentFormat.format(magicDate);
|
||||
timeSettingsBinding.timePreview.setText(format);
|
||||
|
||||
timeSettingsBinding.btnConfirm.setEnabled(true);
|
||||
} catch (final Exception e) {
|
||||
currentFormat = DateTimeFormatter.ofPattern(selectedFormat, LocaleUtils.getCurrentLocale());
|
||||
timeSettingsBinding.timePreview.setText(magicDate.format(currentFormat));
|
||||
}
|
||||
catch (Exception e) {
|
||||
timeSettingsBinding.btnConfirm.setEnabled(false);
|
||||
timeSettingsBinding.timePreview.setText(null);
|
||||
}
|
||||
@ -142,22 +132,19 @@ public final class TimeSettingsDialog extends DialogFragment implements AdapterV
|
||||
|
||||
@Override
|
||||
public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
|
||||
checkCustomTimeFormat();
|
||||
refreshTimeFormat();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
if (v == timeSettingsBinding.btnConfirm) {
|
||||
final Editable etCustomFormatText = timeSettingsBinding.etCustomFormat.getText();
|
||||
if (onConfirmListener != null) {
|
||||
onConfirmListener.onConfirm(
|
||||
timeSettingsBinding.cbCustomFormat.isChecked(),
|
||||
etCustomFormatText == null ? null : etCustomFormatText.toString(),
|
||||
timeSettingsBinding.spTimeFormat.getSelectedItemPosition(),
|
||||
timeSettingsBinding.spSeparator.getSelectedItemPosition(),
|
||||
timeSettingsBinding.spDateFormat.getSelectedItemPosition(),
|
||||
selectedFormat,
|
||||
currentFormat,
|
||||
timeSettingsBinding.cbSwapTimeDate.isChecked());
|
||||
}
|
||||
dismiss();
|
||||
@ -170,12 +157,10 @@ public final class TimeSettingsDialog extends DialogFragment implements AdapterV
|
||||
|
||||
public interface OnConfirmListener {
|
||||
void onConfirm(boolean isCustomFormat,
|
||||
String formatSelection,
|
||||
int spTimeFormatSelectedItemPosition,
|
||||
int spSeparatorSelectedItemPosition,
|
||||
int spDateFormatSelectedItemPosition,
|
||||
final String selectedFormat,
|
||||
final SimpleDateFormat currentFormat,
|
||||
final boolean swapDateTime);
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,6 @@ import java.io.IOException;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@ -928,7 +927,7 @@ public class StoryViewerFragment extends Fragment {
|
||||
else setupImage();
|
||||
|
||||
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
|
||||
actionBarSubtitle = Utils.datetimeParser.format(new Date(currentStory.getTimestamp() * 1000L));
|
||||
actionBarSubtitle = TextUtils.epochSecondToString(currentStory.getTimestamp());
|
||||
if (actionBar != null) {
|
||||
try {
|
||||
actionBar.setSubtitle(actionBarSubtitle);
|
||||
|
@ -7,15 +7,14 @@ import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
import awais.instagrabber.R;
|
||||
import awais.instagrabber.dialogs.TimeSettingsDialog;
|
||||
import awais.instagrabber.utils.Constants;
|
||||
import awais.instagrabber.utils.LocaleUtils;
|
||||
import awais.instagrabber.utils.TextUtils;
|
||||
import awais.instagrabber.utils.UserAgentUtils;
|
||||
import awais.instagrabber.utils.Utils;
|
||||
|
||||
import static awais.instagrabber.utils.Utils.settingsHelper;
|
||||
|
||||
@ -55,7 +54,7 @@ public class LocalePreferencesFragment extends BasePreferencesFragment {
|
||||
private Preference getPostTimeFormatPreference(@NonNull final Context context) {
|
||||
final Preference preference = new Preference(context);
|
||||
preference.setTitle(R.string.time_settings);
|
||||
preference.setSummary(Utils.datetimeParser.format(new Date()));
|
||||
preference.setSummary(TextUtils.nowToString());
|
||||
preference.setIconSpaceReserved(false);
|
||||
preference.setOnPreferenceClickListener(preference1 -> {
|
||||
new TimeSettingsDialog(
|
||||
@ -64,15 +63,15 @@ public class LocalePreferencesFragment extends BasePreferencesFragment {
|
||||
settingsHelper.getString(PreferenceKeys.DATE_TIME_SELECTION),
|
||||
settingsHelper.getBoolean(PreferenceKeys.SWAP_DATE_TIME_FORMAT_ENABLED),
|
||||
(isCustomFormat,
|
||||
formatSelection,
|
||||
spTimeFormatSelectedItemPosition,
|
||||
spSeparatorSelectedItemPosition,
|
||||
spDateFormatSelectedItemPosition,
|
||||
selectedFormat,
|
||||
currentFormat,
|
||||
swapDateTime) -> {
|
||||
settingsHelper.putBoolean(PreferenceKeys.CUSTOM_DATE_TIME_FORMAT_ENABLED, isCustomFormat);
|
||||
settingsHelper.putBoolean(PreferenceKeys.SWAP_DATE_TIME_FORMAT_ENABLED, swapDateTime);
|
||||
if (isCustomFormat) {
|
||||
settingsHelper.putString(PreferenceKeys.CUSTOM_DATE_TIME_FORMAT, formatSelection);
|
||||
settingsHelper.putString(PreferenceKeys.CUSTOM_DATE_TIME_FORMAT, selectedFormat);
|
||||
} else {
|
||||
final String formatSelectionUpdated = spTimeFormatSelectedItemPosition + ";"
|
||||
+ spSeparatorSelectedItemPosition + ';'
|
||||
@ -80,10 +79,8 @@ public class LocalePreferencesFragment extends BasePreferencesFragment {
|
||||
settingsHelper.putString(PreferenceKeys.DATE_TIME_FORMAT, selectedFormat);
|
||||
settingsHelper.putString(PreferenceKeys.DATE_TIME_SELECTION, formatSelectionUpdated);
|
||||
}
|
||||
settingsHelper.putBoolean(PreferenceKeys.CUSTOM_DATE_TIME_FORMAT_ENABLED, isCustomFormat);
|
||||
settingsHelper.putBoolean(PreferenceKeys.SWAP_DATE_TIME_FORMAT_ENABLED, swapDateTime);
|
||||
Utils.datetimeParser = (SimpleDateFormat) currentFormat.clone();
|
||||
preference.setSummary(Utils.datetimeParser.format(new Date()));
|
||||
TextUtils.setFormatter(DateTimeFormatter.ofPattern(selectedFormat, LocaleUtils.getCurrentLocale()));
|
||||
preference.setSummary(TextUtils.nowToString());
|
||||
}
|
||||
).show(getParentFragmentManager(), null);
|
||||
return true;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package awais.instagrabber.models
|
||||
|
||||
import awais.instagrabber.repositories.responses.User
|
||||
import awais.instagrabber.utils.Utils
|
||||
import awais.instagrabber.utils.TextUtils
|
||||
import java.io.Serializable
|
||||
import java.util.*
|
||||
|
||||
@ -16,7 +16,7 @@ class Comment(
|
||||
val isChild: Boolean,
|
||||
) : Serializable, Cloneable {
|
||||
val dateTime: String
|
||||
get() = Utils.datetimeParser.format(Date(timestamp * 1000L))
|
||||
get() = TextUtils.epochSecondToString(timestamp)
|
||||
|
||||
fun getLiked(): Boolean {
|
||||
return liked
|
||||
|
@ -1,7 +1,7 @@
|
||||
package awais.instagrabber.models
|
||||
|
||||
import awais.instagrabber.repositories.responses.User
|
||||
import awais.instagrabber.utils.Utils
|
||||
import awais.instagrabber.utils.TextUtils
|
||||
import java.io.Serializable
|
||||
import java.util.*
|
||||
|
||||
@ -16,5 +16,5 @@ data class FeedStoryModel(
|
||||
val isBestie: Boolean
|
||||
) : Serializable {
|
||||
val dateTime: String
|
||||
get() = Utils.datetimeParser.format(Date(timestamp * 1000L))
|
||||
get() = TextUtils.epochSecondToString(timestamp)
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package awais.instagrabber.models
|
||||
|
||||
import awais.instagrabber.utils.Utils
|
||||
import awais.instagrabber.utils.TextUtils
|
||||
import java.util.*
|
||||
|
||||
data class HighlightModel(
|
||||
@ -11,5 +11,5 @@ data class HighlightModel(
|
||||
val mediaCount: Int
|
||||
) {
|
||||
val dateTime: String
|
||||
get() = Utils.datetimeParser.format(Date(timestamp * 1000L))
|
||||
get() = TextUtils.epochSecondToString(timestamp)
|
||||
}
|
@ -2,7 +2,7 @@ package awais.instagrabber.repositories.responses
|
||||
|
||||
import awais.instagrabber.models.enums.MediaItemType
|
||||
import awais.instagrabber.repositories.responses.feed.EndOfFeedDemarcator
|
||||
import awais.instagrabber.utils.Utils
|
||||
import awais.instagrabber.utils.TextUtils
|
||||
import java.io.Serializable
|
||||
import java.util.*
|
||||
|
||||
@ -54,7 +54,7 @@ data class Media(
|
||||
get() {
|
||||
if (takenAt <= 0) return ""
|
||||
if (dateString != null) return dateString ?: ""
|
||||
dateString = Utils.datetimeParser.format(Date(takenAt * 1000L))
|
||||
dateString = TextUtils.epochSecondToString(takenAt)
|
||||
return dateString ?: ""
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import awais.instagrabber.utils.Utils;
|
||||
import awais.instagrabber.utils.TextUtils;
|
||||
|
||||
public class NotificationArgs {
|
||||
private final String text;
|
||||
@ -74,7 +74,7 @@ public class NotificationArgs {
|
||||
|
||||
@NonNull
|
||||
public String getDateTime() {
|
||||
return Utils.datetimeParser.format(new Date(Math.round(timestamp * 1000)));
|
||||
return TextUtils.epochSecondToString(Math.round(timestamp));
|
||||
}
|
||||
|
||||
private String cleanRichText(final String raw) {
|
||||
|
@ -4,9 +4,15 @@ import android.content.Context
|
||||
import android.text.format.DateFormat
|
||||
import android.text.format.DateUtils
|
||||
import android.util.Patterns
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.time.Instant
|
||||
import java.time.LocalDateTime
|
||||
import java.time.ZoneId
|
||||
import java.util.*
|
||||
|
||||
object TextUtils {
|
||||
var datetimeParser: DateTimeFormatter = DateTimeFormatter.ofPattern("")
|
||||
|
||||
@JvmStatic
|
||||
fun isEmpty(charSequence: CharSequence?): Boolean {
|
||||
if (charSequence == null || charSequence.length < 1) return true
|
||||
@ -72,4 +78,25 @@ object TextUtils {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun setFormatter(datetimeParser: DateTimeFormatter) {
|
||||
this.datetimeParser = datetimeParser
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun epochSecondToString(epochSecond: Long): String {
|
||||
return LocalDateTime.ofInstant(
|
||||
Instant.ofEpochSecond(epochSecond),
|
||||
ZoneId.systemDefault()
|
||||
).format(datetimeParser)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun nowToString(): String {
|
||||
return LocalDateTime.ofInstant(
|
||||
Instant.now(),
|
||||
ZoneId.systemDefault()
|
||||
).format(datetimeParser)
|
||||
}
|
||||
}
|
@ -53,7 +53,6 @@ import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@ -78,7 +77,6 @@ public final class Utils {
|
||||
public static final MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
|
||||
public static final DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
|
||||
public static ClipboardManager clipboardManager;
|
||||
public static SimpleDateFormat datetimeParser;
|
||||
public static SimpleCache simpleCache;
|
||||
private static int statusBarHeight;
|
||||
private static int actionBarHeight;
|
||||
|
Loading…
Reference in New Issue
Block a user