From 03cdb90b80ff3b8f8fa4ea378d548901de57c11b Mon Sep 17 00:00:00 2001 From: A117870935 Date: Tue, 18 Apr 2023 20:48:47 +0530 Subject: [PATCH 1/6] Media view customization like icon, color, fonts. --- app/src/main/res/drawable/ic_camera.xml | 9 +++++++-- app/src/main/res/drawable/nav_photos.xml | 15 +++++++++++---- .../res/layout/fragment_gallery_bottom_sheet.xml | 12 ++++++------ app/src/main/res/values-de/strings.xml | 4 ++-- app/src/main/res/values-night/colors.xml | 2 ++ app/src/main/res/values/colors.xml | 5 ++++- app/src/main/res/values/strings.xml | 8 ++++---- 7 files changed, 36 insertions(+), 19 deletions(-) diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml index 92429e324ca6..1f82ee9175fb 100644 --- a/app/src/main/res/drawable/ic_camera.xml +++ b/app/src/main/res/drawable/ic_camera.xml @@ -15,9 +15,14 @@ limitations under the License. --> - + diff --git a/app/src/main/res/drawable/nav_photos.xml b/app/src/main/res/drawable/nav_photos.xml index cfdceae62533..4017461bfe24 100644 --- a/app/src/main/res/drawable/nav_photos.xml +++ b/app/src/main/res/drawable/nav_photos.xml @@ -18,8 +18,15 @@ Icon provided by Android Material Library in Apache License 2.0 --> - - + + diff --git a/app/src/main/res/layout/fragment_gallery_bottom_sheet.xml b/app/src/main/res/layout/fragment_gallery_bottom_sheet.xml index 5201aa0cea34..0c3b24f9a919 100644 --- a/app/src/main/res/layout/fragment_gallery_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_gallery_bottom_sheet.xml @@ -44,7 +44,7 @@ android:layout_height="wrap_content" android:contentDescription="@null" android:src="@drawable/ic_camera" - app:tint="@color/primary" /> + app:tint="@color/bottom_sheet_icon_color" /> + app:tint="@color/bottom_sheet_icon_color" /> + app:tint="@color/bottom_sheet_icon_color" /> diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 370342829f21..b9d98d5befde 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -648,7 +648,7 @@ Synchronisiere mit DAVx5 Fehler beim Abrufen der Suchergebnisse Alle auswählen - Medien-Ordner auswählen + Den Ordner \"Medien\" auswählen Bitte eine Vorlage auswählen Vorlage auswählen Senden @@ -705,7 +705,7 @@ Über einen Link geteilt Geteilt mit Ihnen von %1$s Freigeben fehlgeschlagen - Fotos anzeigen + Bilder anzeigen Videos anzeigen Mit Provider anmelden Zulassen, dass %1$s auf Ihr Nextcloud Konto %2$s zugreifen darf? diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 08bf64d552ad..63d57de09bc3 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -33,6 +33,8 @@ #818181 #222222 #ffffff + @color/grey_30 + @color/grey_0 @color/appbar diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f844b3156f33..e46aeb2c8958 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -40,7 +40,8 @@ #EEEEEE #BDBDBD #666666 - + #F2F2F2 + #B2B2B2 @@ -58,6 +59,8 @@ #000000 #ededed #000000 + #191919 + #191919 #ffffff #ffffff diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f98d81cb2135..f9d3e7f78c5f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1023,12 +1023,12 @@ Tap on a page to zoom in Full access Media read-only - Photos & videos - Show photos - Photos only + Images & videos + Show images + Images only Show videos Videos only - Set media folder + Select the \"Media\" folder Choose location Select Lock file From 7615b116fcd0ed8f7791efb67f2bb62c663a64ed Mon Sep 17 00:00:00 2001 From: A117870935 Date: Thu, 20 Apr 2023 11:22:53 +0530 Subject: [PATCH 2/6] Media View empty state customized. --- .../android/ui/fragment/ExtendedListFragment.java | 6 +++--- .../main/res/drawable-night/ic_list_empty_media.xml | 13 +++++++++++++ app/src/main/res/drawable/ic_list_empty_media.xml | 13 +++++++++++++ app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values/setup.xml | 2 ++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable-night/ic_list_empty_media.xml create mode 100644 app/src/main/res/drawable/ic_list_empty_media.xml diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java index c7260043e822..dccaf89b2ee5 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -629,9 +629,9 @@ public void run() { R.string.file_list_empty_shared, R.drawable.ic_list_empty_shared); } else if (searchType == SearchType.GALLERY_SEARCH) { - setMessageForEmptyList(R.string.file_list_empty_headline_server_search, - R.string.file_list_empty_gallery, - R.drawable.file_image); + setMessageForEmptyList(R.string.file_list_empty_headline, + R.string.gallery_list_empty, + R.drawable.ic_list_empty_media); } } }); diff --git a/app/src/main/res/drawable-night/ic_list_empty_media.xml b/app/src/main/res/drawable-night/ic_list_empty_media.xml new file mode 100644 index 000000000000..b07dafe6cc6a --- /dev/null +++ b/app/src/main/res/drawable-night/ic_list_empty_media.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/ic_list_empty_media.xml b/app/src/main/res/drawable/ic_list_empty_media.xml new file mode 100644 index 000000000000..af5065cf6ef1 --- /dev/null +++ b/app/src/main/res/drawable/ic_list_empty_media.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b9d98d5befde..dc8a173dffa5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -977,4 +977,5 @@ %d ausgewählt %d ausgewählt + Noch keine hochgeladene Fotos oder Videos vorhanden diff --git a/app/src/main/res/values/setup.xml b/app/src/main/res/values/setup.xml index 501c30b0a3d5..d18336a6dd6b 100644 --- a/app/src/main/res/values/setup.xml +++ b/app/src/main/res/values/setup.xml @@ -48,6 +48,8 @@ #007cc2 #ffffff #7fC0E3 + #191919 + #CCCCCC true diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f9d3e7f78c5f..007d1ca30b15 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1016,6 +1016,7 @@ Storage permissions %1$s needs file management permissions to upload files. You can choose full access to all files, or read-only access to photos and videos. %1$s works best with permissions to access storage. You can choose full access to all files, or read-only access to photos and videos. + No photos or videos uploaded yet No results found for your query Found no images or videos Error creating file from template From 9ea494286827bc024a6dce8f8adb7d4d6b99fcd0 Mon Sep 17 00:00:00 2001 From: A117870935 Date: Thu, 20 Apr 2023 18:45:48 +0530 Subject: [PATCH 3/6] Test case added for media view bottom sheet. --- .../ui/GalleryFragmentBottomSheetDialogIT.kt | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 app/src/androidTest/java/com/nmc/android/ui/GalleryFragmentBottomSheetDialogIT.kt diff --git a/app/src/androidTest/java/com/nmc/android/ui/GalleryFragmentBottomSheetDialogIT.kt b/app/src/androidTest/java/com/nmc/android/ui/GalleryFragmentBottomSheetDialogIT.kt new file mode 100644 index 000000000000..138caed3a08e --- /dev/null +++ b/app/src/androidTest/java/com/nmc/android/ui/GalleryFragmentBottomSheetDialogIT.kt @@ -0,0 +1,137 @@ +package com.nmc.android.ui + +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.intent.rule.IntentsTestRule +import androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import com.nextcloud.test.TestActivity +import com.owncloud.android.AbstractIT +import com.owncloud.android.R +import com.owncloud.android.datamodel.ImageDimension +import com.owncloud.android.datamodel.OCFile +import com.owncloud.android.datamodel.ThumbnailsCacheManager +import com.owncloud.android.datamodel.ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE +import com.owncloud.android.lib.common.utils.Log_OC +import com.owncloud.android.ui.fragment.GalleryFragment +import com.owncloud.android.ui.fragment.GalleryFragmentBottomSheetActions +import com.owncloud.android.ui.fragment.GalleryFragmentBottomSheetDialog +import org.junit.After +import org.junit.Assert.assertNotNull +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import java.util.Random + +class GalleryFragmentBottomSheetDialogIT : AbstractIT() { + + @get:Rule + val testActivityRule = IntentsTestRule(TestActivity::class.java, true, false) + + lateinit var activity: TestActivity + val random = Random() + + @Before + fun before() { + activity = testActivityRule.launchActivity(null) + + createImage(10000001, true, 700, 300) + createImage(10000002, true, 500, 300) + + createImage(10000007, true, 300, 400) + + showGalleryWithBottomSheet() + } + + @Test + fun validateUIElements() { + + onView(withId(R.id.hideImagesImageview)).check(matches(isCompletelyDisplayed())) + onView(withId(R.id.hideImagesTextview)).check(matches(isCompletelyDisplayed())) + onView(withId(R.id.tickMarkShowImages)).check(matches(isCompletelyDisplayed())) + onView(withId(R.id.hideImagesTextview)).check(matches(withText("Show images"))) + + onView(withId(R.id.hideVideoImageView)).check(matches(isCompletelyDisplayed())) + onView(withId(R.id.hideVideoTextview)).check(matches(isCompletelyDisplayed())) + onView(withId(R.id.tickMarkShowVideo)).check(matches(isCompletelyDisplayed())) + onView(withId(R.id.hideVideoTextview)).check(matches(withText("Show videos"))) + + onView(withId(R.id.selectMediaFolder)).check(matches(isCompletelyDisplayed())) + onView(withId(R.id.selectMediaFolderImageView)).check(matches(isCompletelyDisplayed())) + } + + private fun showGalleryWithBottomSheet(): GalleryFragmentBottomSheetDialog { + val sut = GalleryFragment() + activity.addFragment(sut) + + shortSleep() + + val sheet = GalleryFragmentBottomSheetDialog(object : GalleryFragmentBottomSheetActions { + override fun updateMediaContent(mediaState: GalleryFragmentBottomSheetDialog.MediaState) { + } + + override fun selectMediaFolder() { + } + }) + + sheet.show(activity.supportFragmentManager, "bottom_sheet") + return sheet + } + + private fun createImage(id: Int, createPreview: Boolean = true, width: Int? = null, height: Int? = null) { + val defaultSize = ThumbnailsCacheManager.getThumbnailDimension().toFloat() + val file = OCFile("/$id.png").apply { + fileId = id.toLong() + remoteId = "$id" + mimeType = "image/png" + isPreviewAvailable = true + modificationTimestamp = (1658475504 + id.toLong()) * 1000 + imageDimension = ImageDimension(width?.toFloat() ?: defaultSize, height?.toFloat() ?: defaultSize) + storageManager.saveFile(this) + } + + if (!createPreview) { + return + } + + // create dummy thumbnail + var w: Int + var h: Int + if (width == null || height == null) { + if (random.nextBoolean()) { + // portrait + w = (random.nextInt(3) + 2) * 100 // 200-400 + h = (random.nextInt(5) + 4) * 100 // 400-800 + } else { + // landscape + w = (random.nextInt(5) + 4) * 100 // 400-800 + h = (random.nextInt(3) + 2) * 100 // 200-400 + } + } else { + w = width + h = height + } + + val bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888) + Canvas(bitmap).apply { + drawRGB(random.nextInt(256), random.nextInt(256), random.nextInt(256)) + drawCircle(w / 2f, h / 2f, Math.min(w, h) / 2f, Paint().apply { color = Color.BLACK }) + } + ThumbnailsCacheManager.addBitmapToCache(PREFIX_RESIZED_IMAGE + file.remoteId, bitmap) + + assertNotNull(ThumbnailsCacheManager.getBitmapFromDiskCache(PREFIX_RESIZED_IMAGE + file.remoteId)) + + Log_OC.d("Gallery_thumbnail", "created $id with ${bitmap.width} x ${bitmap.height}") + } + + @After + override fun after() { + ThumbnailsCacheManager.clearCache() + super.after() + } +} From 7bb7226769bcd70e5a5b4f1f5c7cdf86b626cc6c Mon Sep 17 00:00:00 2001 From: A117870935 Date: Mon, 24 Apr 2023 15:26:44 +0530 Subject: [PATCH 4/6] Code removed as it will be handled in Empty State cluster. --- .../android/ui/fragment/ExtendedListFragment.java | 6 +++--- .../main/res/drawable-night/ic_list_empty_media.xml | 13 ------------- app/src/main/res/drawable/ic_list_empty_media.xml | 13 ------------- app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values/setup.xml | 2 -- app/src/main/res/values/strings.xml | 1 - 6 files changed, 3 insertions(+), 33 deletions(-) delete mode 100644 app/src/main/res/drawable-night/ic_list_empty_media.xml delete mode 100644 app/src/main/res/drawable/ic_list_empty_media.xml diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java index dccaf89b2ee5..c7260043e822 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -629,9 +629,9 @@ public void run() { R.string.file_list_empty_shared, R.drawable.ic_list_empty_shared); } else if (searchType == SearchType.GALLERY_SEARCH) { - setMessageForEmptyList(R.string.file_list_empty_headline, - R.string.gallery_list_empty, - R.drawable.ic_list_empty_media); + setMessageForEmptyList(R.string.file_list_empty_headline_server_search, + R.string.file_list_empty_gallery, + R.drawable.file_image); } } }); diff --git a/app/src/main/res/drawable-night/ic_list_empty_media.xml b/app/src/main/res/drawable-night/ic_list_empty_media.xml deleted file mode 100644 index b07dafe6cc6a..000000000000 --- a/app/src/main/res/drawable-night/ic_list_empty_media.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_list_empty_media.xml b/app/src/main/res/drawable/ic_list_empty_media.xml deleted file mode 100644 index af5065cf6ef1..000000000000 --- a/app/src/main/res/drawable/ic_list_empty_media.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index dc8a173dffa5..b9d98d5befde 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -977,5 +977,4 @@ %d ausgewählt %d ausgewählt - Noch keine hochgeladene Fotos oder Videos vorhanden diff --git a/app/src/main/res/values/setup.xml b/app/src/main/res/values/setup.xml index d18336a6dd6b..501c30b0a3d5 100644 --- a/app/src/main/res/values/setup.xml +++ b/app/src/main/res/values/setup.xml @@ -48,8 +48,6 @@ #007cc2 #ffffff #7fC0E3 - #191919 - #CCCCCC true diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 007d1ca30b15..f9d3e7f78c5f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1016,7 +1016,6 @@ Storage permissions %1$s needs file management permissions to upload files. You can choose full access to all files, or read-only access to photos and videos. %1$s works best with permissions to access storage. You can choose full access to all files, or read-only access to photos and videos. - No photos or videos uploaded yet No results found for your query Found no images or videos Error creating file from template From ef2b12d2ede0a4f2247002e768a6e1512e6eadbd Mon Sep 17 00:00:00 2001 From: A117870935 Date: Tue, 25 Apr 2023 19:14:56 +0530 Subject: [PATCH 5/6] Code revert as it will be handled in Icons cluster. --- app/src/main/res/drawable/ic_camera.xml | 9 ++------- app/src/main/res/drawable/nav_photos.xml | 15 ++++----------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml index 1f82ee9175fb..92429e324ca6 100644 --- a/app/src/main/res/drawable/ic_camera.xml +++ b/app/src/main/res/drawable/ic_camera.xml @@ -15,14 +15,9 @@ limitations under the License. --> - + diff --git a/app/src/main/res/drawable/nav_photos.xml b/app/src/main/res/drawable/nav_photos.xml index 4017461bfe24..cfdceae62533 100644 --- a/app/src/main/res/drawable/nav_photos.xml +++ b/app/src/main/res/drawable/nav_photos.xml @@ -18,15 +18,8 @@ Icon provided by Android Material Library in Apache License 2.0 --> - - + + From f7748e05d737a4f5863c5ab1de6b3914556ad30a Mon Sep 17 00:00:00 2001 From: A117870935 Date: Tue, 25 Apr 2023 23:37:27 +0530 Subject: [PATCH 6/6] Code refactored for code merging. --- .../res/layout/fragment_gallery_bottom_sheet.xml | 12 ++++++------ app/src/main/res/values-de/strings.xml | 4 ++-- app/src/main/res/values-night/colors.xml | 2 -- app/src/main/res/values/colors.xml | 5 +---- app/src/main/res/values/strings.xml | 8 ++++---- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/layout/fragment_gallery_bottom_sheet.xml b/app/src/main/res/layout/fragment_gallery_bottom_sheet.xml index 0c3b24f9a919..5201aa0cea34 100644 --- a/app/src/main/res/layout/fragment_gallery_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_gallery_bottom_sheet.xml @@ -44,7 +44,7 @@ android:layout_height="wrap_content" android:contentDescription="@null" android:src="@drawable/ic_camera" - app:tint="@color/bottom_sheet_icon_color" /> + app:tint="@color/primary" /> + app:tint="@color/primary" /> + app:tint="@color/primary" /> diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b9d98d5befde..370342829f21 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -648,7 +648,7 @@ Synchronisiere mit DAVx5 Fehler beim Abrufen der Suchergebnisse Alle auswählen - Den Ordner \"Medien\" auswählen + Medien-Ordner auswählen Bitte eine Vorlage auswählen Vorlage auswählen Senden @@ -705,7 +705,7 @@ Über einen Link geteilt Geteilt mit Ihnen von %1$s Freigeben fehlgeschlagen - Bilder anzeigen + Fotos anzeigen Videos anzeigen Mit Provider anmelden Zulassen, dass %1$s auf Ihr Nextcloud Konto %2$s zugreifen darf? diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 63d57de09bc3..08bf64d552ad 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -33,8 +33,6 @@ #818181 #222222 #ffffff - @color/grey_30 - @color/grey_0 @color/appbar diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index e46aeb2c8958..f844b3156f33 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -40,8 +40,7 @@ #EEEEEE #BDBDBD #666666 - #F2F2F2 - #B2B2B2 + @@ -59,8 +58,6 @@ #000000 #ededed #000000 - #191919 - #191919 #ffffff #ffffff diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f9d3e7f78c5f..f98d81cb2135 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1023,12 +1023,12 @@ Tap on a page to zoom in Full access Media read-only - Images & videos - Show images - Images only + Photos & videos + Show photos + Photos only Show videos Videos only - Select the \"Media\" folder + Set media folder Choose location Select Lock file