Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.text.format.DateUtils;
import android.text.util.Linkify;
import android.view.LayoutInflater;
import android.view.View;
Expand All @@ -12,6 +14,7 @@
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
Expand All @@ -26,9 +29,10 @@
import io.noties.markwon.ext.tables.TablePlugin;
import io.noties.markwon.image.picasso.PicassoImagesPlugin;
import io.noties.markwon.movement.MovementMethodPlugin;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import org.threeten.bp.OffsetDateTime;
import org.threeten.bp.temporal.ChronoUnit;

public class ListMessageAdapter extends RecyclerView.Adapter<ListMessageAdapter.ViewHolder> {

Expand All @@ -39,6 +43,9 @@ public class ListMessageAdapter extends RecyclerView.Adapter<ListMessageAdapter.
private Settings settings;
private Markwon markwon;

private final String TIME_FORMAT_RELATIVE;
private final String TIME_FORMAT_PREFS_KEY;

ListMessageAdapter(
Context context,
Settings settings,
Expand All @@ -59,6 +66,10 @@ public class ListMessageAdapter extends RecyclerView.Adapter<ListMessageAdapter.
.usePlugin(PicassoImagesPlugin.create(picasso))
.usePlugin(TablePlugin.create(context))
.build();

TIME_FORMAT_RELATIVE =
context.getResources().getString(R.string.time_format_value_relative);
TIME_FORMAT_PREFS_KEY = context.getResources().getString(R.string.setting_key_time_format);
}

public List<MessageWithImage> getItems() {
Expand Down Expand Up @@ -94,8 +105,10 @@ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
.placeholder(R.drawable.ic_placeholder)
.into(holder.image);

holder.setDateTime(message.message.getDate());
holder.date.setOnClickListener((ignored) -> holder.switchPreciseDate());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String timeFormat = prefs.getString(TIME_FORMAT_PREFS_KEY, TIME_FORMAT_RELATIVE);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, I've found one little bug. If no time format is configured, and the settings for time format is opened but dismissed, then the absolute time format is shown. The shared preferences get "Relative time" as value, and not the key relative_time_format.

screencast

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, I set the default value in the ListPreference as the time_format_entry_relative instead of time_format_value_relative, my bad.

Thanks for the thorough review, it should be fine now.

holder.setDateTime(message.message.getDate(), timeFormat.equals(TIME_FORMAT_RELATIVE));
holder.date.setOnClickListener((ignored) -> holder.switchTimeFormat());

holder.delete.setOnClickListener(
(ignored) -> delete.delete(holder.getAdapterPosition(), message.message, false));
Expand Down Expand Up @@ -128,35 +141,45 @@ static class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.message_delete)
ImageButton delete;

private boolean preciseDate;
private boolean relativeTimeFormat;
private OffsetDateTime dateTime;

ViewHolder(final View view) {
super(view);
ButterKnife.bind(this, view);
preciseDate = false;
relativeTimeFormat = true;
dateTime = null;
enableCopyToClipboard();
}

void switchPreciseDate() {
preciseDate = !preciseDate;
void switchTimeFormat() {
relativeTimeFormat = !relativeTimeFormat;
updateDate();
}

void setDateTime(OffsetDateTime dateTime) {
void setDateTime(OffsetDateTime dateTime, boolean relativeTimeFormatPreference) {
this.dateTime = dateTime;
preciseDate = false;
relativeTimeFormat = relativeTimeFormatPreference;
updateDate();
}

void updateDate() {
String text = "?";
if (dateTime != null) {
if (preciseDate) {
text = dateTime.truncatedTo(ChronoUnit.SECONDS).toString();
} else {
if (relativeTimeFormat) {
// Relative time format
text = Utils.dateToRelative(dateTime);
} else {
// Absolute time format
long time = dateTime.toInstant().toEpochMilli();
Date date = new Date(time);
if (DateUtils.isToday(time)) {
text = DateFormat.getTimeInstance(DateFormat.SHORT).format(date);
} else {
text =
DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT)
.format(date);
}
}
}
date.setText(text);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ public void onReceive(Context context, Intent intent) {

private PicassoHandler picassoHandler;

private ListMessageAdapter listMessageAdapter;

// we need to keep the target references otherwise they get gc'ed before they can be called.
@SuppressWarnings("MismatchedQueryAndUpdateOfCollection")
private final List<Target> targetReferences = new ArrayList<>();
Expand Down Expand Up @@ -150,17 +152,18 @@ protected void onCreate(Bundle savedInstanceState) {
DividerItemDecoration dividerItemDecoration =
new DividerItemDecoration(
messagesView.getContext(), layoutManager.getOrientation());
ListMessageAdapter adapter =
listMessageAdapter =
new ListMessageAdapter(
this, settings, picassoHandler.get(), emptyList(), this::scheduleDeletion);

messagesView.addItemDecoration(dividerItemDecoration);
messagesView.setHasFixedSize(true);
messagesView.setLayoutManager(layoutManager);
messagesView.addOnScrollListener(new MessageListOnScrollListener());
messagesView.setAdapter(adapter);
messagesView.setAdapter(listMessageAdapter);

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(adapter));
ItemTouchHelper itemTouchHelper =
new ItemTouchHelper(new SwipeToDeleteCallback(listMessageAdapter));
itemTouchHelper.attachToRecyclerView(messagesView);

swipeRefreshLayout.setOnRefreshListener(this::onRefresh);
Expand Down Expand Up @@ -357,6 +360,8 @@ protected void onResume() {
}
}

listMessageAdapter.notifyDataSetChanged();

navigationView.getMenu().findItem(selectedIndex).setChecked(true);
super.onResume();
}
Expand Down
14 changes: 14 additions & 0 deletions app/src/main/res/values/arrays.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<resources>
<!-- Theme -->
<string-array name="mode">
<item>@string/theme_light</item>
<item>@string/theme_dark</item>
Expand All @@ -7,4 +8,17 @@
<string name="theme_light">Light</string>
<string name="theme_dark">Dark</string>
<string name="theme_default">System Default</string>
<!-- Time Format -->
<string-array name="time_format_entries">
<item>@string/time_format_entry_absolute</item>
<item>@string/time_format_entry_relative</item>
</string-array>
<string name="time_format_entry_absolute">Absolute time</string>
<string name="time_format_entry_relative">Relative time</string>
<string-array name="time_format_values">
<item>@string/time_format_value_absolute</item>
<item>@string/time_format_value_relative</item>
</string-array>
<string name="time_format_value_absolute">time_format_absolute</string>
<string name="time_format_value_relative">time_format_relative</string>
</resources>
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@
<string name="settings_appearance">Appearance</string>
<string name="setting_theme">Theme</string>
<string name="setting_key_theme">theme</string>
<string name="setting_time_format">Time format</string>
<string name="setting_key_time_format">time_format</string>
<string name="push_message">Push message</string>
<string name="appListDescription">App:</string>
<string name="priorityDescription">Priority:</string>
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/res/xml/root_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@
android:entryValues="@array/mode"
android:key="@string/setting_key_theme"
android:title="@string/setting_theme" />

<ListPreference
android:defaultValue="@string/time_format_value_relative"
android:entries="@array/time_format_entries"
android:entryValues="@array/time_format_values"
android:key="@string/setting_key_time_format"
android:title="@string/setting_time_format"/>
</PreferenceCategory>

</PreferenceScreen>