Pārlūkot izejas kodu

feat: default placeholder as ente's icon and different image everytime

Prateek Sunal 1 gadu atpakaļ
vecāks
revīzija
16c5e24cc7

+ 15 - 6
android/app/src/main/kotlin/io/ente/photos/SlideshowWidgetProvider.kt

@@ -5,9 +5,11 @@ import android.content.Context
 import android.content.SharedPreferences
 import android.graphics.Bitmap
 import android.graphics.BitmapFactory
+import android.graphics.drawable.BitmapDrawable
 import android.util.Log
 import android.view.View
 import android.widget.RemoteViews
+import androidx.core.content.ContextCompat
 import es.antonborri.home_widget.HomeWidgetLaunchIntent
 import es.antonborri.home_widget.HomeWidgetProvider
 import java.io.File
@@ -40,15 +42,22 @@ class SlideshowWidgetProvider : HomeWidgetProvider() {
                         if (imageExists) {
                             Log.d("SlideshowWidgetProvider", "Image exists: $imagePath")
                             setViewVisibility(R.id.widget_img, View.VISIBLE)
-                            setViewVisibility(R.id.widget_title, View.GONE)
+                            setViewVisibility(R.id.widget_placeholder, View.GONE)
 
-                            val myBitmap: Bitmap = BitmapFactory.decodeFile(imagePath)
-                            setImageViewBitmap(R.id.widget_img, myBitmap)
+                            val bitmap: Bitmap = BitmapFactory.decodeFile(imagePath)
+                            setImageViewBitmap(R.id.widget_img, bitmap)
                         } else {
-                            Log.d("SlideshowWidgetProvider", "Image doesn't exists: $imagePath")
+                            Log.d("SlideshowWidgetProvider", "Image doesn't exists")
                             setViewVisibility(R.id.widget_img, View.GONE)
-                            setViewVisibility(R.id.widget_title, View.VISIBLE)
-                            setTextViewText(R.id.widget_title, "No Image Loaded")
+                            setViewVisibility(R.id.widget_placeholder, View.VISIBLE)
+
+                            val drawable =
+                                    ContextCompat.getDrawable(
+                                            context,
+                                            R.drawable.ic_launcher_foreground
+                                    )
+                            val bitmap = (drawable as BitmapDrawable).bitmap
+                            setImageViewBitmap(R.id.widget_placeholder, bitmap)
                         }
                     }
 

+ 8 - 11
android/app/src/main/res/layout/slideshow_layout.xml

@@ -6,19 +6,16 @@
     android:layout_height="match_parent"
     android:orientation="vertical"
     android:id="@+id/widget_container">
-
-    <TextView
-        android:id="@+id/widget_title"
+    <ImageView
+        android:id="@+id/widget_placeholder"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:textSize="20sp"
-        android:textStyle="bold"
-        android:gravity="center"
-        android:layout_gravity="center"
-        android:background="@drawable/widget_background"
+        android:layout_height="match_parent"
+        android:scaleType="fitCenter"
+        android:adjustViewBounds="true"
+        android:visibility="visible"
         tools:visibility="visible"
-        tools:text="Title" />
-
+        android:background="@drawable/widget_background"
+        />
     <ImageView
         android:id="@+id/widget_img"
         android:layout_width="match_parent"

+ 10 - 2
lib/ui/tabs/home_widget.dart

@@ -251,11 +251,15 @@ class _HomeWidgetState extends State<HomeWidget> {
       galleryLoadStartTime,
       galleryLoadEndTime,
     );
+    final prefs = await SharedPreferences.getInstance();
 
-    final files = res.files;
+    final previousGeneratedId = prefs.getInt("home_widget_last_img");
+    final files = res.files
+        .where((element) => element.generatedID != previousGeneratedId);
     final randomNumber = Random().nextInt(files.length);
-    final randomFile = files[randomNumber];
+    final randomFile = files.elementAt(randomNumber);
     final cachedThumbnail = await getThumbnailFromServer(randomFile);
+
     var img = Image.memory(cachedThumbnail);
     var imgProvider = img.image;
     await precacheImage(imgProvider, context);
@@ -289,6 +293,10 @@ class _HomeWidgetState extends State<HomeWidget> {
       iOSName: 'SlideshowWidget',
     );
 
+    if (randomFile.generatedID != null) {
+      await prefs.setInt("home_widget_last_img", randomFile.generatedID!);
+    }
+
     _logger
         .info(">>> HomeWidget rendered with size ${img.width}x${img.height}");
   }