Browse Source

Merge pull request #2777 from nextcloud/notificationWithLink

Add clickable link to notification
Andy Scherzinger 7 năm trước cách đây
mục cha
commit
bb758f09e5

+ 33 - 13
src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java

@@ -20,8 +20,11 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
+import android.content.Intent;
+import android.graphics.Typeface;
 import android.graphics.drawable.PictureDrawable;
 import android.net.Uri;
+import android.support.annotation.NonNull;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
@@ -47,8 +50,11 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
 /**
- * This Adapter populates a ListView with all notifications for an account within the app.
+ * This Adapter populates a RecyclerView with all notifications for an account within the app.
  */
 public class NotificationListAdapter extends RecyclerView.Adapter<NotificationListAdapter.NotificationViewHolder> {
     private List<Notification> mValues;
@@ -65,17 +71,26 @@ public class NotificationListAdapter extends RecyclerView.Adapter<NotificationLi
         notifyDataSetChanged();
     }
 
+    @NonNull
     @Override
-    public NotificationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+    public NotificationViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
         View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_list_item, parent, false);
         return new NotificationViewHolder(v);
     }
 
     @Override
-    public void onBindViewHolder(NotificationViewHolder holder, int position) {
+    public void onBindViewHolder(@NonNull NotificationViewHolder holder, int position) {
         Notification notification = mValues.get(position);
         holder.dateTime.setText(DisplayUtils.getRelativeTimestamp(context, notification.getDatetime().getTime()));
-        holder.subject.setText(notification.getSubject());
+
+        String subject = notification.getSubject();
+        if (!TextUtils.isEmpty(notification.getLink())) {
+            subject = subject + " ↗";
+            holder.subject.setTypeface(holder.subject.getTypeface(), Typeface.BOLD);
+            holder.subject.setOnClickListener(v -> openLink(notification.getLink()));
+        }
+
+        holder.subject.setText(subject);
         holder.message.setText(notification.getMessage());
 
         // Todo set proper action icon (to be clarified how to pick)
@@ -107,23 +122,28 @@ public class NotificationListAdapter extends RecyclerView.Adapter<NotificationLi
                 .into(itemViewType);
     }
 
+    private void openLink(String link) {
+        context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(link)));
+    }
+
     @Override
     public int getItemCount() {
         return mValues.size();
     }
 
     static class NotificationViewHolder extends RecyclerView.ViewHolder {
-        private final ImageView activityIcon;
-        private final TextView subject;
-        private final TextView message;
-        private final TextView dateTime;
+        @BindView(R.id.activity_icon)
+        public ImageView activityIcon;
+        @BindView(R.id.activity_subject)
+        public TextView subject;
+        @BindView(R.id.activity_message)
+        public TextView message;
+        @BindView(R.id.activity_datetime)
+        public TextView dateTime;
 
         private NotificationViewHolder(View itemView) {
             super(itemView);
-            activityIcon = (ImageView) itemView.findViewById(R.id.activity_icon);
-            subject = (TextView) itemView.findViewById(R.id.activity_subject);
-            message = (TextView) itemView.findViewById(R.id.activity_message);
-            dateTime = (TextView) itemView.findViewById(R.id.activity_datetime);
+            ButterKnife.bind(this, itemView);
         }
     }
-}
+}

+ 19 - 5
src/main/res/layout/activity_list_item.xml

@@ -23,7 +23,6 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
-    android:paddingTop="@dimen/standard_padding"
     android:paddingRight="@dimen/standard_padding"
     android:paddingBottom="@dimen/standard_padding"
     android:paddingLeft="@dimen/standard_padding">
@@ -33,8 +32,7 @@
         android:layout_width="@dimen/activity_icon_width"
         android:layout_height="@dimen/activity_icon_height"
         android:layout_alignParentTop="true"
-        android:layout_marginRight="@dimen/activity_icon_layout_right_end_margin"
-        android:layout_marginEnd="@dimen/activity_icon_layout_right_end_margin"
+        android:layout_marginTop="@dimen/standard_margin"
         android:alpha="0.5"
         android:src="@drawable/ic_activity"
         android:contentDescription="@string/activity_icon"/>
@@ -43,7 +41,6 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
-        android:layout_alignTop="@id/activity_icon"
         android:layout_toRightOf="@id/activity_icon"
         android:layout_toEndOf="@id/activity_icon">
 
@@ -52,13 +49,22 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:ellipsize="end"
+            android:paddingEnd="@dimen/zero"
+            android:paddingLeft="@dimen/activity_icon_layout_right_end_margin"
+            android:paddingRight="@dimen/zero"
+            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"
+            android:paddingTop="@dimen/standard_padding"
             android:text="@string/placeholder_filename"
-            android:textAppearance="?android:attr/textAppearanceListItem"/>
+            android:textAppearance="?android:attr/textAppearanceListItem" />
 
         <TextView
             android:id="@+id/activity_message"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:paddingEnd="@dimen/zero"
+            android:paddingLeft="@dimen/activity_icon_layout_right_end_margin"
+            android:paddingRight="@dimen/zero"
+            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"
             android:ellipsize="end"
             android:text="@string/placeholder_sentence"
             android:textAppearance="?android:attr/textAppearanceListItem"/>
@@ -70,6 +76,10 @@
             android:layout_marginTop="@dimen/alternate_half_margin"
             android:layout_marginLeft="@dimen/activity_list_item_grid_layout_left_start_margin"
             android:layout_marginStart="@dimen/activity_list_item_grid_layout_left_start_margin"
+            android:paddingEnd="@dimen/zero"
+            android:paddingLeft="@dimen/activity_icon_layout_right_end_margin"
+            android:paddingRight="@dimen/zero"
+            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"
             android:columnCount="3" />
 
         <TextView
@@ -78,6 +88,10 @@
             android:layout_height="wrap_content"
             android:layout_gravity="end"
             android:ellipsize="end"
+            android:paddingEnd="@dimen/zero"
+            android:paddingLeft="@dimen/activity_icon_layout_right_end_margin"
+            android:paddingRight="@dimen/zero"
+            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"
             android:text="@string/placeholder_sentence"
             android:textColor="?android:attr/textColorSecondary"/>