From 43f2d1badf5ccfcb44e67898d1924b83f6a4f3d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Tue, 9 Aug 2022 18:26:48 +0200 Subject: [PATCH] Shared items: Add tab for deck cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deck cards will be opened in the web browser because no specific view exists. Resolves: #2029 Signed-off-by: Tim Krüger --- .../activities/SharedItemsActivity.kt | 12 +-- .../adapters/SharedItemsAdapter.kt | 2 + .../adapters/SharedItemsListViewHolder.kt | 23 +++++- .../adapters/SharedItemsViewHolder.kt | 3 + .../shareditems/model/SharedDeckCardItem.kt | 31 +++++++ .../repositories/SharedItemsRepositoryImpl.kt | 80 ++++++++++++------- app/src/main/res/values/strings.xml | 2 +- 7 files changed, 115 insertions(+), 38 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/shareditems/model/SharedDeckCardItem.kt diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt b/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt index 483dbbeb6..2689e0829 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt @@ -206,12 +206,12 @@ class SharedItemsActivity : AppCompatActivity() { binding.sharedItemsTabs.addTab(tabLocation) } - // if(sharedItemTypes.contains(SharedItemType.DECKCARD)) { - // val tabDeckCard: TabLayout.Tab = binding.sharedItemsTabs.newTab() - // tabDeckCard.tag = SharedItemType.DECKCARD - // tabDeckCard.text = "deckcard" - // binding.sharedItemsTabs.addTab(tabDeckCard) - // } + if (sharedItemTypes.contains(SharedItemType.DECKCARD)) { + val tabDeckCard: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabDeckCard.tag = SharedItemType.DECKCARD + tabDeckCard.setText(R.string.nc_shared_items_deck_card) + binding.sharedItemsTabs.addTab(tabDeckCard) + } if (sharedItemTypes.contains(SharedItemType.OTHER)) { val tabOther: TabLayout.Tab = binding.sharedItemsTabs.newTab() diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsAdapter.kt b/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsAdapter.kt index 0445195ab..ac98b91b1 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsAdapter.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsAdapter.kt @@ -31,6 +31,7 @@ import com.nextcloud.talk.databinding.SharedItemGridBinding import com.nextcloud.talk.databinding.SharedItemListBinding import com.nextcloud.talk.polls.ui.PollMainDialogFragment import com.nextcloud.talk.shareditems.activities.SharedItemsActivity +import com.nextcloud.talk.shareditems.model.SharedDeckCardItem import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedLocationItem @@ -75,6 +76,7 @@ class SharedItemsAdapter( is SharedFileItem -> holder.onBind(item) is SharedLocationItem -> holder.onBind(item) is SharedOtherItem -> holder.onBind(item) + is SharedDeckCardItem -> holder.onBind(item) } } diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsListViewHolder.kt b/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsListViewHolder.kt index be36eb630..d1ec51e09 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsListViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsListViewHolder.kt @@ -32,6 +32,7 @@ import com.facebook.drawee.view.SimpleDraweeView import com.nextcloud.talk.R import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.SharedItemListBinding +import com.nextcloud.talk.shareditems.model.SharedDeckCardItem import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedLocationItem @@ -98,7 +99,6 @@ class SharedItemsListViewHolder( ) clickTarget.setOnClickListener { - val browserIntent = Intent(Intent.ACTION_VIEW, item.geoUri) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) it.context.startActivity(browserIntent) @@ -119,4 +119,25 @@ class SharedItemsListViewHolder( android.graphics.PorterDuff.Mode.SRC_IN ) } + + override fun onBind(item: SharedDeckCardItem) { + super.onBind(item) + + binding.fileName.text = item.name + binding.fileSize.visibility = View.GONE + binding.separator1.visibility = View.GONE + binding.fileDate.text = item.dateTime + binding.actor.text = item.actorName + image.hierarchy.setPlaceholderImage(R.drawable.ic_baseline_location_on_24) + image.setColorFilter( + ContextCompat.getColor(image.context, R.color.high_emphasis_menu_icon), + android.graphics.PorterDuff.Mode.SRC_IN + ) + + clickTarget.setOnClickListener { + val browserIntent = Intent(Intent.ACTION_VIEW, item.link) + browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + it.context.startActivity(browserIntent) + } + } } diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsViewHolder.kt b/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsViewHolder.kt index 0c05be81f..205bbcb7c 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsViewHolder.kt @@ -40,6 +40,7 @@ import com.facebook.imagepipeline.common.RotationOptions import com.facebook.imagepipeline.image.ImageInfo import com.facebook.imagepipeline.request.ImageRequestBuilder import com.nextcloud.talk.data.user.model.User +import com.nextcloud.talk.shareditems.model.SharedDeckCardItem import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedLocationItem @@ -134,6 +135,8 @@ abstract class SharedItemsViewHolder( open fun onBind(item: SharedOtherItem) {} + open fun onBind(item: SharedDeckCardItem) {} + private fun staticImage( mimeType: String?, image: SimpleDraweeView diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedDeckCardItem.kt b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedDeckCardItem.kt new file mode 100644 index 000000000..e5230a126 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedDeckCardItem.kt @@ -0,0 +1,31 @@ +/* + * Nextcloud Talk application + * + * @author Tim Krüger + * Copyright (C) 2022 Tim Krüger + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.nextcloud.talk.shareditems.model + +import android.net.Uri + +data class SharedDeckCardItem( + override val id: String, + override val name: String, + override val actorId: String, + override val actorName: String, + override val dateTime: String, + val link: Uri +) : SharedItem diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/repositories/SharedItemsRepositoryImpl.kt b/app/src/main/java/com/nextcloud/talk/shareditems/repositories/SharedItemsRepositoryImpl.kt index d35ebdd0a..0f1541e2c 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/repositories/SharedItemsRepositoryImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/repositories/SharedItemsRepositoryImpl.kt @@ -28,6 +28,7 @@ import com.nextcloud.talk.R import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.models.json.chat.ChatShareOverall +import com.nextcloud.talk.shareditems.model.SharedDeckCardItem import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedItemType @@ -39,6 +40,7 @@ import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DateUtils import io.reactivex.Observable import retrofit2.Response +import java.util.HashMap import java.util.Locale import javax.inject.Inject @@ -109,36 +111,7 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : ) } else if (it.value.messageParameters?.containsKey("object") == true) { val objectParameters = it.value.messageParameters!!["object"]!! - when (objectParameters["type"]) { - "talk-poll" -> { - items[it.value.id] = SharedPollItem( - objectParameters["id"]!!, - objectParameters["name"]!!, - actorParameters["id"]!!, - actorParameters["name"]!!, - dateTime - ) - } - "geo-location" -> { - items[it.value.id] = SharedLocationItem( - objectParameters["id"]!!, - objectParameters["name"]!!, - actorParameters["id"]!!, - actorParameters["name"]!!, - dateTime, - Uri.parse(objectParameters["id"]!!.replace("geo:", "geo:0,0?z=11&q=")) - ) - } - else -> { - items[it.value.id] = SharedOtherItem( - objectParameters["id"]!!, - objectParameters["name"]!!, - actorParameters["id"]!!, - actorParameters["name"]!!, - dateTime - ) - } - } + items[it.value.id] = itemFromObject(objectParameters, actorParameters, dateTime) } else { Log.w(TAG, "Item contains neither 'file' or 'object'.") } @@ -156,6 +129,53 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : ) } + private fun itemFromObject( + objectParameters: HashMap, + actorParameters: HashMap, + dateTime: String + ): SharedItem { + when (objectParameters["type"]) { + "talk-poll" -> { + return SharedPollItem( + objectParameters["id"]!!, + objectParameters["name"]!!, + actorParameters["id"]!!, + actorParameters["name"]!!, + dateTime + ) + } + "geo-location" -> { + return SharedLocationItem( + objectParameters["id"]!!, + objectParameters["name"]!!, + actorParameters["id"]!!, + actorParameters["name"]!!, + dateTime, + Uri.parse(objectParameters["id"]!!.replace("geo:", "geo:0,0?z=11&q=")) + ) + } + "deck-card" -> { + return SharedDeckCardItem( + objectParameters["id"]!!, + objectParameters["name"]!!, + actorParameters["id"]!!, + actorParameters["name"]!!, + dateTime, + Uri.parse(objectParameters["link"]!!) + ) + } + else -> { + return SharedOtherItem( + objectParameters["id"]!!, + objectParameters["name"]!!, + actorParameters["id"]!!, + actorParameters["name"]!!, + dateTime + ) + } + } + } + override fun availableTypes(parameters: SharedItemsRepository.Parameters): Observable> { val credentials = ApiUtils.getCredentials(parameters.userName, parameters.userToken) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a9e332253..1322cb462 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -431,6 +431,7 @@ Images, files, voice messages … No shared items Location + Deck card Talk recording from %1$s (%2$s) @@ -563,5 +564,4 @@ Call without notification Set avatar from camera -