Skip to content

Commit

Permalink
add online indicator to account switcher
Browse files Browse the repository at this point in the history
  • Loading branch information
adbenitez committed Oct 28, 2023
1 parent 9e4256c commit 295357d
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 42 deletions.
16 changes: 1 addition & 15 deletions res/layout/account_selection_list_item.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,15 @@
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" />

<ImageView
android:id="@+id/checkbox"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="22dp"
android:layout_marginTop="22dp"
app:layout_constraintStart_toStartOf="@id/contact_photo_image"
app:layout_constraintTop_toTopOf="@id/contact_photo_image"
android:src="?attr/ic_circle_checkbox"
android:contentDescription="@null" />

</androidx.constraintlayout.widget.ConstraintLayout>

<LinearLayout android:layout_width="0dp"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public ViewHolder(View itemView) {
super(itemView);
}

public abstract void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected);
public abstract void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, int connectivity, boolean selected);
public abstract void unbind(@NonNull GlideRequests glideRequests);
}

Expand All @@ -64,8 +64,8 @@ public AccountSelectionListItem getView() {
return (AccountSelectionListItem) itemView;
}

public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected) {
getView().bind(glideRequests, accountId, self, name, addr, unreadCount, selected);
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, int connectivity, boolean selected) {
getView().bind(glideRequests, accountId, self, name, addr, unreadCount, connectivity, selected);
}

@Override
Expand Down Expand Up @@ -100,6 +100,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i)
String name;
String addr = null;
int unreadCount = 0;
int connectivity = 0;

if (id == DcContact.DC_CONTACT_ID_ADD_ACCOUNT) {
name = context.getString(R.string.add_account);
Expand All @@ -112,11 +113,12 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i)
name = addr;
}
unreadCount = dcContext.getFreshMsgs().length;
connectivity = dcContext.getConnectivity();
}

ViewHolder holder = (ViewHolder) viewHolder;
holder.unbind(glideRequests);
holder.bind(glideRequests, id, dcContact, name, addr, unreadCount, id == selectedAccountId);
holder.bind(glideRequests, id, dcContact, name, addr, unreadCount, connectivity, id == selectedAccountId);
}

public interface ItemClickListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,38 +14,33 @@
import androidx.recyclerview.widget.RecyclerView;

import com.b44t.messenger.DcAccounts;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;

import org.thoughtcrime.securesms.ConnectivityActivity;
import org.thoughtcrime.securesms.R;
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.util.ViewUtil;

import static com.b44t.messenger.DcContact.DC_CONTACT_ID_ADD_ACCOUNT;

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(getActivity(),
GlideApp.with(getActivity()),
new ListClickListener());
adapter = new AccountSelectionListAdapter(getActivity(), GlideApp.with(getActivity()), new ListClickListener());
recyclerView.setAdapter(adapter);

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

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

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

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

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

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

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


private class ListClickListener implements AccountSelectionListAdapter.ItemClickListener {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,19 @@
import com.b44t.messenger.DcContact;

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.DynamicTheme;
import org.thoughtcrime.securesms.util.ViewUtil;

public class AccountSelectionListItem extends LinearLayout {

private AvatarImageView contactPhotoImage;
private AvatarView contactPhotoImage;
private View addrContainer;
private TextView addrView;
private TextView nameView;
private ImageView unreadIndicator;
private ImageView checkbox;
private ImageButton deleteBtn;

private int accountId;
Expand All @@ -51,34 +50,34 @@ protected void onFinishInflate() {
this.addrView = findViewById(R.id.addr);
this.nameView = findViewById(R.id.name);
this.unreadIndicator = findViewById(R.id.unread_indicator);
this.checkbox = findViewById(R.id.checkbox);
this.deleteBtn = findViewById(R.id.delete);

deleteBtn.setColorFilter(DynamicTheme.isDarkTheme(getContext())? Color.WHITE : Color.BLACK);
ViewUtil.setTextViewGravityStart(this.nameView, getContext());
}

public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected) {
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, int connectivity, boolean selected) {
this.accountId = accountId;

Recipient recipient;
if (accountId != DcContact.DC_CONTACT_ID_ADD_ACCOUNT) {
deleteBtn.setVisibility(selected? View.INVISIBLE : View.VISIBLE);
recipient = new Recipient(getContext(), self, name);
this.contactPhotoImage.setConnectivity(connectivity);
} else {
deleteBtn.setVisibility(View.GONE);
recipient = null;
this.contactPhotoImage.setSeenRecently(false); // hide connectivity dot
}
this.contactPhotoImage.setAvatar(glideRequests, recipient, false);

setSelected(selected);
if (selected) {
addrView.setTypeface(null, Typeface.BOLD);
nameView.setTypeface(null, Typeface.BOLD);
checkbox.setVisibility(View.VISIBLE);
} else {
addrView.setTypeface(null, 0);
nameView.setTypeface(null, 0);
checkbox.setVisibility(View.GONE);
}

updateUnreadIndicator(unreadCount);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void handleEvent(@NonNull DcEvent event) {
}

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

int accId = DcHelper.getContext(requireActivity()).getAccountId();
try {
Expand Down

0 comments on commit 295357d

Please sign in to comment.