瀏覽代碼

Draft for shimmer effect loading screen for activities

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 4 年之前
父節點
當前提交
7f49ed9e08

+ 13 - 17
src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java

@@ -63,7 +63,9 @@ import static com.owncloud.android.ui.activity.FileActivity.EXTRA_FILE;
 
 public class ActivitiesActivity extends DrawerActivity implements ActivityListInterface, ActivitiesContract.View {
     private static final String TAG = ActivitiesActivity.class.getSimpleName();
-    private static final int UNDEFINED = -1;
+
+    @BindView(R.id.loading_content)
+    public LinearLayout loadingContent;
 
     @BindView(R.id.empty_list_view)
     public LinearLayout emptyContentContainer;
@@ -122,14 +124,9 @@ public class ActivitiesActivity extends DrawerActivity implements ActivityListIn
         swipeListRefreshLayout.setOnRefreshListener(() -> {
             // We set lastGiven variable to undefined here since when manually refreshing
             // activities data we want to clear the list and reset the pagination.
-            lastGiven = UNDEFINED;
+            lastGiven = ActivitiesContract.ActionListener.UNDEFINED;
             mActionListener.loadActivities(lastGiven);
         });
-
-        // Since we use swipe-to-refresh for progress indication we can hide the inherited
-        // progressBar, message and headline
-        emptyContentMessage.setVisibility(View.INVISIBLE);
-        emptyContentHeadline.setVisibility(View.INVISIBLE);
     }
 
     @Override
@@ -176,7 +173,7 @@ public class ActivitiesActivity extends DrawerActivity implements ActivityListIn
             }
         });
 
-        mActionListener.loadActivities(UNDEFINED);
+        mActionListener.loadActivities(ActivitiesContract.ActionListener.UNDEFINED);
     }
 
     @Override
@@ -221,7 +218,7 @@ public class ActivitiesActivity extends DrawerActivity implements ActivityListIn
     @Override
     public void showActivities(List<Object> activities, NextcloudClient client, int lastGiven) {
         boolean clear = false;
-        if (this.lastGiven == UNDEFINED) {
+        if (this.lastGiven == ActivitiesContract.ActionListener.UNDEFINED) {
             clear = true;
         }
         adapter.setActivityItems(activities, client, clear);
@@ -230,11 +227,10 @@ public class ActivitiesActivity extends DrawerActivity implements ActivityListIn
         // Hide the recyclerView if list is empty
         if (adapter.isEmpty()) {
             showEmptyContent(noResultsHeadline, noResultsMessage);
-            recyclerView.setVisibility(View.INVISIBLE);
+            recyclerView.setVisibility(View.GONE);
         } else {
-            emptyContentMessage.setVisibility(View.INVISIBLE);
-            emptyContentHeadline.setVisibility(View.INVISIBLE);
-
+            emptyContentContainer.setVisibility(View.GONE);
+            loadingContent.setVisibility(View.GONE);
             recyclerView.setVisibility(View.VISIBLE);
         }
     }
@@ -270,9 +266,8 @@ public class ActivitiesActivity extends DrawerActivity implements ActivityListIn
 
     @Override
     public void showLoadingMessage() {
-        emptyContentHeadline.setText(R.string.file_list_loading);
-        emptyContentMessage.setText("");
-        emptyContentIcon.setVisibility(View.GONE);
+        loadingContent.setVisibility(View.VISIBLE);
+        emptyContentContainer.setVisibility(View.GONE);
     }
 
     @Override
@@ -283,7 +278,8 @@ public class ActivitiesActivity extends DrawerActivity implements ActivityListIn
             emptyContentIcon.setVisibility(View.VISIBLE);
             emptyContentHeadline.setVisibility(View.VISIBLE);
             emptyContentMessage.setVisibility(View.VISIBLE);
-
+            emptyContentContainer.setVisibility(View.VISIBLE);
+            loadingContent.setVisibility(View.GONE);
         }
     }
 

+ 2 - 0
src/main/java/com/owncloud/android/ui/activities/ActivitiesContract.java

