From c3fab7349b90fcba0d14caeed155296f074ca62c Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Sun, 25 Jul 2021 11:37:07 +0300 Subject: [PATCH] Dashboard | Object icon refactoring (#1673) --- .gitignore | 3 +- .../relations/ObjectRelationListTest.kt | 10 +- .../anytype/di/feature/DashboardDi.kt | 6 +- .../anytype/ui/desktop/DashboardAdapter.kt | 95 +++---------------- .../layout/item_dashboard_card_default.xml | 53 ++--------- .../layout/item_desktop_page_without_icon.xml | 3 +- app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/styles.xml | 1 + .../core_ui/widgets/ObjectCardIconWidget.kt | 90 ++++++++++++++++++ .../circle_default_avatar_background.xml | 5 + ...rect_object_icon_card_emoji_background.xml | 6 ++ .../res/layout/widget_object_icon_card.xml | 24 +++++ core-ui/src/main/res/values/dimens.xml | 2 + .../presentation/desktop/DashboardView.kt | 8 +- .../desktop/HomeDashboardViewModel.kt | 47 +++++++-- .../desktop/HomeDashboardViewModelFactory.kt | 7 +- .../extension/DashboardViewExtension.kt | 24 +++-- .../presentation/mapper/MapperExtension.kt | 36 ++++--- .../anytype/presentation/object/ObjectIcon.kt | 52 ++++++++++ .../search/ObjectSearchViewModel.kt | 47 ++------- .../presentation/home/DashboardTestSetup.kt | 3 +- .../home/HomeDashboardViewModelTest.kt | 3 +- 22 files changed, 314 insertions(+), 212 deletions(-) create mode 100644 core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectCardIconWidget.kt create mode 100644 core-ui/src/main/res/drawable/circle_default_avatar_background.xml create mode 100644 core-ui/src/main/res/drawable/rect_object_icon_card_emoji_background.xml create mode 100644 core-ui/src/main/res/layout/widget_object_icon_card.xml diff --git a/.gitignore b/.gitignore index 89567d4d81..3fd54201d3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /local.properties /configuration.properties /github.properties +/apikeys.properties .idea/* !.idea/copyright .DS_Store @@ -11,4 +12,4 @@ /captures .externalNativeBuild ktlint -.idea/*.xml \ No newline at end of file +.idea/*.xml diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt index b2db74085e..0af2e552f2 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt @@ -21,6 +21,8 @@ import com.anytypeio.anytype.domain.block.repo.BlockRepository import com.anytypeio.anytype.domain.config.Gateway import com.anytypeio.anytype.domain.dataview.interactor.ObjectRelationList import com.anytypeio.anytype.domain.misc.UrlBuilder +import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations +import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations import com.anytypeio.anytype.mocking.MockDataFactory import com.anytypeio.anytype.presentation.page.Editor import com.anytypeio.anytype.presentation.page.editor.DetailModificationManager @@ -64,6 +66,8 @@ class ObjectRelationListTest { private lateinit var objectRelationList: ObjectRelationList private lateinit var updateDetail: UpdateDetail + private lateinit var addToFeaturedRelations: AddToFeaturedRelations + private lateinit var removeFromFeaturedRelations: RemoveFromFeaturedRelations private val ctx = MockDataFactory.randomUuid() private val storage = Editor.Storage() @@ -76,13 +80,17 @@ class ObjectRelationListTest { urlBuilder = UrlBuilder(gateway) objectRelationList = ObjectRelationList(repo) updateDetail = UpdateDetail(repo) + addToFeaturedRelations = AddToFeaturedRelations(repo) + removeFromFeaturedRelations = RemoveFromFeaturedRelations(repo) TestRelationListFragment.testVmFactory = ObjectRelationListViewModelFactory( stores = storage, urlBuilder = urlBuilder, objectRelationList = objectRelationList, dispatcher = dispatcher, detailModificationManager = detailModificationManager, - updateDetail = updateDetail + updateDetail = updateDetail, + addToFeaturedRelations = addToFeaturedRelations, + removeFromFeaturedRelations = removeFromFeaturedRelations ) } diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/DashboardDi.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/DashboardDi.kt index b15c53f5b4..9cc0fd3da7 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/DashboardDi.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/DashboardDi.kt @@ -60,7 +60,8 @@ object HomeDashboardModule { searchRecentObjects: SearchRecentObjects, searchInboxObjects: SearchInboxObjects, searchObjectSets: SearchObjectSets, - getFlavourConfig: GetFlavourConfig + getFlavourConfig: GetFlavourConfig, + urlBuilder: UrlBuilder ): HomeDashboardViewModelFactory = HomeDashboardViewModelFactory( getProfile = getProfile, openDashboard = openDashboard, @@ -76,7 +77,8 @@ object HomeDashboardModule { searchInboxObjects = searchInboxObjects, searchObjectSets = searchObjectSets, analytics = analytics, - getFlavourConfig = getFlavourConfig + getFlavourConfig = getFlavourConfig, + urlBuilder = urlBuilder ) @JvmStatic diff --git a/app/src/main/java/com/anytypeio/anytype/ui/desktop/DashboardAdapter.kt b/app/src/main/java/com/anytypeio/anytype/ui/desktop/DashboardAdapter.kt index e248695504..1cd896038a 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/desktop/DashboardAdapter.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/desktop/DashboardAdapter.kt @@ -15,10 +15,8 @@ import com.anytypeio.anytype.core_utils.ext.invisible import com.anytypeio.anytype.core_utils.ext.shift import com.anytypeio.anytype.core_utils.ext.typeOf import com.anytypeio.anytype.core_utils.ext.visible -import com.anytypeio.anytype.emojifier.Emojifier +import com.anytypeio.anytype.presentation.`object`.ObjectIcon import com.anytypeio.anytype.presentation.desktop.DashboardView -import com.bumptech.glide.Glide -import com.bumptech.glide.load.engine.DiskCacheStrategy import com.facebook.shimmer.ShimmerFrameLayout import kotlinx.android.synthetic.main.item_dashboard_card_default.view.* import kotlinx.android.synthetic.main.item_desktop_archive.view.* @@ -137,8 +135,7 @@ class DashboardAdapter( with(holder) { bindTitle(item.title) bindSubtitle(item.typeName) - bindEmoji(item.emoji) - bindImage(item.image, item.layout, item.title) + bindIcon(item.icon) bindLoading(item.isLoading) } } @@ -159,7 +156,7 @@ class DashboardAdapter( with(holder) { val item = data[position] as DashboardView.ObjectSet bindTitle(item.title) - bindEmoji(item.emoji) + bindIcon(item.icon) bindLoading(item.isLoading) } } @@ -217,10 +214,10 @@ class DashboardAdapter( bindTitle(item.title) } if (payload.emojiChanged()) { - bindEmoji(item.emoji) + bindIcon(item.icon) } if (payload.imageChanged()) { - bindImage(item.image, item.layout, item.title) + bindIcon(item.icon) } if (payload.isLoadingChanged) { bindLoading(item.isLoading) @@ -259,10 +256,6 @@ class DashboardAdapter( private val tvTitle = itemView.title private val tvSubtitle = itemView.typeTitle - private val ivEmoji = itemView.emojiIcon - private val circleImage = itemView.circleImage - private val rectangleImage = itemView.rectangleImage - private val avatar = itemView.avatar private val shimmer = itemView.shimmer fun bindTitle(title: String?) { @@ -276,6 +269,10 @@ class DashboardAdapter( tvSubtitle.text = subtitle } + fun bindIcon(icon: ObjectIcon) { + itemView.iconWidget.bind(icon) + } + fun bindLoading(isLoading: Boolean) { if (isLoading) { tvTitle.invisible() @@ -287,65 +284,6 @@ class DashboardAdapter( tvTitle.visible() } } - - fun bindEmoji(emoji: String?) { - try { - emoji?.let { unicode -> - Glide - .with(ivEmoji) - .load(Emojifier.uri(unicode)) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .into(ivEmoji) - } ?: run { - ivEmoji.setImageDrawable(null) - } - } catch (e: Throwable) { - Timber.e(e, "Could not set emoji icon") - } - } - - fun bindImage( - image: String?, - layout: ObjectType.Layout?, - name: String? - ) { - when (layout) { - ObjectType.Layout.BASIC -> bindRectangleImage(image) - ObjectType.Layout.PROFILE -> { - if (image != null) { - avatar.invisible() - bindCircleImage(image) - } else { - rectangleImage.invisible() - avatar.visible() - avatar.bind(name.orEmpty()) - } - } - else -> Timber.d("Skipping image bound") - } - } - - private fun bindCircleImage(image: String?) { - image?.let { url -> - Glide - .with(circleImage) - .load(url) - .centerInside() - .circleCrop() - .into(circleImage) - } ?: run { circleImage.setImageDrawable(null) } - } - - private fun bindRectangleImage(image: String?) { - Timber.d("Binding rectangle image: $image") - image?.let { url -> - Glide - .with(rectangleImage) - .load(url) - .centerCrop() - .into(rectangleImage) - } ?: run { rectangleImage.setImageDrawable(null) } - } } class DocumentWithoutIconViewHolder(parent: ViewGroup) : ViewHolder( @@ -430,7 +368,6 @@ class DashboardAdapter( class ObjectSetHolder(itemView: View) : ViewHolder(itemView) { private val tvTitle = itemView.title - private val ivEmoji = itemView.emojiIcon private val shimmer = itemView.shimmer fun bindLoading(isLoading: Boolean) { @@ -452,18 +389,8 @@ class DashboardAdapter( tvTitle.text = title } - fun bindEmoji(emoji: String?) { - try { - emoji?.let { unicode -> - Glide - .with(ivEmoji) - .load(Emojifier.uri(unicode)) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .into(ivEmoji) - } - } catch (e: Throwable) { - Timber.e(e, "Could not set emoji icon") - } + fun bindIcon(icon: ObjectIcon) { + itemView.iconWidget.bind(icon) } } } diff --git a/app/src/main/res/layout/item_dashboard_card_default.xml b/app/src/main/res/layout/item_dashboard_card_default.xml index cbba1daa5b..e2687e6a19 100644 --- a/app/src/main/res/layout/item_dashboard_card_default.xml +++ b/app/src/main/res/layout/item_dashboard_card_default.xml @@ -8,59 +8,18 @@ android:background="@drawable/ripple_dashboard_card" app:cardElevation="0dp"> - - - - - - - - - - - - - - - - - + android:layout_marginTop="16dp"/> 32dp 68dp 124dp + 48dp \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 1862a637dd..e80a7fa181 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -154,6 +154,7 @@ end @color/black 13sp + 3