Sfoglia il codice sorgente

add shimmer to text preview loading

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 4 anni fa
parent
commit
db8c1ce130

+ 27 - 22
src/main/java/com/owncloud/android/ui/preview/PreviewTextFileFragment.java

@@ -31,6 +31,7 @@ import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
+import android.widget.FrameLayout;
 import android.widget.TextView;
 
 import com.nextcloud.client.account.User;
@@ -107,9 +108,9 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
         }
 
         if (args.containsKey(FileDisplayActivity.EXTRA_SEARCH_QUERY)) {
-            mSearchQuery = args.getString(FileDisplayActivity.EXTRA_SEARCH_QUERY);
+            searchQuery = args.getString(FileDisplayActivity.EXTRA_SEARCH_QUERY);
         }
-        mSearchOpen = args.getBoolean(FileDisplayActivity.EXTRA_SEARCH, false);
+        searchOpen = args.getBoolean(FileDisplayActivity.EXTRA_SEARCH, false);
 
         if (savedInstanceState == null) {
             if (file == null) {
@@ -123,7 +124,7 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
             account = savedInstanceState.getParcelable(EXTRA_ACCOUNT);
         }
 
-        mHandler = new Handler();
+        handler = new Handler();
         setFile(file);
     }
 
@@ -140,7 +141,8 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
 
     @Override
     void loadAndShowTextPreview() {
-        textLoadAsyncTask = new TextLoadAsyncTask(new WeakReference<>(mTextPreview));
+        textLoadAsyncTask = new TextLoadAsyncTask(new WeakReference<>(binding.textPreview),
+                                                  new WeakReference<>(binding.emptyListProgress));
         textLoadAsyncTask.execute(getFile().getStoragePath());
     }
 