@@ -38,6 +38,8 @@ public interface ActivitiesContract {
     }
 
     interface ActionListener {
+        int UNDEFINED = -1;
+
         void loadActivities(int lastGiven);
 
         void openActivity(String fileUrl, BaseActivity baseActivity);

+ 5 - 1
src/main/java/com/owncloud/android/ui/activities/ActivitiesPresenter.java

@@ -48,7 +48,11 @@ public class ActivitiesPresenter implements ActivitiesContract.ActionListener {
 
     @Override
     public void loadActivities(int lastGiven) {
-        activitiesView.setProgressIndicatorState(true);
+        if (UNDEFINED == lastGiven) {
+            activitiesView.showLoadingMessage();
+        } else {
+            activitiesView.setProgressIndicatorState(true);
+        }
         activitiesRepository.getActivities(lastGiven, new ActivitiesRepository.LoadActivitiesCallback() {
             @Override
             public void onActivitiesLoaded(List<Object> activities, NextcloudClient client, int lastGiven) {

+ 192 - 0
src/main/res/layout/activity_list_layout.xml

@@ -60,6 +60,198 @@
             </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
             <include layout="@layout/empty_list" />
+
+            <LinearLayout
+                android:id="@+id/loading_content"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical">
+
+                <com.elyeproj.loaderviewlibrary.LoaderTextView
+                    android:id="@+id/shimmer_header"
+                    android:layout_width="140dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/standard_list_item_size"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginBottom="40dp"/>
+
+                <RelativeLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:paddingRight="@dimen/standard_padding"
+                    android:paddingBottom="@dimen/standard_padding"
+                    android:paddingLeft="@dimen/standard_padding">
+
+                    <com.elyeproj.loaderviewlibrary.LoaderImageView
+                        android:id="@+id/activity_icon1"
+                        app:corners="100"
+                        android:layout_width="@dimen/activity_icon_width"
+                        android:layout_height="@dimen/activity_icon_height"
+                        android:layout_alignParentTop="true"
+                        android:layout_marginTop="@dimen/standard_margin"
+                        android:padding="2dp"
+                        android:contentDescription="@null" />
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical"
+                        android:layout_toEndOf="@id/activity_icon1">
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:ellipsize="end"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"
+                            android:paddingTop="@dimen/standard_padding" />
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="120dp"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:layout_gravity="end"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                    </LinearLayout>
+
+                </RelativeLayout>
+
+                <RelativeLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:paddingRight="@dimen/standard_padding"
+                    android:paddingBottom="@dimen/standard_padding"
+                    android:paddingLeft="@dimen/standard_padding">
+
+                    <com.elyeproj.loaderviewlibrary.LoaderImageView
+                        android:id="@+id/activity_icon2"
+                        app:corners="100"
+                        android:layout_width="@dimen/activity_icon_width"
+                        android:layout_height="@dimen/activity_icon_height"
+                        android:layout_alignParentTop="true"
+                        android:layout_marginTop="@dimen/standard_margin"
+                        android:padding="2dp"
+                        android:contentDescription="@null" />
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical"
+                        android:layout_toEndOf="@id/activity_icon2">
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:ellipsize="end"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"
+                            android:paddingTop="@dimen/standard_padding" />
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="120dp"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:layout_gravity="end"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                    </LinearLayout>
+
+                </RelativeLayout>
+
+                <RelativeLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:paddingRight="@dimen/standard_padding"
+                    android:paddingBottom="@dimen/standard_padding"
+                    android:paddingLeft="@dimen/standard_padding">
+
+                    <com.elyeproj.loaderviewlibrary.LoaderImageView
+                        android:id="@+id/activity_icon3"
+                        app:corners="100"
+                        android:layout_width="@dimen/activity_icon_width"
+                        android:layout_height="@dimen/activity_icon_height"
+                        android:layout_alignParentTop="true"
+                        android:layout_marginTop="@dimen/standard_margin"
+                        android:padding="2dp"
+                        android:contentDescription="@null" />
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical"
+                        android:layout_toEndOf="@id/activity_icon3">
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:id="@+id/activity_subject"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:ellipsize="end"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"
+                            android:paddingTop="@dimen/standard_padding"
+                            android:textAppearance="?android:attr/textAppearanceListItem" />
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                        <com.elyeproj.loaderviewlibrary.LoaderTextView
+                            android:layout_width="120dp"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:layout_gravity="end"
+                            android:paddingEnd="@dimen/zero"
+                            android:paddingStart="@dimen/activity_icon_layout_right_end_margin"/>
+
+                    </LinearLayout>
+
+                </RelativeLayout>
+
+            </LinearLayout>
         </FrameLayout>
     </androidx.coordinatorlayout.widget.CoordinatorLayout>