added poll duration time, layout fix, bug fix
This commit is contained in:
parent
20079c4ec2
commit
ae349e0125
|
@ -94,7 +94,7 @@ public class MastodonPoll implements Poll {
|
|||
|
||||
|
||||
@Override
|
||||
public long expirationTime() {
|
||||
public long getEndTime() {
|
||||
return exTime;
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ public class MastodonPoll implements Poll {
|
|||
optionsBuf.append(option).append(',');
|
||||
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
||||
}
|
||||
return "id=" + getId() + " expired=" + expirationTime() + optionsBuf;
|
||||
return "id=" + getId() + " expired=" + getEndTime() + optionsBuf;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -81,7 +81,7 @@ public class PollV2 implements Poll {
|
|||
|
||||
|
||||
@Override
|
||||
public long expirationTime() {
|
||||
public long getEndTime() {
|
||||
return expiredAt;
|
||||
}
|
||||
|
||||
|
@ -114,7 +114,7 @@ public class PollV2 implements Poll {
|
|||
optionsBuf.append(option).append(',');
|
||||
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
||||
}
|
||||
return "id=" + getId() + " expired=" + expirationTime() + optionsBuf;
|
||||
return "id=" + getId() + " expired=" + getEndTime() + optionsBuf;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,7 +24,7 @@ public class LinkUtils {
|
|||
/**
|
||||
* regex pattern of a status URL
|
||||
*/
|
||||
public static final Pattern TWITTER_LINK_PATTERN = Pattern.compile("https://twitter.com/\\w+/status/\\d+");
|
||||
private static final Pattern TWITTER_LINK_PATTERN = Pattern.compile("https://twitter.com/\\w+/status/\\d+");
|
||||
|
||||
private LinkUtils() {}
|
||||
|
||||
|
|
|
@ -90,27 +90,58 @@ public class StringUtils {
|
|||
}
|
||||
if (diff > 604800000L) { // more than a week
|
||||
int number = (int) (diff / 604800000L);
|
||||
return resources.getQuantityString(R.plurals.n_weeks, number, number);
|
||||
return resources.getQuantityString(R.plurals.weeks_ago, number, number);
|
||||
}
|
||||
if (diff > 86400000L) { // more than a day
|
||||
int number = (int) (diff / 86400000L);
|
||||
return resources.getQuantityString(R.plurals.n_days, number, number);
|
||||
return resources.getQuantityString(R.plurals.days_ago, number, number);
|
||||
}
|
||||
if (diff > 3600000L) { // more than a hour
|
||||
int number = (int) (diff / 3600000L);
|
||||
return resources.getQuantityString(R.plurals.n_hours, number, number);
|
||||
return resources.getQuantityString(R.plurals.hours_ago, number, number);
|
||||
}
|
||||
if (diff / 60000L > 0L) { // more than a minute
|
||||
int number = (int) (diff / 60000L);
|
||||
return resources.getQuantityString(R.plurals.n_minutes, number, number);
|
||||
return resources.getQuantityString(R.plurals.minutes_ago, number, number);
|
||||
}
|
||||
if (diff / 1000L > 0L) {
|
||||
int number = (int) (diff / 1000L);
|
||||
return resources.getQuantityString(R.plurals.n_seconds, number, number);
|
||||
return resources.getQuantityString(R.plurals.seconds_ago, number, number);
|
||||
}
|
||||
return resources.getString(R.string.time_now);
|
||||
}
|
||||
|
||||
/**
|
||||
* creates a time string from the difference between the current time and the given time
|
||||
*
|
||||
* @param time time value from which to create a difference
|
||||
* @return time string showing the time difference
|
||||
*/
|
||||
public static String formatExpirationTime(Resources resources, long time) {
|
||||
time = time - System.currentTimeMillis();
|
||||
if (time > 604800000L) { // more than a week
|
||||
int number = (int) (time / 604800000L);
|
||||
return resources.getQuantityString(R.plurals.weeks_remain, number, number);
|
||||
}
|
||||
if (time > 86400000L) { // more than a day
|
||||
int number = (int) (time / 86400000L);
|
||||
return resources.getQuantityString(R.plurals.days_remain, number, number);
|
||||
}
|
||||
if (time > 3600000L) { // more than a hour
|
||||
int number = (int) (time / 3600000L);
|
||||
return resources.getQuantityString(R.plurals.hours_remain, number, number);
|
||||
}
|
||||
if (time / 60000L > 0L) { // more than a minute
|
||||
int number = (int) (time / 60000L);
|
||||
return resources.getQuantityString(R.plurals.minutes_remain, number, number);
|
||||
}
|
||||
if (time / 1000L > 0L) {
|
||||
int number = (int) (time / 1000L);
|
||||
return resources.getQuantityString(R.plurals.seconds_remain, number, number);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* un-escape html based text
|
||||
*
|
||||
|
|
|
@ -160,13 +160,4 @@ public class ConfigAccount implements Account {
|
|||
return getUser().equals(account.getUser());
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* override hostname
|
||||
*
|
||||
* @param hostname new hostname
|
||||
*/
|
||||
public void setHost(String hostname) {
|
||||
this.hostname = hostname;
|
||||
}
|
||||
}
|
|
@ -1707,7 +1707,7 @@ public class AppDatabase {
|
|||
}
|
||||
column.put(PollTable.ID, poll.getId());
|
||||
column.put(PollTable.LIMIT, poll.getLimit());
|
||||
column.put(PollTable.EXPIRATION, poll.expirationTime());
|
||||
column.put(PollTable.EXPIRATION, poll.getEndTime());
|
||||
column.put(PollTable.OPTIONS, buf.toString());
|
||||
db.insertWithOnConflict(PollTable.NAME, "", column, SQLiteDatabase.CONFLICT_REPLACE);
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ public class DatabasePoll implements Poll, PollTable {
|
|||
|
||||
|
||||
@Override
|
||||
public long expirationTime() {
|
||||
public long getEndTime() {
|
||||
return expired;
|
||||
}
|
||||
|
||||
|
@ -104,7 +104,7 @@ public class DatabasePoll implements Poll, PollTable {
|
|||
optionsBuf.append(option).append(',');
|
||||
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
||||
}
|
||||
return "id=" + getId() + " expired=" + expirationTime() + optionsBuf;
|
||||
return "id=" + getId() + " expired=" + getEndTime() + optionsBuf;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -32,7 +32,7 @@ public interface Poll extends Serializable {
|
|||
/**
|
||||
* @return time where the poll expires
|
||||
*/
|
||||
long expirationTime();
|
||||
long getEndTime();
|
||||
|
||||
/**
|
||||
* @return total number of votes
|
||||
|
|
|
@ -70,6 +70,7 @@ import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
|||
import org.nuclearfog.twidda.backend.utils.LinkUtils;
|
||||
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
||||
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
||||
import org.nuclearfog.twidda.config.Configuration;
|
||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||
import org.nuclearfog.twidda.model.Relation;
|
||||
import org.nuclearfog.twidda.model.User;
|
||||
|
@ -734,9 +735,12 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
|
|||
tabSelector.setLabel(1, "");
|
||||
}
|
||||
if (user_createdAt.getVisibility() != VISIBLE) {
|
||||
String date = SimpleDateFormat.getDateTimeInstance().format(user.getTimestamp());
|
||||
user_createdAt.setVisibility(VISIBLE);
|
||||
user_createdAt.setText(date);
|
||||
if (settings.getLogin().getConfiguration() == Configuration.MASTODON) {
|
||||
user_createdAt.setText(SimpleDateFormat.getDateInstance().format(user.getTimestamp()));
|
||||
} else {
|
||||
user_createdAt.setText(SimpleDateFormat.getDateTimeInstance().format(user.getTimestamp()));
|
||||
}
|
||||
}
|
||||
if (!user.getDescription().isEmpty()) {
|
||||
descriptionSpan = Tagger.makeTextWithLinks(user.getDescription(), settings.getHighlightColor(), this);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.nuclearfog.twidda.ui.adapter.holder;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Typeface;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.text.SpannableString;
|
||||
|
@ -52,7 +53,9 @@ public class CardHolder extends ViewHolder implements OnClickListener {
|
|||
private GlobalSettings settings;
|
||||
private OnHolderClickListener listener;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public CardHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, OnHolderClickListener listener) {
|
||||
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false));
|
||||
linkText = itemView.findViewById(R.id.link_preview_text);
|
||||
|
@ -61,7 +64,7 @@ public class CardHolder extends ViewHolder implements OnClickListener {
|
|||
this.settings = settings;
|
||||
this.listener = listener;
|
||||
|
||||
itemView.getLayoutParams().width = parent.getMeasuredHeight() * 16 / 9;
|
||||
itemView.getLayoutParams().width = Resources.getSystem().getDisplayMetrics().widthPixels * 2 / 3;
|
||||
linkText.setTypeface(settings.getTypeFace());
|
||||
linkText.setTextColor(settings.getTextColor());
|
||||
linkText.setBackgroundColor(settings.getBackgroundColor() & TEXT_TRANSPARENCY);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.nuclearfog.twidda.ui.adapter.holder;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
|
@ -25,7 +26,7 @@ import org.nuclearfog.twidda.ui.adapter.OptionsAdapter;
|
|||
*/
|
||||
public class PollHolder extends ViewHolder implements OnClickListener {
|
||||
|
||||
private TextView votesCount;
|
||||
private TextView votesCount, expiration;
|
||||
private Button voteButton;
|
||||
|
||||
private OptionsAdapter adapter;
|
||||
|
@ -40,13 +41,16 @@ public class PollHolder extends ViewHolder implements OnClickListener {
|
|||
RecyclerView optionsList = itemView.findViewById(R.id.item_poll_options_list);
|
||||
voteButton = itemView.findViewById(R.id.item_poll_vote_button);
|
||||
votesCount = itemView.findViewById(R.id.item_poll_votes_count);
|
||||
expiration = itemView.findViewById(R.id.item_poll_expiration);
|
||||
adapter = new OptionsAdapter(settings);
|
||||
this.listener = listener;
|
||||
|
||||
cardBackground.setCardBackgroundColor(settings.getCardColor());
|
||||
votesCount.setTextColor(settings.getTextColor());
|
||||
votesCount.setTypeface(settings.getTypeFace());
|
||||
itemView.getLayoutParams().width = parent.getMeasuredHeight() * 2; // 2:1 ratio
|
||||
expiration.setTextColor(settings.getTextColor());
|
||||
expiration.setTypeface(settings.getTypeFace());
|
||||
itemView.getLayoutParams().width = Resources.getSystem().getDisplayMetrics().widthPixels * 2 / 3;
|
||||
|
||||
optionsList.setAdapter(adapter);
|
||||
optionsList.setItemAnimator(null); // disable animation
|
||||
|
@ -75,12 +79,14 @@ public class PollHolder extends ViewHolder implements OnClickListener {
|
|||
*/
|
||||
public void setContent(Poll poll) {
|
||||
if (poll.closed()) {
|
||||
votesCount.setText(R.string.poll_finished);
|
||||
votesCount.setText(R.string.poll_total_votes);
|
||||
expiration.setText(R.string.poll_finished);
|
||||
voteButton.setVisibility(View.GONE);
|
||||
} else {
|
||||
votesCount.setText(R.string.poll_total_votes);
|
||||
expiration.setText(StringUtils.formatExpirationTime(expiration.getResources(), poll.getEndTime()));
|
||||
if (poll.voted()) {
|
||||
voteButton.setVisibility(View.GONE);
|
||||
voteButton.setVisibility(View.INVISIBLE);
|
||||
} else if (poll.getLimit() > 0) {
|
||||
voteButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
|
|
@ -42,16 +42,6 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
|
|||
*/
|
||||
public static final int REMOVE_ACCOUNT = 604;
|
||||
|
||||
/**
|
||||
* show "proxy bypass" dialog
|
||||
*/
|
||||
public static final int PROXY_CONFIRM = 605;
|
||||
|
||||
/**
|
||||
* show "video error" dialog
|
||||
*/
|
||||
public static final int VIDEO_ERROR = 606;
|
||||
|
||||
/**
|
||||
* show dialog to delete status
|
||||
*/
|
||||
|
@ -216,14 +206,6 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
|
|||
messageRes = R.string.confirm_log_lout;
|
||||
break;
|
||||
|
||||
case VIDEO_ERROR:
|
||||
titleVis = View.VISIBLE;
|
||||
messageRes = R.string.error_cant_load_video;
|
||||
confirmIconRes = 0;
|
||||
confirmRes = R.string.confirm_open_link;
|
||||
cancelVis = View.GONE;
|
||||
break;
|
||||
|
||||
case LIST_EDITOR_LEAVE:
|
||||
case PROFILE_EDITOR_LEAVE:
|
||||
messageRes = R.string.confirm_discard;
|
||||
|
@ -281,12 +263,6 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
|
|||
case REMOVE_ACCOUNT:
|
||||
messageRes = R.string.confirm_remove_account;
|
||||
break;
|
||||
|
||||
case PROXY_CONFIRM:
|
||||
titleVis = View.VISIBLE;
|
||||
titleRes = R.string.dialog_confirm_warning;
|
||||
messageRes = R.string.dialog_warning_videoview;
|
||||
break;
|
||||
}
|
||||
// setup title
|
||||
title.setVisibility(titleVis);
|
||||
|
|
|
@ -27,14 +27,11 @@ import org.nuclearfog.twidda.ui.activities.ImageViewer;
|
|||
import org.nuclearfog.twidda.ui.activities.MessageEditor;
|
||||
import org.nuclearfog.twidda.ui.activities.ProfileActivity;
|
||||
import org.nuclearfog.twidda.ui.activities.SearchActivity;
|
||||
import org.nuclearfog.twidda.ui.activities.StatusActivity;
|
||||
import org.nuclearfog.twidda.ui.adapter.MessageAdapter;
|
||||
import org.nuclearfog.twidda.ui.adapter.MessageAdapter.OnMessageClickListener;
|
||||
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog;
|
||||
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog.OnConfirmListener;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Fragment class to show a list of directmessages
|
||||
*
|
||||
|
|
|
@ -32,6 +32,14 @@
|
|||
android:lines="1"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_poll_expiration"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/item_poll_text_size"
|
||||
android:lines="1"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/item_poll_vote_button"
|
||||
android:layout_width="0dp"
|
||||
|
|
|
@ -1,29 +1,54 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<plurals name="n_seconds">
|
||||
<plurals name="seconds_ago">
|
||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Sek.</item>
|
||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Sek.</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="n_minutes">
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Min.</item>
|
||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Min.</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="n_hours">
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Std.</item>
|
||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Std.</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="n_days">
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Tag</item>
|
||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Tagen</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="n_weeks">
|
||||
<plurals name="weeks_ago">
|
||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Woche</item>
|
||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Wochen</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="seconds_remain">
|
||||
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Sekunde</item>
|
||||
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Sekunden</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="minutes_remain">
|
||||
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Minute</item>
|
||||
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Minuten</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="hours_remain">
|
||||
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Stunde</item>
|
||||
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Stunden</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="days_remain">
|
||||
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Tag</item>
|
||||
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Tage</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="weeks_remain">
|
||||
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Woche</item>
|
||||
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Wochen</item>
|
||||
</plurals>
|
||||
|
||||
</resources>
|
|
@ -1,29 +1,54 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<plurals name="n_seconds">
|
||||
<plurals name="seconds_ago">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> second ago</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds ago</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="n_minutes">
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> minute ago</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> minutes ago</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="n_hours">
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> hour ago</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours ago</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="n_days">
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> day ago</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> days ago</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="n_weeks">
|
||||
<plurals name="weeks_ago">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> week ago</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> weeks ago</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="seconds_remain">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> second remains</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds remain</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="minutes_remain">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> minute remains</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> minutes remain</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="hours_remain">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> hour remains</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours remain</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="days_remain">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> day remains</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> days remain</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="weeks_remain">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> week remains</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> weeks remain</item>
|
||||
</plurals>
|
||||
|
||||
</resources>
|
Loading…
Reference in New Issue