Merge branch '230-make-timestamps-prettier-and-more-useful' into 'master'

Make timestamps prettier and more useful

Here's some example timestamps I have been testing with. That's how it will look like when this MR is merged:

![device-2016-06-28-184748](/uploads/c082ac0f54b50c27f9a1c5ef8865998b/device-2016-06-28-184748.png)

Closes #230

See merge request !235
This commit is contained in:
Torsten Grote
2016-06-30 14:16:07 +00:00
5 changed files with 42 additions and 23 deletions

View File

@@ -2,7 +2,6 @@ package org.briarproject.android.contact;
import android.content.Context;
import android.support.v4.view.ViewCompat;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -10,6 +9,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import org.briarproject.R;
import org.briarproject.android.util.AndroidUtils;
import org.briarproject.util.StringUtils;
public class ContactListAdapter
@@ -46,10 +46,8 @@ public class ContactListAdapter
if (item.isEmpty()) {
ui.date.setText(R.string.no_private_messages);
} else {
// TODO show this as X units ago
long timestamp = item.getTimestamp();
ui.date.setText(
DateUtils.getRelativeTimeSpanString(ctx, timestamp));
ui.date.setText(AndroidUtils.formatDate(ctx, timestamp));
}
// online/offline

View File

@@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent;
import android.support.v7.util.SortedList;
import android.support.v7.widget.RecyclerView;
import android.text.format.DateUtils;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
@@ -15,6 +14,7 @@ import android.widget.TextView;
import org.briarproject.R;
import org.briarproject.android.forum.AvailableForumsActivity;
import org.briarproject.android.util.AndroidUtils;
import org.briarproject.api.clients.SessionId;
import org.briarproject.api.forum.ForumInvitationMessage;
import org.briarproject.api.introduction.IntroductionRequest;
@@ -170,7 +170,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
}
long timestamp = header.getTimestamp();
ui.date.setText(DateUtils.getRelativeTimeSpanString(ctx, timestamp));
ui.date.setText(AndroidUtils.formatDate(ctx, timestamp));
}
private void bindIntroduction(IntroductionHolder ui,
@@ -184,8 +184,8 @@ class ConversationAdapter extends RecyclerView.Adapter {
} else {
ui.messageLayout.setVisibility(View.VISIBLE);
ui.message.body.setText(StringUtils.trim(message));
ui.message.date.setText(
DateUtils.getRelativeTimeSpanString(ctx, item.getTime()));
ui.message.date
.setText(AndroidUtils.formatDate(ctx, item.getTime()));
}
// Outgoing Introduction Request
@@ -255,15 +255,13 @@ class ConversationAdapter extends RecyclerView.Adapter {
}
});
}
ui.date.setText(
DateUtils.getRelativeTimeSpanString(ctx, item.getTime()));
ui.date.setText(AndroidUtils.formatDate(ctx, item.getTime()));
}
private void bindNotice(NoticeHolder ui, ConversationNoticeItem item) {
ui.text.setText(item.getText());
ui.date.setText(
DateUtils.getRelativeTimeSpanString(ctx, item.getTime()));
ui.date.setText(AndroidUtils.formatDate(ctx, item.getTime()));
if (item instanceof ConversationNoticeOutItem) {
ConversationNoticeOutItem n = (ConversationNoticeOutItem) item;
@@ -288,8 +286,8 @@ class ConversationAdapter extends RecyclerView.Adapter {
} else {
ui.messageLayout.setVisibility(View.VISIBLE);
ui.message.body.setText(StringUtils.trim(message));
ui.message.date.setText(
DateUtils.getRelativeTimeSpanString(ctx, item.getTime()));
ui.message.date
.setText(AndroidUtils.formatDate(ctx, item.getTime()));
}
// Outgoing Invitation
@@ -332,8 +330,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
ui.showForumsButton.setVisibility(View.GONE);
}
}
ui.date.setText(
DateUtils.getRelativeTimeSpanString(ctx, item.getTime()));
ui.date.setText(AndroidUtils.formatDate(ctx, item.getTime()));
}
@Override

View File

@@ -18,7 +18,6 @@ import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -35,6 +34,7 @@ import org.briarproject.android.ActivityComponent;
import org.briarproject.android.BriarActivity;
import org.briarproject.android.api.AndroidNotificationManager;
import org.briarproject.android.controller.handler.UiResultHandler;
import org.briarproject.android.util.AndroidUtils;
import org.briarproject.android.util.BriarRecyclerView;
import org.briarproject.android.util.TrustIndicatorView;
import org.briarproject.api.sync.GroupId;
@@ -633,9 +633,8 @@ public class ForumActivity extends BriarActivity implements
ui.lvlText.setVisibility(GONE);
}
ui.authorText.setText(data.getAuthor());
ui.dateText.setText(DateUtils
.getRelativeTimeSpanString(ForumActivity.this,
data.getTimestamp()));
ui.dateText.setText(AndroidUtils
.formatDate(ForumActivity.this, data.getTimestamp()));
ui.trust.setTrustLevel(data.getStatus());
int replies = getReplyCount(data);

View File

@@ -6,13 +6,13 @@ import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.util.SortedList;
import android.support.v7.widget.RecyclerView;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.briarproject.R;
import org.briarproject.android.util.AndroidUtils;
import org.briarproject.android.util.TextAvatarView;
import org.briarproject.api.forum.Forum;
import org.briarproject.api.sync.GroupId;
@@ -123,8 +123,7 @@ class ForumListAdapter extends
ui.date.setVisibility(GONE);
} else {
long timestamp = item.getTimestamp();
ui.date.setText(
DateUtils.getRelativeTimeSpanString(ctx, timestamp));
ui.date.setText(AndroidUtils.formatDate(ctx, timestamp));
ui.date.setVisibility(VISIBLE);
}

View File

@@ -6,6 +6,7 @@ import android.content.Context;
import android.os.Build;
import android.provider.Settings;
import android.support.design.widget.TextInputLayout;
import android.text.format.DateUtils;
import org.briarproject.util.FileUtils;
import org.briarproject.util.StringUtils;
@@ -18,6 +19,13 @@ import java.util.Collections;
import java.util.List;
import static android.content.Context.MODE_PRIVATE;
import static android.text.format.DateUtils.DAY_IN_MILLIS;
import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
import static android.text.format.DateUtils.FORMAT_ABBREV_RELATIVE;
import static android.text.format.DateUtils.FORMAT_ABBREV_TIME;
import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
import static android.text.format.DateUtils.WEEK_IN_MILLIS;
public class AndroidUtils {
@@ -81,4 +89,22 @@ public class AndroidUtils {
public static File getReportDir(Context ctx) {
return ctx.getDir(STORED_REPORTS, MODE_PRIVATE);
}
public static String formatDate(Context ctx, long time) {
long minResolution = MINUTE_IN_MILLIS;
int flags = FORMAT_ABBREV_RELATIVE |
FORMAT_SHOW_DATE | FORMAT_ABBREV_TIME | FORMAT_ABBREV_MONTH;
// also show time when older than a day, but newer than a week
long diff = System.currentTimeMillis() - time;
if (diff >= DAY_IN_MILLIS && diff < WEEK_IN_MILLIS) {
return DateUtils.getRelativeDateTimeString(ctx, time, minResolution,
WEEK_IN_MILLIS, flags).toString();
}
// otherwise just show "...ago" or date string
return DateUtils
.getRelativeTimeSpanString(time, System.currentTimeMillis(),
minResolution, flags).toString();
}
}