@@ -149,10 +151,12 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
      */
     private class TextLoadAsyncTask extends AsyncTask<Object, Void, StringWriter> {
         private static final int PARAMS_LENGTH = 1;
-        private final WeakReference<TextView> mTextViewReference;
+        private final WeakReference<TextView> textViewReference;
+        private final WeakReference<FrameLayout> progressViewReference;
 
-        private TextLoadAsyncTask(WeakReference<TextView> textView) {
-            mTextViewReference = textView;
+        private TextLoadAsyncTask(WeakReference<TextView> textView, WeakReference<FrameLayout> progressView) {
+            textViewReference = textView;
+            progressViewReference = progressView;
         }
 
         @Override
@@ -210,25 +214,26 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
 
         @Override
         protected void onPostExecute(final StringWriter stringWriter) {
-            final TextView textView = mTextViewReference.get();
+            final TextView textView = textViewReference.get();
 
             if (textView != null) {
-                mOriginalText = stringWriter.toString();
-                setText(textView, mOriginalText, getFile(), requireActivity());
+                originalText = stringWriter.toString();
+                setText(textView, originalText, getFile(), requireActivity());
 
-                if (mSearchView != null) {
-                    mSearchView.setOnQueryTextListener(PreviewTextFileFragment.this);
+                if (searchView != null) {
+                    searchView.setOnQueryTextListener(PreviewTextFileFragment.this);
 
-                    if (mSearchOpen) {
-                        mSearchView.setQuery(mSearchQuery, true);
+                    if (searchOpen) {
+                        searchView.setQuery(searchQuery, true);
                     }
                 }
 
                 textView.setVisibility(View.VISIBLE);
             }
 
-            if (mMultiListContainer != null) {
-                mMultiListContainer.setVisibility(View.GONE);
+            final FrameLayout progress = progressViewReference.get();
+            if (progress != null) {
+                progress.setVisibility(View.GONE);
             }
         }
     }
@@ -243,13 +248,13 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
 
         MenuItem menuItem = menu.findItem(R.id.action_search);
         menuItem.setVisible(true);
-        mSearchView = (SearchView) MenuItemCompat.getActionView(menuItem);
-        mSearchView.setMaxWidth(Integer.MAX_VALUE);
+        searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
+        searchView.setMaxWidth(Integer.MAX_VALUE);
 
-        if (mSearchOpen) {
-            mSearchView.setIconified(false);
-            mSearchView.setQuery(mSearchQuery, false);
-            mSearchView.clearFocus();
+        if (searchOpen) {
+            searchView.setIconified(false);
+            searchView.setQuery(searchQuery, false);
+            searchView.clearFocus();
         }
     }
 

+ 21 - 42
src/main/java/com/owncloud/android/ui/preview/PreviewTextFragment.java

@@ -32,13 +32,13 @@ import android.text.method.LinkMovementMethod;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.device.DeviceInfo;
 import com.nextcloud.client.di.Injectable;
 import com.owncloud.android.R;
+import com.owncloud.android.databinding.TextFilePreviewBinding;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
@@ -78,22 +78,17 @@ import io.noties.prism4j.annotations.PrismBundle;
 public abstract class PreviewTextFragment extends FileFragment implements SearchView.OnQueryTextListener, Injectable {
     private static final String TAG = PreviewTextFragment.class.getSimpleName();
 
-
-    protected SearchView mSearchView;
-    protected String mSearchQuery = "";
-    protected boolean mSearchOpen;
-    protected TextView mTextPreview;
-    protected Handler mHandler;
-    protected String mOriginalText;
-    protected View mMultiListContainer;
-
-    private TextView mMultiListMessage;
-    private TextView mMultiListHeadline;
-    private ImageView mMultiListIcon;
+    protected SearchView searchView;
+    protected String searchQuery = "";
+    protected boolean searchOpen;
+    protected Handler handler;
+    protected String originalText;
 
     @Inject UserAccountManager accountManager;
     @Inject DeviceInfo deviceInfo;
 
+    protected TextFilePreviewBinding binding;
+
     /**
      * {@inheritDoc}
      */
@@ -103,28 +98,12 @@ public abstract class PreviewTextFragment extends FileFragment implements Search
         super.onCreateView(inflater, container, savedInstanceState);
         Log_OC.e(TAG, "onCreateView");
 
-        View ret = inflater.inflate(R.layout.text_file_preview, container, false);
-        mTextPreview = ret.findViewById(R.id.text_preview);
-
-        setupMultiView(ret);
-        setMultiListLoadingMessage();
+        binding = TextFilePreviewBinding.inflate(inflater, container, false);
+        View view = binding.getRoot();
 
-        return ret;
-    }
-
-    private void setupMultiView(View view) {
-        mMultiListContainer = view.findViewById(R.id.empty_list_view);
-        mMultiListMessage = view.findViewById(R.id.empty_list_view_text);
-        mMultiListHeadline = view.findViewById(R.id.empty_list_view_headline);
-        mMultiListIcon = view.findViewById(R.id.empty_list_icon);
-    }
+        binding.emptyListProgress.setVisibility(View.VISIBLE);
 
-    private void setMultiListLoadingMessage() {
-        if (mMultiListContainer != null) {
-            mMultiListHeadline.setText(R.string.file_list_loading);
-            mMultiListMessage.setText("");
-            mMultiListIcon.setVisibility(View.GONE);
-        }
+        return view;
     }
 
     @Override
@@ -151,28 +130,28 @@ public abstract class PreviewTextFragment extends FileFragment implements Search
 
 
     private void performSearch(final String query, int delay) {
-        mHandler.removeCallbacksAndMessages(null);
+        handler.removeCallbacksAndMessages(null);
 
-        if (mOriginalText != null) {
+        if (originalText != null) {
             if (getActivity() instanceof FileDisplayActivity) {
                 FileDisplayActivity fileDisplayActivity = (FileDisplayActivity) getActivity();
                 fileDisplayActivity.setSearchQuery(query);
             }
-            mHandler.postDelayed(() -> {
+            handler.postDelayed(() -> {
                 if (query != null && !query.isEmpty()) {
                     if (getContext() != null && getContext().getResources() != null) {
-                        String coloredText = StringUtils.searchAndColor(mOriginalText, query,
-                            getContext().getResources().getColor(R.color.primary));
-                        mTextPreview.setText(Html.fromHtml(coloredText.replace("\n", "<br \\>")));
+                        String coloredText = StringUtils.searchAndColor(originalText, query,
+                                                                        getContext().getResources().getColor(R.color.primary));
+                        binding.textPreview.setText(Html.fromHtml(coloredText.replace("\n", "<br \\>")));
                     }
                 } else {
-                    setText(mTextPreview, mOriginalText, getFile(), getActivity());
+                    setText(binding.textPreview, originalText, getFile(), getActivity());
                 }
             }, delay);
         }
 
-        if (delay == 0 && mSearchView != null) {
-            mSearchView.clearFocus();
+        if (delay == 0 && searchView != null) {
+            searchView.clearFocus();
         }
     }
 

+ 15 - 19
src/main/java/com/owncloud/android/ui/preview/PreviewTextStringFragment.java

@@ -78,11 +78,11 @@ public class PreviewTextStringFragment extends PreviewTextFragment {
         Bundle args = getArguments();
 
         if (args.containsKey(FileDisplayActivity.EXTRA_SEARCH_QUERY)) {
-            mSearchQuery = args.getString(FileDisplayActivity.EXTRA_SEARCH_QUERY);
+            searchQuery = args.getString(FileDisplayActivity.EXTRA_SEARCH_QUERY);
         }
-        mSearchOpen = args.getBoolean(FileDisplayActivity.EXTRA_SEARCH, false);
+        searchOpen = args.getBoolean(FileDisplayActivity.EXTRA_SEARCH, false);
 
-        mHandler = new Handler();
+        handler = new Handler();
     }
 
     /**
@@ -126,27 +126,23 @@ public class PreviewTextStringFragment extends PreviewTextFragment {
 
         MenuItem menuItem = menu.findItem(R.id.action_search);
         menuItem.setVisible(true);
-        mSearchView = (SearchView) MenuItemCompat.getActionView(menuItem);
-        mSearchView.setOnQueryTextListener(this);
-        mSearchView.setMaxWidth(Integer.MAX_VALUE);
-
-        if (mSearchOpen) {
-            mSearchView.setIconified(false);
-            mSearchView.setQuery(mSearchQuery, true);
-            mSearchView.clearFocus();
+        searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
+        searchView.setOnQueryTextListener(this);
+        searchView.setMaxWidth(Integer.MAX_VALUE);
+
+        if (searchOpen) {
+            searchView.setIconified(false);
+            searchView.setQuery(searchQuery, true);
+            searchView.clearFocus();
         }
     }
 
     void loadAndShowTextPreview() {
-        if (mTextPreview != null) {
-            mOriginalText = getFile().getRichWorkspace();
-            setText(mTextPreview, mOriginalText, getFile(), requireActivity(), true, false);
-            mTextPreview.setVisibility(View.VISIBLE);
-        }
+        originalText = getFile().getRichWorkspace();
+        setText(binding.textPreview, originalText, getFile(), requireActivity(), true, false);
 
-        if (mMultiListContainer != null) {
-            mMultiListContainer.setVisibility(View.GONE);
-        }
+        binding.textPreview.setVisibility(View.VISIBLE);
+        binding.emptyListProgress.setVisibility(View.GONE);
     }
 
     private void edit() {

+ 23 - 1
src/main/res/layout/text_file_preview.xml

@@ -41,5 +41,27 @@
 
     </ScrollView>
 
-    <include layout="@layout/empty_list" />
+    <FrameLayout
+        android:id="@+id/empty_list_progress"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <com.elyeproj.loaderviewlibrary.LoaderImageView
+            android:layout_width="@dimen/empty_list_icon_layout_width"
+            android:layout_height="@dimen/empty_list_icon_layout_width"
+            android:layout_gravity="center"
+            android:contentDescription="@null"
+            app:corners="24" />
+
+        <ImageView
+            android:layout_width="@dimen/empty_list_icon_layout_width"
+            android:layout_height="@dimen/empty_list_icon_layout_height"
+            android:padding="@dimen/standard_half_padding"
+            android:layout_gravity="center"
+            android:contentDescription="@null"
+            android:src="@drawable/file_text"
+            app:tint="@color/bg_default" />
+
+    </FrameLayout>
+
 </androidx.coordinatorlayout.widget.CoordinatorLayout>