Эх сурвалжийг харах

wip

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 4 жил өмнө
parent
commit
a319b2195f

+ 18 - 1
src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -42,7 +42,9 @@ import android.os.AsyncTask;
 import android.provider.MediaStore;
 import android.provider.MediaStore;
 import android.text.TextUtils;
 import android.text.TextUtils;
 import android.view.Display;
 import android.view.Display;
+import android.view.View;
 import android.view.WindowManager;
 import android.view.WindowManager;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.ImageView;
 
 
 import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.client.network.ConnectivityService;
@@ -253,18 +255,21 @@ public final class ThumbnailsCacheManager {
         private FileDataStorageManager storageManager;
         private FileDataStorageManager storageManager;
         private Account account;
         private Account account;
         private WeakReference<ImageView> imageViewReference;
         private WeakReference<ImageView> imageViewReference;
+        private WeakReference<FrameLayout> frameLayoutReference;
         private OCFile file;
         private OCFile file;
         private ConnectivityService connectivityService;
         private ConnectivityService connectivityService;
 
 
 
 
         public ResizedImageGenerationTask(FileFragment fileFragment,
         public ResizedImageGenerationTask(FileFragment fileFragment,
                                           ImageView imageView,
                                           ImageView imageView,
+                                          FrameLayout emptyListProgress,
                                           FileDataStorageManager storageManager,
                                           FileDataStorageManager storageManager,
                                           ConnectivityService connectivityService,
                                           ConnectivityService connectivityService,
                                           Account account)
                                           Account account)
                 throws IllegalArgumentException {
                 throws IllegalArgumentException {
             this.fileFragment = fileFragment;
             this.fileFragment = fileFragment;
             imageViewReference = new WeakReference<>(imageView);
             imageViewReference = new WeakReference<>(imageView);
+            frameLayoutReference = new WeakReference<>(emptyListProgress);
             this.storageManager = storageManager;
             this.storageManager = storageManager;
             this.connectivityService = connectivityService;
             this.connectivityService = connectivityService;
             this.account = account;
             this.account = account;
@@ -276,11 +281,17 @@ public final class ThumbnailsCacheManager {
 
 
             file = (OCFile) params[0];
             file = (OCFile) params[0];
 
 
+            try {
+                Thread.sleep(8000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
             try {
             try {
                 if (account != null) {
                 if (account != null) {
                     OwnCloudAccount ocAccount = new OwnCloudAccount(account, MainApp.getAppContext());
                     OwnCloudAccount ocAccount = new OwnCloudAccount(account, MainApp.getAppContext());
                     mClient = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount,
                     mClient = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount,
-                            MainApp.getAppContext());
+                                                                                              MainApp.getAppContext());
                 }
                 }
 
 
                 thumbnail = doResizedImageInBackground();
                 thumbnail = doResizedImageInBackground();
@@ -375,6 +386,7 @@ public final class ThumbnailsCacheManager {
         protected void onPostExecute(Bitmap bitmap) {
         protected void onPostExecute(Bitmap bitmap) {
             if (imageViewReference != null) {
             if (imageViewReference != null) {
                 final ImageView imageView = imageViewReference.get();
                 final ImageView imageView = imageViewReference.get();
+                final FrameLayout frameLayout = frameLayoutReference.get();
 
 
                 if (bitmap != null) {
                 if (bitmap != null) {
                     final ResizedImageGenerationTask bitmapWorkerTask = getResizedImageGenerationWorkerTask(imageView);
                     final ResizedImageGenerationTask bitmapWorkerTask = getResizedImageGenerationWorkerTask(imageView);
@@ -383,7 +395,12 @@ public final class ThumbnailsCacheManager {
                         String tagId = String.valueOf(file.getFileId());
                         String tagId = String.valueOf(file.getFileId());
 
 
                         if (String.valueOf(imageView.getTag()).equals(tagId)) {
                         if (String.valueOf(imageView.getTag()).equals(tagId)) {
+                            imageView.setVisibility(View.VISIBLE);
                             imageView.setImageBitmap(bitmap);
                             imageView.setImageBitmap(bitmap);
+
+                            if (frameLayout != null) {
+                                frameLayout.setVisibility(View.GONE);
+                            }
                         }
                         }
                     }
                     }
                 } else {
                 } else {

+ 4 - 0
src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java

@@ -270,4 +270,8 @@ public abstract class ToolbarActivity extends BaseActivity {
     public ImageView getPreviewImageView() {
     public ImageView getPreviewImageView() {
         return mPreviewImage;
         return mPreviewImage;
     }
     }
+
+    public FrameLayout getPreviewImageContainer() {
+        return mPreviewImageContainer;
+    }
 }
 }

+ 5 - 1
src/main/java/com/owncloud/android/ui/adapter/DiskLruImageCache.java

@@ -128,7 +128,11 @@ public class DiskLruImageCache {
                 options.inMutable = false;
                 options.inMutable = false;
                 options.inJustDecodeBounds = true;
                 options.inJustDecodeBounds = true;
 
 
-                bitmap = BitmapFactory.decodeStream(buffIn, null, options);
+                BitmapFactory.decodeStream(buffIn, null, options);
+
+                snapshot = mDiskCache.get(validKey);
+                inputStream = snapshot.getInputStream(0);
+                buffIn = new BufferedInputStream(inputStream, IO_BUFFER_SIZE);
 
 
                 // Calculate inSampleSize
                 // Calculate inSampleSize
                 options.inSampleSize = BitmapUtils.calculateSampleFactor(options, width, height);
                 options.inSampleSize = BitmapUtils.calculateSampleFactor(options, width, height);

+ 1 - 0
src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -581,6 +581,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
                     final ThumbnailsCacheManager.ResizedImageGenerationTask task =
                     final ThumbnailsCacheManager.ResizedImageGenerationTask task =
                             new ThumbnailsCacheManager.ResizedImageGenerationTask(this,
                             new ThumbnailsCacheManager.ResizedImageGenerationTask(this,
                                                                                   toolbarActivity.getPreviewImageView(),
                                                                                   toolbarActivity.getPreviewImageView(),
+                                                                                  toolbarActivity.getPreviewImageContainer(),
                                                                                   containerActivity.getStorageManager(),
                                                                                   containerActivity.getStorageManager(),
                                                                                   connectivityService,
                                                                                   connectivityService,
                                                                                   containerActivity.getStorageManager().getAccount());
                                                                                   containerActivity.getStorageManager().getAccount());

+ 25 - 8
src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java

@@ -89,6 +89,8 @@ import androidx.fragment.app.FragmentStatePagerAdapter;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import pl.droidsonroids.gif.GifDrawable;
 import pl.droidsonroids.gif.GifDrawable;
 
 
+import static com.owncloud.android.datamodel.ThumbnailsCacheManager.PREFIX_THUMBNAIL;
+
 
 
 /**
 /**
  * This fragment shows a preview of a downloaded image.
  * This fragment shows a preview of a downloaded image.
@@ -243,14 +245,22 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
                 if (resizedImage != null && !getFile().isUpdateThumbnailNeeded()) {
                 if (resizedImage != null && !getFile().isUpdateThumbnailNeeded()) {
                     binding.image.setImageBitmap(resizedImage);
                     binding.image.setImageBitmap(resizedImage);
                     binding.image.setVisibility(View.VISIBLE);
                     binding.image.setVisibility(View.VISIBLE);
+                    binding.emptyListView.setVisibility(View.GONE);
+                    binding.emptyListProgress.setVisibility(View.GONE);
+                    binding.image.setBackgroundColor(getResources().getColor(R.color.background_color_inverse));
+
                     bitmap = resizedImage;
                     bitmap = resizedImage;
                 } else {
                 } else {
+                    binding.emptyListProgress.setVisibility(View.VISIBLE);
+                    binding.image.setVisibility(View.GONE);
+
                     // show thumbnail while loading resized image
                     // show thumbnail while loading resized image
-                    Bitmap thumbnail = getResizedBitmap(getFile(), width, height);
+                    Bitmap thumbnail = getThumbnailBitmap(getFile());
 
 
                     if (thumbnail != null) {
                     if (thumbnail != null) {
-                        binding.image.setImageBitmap(thumbnail);
-                        binding.image.setVisibility(View.VISIBLE);
+                        binding.shimmer.setVisibility(View.VISIBLE);
+                        binding.shimmerThumbnail.setImageBitmap(thumbnail);
+                        binding.image.setVisibility(View.GONE);
                         bitmap = thumbnail;
                         bitmap = thumbnail;
                     } else {
                     } else {
                         thumbnail = ThumbnailsCacheManager.mDefaultImg;
                         thumbnail = ThumbnailsCacheManager.mDefaultImg;
@@ -262,6 +272,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
                         final ThumbnailsCacheManager.ResizedImageGenerationTask task =
                         final ThumbnailsCacheManager.ResizedImageGenerationTask task =
                             new ThumbnailsCacheManager.ResizedImageGenerationTask(this,
                             new ThumbnailsCacheManager.ResizedImageGenerationTask(this,
                                                                                   binding.image,
                                                                                   binding.image,
+                                                                                  binding.emptyListProgress,
                                                                                   containerActivity.getStorageManager(),
                                                                                   containerActivity.getStorageManager(),
                                                                                   connectivityService,
                                                                                   connectivityService,
                                                                                   containerActivity.getStorageManager().getAccount());
                                                                                   containerActivity.getStorageManager().getAccount());
@@ -278,11 +289,6 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
                         task.execute(getFile());
                         task.execute(getFile());
                     }
                     }
                 }
                 }
-                binding.emptyListView.setVisibility(View.GONE);
-                binding.emptyListProgress.setVisibility(View.GONE);
-                binding.image.setBackgroundColor(getResources().getColor(R.color.background_color_inverse));
-                binding.image.setVisibility(View.VISIBLE);
-
             } else {
             } else {
                 loadBitmapTask = new LoadBitmapTask(binding.image, binding.emptyListView, binding.emptyListProgress);
                 loadBitmapTask = new LoadBitmapTask(binding.image, binding.emptyListView, binding.emptyListProgress);
                 binding.image.setVisibility(View.GONE);
                 binding.image.setVisibility(View.GONE);
@@ -316,6 +322,11 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
         return cachedImage;
         return cachedImage;
     }
     }
 
 
+    private @Nullable
+    Bitmap getThumbnailBitmap(OCFile file) {
+        return ThumbnailsCacheManager.getBitmapFromDiskCache(PREFIX_THUMBNAIL + file.getRemoteId());
+    }
+
     @Override
     @Override
     public void onStop() {
     public void onStop() {
         Log_OC.d(TAG, "onStop starts");
         Log_OC.d(TAG, "onStop starts");
@@ -500,6 +511,12 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
                 return null;
                 return null;
             }
             }
 
 
+            try {
+                Thread.sleep(8000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
             Bitmap bitmapResult = null;
             Bitmap bitmapResult = null;
             Drawable drawableResult = null;
             Drawable drawableResult = null;
             OCFile ocFile = params[0];
             OCFile ocFile = params[0];

+ 5 - 4
src/main/res/layout/preview_image_fragment.xml

@@ -89,19 +89,20 @@
         android:layout_height="match_parent">
         android:layout_height="match_parent">
 
 
         <com.elyeproj.loaderviewlibrary.LoaderImageView
         <com.elyeproj.loaderviewlibrary.LoaderImageView
-            android:layout_width="@dimen/empty_list_icon_layout_width"
-            android:layout_height="@dimen/empty_list_icon_layout_width"
+            android:id="@+id/shimmer"
+            android:layout_width="96dp"
+            android:layout_height="96dp"
             android:layout_gravity="center"
             android:layout_gravity="center"
             android:contentDescription="@null"
             android:contentDescription="@null"
             app:corners="24" />
             app:corners="24" />
 
 
         <ImageView
         <ImageView
+            android:id="@+id/shimmerThumbnail"
             android:layout_width="@dimen/empty_list_icon_layout_width"
             android:layout_width="@dimen/empty_list_icon_layout_width"
             android:layout_height="@dimen/empty_list_icon_layout_height"
             android:layout_height="@dimen/empty_list_icon_layout_height"
             android:layout_gravity="center"
             android:layout_gravity="center"
             android:contentDescription="@null"
             android:contentDescription="@null"
-            android:src="@drawable/ic_image_outline"
-            app:tint="@color/bg_default" />
+            android:src="@drawable/ic_image_outline" />
 
 
     </FrameLayout>
     </FrameLayout>
 </FrameLayout>
 </FrameLayout>

+ 2 - 0
src/main/res/layout/toolbar_standard.xml

@@ -91,6 +91,8 @@
                 android:layout_height="@dimen/nav_drawer_header_height"
                 android:layout_height="@dimen/nav_drawer_header_height"
                 android:visibility="gone">
                 android:visibility="gone">
 
 
+                <!--                TODO add shimmer -->
+
                 <ImageView
                 <ImageView
                     android:id="@+id/preview_image"
                     android:id="@+id/preview_image"
                     android:layout_width="match_parent"
                     android:layout_width="match_parent"