Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

show profiles connectivity state #3583

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
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 @@ -58,7 +58,7 @@
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.components.AvatarView;
import org.thoughtcrime.securesms.components.SearchToolbar;
import org.thoughtcrime.securesms.connect.AccountManager;
import org.thoughtcrime.securesms.connect.DcHelper;
Expand Down Expand Up @@ -89,7 +89,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit

private ConversationListFragment conversationListFragment;
public TextView title;
private AvatarImageView selfAvatar;
private AvatarView selfAvatar;
private ImageView unreadIndicator;
private SearchFragment searchFragment;
private SearchToolbar searchToolbar;
Expand Down Expand Up @@ -300,6 +300,8 @@ public void refreshTitle() {
boolean multiProfile = DcHelper.getAccounts(this).getAll().length > 1;
String defText = multiProfile? DcHelper.getContext(this).getName() : getString(R.string.app_name);
title.setText(DcHelper.getConnectivitySummary(this, defText));
// refreshTitle is called by ConversationListFragment when connectivity changes so update connectivity dot here
selfAvatar.setConnectivity(DcHelper.getContext(this).getConnectivity());
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
}
Expand Down Expand Up @@ -352,6 +354,7 @@ public void refreshUnreadIndicator() {
@Override
public void onResume() {
super.onResume();
refreshTitle();
invalidateOptionsMenu();
DirectShareUtil.triggerRefreshDirectShare(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.b44t.messenger.DcAccounts;
import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;
import com.b44t.messenger.rpc.Rpc;
import com.b44t.messenger.rpc.RpcException;

Expand All @@ -29,6 +30,7 @@
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AvatarView;
import org.thoughtcrime.securesms.connect.AccountManager;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.recipients.Recipient;
Expand All @@ -38,28 +40,21 @@
import static com.b44t.messenger.DcContact.DC_CONTACT_ID_ADD_ACCOUNT;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PRIVATE_TAG;

public class AccountSelectionListFragment extends DialogFragment
public class AccountSelectionListFragment extends DialogFragment implements DcEventCenter.DcEventDelegate
{
private RecyclerView recyclerView;
private AccountSelectionListAdapter adapter;

@Override
public void onActivityCreated(Bundle icicle) {
super.onActivityCreated(icicle);
AccountSelectionListAdapter adapter = new AccountSelectionListAdapter(this,
GlideApp.with(getActivity()),
new ListClickListener());
adapter = new AccountSelectionListAdapter(this, GlideApp.with(getActivity()), new ListClickListener());
recyclerView.setAdapter(adapter);

DcAccounts accounts = DcHelper.getAccounts(getActivity());
int[] accountIds = accounts.getAll();

int[] ids = new int[accountIds.length + 1];
int j = 0;
for (int accountId : accountIds) {
ids[j++] = accountId;
}
ids[j] = DC_CONTACT_ID_ADD_ACCOUNT;
adapter.changeData(ids, accounts.getSelectedAccount().getAccountId());
refreshData();
DcEventCenter eventCenter = DcHelper.getEventCenter(requireActivity());
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_CONNECTIVITY_CHANGED, this);
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_INCOMING_MSG, this);
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_MSGS_NOTICED, this);
}

@NonNull
Expand All @@ -80,6 +75,32 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
return builder.setView(view).create();
}

@Override
public void onDestroy() {
super.onDestroy();
DcHelper.getEventCenter(requireActivity()).removeObservers(this);
}

@Override
public void handleEvent(@NonNull DcEvent event) {
refreshData();
}

