OTR & another.im #23
|
@ -504,7 +504,7 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp
|
|||
&& contact.getLastseen() > 0
|
||||
&& contact.getPresences().allOrNonSupport(Namespace.IDLE)) {
|
||||
binding.detailsLastseen.setVisibility(View.VISIBLE);
|
||||
binding.detailsLastseen.setText(UIHelper.lastseen(getApplicationContext(), contact.isActive(), contact.getLastseen()));
|
||||
binding.detailsLastseen.setText(UIHelper.lastseen(getApplicationContext(), contact.isActive(), contact.getLastseen(), false));
|
||||
} else {
|
||||
binding.detailsLastseen.setVisibility(View.GONE);
|
||||
}
|
||||
|
|
|
@ -42,10 +42,14 @@ import android.app.FragmentTransaction;
|
|||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
|
@ -95,7 +99,9 @@ import eu.siacs.conversations.ui.util.PendingItem;
|
|||
import eu.siacs.conversations.utils.ExceptionHelper;
|
||||
import eu.siacs.conversations.utils.PhoneNumberUtilWrapper;
|
||||
import eu.siacs.conversations.utils.SignupUtils;
|
||||
import eu.siacs.conversations.utils.UIHelper;
|
||||
import eu.siacs.conversations.utils.XmppUri;
|
||||
import eu.siacs.conversations.xml.Namespace;
|
||||
import eu.siacs.conversations.xmpp.Jid;
|
||||
import eu.siacs.conversations.xmpp.OnUpdateBlocklist;
|
||||
import io.michaelrocks.libphonenumber.android.NumberParseException;
|
||||
|
@ -135,6 +141,10 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
|
|||
private boolean mActivityPaused = true;
|
||||
private final AtomicBoolean mRedirectInProcess = new AtomicBoolean(false);
|
||||
|
||||
private final Handler handler = new Handler(Looper.getMainLooper());
|
||||
private final Runnable refreshTitleRunnable = this::invalidateActionBarTitle;
|
||||
private boolean showLastSeen = false;
|
||||
|
||||
private static boolean isViewOrShareIntent(Intent i) {
|
||||
Log.d(Config.LOGTAG, "action: " + (i == null ? null : i.getAction()));
|
||||
return i != null && VIEW_AND_SHARE_ACTIONS.contains(i.getAction()) && i.hasExtra(EXTRA_CONVERSATION);
|
||||
|
@ -660,6 +670,8 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
|
|||
this.mSkipBackgroundBinding = false;
|
||||
}
|
||||
mRedirectInProcess.set(false);
|
||||
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
this.showLastSeen = preferences.getBoolean("last_activity", false);
|
||||
|
||||
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
|
||||
bottomNavigationView.setSelectedItemId(R.id.chats);
|
||||
|
@ -735,6 +747,7 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
|
|||
if (actionBar == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final FragmentManager fragmentManager = getFragmentManager();
|
||||
final Fragment mainFragment = fragmentManager.findFragmentById(R.id.main_fragment);
|
||||
if (mainFragment instanceof ConversationFragment) {
|
||||
|
@ -750,10 +763,38 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
|
|||
binding.toolbar,
|
||||
(v) -> openConversationDetails(conversation)
|
||||
);
|
||||
|
||||
if (conversation.getMode() == Conversation.MODE_MULTI && conversation.getNextCounterpart() == null) {
|
||||
int usersCount = conversation.getMucOptions().getUserCount();
|
||||
if (usersCount > 0) {
|
||||
actionBar.setSubtitle(getResources().getQuantityString(R.plurals.x_participants, conversation.getMucOptions().getUserCount(), conversation.getMucOptions().getUserCount()));
|
||||
} else {
|
||||
actionBar.setSubtitle("");
|
||||
}
|
||||
|
||||
handler.postDelayed(refreshTitleRunnable, 5000L);
|
||||
} else if (conversation.getMode() == Conversation.MODE_SINGLE) {
|
||||
Contact contact = conversation.getContact();
|
||||
if (showLastSeen
|
||||
&& contact.getLastseen() > 0
|
||||
&& contact.getPresences().allOrNonSupport(Namespace.IDLE)) {
|
||||
actionBar.setSubtitle(UIHelper.lastseen(getApplicationContext(), contact.isActive(), contact.getLastseen(), true));
|
||||
} else {
|
||||
actionBar.setSubtitle("");
|
||||
handler.removeCallbacks(refreshTitleRunnable);
|
||||
}
|
||||
} else {
|
||||
actionBar.setSubtitle("");
|
||||
handler.removeCallbacks(refreshTitleRunnable);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
handler.removeCallbacks(refreshTitleRunnable);
|
||||
actionBar.setTitle(R.string.app_name);
|
||||
actionBar.setSubtitle("");
|
||||
actionBar.setDisplayHomeAsUpEnabled(false);
|
||||
ActionBarUtil.resetActionBarOnClickListeners(binding.toolbar);
|
||||
}
|
||||
|
|
|
@ -205,28 +205,62 @@ public class UIHelper {
|
|||
.get(Calendar.DAY_OF_YEAR);
|
||||
}
|
||||
|
||||
public static String lastseen(Context context, boolean active, long time) {
|
||||
public static String lastseen(Context context, boolean active, long time, boolean shortText) {
|
||||
long difference = (System.currentTimeMillis() - time) / 1000;
|
||||
if (active) {
|
||||
if (shortText) {
|
||||
return context.getString(R.string.online_right_now_short);
|
||||
} else {
|
||||
return context.getString(R.string.online_right_now);
|
||||
}
|
||||
} else if (difference < 60) {
|
||||
if (shortText) {
|
||||
return context.getString(R.string.last_seen_now_short);
|
||||
} else {
|
||||
return context.getString(R.string.last_seen_now);
|
||||
}
|
||||
} else if (difference < 60 * 2) {
|
||||
if (shortText) {
|
||||
return context.getString(R.string.last_seen_min_short);
|
||||
} else {
|
||||
return context.getString(R.string.last_seen_min);
|
||||
}
|
||||
} else if (difference < 60 * 60) {
|
||||
if (shortText) {
|
||||
return context.getString(R.string.last_seen_mins_short, Math.round(difference / 60.0));
|
||||
} else {
|
||||
return context.getString(R.string.last_seen_mins, Math.round(difference / 60.0));
|
||||
}
|
||||
} else if (difference < 60 * 60 * 2) {
|
||||
if (shortText) {
|
||||
return context.getString(R.string.last_seen_hour_short);
|
||||
} else {
|
||||
return context.getString(R.string.last_seen_hour);
|
||||
}
|
||||
} else if (difference < 60 * 60 * 24) {
|
||||
if (shortText) {
|
||||
return context.getString(R.string.last_seen_hours_short,
|
||||
Math.round(difference / (60.0 * 60.0)));
|
||||
} else {
|
||||
return context.getString(R.string.last_seen_hours,
|
||||
Math.round(difference / (60.0 * 60.0)));
|
||||
}
|
||||
} else if (difference < 60 * 60 * 48) {
|
||||
if (shortText) {
|
||||
return context.getString(R.string.last_seen_day_short);
|
||||
} else {
|
||||
return context.getString(R.string.last_seen_day);
|
||||
}
|
||||
} else {
|
||||
if (shortText) {
|
||||
return context.getString(R.string.last_seen_days_short,
|
||||
Math.round(difference / (60.0 * 60.0 * 24.0)));
|
||||
} else {
|
||||
return context.getString(R.string.last_seen_days,
|
||||
Math.round(difference / (60.0 * 60.0 * 24.0)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static int getColorForName(String name) {
|
||||
return getColorForName(name, false);
|
||||
|
|
|
@ -1108,6 +1108,19 @@
|
|||
<string name="avater_shape_rounded_square">Rounded Square</string>
|
||||
<string name="avater_shape_square">Square</string>
|
||||
|
||||
<plurals name="x_participants">
|
||||
<item quantity="one">%1$d participant</item>
|
||||
<item quantity="other">%1$d participants</item>
|
||||
</plurals>
|
||||
|
||||
<string name="online_right_now_short">online</string>
|
||||
<string name="last_seen_now_short">just now</string>
|
||||
<string name="last_seen_min_short">one minute ago</string>
|
||||
<string name="last_seen_mins_short">%d minutes ago</string>
|
||||
<string name="last_seen_hour_short">one hour ago</string>
|
||||
<string name="last_seen_hours_short">%d hours ago</string>
|
||||
<string name="last_seen_day_short">one day ago</string>
|
||||
<string name="last_seen_days_short">%d days ago</string>
|
||||
|
||||
<string name="clarendon" translatable="false">Clarendon</string>
|
||||
<string name="oldman" translatable="false">OldMan</string>
|
||||
|
|
Loading…
Reference in a new issue