Răsfoiți Sursa

initial UI implementation displaying notifications

AndyScherzinger 8 ani în urmă
părinte
comite
ac088c14a0

+ 23 - 7
src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java

@@ -24,6 +24,7 @@ package com.owncloud.android.ui.activity;
 
 import android.accounts.Account;
 import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.MenuItem;
 import android.view.View;
@@ -39,6 +40,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.notifications.GetRemoteNotificationsOperation;
 import com.owncloud.android.lib.resources.notifications.models.Notification;
+import com.owncloud.android.ui.adapter.NotificationListAdapter;
 
 import java.util.List;
 
@@ -80,6 +82,8 @@ public class NotificationsActivity extends FileActivity {
 
     private Unbinder unbinder;
 
+    private NotificationListAdapter adapter;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log_OC.v(TAG, "onCreate() start");
@@ -98,19 +102,27 @@ public class NotificationsActivity extends FileActivity {
         setupContent();
     }
 
+    public void onDestroy() {
+        super.onDestroy();
+        unbinder.unbind();
+    }
+
     /**
      * sets up the UI elements and loads all activity items.
      */
     private void setupContent() {
         emptyContentIcon.setImageResource(R.drawable.ic_notification_light_grey);
-        setEmptyContent(noResultsHeadline,noResultsMessage);
+        setLoadingMessage();
+
+        adapter = new NotificationListAdapter(this);
+        recyclerView.setAdapter(adapter);
+        recyclerView.setLayoutManager(new LinearLayoutManager(this));
 
-        // TODO add all (recycler) view relevant code + data loading + adapter etc.
         fetchAndSetData();
     }
 
     private void populateList(List<Notification> notifications) {
-
+        adapter.setNotificationItems(notifications);
     }
 
     private void fetchAndSetData() {
@@ -118,6 +130,7 @@ public class NotificationsActivity extends FileActivity {
             public void run() {
                 Account account = AccountUtils.getCurrentOwnCloudAccount(NotificationsActivity.this);
                 RemoteOperation getRemoteNotificationOperation = new GetRemoteNotificationsOperation();
+                Log_OC.d(TAG, "BEFORE getRemoteNotificationOperation.execute");
                 final RemoteOperationResult result =
                         getRemoteNotificationOperation.execute(account, NotificationsActivity.this);
 
@@ -127,10 +140,13 @@ public class NotificationsActivity extends FileActivity {
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
-                            populateList(notifications);
-
-                            emptyContentContainer.setVisibility(View.GONE);
-                            recyclerView.setVisibility(View.VISIBLE);
+                            if (notifications.size() > 0) {
+                                populateList(notifications);
+                                emptyContentContainer.setVisibility(View.GONE);
+                                recyclerView.setVisibility(View.VISIBLE);
+                            } else {
+                                setEmptyContent(noResultsHeadline, noResultsMessage);
+                            }
                         }
                     });
                 } else {

+ 91 - 0
src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java

@@ -0,0 +1,91 @@
+/**
+ * ownCloud Android client application
+ *
+ * @author Andy Scherzinger
+ * Copyright (C) 2016 ownCloud Inc.
+ * <p/>
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ * <p/>
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * <p/>
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.owncloud.android.ui.adapter;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.owncloud.android.R;
+import com.owncloud.android.lib.resources.notifications.models.Notification;
+import com.owncloud.android.utils.DisplayUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This Adapter populates a ListView with all notifications for an account within the app.
+ */
+public class NotificationListAdapter extends RecyclerView.Adapter<NotificationListAdapter.NotificationViewHolder> {
+    private List<Notification> mValues;
+    private Context context;
+
+    public NotificationListAdapter(Context context) {
+        this.mValues = new ArrayList<>();
+        this.context = context;
+    }
+
+    public void setNotificationItems(List<Notification> notificationItems) {
+        mValues.clear();
+        mValues.addAll(notificationItems);
+        notifyDataSetChanged();
+    }
+
+    @Override
+    public NotificationViewHolder onCreateViewHolder(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) {
+        Notification notification = mValues.get(position);
+        holder.dateTime.setText(DisplayUtils.getRelativeTimestamp(context, notification.getDatetime().getTime()));
+        holder.subject.setText(notification.getSubject());
+        holder.message.setText(notification.getMessage());
+
+        // Todo set proper action icon (to be clarified how to pick)
+        holder.activityIcon.setImageResource(R.drawable.ic_notification);
+    }
+
+    @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;
+
+        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);
+        }
+    }
+}

+ 1 - 4
src/main/res/layout/notifications_layout.xml

@@ -44,10 +44,7 @@
                 android:clipToPadding="false"
                 android:scrollbarStyle="outsideOverlay"
                 android:scrollbars="vertical"
-                android:visibility="visible"
-                android:layout_marginRight="-3dp"
-                android:layout_marginLeft="-3dp"
-                android:layout_marginBottom="-3dp"/>
+                android:visibility="visible"/>
 
             <include layout="@layout/empty_list"/>