private void refreshData() {
if (adapter == null) return;

DcAccounts accounts = DcHelper.getAccounts(getActivity());
int[] accountIds = accounts.getAll();

int[] ids = new int[accountIds.length + 1];
int j = 0;
for (int accountId : accountIds) {
ids[j++] = accountId;
}
ids[j] = DC_CONTACT_ID_ADD_ACCOUNT;
adapter.changeData(ids, accounts.getSelectedAccount().getAccountId());
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@
import com.b44t.messenger.DcContext;

import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.components.AvatarView;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.ViewUtil;

public class AccountSelectionListItem extends LinearLayout {

private AvatarImageView contactPhotoImage;
private AvatarView contactPhotoImage;
private View addrContainer;
private TextView addrOrTagView;
private TextView nameView;
Expand Down Expand Up @@ -64,8 +64,11 @@ public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContext
int unreadCount = 0;
boolean isMuted = dcContext.isMuted();

Recipient recipient;
if (accountId == DcContact.DC_CONTACT_ID_ADD_ACCOUNT) {
name = getContext().getString(R.string.add_account);
recipient = null;
this.contactPhotoImage.setSeenRecently(false); // hide connectivity dot
} else {
self = dcContext.getContact(DcContact.DC_CONTACT_ID_SELF);
name = dcContext.getConfig(CONFIG_DISPLAY_NAME);
Expand All @@ -77,13 +80,8 @@ public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContext
addrOrTag = self.getAddr();
}
unreadCount = dcContext.getFreshMsgs().length;
}

Recipient recipient;
if (accountId != DcContact.DC_CONTACT_ID_ADD_ACCOUNT) {
recipient = new Recipient(getContext(), self, name);
} else {
recipient = null;
this.contactPhotoImage.setConnectivity(dcContext.getConnectivity());
}
this.contactPhotoImage.setAvatar(glideRequests, recipient, false);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.components;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
Expand All @@ -10,9 +11,13 @@
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;

import com.amulyakhare.textdrawable.TextDrawable;
import com.b44t.messenger.DcContext;

import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.ViewUtil;

public class AvatarView extends ConstraintLayout {

Expand Down Expand Up @@ -61,6 +66,31 @@ public void setSeenRecently(boolean enabled) {
seenRecentlyIndicator.setVisibility(enabled? View.VISIBLE : View.GONE);
}

public void setConnectivity(int connectivity) {
if (connectivity >= DcContext.DC_CONNECTIVITY_CONNECTED || connectivity >= DcContext.DC_CONNECTIVITY_WORKING) {
seenRecentlyIndicator.setVisibility(View.GONE);
return;
}

final int id;
if (connectivity >= DcContext.DC_CONNECTIVITY_CONNECTING) {
id = R.color.status_dot_connecting;
} else {
id = R.color.status_dot_offline;
}
int size = ViewUtil.dpToPx(getContext(), 24);
seenRecentlyIndicator.setImageDrawable(TextDrawable.builder()
.beginConfig()
.width(size)
.height(size)
.textColor(Color.WHITE)
.fontSize(ViewUtil.dpToPx(getContext(), 23))
.bold()
.endConfig()
.buildRound("", getResources().getColor(id)));
seenRecentlyIndicator.setVisibility(View.VISIBLE);
}

public void clear(@NonNull GlideRequests glideRequests) {
avatarImage.clear(glideRequests);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">

<solid android:color="@color/recently_seen_dot" />
<solid android:color="@color/status_dot_online" />

</shape>
5 changes: 1 addition & 4 deletions src/main/res/layout/account_selection_list_item.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,13 @@
android:layout_width="45dp"
android:layout_height="50dp">

<org.thoughtcrime.securesms.components.AvatarImageView
<org.thoughtcrime.securesms.components.AvatarView
android:id="@+id/contact_photo_image"
android:layout_width="40dp"
android:layout_height="40dp"
android:foreground="@drawable/contact_photo_background"
android:cropToPadding="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@color/blue_600"
android:contentDescription="@null" />

</androidx.constraintlayout.widget.ConstraintLayout>
Expand Down
2 changes: 1 addition & 1 deletion src/main/res/layout/avatar_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
app:layout_constraintTop_toTopOf="@+id/top_guideline"
app:layout_constraintBottom_toBottomOf="parent"

android:src="@drawable/ic_circle_status"
android:src="@drawable/ic_circle_status_online"
android:contentDescription="@null"
android:visibility="gone" />

Expand Down
7 changes: 2 additions & 5 deletions src/main/res/layout/conversation_list_activity.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,17 @@
android:id="@+id/self_avatar_container"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<org.thoughtcrime.securesms.components.AvatarImageView
android:layout_height="45dp">
<org.thoughtcrime.securesms.components.AvatarView
android:id="@+id/self_avatar"
android:foreground="@drawable/contact_photo_background"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:cropToPadding="true"
android:clickable="true"
app:inverted="true"
tools:src="@drawable/ic_contact_picture"
android:contentDescription="@string/pref_profile_info_headline" />
<ImageView android:id="@+id/unread_indicator"
android:layout_width="20dp"
Expand Down
4 changes: 3 additions & 1 deletion src/main/res/values/colors.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@
<color name="MediaOverview_Media_selected_overlay">#88000000</color>

<color name="dummy_avatar_color">#505050</color>
<color name="recently_seen_dot">#34c759</color>
<color name="status_dot_online">#34c759</color>
<color name="status_dot_connecting">#ffcc00</color>
<color name="status_dot_offline">#ff0c16</color>
<color name="slidearrow_color">#999999</color>

<color name="universal_overlay">#55444444</color>
Expand Down
Loading