From ccc5f261f716331dafabbdfa1a2fdfe25d9fad47 Mon Sep 17 00:00:00 2001 From: charlag Date: Tue, 7 Nov 2017 22:36:19 +0300 Subject: [PATCH] Open status from notifications --- .../tusky/adapter/NotificationsAdapter.java | 58 ++++++++++++++----- .../tusky/fragment/NotificationsFragment.java | 12 ++++ 2 files changed, 54 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java b/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java index 619e6bd1..c4999e9d 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java @@ -123,9 +123,11 @@ public class NotificationsAdapter extends RecyclerView.Adapter { StatusNotificationViewHolder holder = (StatusNotificationViewHolder) viewHolder; holder.setMessage(type, concreteNotificaton.getAccount().getDisplayName(), concreteNotificaton.getStatusViewData()); - holder.setupButtons(notificationActionListener, concreteNotificaton.getAccount().id); + holder.setupButtons(notificationActionListener, + concreteNotificaton.getAccount().id, + concreteNotificaton.getId()); holder.setAvatars(concreteNotificaton.getStatusViewData().getAvatar(), - concreteNotificaton.getAccount().avatar); + concreteNotificaton.getId()); break; } case FOLLOW: { @@ -211,6 +213,8 @@ public class NotificationsAdapter extends RecyclerView.Adapter { public interface NotificationActionListener { void onViewAccount(String id); + + void onViewStatusForNotificationId(String notificationId); } private static class FollowViewHolder extends RecyclerView.ViewHolder { @@ -258,13 +262,19 @@ public class NotificationsAdapter extends RecyclerView.Adapter { } } - private static class StatusNotificationViewHolder extends RecyclerView.ViewHolder { - private TextView message; - private ImageView icon; - private TextView statusContent; - private ViewGroup container; - private ImageView statusAvatar; - private ImageView notificationAvatar; + private static class StatusNotificationViewHolder extends RecyclerView.ViewHolder + implements View.OnClickListener { + private final TextView message; + private final ImageView icon; + private final TextView statusContent; + private final ViewGroup container; + private final ImageView statusAvatar; + private final ImageView notificationAvatar; + private final ViewGroup topBar; + + private String accountId; + private String notificationId; + private NotificationActionListener listener; StatusNotificationViewHolder(View itemView) { super(itemView); @@ -274,9 +284,14 @@ public class NotificationsAdapter extends RecyclerView.Adapter { container = itemView.findViewById(R.id.notification_container); statusAvatar = itemView.findViewById(R.id.notification_status_avatar); notificationAvatar = itemView.findViewById(R.id.notification_notification_avatar); + topBar = itemView.findViewById(R.id.notification_top_bar); + int darkerFilter = Color.rgb(123, 123, 123); statusAvatar.setColorFilter(darkerFilter, PorterDuff.Mode.MULTIPLY); notificationAvatar.setColorFilter(darkerFilter, PorterDuff.Mode.MULTIPLY); + + container.setOnClickListener(this); + topBar.setOnClickListener(this); } void setMessage(Notification.Type type, String displayName, @@ -308,13 +323,11 @@ public class NotificationsAdapter extends RecyclerView.Adapter { statusContent.setText(status.getContent()); } - void setupButtons(final NotificationActionListener listener, final String accountId) { - container.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - listener.onViewAccount(accountId); - } - }); + void setupButtons(final NotificationActionListener listener, final String accountId, + final String notificationId) { + this.listener = listener; + this.accountId = accountId; + this.notificationId = notificationId; } void setAvatars(@Nullable String statusAvatarUrl, @Nullable String notificationAvatarUrl) { @@ -341,5 +354,18 @@ public class NotificationsAdapter extends RecyclerView.Adapter { .into(notificationAvatar); } } + + @Override + public void onClick(View v) { + if (listener == null) return; + switch (v.getId()) { + case R.id.notification_container: + listener.onViewStatusForNotificationId(notificationId); + break; + case R.id.notification_top_bar: + listener.onViewAccount(accountId); + break; + } + } } } diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java index 583ee0ac..fe535fbe 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java @@ -394,6 +394,18 @@ public class NotificationsFragment extends SFragment implements super.viewAccount(id); } + @Override + public void onViewStatusForNotificationId(String notificationId) { + for (Either either : notifications) { + Notification notification = either.getAsRightOrNull(); + if (notification != null && notification.id.equals(notificationId)) { + super.viewThread(notification.status); + return; + } + } + Log.w(TAG, "Didn't find a notification for ID: " + notificationId); + } + @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { switch (key) {