From 00f06c6ef2668a5db79936d18e1cdc4cb27cdbaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Tue, 26 Jul 2022 18:36:17 +0200 Subject: [PATCH 1/4] Shared items: Add tab for polls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves: #2029 Signed-off-by: Tim Krüger --- .../talk/controllers/ChatController.kt | 4 ++ .../controllers/ConversationInfoController.kt | 1 + .../activities/SharedItemsActivity.kt | 16 +++++++- .../adapters/SharedItemsAdapter.kt | 32 ++++++++++++++- .../adapters/SharedItemsListViewHolder.kt | 24 +++++++++++- .../adapters/SharedItemsViewHolder.kt | 13 +++++-- .../talk/shareditems/model/SharedFileItem.kt | 37 ++++++++++++++++++ .../talk/shareditems/model/SharedItem.kt | 39 +++---------------- .../talk/shareditems/model/SharedItemType.kt | 3 +- .../{SharedMediaItems.kt => SharedItems.kt} | 3 +- .../talk/shareditems/model/SharedPollItem.kt | 27 +++++++++++++ .../repositories/SharedItemsRepository.kt | 6 +-- .../repositories/SharedItemsRepositoryImpl.kt | 33 ++++++++++++---- .../viewmodels/SharedItemsViewModel.kt | 15 +++---- app/src/main/res/layout/shared_item_list.xml | 6 ++- app/src/main/res/values/strings.xml | 1 + 16 files changed, 196 insertions(+), 64 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/shareditems/model/SharedFileItem.kt rename app/src/main/java/com/nextcloud/talk/shareditems/model/{SharedMediaItems.kt => SharedItems.kt} (95%) create mode 100644 app/src/main/java/com/nextcloud/talk/shareditems/model/SharedPollItem.kt diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index 48a7fc96e..864ebbcf1 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -2557,6 +2557,10 @@ class ChatController(args: Bundle) : intent.putExtra(KEY_CONVERSATION_NAME, currentConversation?.displayName) intent.putExtra(KEY_ROOM_TOKEN, roomToken) intent.putExtra(KEY_USER_ENTITY, conversationUser as Parcelable) + intent.putExtra( + SharedItemsActivity.KEY_USER_IS_OWNER_OR_MODERATOR, + currentConversation?.isParticipantOwnerOrModerator + ) activity!!.startActivity(intent) } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index b53196180..f3d49fcd6 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -192,6 +192,7 @@ class ConversationInfoController(args: Bundle) : intent.putExtra(BundleKeys.KEY_CONVERSATION_NAME, conversation?.displayName) intent.putExtra(BundleKeys.KEY_ROOM_TOKEN, conversationToken) intent.putExtra(BundleKeys.KEY_USER_ENTITY, conversationUser as Parcelable) + intent.putExtra(SharedItemsActivity.KEY_USER_IS_OWNER_OR_MODERATOR, conversation?.isParticipantOwnerOrModerator) activity!!.startActivity(intent) } 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 41ead5a20..dabd5d1db 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 @@ -63,6 +63,7 @@ class SharedItemsActivity : AppCompatActivity() { val roomToken = intent.getStringExtra(KEY_ROOM_TOKEN)!! val conversationName = intent.getStringExtra(KEY_CONVERSATION_NAME) val user = intent.getParcelableExtra(KEY_USER_ENTITY)!! + val isUserConversationOwnerOrModerator = intent.getBooleanExtra(KEY_USER_IS_OWNER_OR_MODERATOR, false) binding = ActivitySharedItemsBinding.inflate(layoutInflater) setSupportActionBar(binding.sharedItemsToolbar) @@ -104,7 +105,12 @@ class SharedItemsActivity : AppCompatActivity() { LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) } - val adapter = SharedItemsAdapter(showGrid, user).apply { + val adapter = SharedItemsAdapter( + showGrid, + user, + roomToken, + isUserConversationOwnerOrModerator + ).apply { items = sharedMediaItems.items } binding.imageRecycler.adapter = adapter @@ -176,6 +182,13 @@ class SharedItemsActivity : AppCompatActivity() { binding.sharedItemsTabs.addTab(tabVoice) } + if (sharedItemTypes.contains(SharedItemType.POLL)) { + val tabVoice: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabVoice.tag = SharedItemType.POLL + tabVoice.setText(R.string.shared_items_poll) + binding.sharedItemsTabs.addTab(tabVoice) + } + // if(sharedItemTypes.contains(SharedItemType.LOCATION)) { // val tabLocation: TabLayout.Tab = binding.sharedItemsTabs.newTab() // tabLocation.tag = SharedItemType.LOCATION @@ -220,5 +233,6 @@ class SharedItemsActivity : AppCompatActivity() { companion object { private val TAG = SharedItemsActivity::class.simpleName const val SPAN_COUNT: Int = 4 + const val KEY_USER_IS_OWNER_OR_MODERATOR = "userIsOwnerOrModerator" } } 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 c72f32a8b..5784b90df 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 @@ -22,17 +22,24 @@ package com.nextcloud.talk.shareditems.adapters +import android.content.Context import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.nextcloud.talk.data.user.model.User 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.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem +import com.nextcloud.talk.shareditems.model.SharedPollItem class SharedItemsAdapter( private val showGrid: Boolean, - private val user: User + private val user: User, + private val roomToken: String, + private val isUserConversationOwnerOrModerator: Boolean ) : RecyclerView.Adapter() { var items: List = emptyList() @@ -61,10 +68,31 @@ class SharedItemsAdapter( } override fun onBindViewHolder(holder: SharedItemsViewHolder, position: Int) { - holder.onBind(items[position]) + when (val item = items[position]) { + is SharedPollItem -> holder.onBind(item, ::showPoll) + is SharedFileItem -> holder.onBind(item) + } } override fun getItemCount(): Int { return items.size } + + private fun showPoll(item: SharedItem, context: Context) { + val pollVoteDialog = PollMainDialogFragment.newInstance( + user, + roomToken, + isUserConversationOwnerOrModerator, + item.id, + item.name + ) + pollVoteDialog.show( + (context as SharedItemsActivity).supportFragmentManager, + TAG + ) + } + + companion object { + private val TAG = SharedItemsAdapter::class.simpleName + } } 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 0f8e29423..1c1db0947 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 @@ -22,13 +22,18 @@ package com.nextcloud.talk.shareditems.adapters +import android.content.Context import android.text.format.Formatter import android.view.View import android.widget.ProgressBar +import androidx.core.content.ContextCompat 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.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem +import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.DateUtils class SharedItemsListViewHolder( @@ -43,12 +48,12 @@ class SharedItemsListViewHolder( override val progressBar: ProgressBar get() = binding.progressBar - override fun onBind(item: SharedItem) { + override fun onBind(item: SharedFileItem) { super.onBind(item) binding.fileName.text = item.name - binding.fileSize.text = item.fileSize?.let { + binding.fileSize.text = item.fileSize.let { Formatter.formatShortFileSize( binding.fileSize.context, it @@ -59,6 +64,21 @@ class SharedItemsListViewHolder( ) } + override fun onBind(item: SharedPollItem, showPoll: (item: SharedItem, context: Context) -> Unit) { + super.onBind(item, showPoll) + + binding.fileName.text = item.name + binding.fileMetadata.visibility = View.GONE + image.hierarchy.setPlaceholderImage(R.drawable.ic_baseline_bar_chart_24) + image.setColorFilter( + ContextCompat.getColor(image.context, R.color.high_emphasis_menu_icon), + android.graphics.PorterDuff.Mode.SRC_IN + ) + clickTarget.setOnClickListener { + showPoll(item, it.context) + } + } + companion object { private const val ONE_SECOND_IN_MILLIS = 1000 } 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 ee9d12be9..47dad1d85 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 @@ -22,6 +22,7 @@ package com.nextcloud.talk.shareditems.adapters +import android.content.Context import android.graphics.drawable.Drawable import android.net.Uri import android.util.Log @@ -39,14 +40,16 @@ 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.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem +import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DrawableUtils import com.nextcloud.talk.utils.FileViewerUtils abstract class SharedItemsViewHolder( open val binding: ViewBinding, - private val user: User + internal val user: User ) : RecyclerView.ViewHolder(binding.root) { companion object { @@ -64,9 +67,9 @@ abstract class SharedItemsViewHolder( ) ) - open fun onBind(item: SharedItem) { + open fun onBind(item: SharedFileItem) { image.hierarchy.setPlaceholderImage(staticImage(item.mimeType, image)) - if (item.previewAvailable == true) { + if (item.previewAvailable) { image.controller = configurePreview(item) } @@ -100,7 +103,7 @@ abstract class SharedItemsViewHolder( ) } - private fun configurePreview(item: SharedItem): DraweeController { + private fun configurePreview(item: SharedFileItem): DraweeController { val imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(item.previewLink)) .setProgressiveRenderingEnabled(true) @@ -123,6 +126,8 @@ abstract class SharedItemsViewHolder( .build() } + open fun onBind(item: SharedPollItem, showPoll: (item: SharedItem, context: Context) -> Unit) {} + private fun staticImage( mimeType: String?, image: SimpleDraweeView diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedFileItem.kt b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedFileItem.kt new file mode 100644 index 000000000..2366b7e13 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedFileItem.kt @@ -0,0 +1,37 @@ +/* + * Nextcloud Talk application + * + * @author Tim Krüger + * @author Álvaro Brey + * Copyright (C) 2022 Álvaro Brey + * 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 + +data class SharedFileItem( + override val id: String, + override val name: String, + override val actorId: String, + override val actorName: String, + val fileSize: Long, + val date: Long, + val path: String, + val link: String, + val mimeType: String, + val previewAvailable: Boolean = false, + val previewLink: String +) : SharedItem diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItem.kt b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItem.kt index 3a7033fe4..5c577b4c4 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItem.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItem.kt @@ -1,35 +1,8 @@ -/* - * Nextcloud Talk application - * - * @author Tim Krüger - * @author Álvaro Brey - * Copyright (C) 2022 Álvaro Brey - * 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 -data class SharedItem( - val id: String, - val name: String, - val fileSize: Long?, - val date: Long, - val path: String, - val link: String?, - val mimeType: String?, - val previewAvailable: Boolean?, - val previewLink: String -) +interface SharedItem { + val id: String + val name: String + val actorId: String + val actorName: String +} diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItemType.kt b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItemType.kt index caedd4c02..622e09642 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItemType.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItemType.kt @@ -32,7 +32,8 @@ enum class SharedItemType { VOICE, LOCATION, DECKCARD, - OTHER; + OTHER, + POLL; companion object { fun typeFor(name: String) = valueOf(name.uppercase(Locale.ROOT)) diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedMediaItems.kt b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItems.kt similarity index 95% rename from app/src/main/java/com/nextcloud/talk/shareditems/model/SharedMediaItems.kt rename to app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItems.kt index ef891ffc7..d15d932ae 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedMediaItems.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedItems.kt @@ -22,8 +22,9 @@ package com.nextcloud.talk.shareditems.model -class SharedMediaItems( +class SharedItems( val items: List, + val type: SharedItemType, var lastSeenId: Int?, var moreItemsExisting: Boolean ) diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedPollItem.kt b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedPollItem.kt new file mode 100644 index 000000000..367aba189 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedPollItem.kt @@ -0,0 +1,27 @@ +/* + * 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 + +data class SharedPollItem( + override val id: String, + override val name: String, + override val actorId: String, + override val actorName: String, +) : SharedItem diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/repositories/SharedItemsRepository.kt b/app/src/main/java/com/nextcloud/talk/shareditems/repositories/SharedItemsRepository.kt index 62f69beee..89353f611 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/repositories/SharedItemsRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/repositories/SharedItemsRepository.kt @@ -23,7 +23,7 @@ package com.nextcloud.talk.shareditems.repositories import com.nextcloud.talk.shareditems.model.SharedItemType -import com.nextcloud.talk.shareditems.model.SharedMediaItems +import com.nextcloud.talk.shareditems.model.SharedItems import io.reactivex.Observable interface SharedItemsRepository { @@ -31,13 +31,13 @@ interface SharedItemsRepository { fun media( parameters: Parameters, type: SharedItemType - ): Observable? + ): Observable? fun media( parameters: Parameters, type: SharedItemType, lastKnownMessageId: Int? - ): Observable? + ): Observable? fun availableTypes(parameters: Parameters): Observable> 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 22745b088..02131f050 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 @@ -27,9 +27,11 @@ 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.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedItemType -import com.nextcloud.talk.shareditems.model.SharedMediaItems +import com.nextcloud.talk.shareditems.model.SharedItems +import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.ApiUtils import io.reactivex.Observable import retrofit2.Response @@ -41,7 +43,7 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : override fun media( parameters: SharedItemsRepository.Parameters, type: SharedItemType - ): Observable? { + ): Observable? { return media(parameters, type, null) } @@ -49,7 +51,7 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : parameters: SharedItemsRepository.Parameters, type: SharedItemType, lastKnownMessageId: Int? - ): Observable? { + ): Observable? { val credentials = ApiUtils.getCredentials(parameters.userName, parameters.userToken) return ncApi.getSharedItems( @@ -58,13 +60,14 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : type.toString().lowercase(Locale.ROOT), lastKnownMessageId, BATCH_SIZE - ).map { map(it, parameters) } + ).map { map(it, parameters, type) } } private fun map( response: Response, - parameters: SharedItemsRepository.Parameters - ): SharedMediaItems { + parameters: SharedItemsRepository.Parameters, + type: SharedItemType + ): SharedItems { var chatLastGiven: Int? = null val items = mutableMapOf() @@ -76,15 +79,18 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : val mediaItems = response.body()!!.ocs!!.data if (mediaItems != null) { for (it in mediaItems) { + val actorParameters = it.value.messageParameters!!["actor"]!! if (it.value.messageParameters?.containsKey("file") == true) { val fileParameters = it.value.messageParameters!!["file"]!! val previewAvailable = "yes".equals(fileParameters["preview-available"]!!, ignoreCase = true) - items[it.value.id] = SharedItem( + items[it.value.id] = SharedFileItem( fileParameters["id"]!!, fileParameters["name"]!!, + actorParameters["id"]!!, + actorParameters["name"]!!, fileParameters["size"]!!.toLong(), it.value.timestamp, fileParameters["path"]!!, @@ -93,6 +99,16 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : previewAvailable, previewLink(fileParameters["id"], parameters.baseUrl) ) + } else if (it.value.messageParameters?.containsKey("object") == true) { + val objectParameters = it.value.messageParameters!!["object"]!! + if ("talk-poll" == objectParameters["type"]) { + items[it.value.id] = SharedPollItem( + objectParameters["id"]!!, + objectParameters["name"]!!, + actorParameters["id"]!!, + actorParameters["name"]!! + ) + } } else { Log.w(TAG, "location and deckcard are not yet supported") } @@ -102,8 +118,9 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : val sortedMutableItems = items.toSortedMap().values.toList().reversed().toMutableList() val moreItemsExisting = items.count() == BATCH_SIZE - return SharedMediaItems( + return SharedItems( sortedMutableItems, + type, chatLastGiven, moreItemsExisting ) diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/viewmodels/SharedItemsViewModel.kt b/app/src/main/java/com/nextcloud/talk/shareditems/viewmodels/SharedItemsViewModel.kt index 3189411dc..d5d7b81f0 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/viewmodels/SharedItemsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/viewmodels/SharedItemsViewModel.kt @@ -28,7 +28,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.shareditems.model.SharedItemType -import com.nextcloud.talk.shareditems.model.SharedMediaItems +import com.nextcloud.talk.shareditems.model.SharedItems import com.nextcloud.talk.shareditems.repositories.SharedItemsRepository import io.reactivex.Observer import io.reactivex.android.schedulers.AndroidSchedulers @@ -50,7 +50,7 @@ class SharedItemsViewModel @Inject constructor( class LoadingItemsState(types: Set, selectedType: SharedItemType) : TypesLoadedState(types, selectedType) - class LoadedState(types: Set, selectedType: SharedItemType, val items: SharedMediaItems) : + class LoadedState(types: Set, selectedType: SharedItemType, val items: SharedItems) : TypesLoadedState(types, selectedType) private val _viewState: MutableLiveData = MutableLiveData(InitialState) @@ -128,13 +128,13 @@ class SharedItemsViewModel @Inject constructor( } } - inner class SharedMediaItemsObserver : Observer { + inner class SharedMediaItemsObserver : Observer { - var newSharedItems: SharedMediaItems? = null + var newSharedItems: SharedItems? = null override fun onSubscribe(d: Disposable) = Unit - override fun onNext(response: SharedMediaItems) { + override fun onNext(response: SharedItems) { newSharedItems = response } @@ -148,8 +148,9 @@ class SharedItemsViewModel @Inject constructor( if (state is LoadedState) { val oldItems = state.items.items val newItems = - SharedMediaItems( + SharedItems( oldItems + newSharedItems!!.items, + state.items.type, newSharedItems!!.lastSeenId, newSharedItems!!.moreItemsExisting ) @@ -159,7 +160,7 @@ class SharedItemsViewModel @Inject constructor( } } - private fun setCurrentState(items: SharedMediaItems) { + private fun setCurrentState(items: SharedItems) { when (val state = this@SharedItemsViewModel._viewState.value) { is TypesLoadedState -> { this@SharedItemsViewModel._viewState.value = LoadedState( diff --git a/app/src/main/res/layout/shared_item_list.xml b/app/src/main/res/layout/shared_item_list.xml index fe7313e75..81c680408 100644 --- a/app/src/main/res/layout/shared_item_list.xml +++ b/app/src/main/res/layout/shared_item_list.xml @@ -78,6 +78,7 @@ tools:text="Filename.md" /> @@ -91,12 +92,13 @@ tools:text="11 KB" /> + tools:text="04-05-2022 21:16" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0860f900d..7afb88779 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -523,6 +523,7 @@ Audio Voice Other + Poll Messages From d5214ee29c193e0756210a44f4f99b02efea5e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Thu, 28 Jul 2022 18:01:55 +0200 Subject: [PATCH 2/4] Replace '@JvmField' with 'lateinit' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tim Krüger --- .../talk/controllers/ConversationInfoController.kt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index f3d49fcd6..866a5024f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -107,12 +107,10 @@ class ConversationInfoController(args: Bundle) : private val binding: ControllerConversationInfoBinding by viewBinding(ControllerConversationInfoBinding::bind) @Inject - @JvmField - var ncApi: NcApi? = null + lateinit var ncApi: NcApi @Inject - @JvmField - var eventBus: EventBus? = null + lateinit var eventBus: EventBus private val conversationToken: String? private val conversationUser: User? @@ -162,7 +160,7 @@ class ConversationInfoController(args: Bundle) : override fun onAttach(view: View) { super.onAttach(view) - eventBus?.register(this) + eventBus.register(this) if (databaseStorageModule == null) { databaseStorageModule = DatabaseStorageModule(conversationUser!!, conversationToken) From 26fde13292c75a88747d884f9197916ad64a5efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Mon, 8 Aug 2022 18:50:10 +0200 Subject: [PATCH 3/4] Shared items: Add tab for locations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves: #2029 Signed-off-by: Tim Krüger --- .../activities/SharedItemsActivity.kt | 90 ++++++++++--------- .../adapters/SharedItemsAdapter.kt | 2 + .../adapters/SharedItemsListViewHolder.kt | 21 +++++ .../adapters/SharedItemsViewHolder.kt | 3 + .../shareditems/model/SharedLocationItem.kt | 30 +++++++ .../repositories/SharedItemsRepositoryImpl.kt | 29 ++++-- app/src/main/res/values/strings.xml | 1 + 7 files changed, 128 insertions(+), 48 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/shareditems/model/SharedLocationItem.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 dabd5d1db..2392346bd 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 @@ -86,40 +86,7 @@ class SharedItemsActivity : AppCompatActivity() { viewModel = ViewModelProvider(this, viewModelFactory)[SharedItemsViewModel::class.java] viewModel.viewState.observe(this) { state -> - clearEmptyLoading() - when (state) { - is SharedItemsViewModel.LoadingItemsState, SharedItemsViewModel.InitialState -> { - showLoading() - } - is SharedItemsViewModel.NoSharedItemsState -> { - showEmpty() - } - is SharedItemsViewModel.LoadedState -> { - val sharedMediaItems = state.items - Log.d(TAG, "Items received: $sharedMediaItems") - - val showGrid = state.selectedType == SharedItemType.MEDIA - val layoutManager = if (showGrid) { - GridLayoutManager(this, SPAN_COUNT) - } else { - LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) - } - - val adapter = SharedItemsAdapter( - showGrid, - user, - roomToken, - isUserConversationOwnerOrModerator - ).apply { - items = sharedMediaItems.items - } - binding.imageRecycler.adapter = adapter - binding.imageRecycler.layoutManager = layoutManager - } - is SharedItemsViewModel.TypesLoadedState -> { - initTabs(state.types) - } - } + handleModelChange(state, user, roomToken, isUserConversationOwnerOrModerator) } binding.imageRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() { @@ -134,6 +101,49 @@ class SharedItemsActivity : AppCompatActivity() { viewModel.initialize(user, roomToken) } + private fun handleModelChange( + state: SharedItemsViewModel.ViewState?, + user: User, + roomToken: String, + isUserConversationOwnerOrModerator: Boolean + ) { + clearEmptyLoading() + when (state) { + is SharedItemsViewModel.LoadingItemsState, SharedItemsViewModel.InitialState -> { + showLoading() + } + is SharedItemsViewModel.NoSharedItemsState -> { + showEmpty() + } + is SharedItemsViewModel.LoadedState -> { + val sharedMediaItems = state.items + Log.d(TAG, "Items received: $sharedMediaItems") + + val showGrid = state.selectedType == SharedItemType.MEDIA + val layoutManager = if (showGrid) { + GridLayoutManager(this, SPAN_COUNT) + } else { + LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) + } + + val adapter = SharedItemsAdapter( + showGrid, + user, + roomToken, + isUserConversationOwnerOrModerator + ).apply { + items = sharedMediaItems.items + } + binding.imageRecycler.adapter = adapter + binding.imageRecycler.layoutManager = layoutManager + } + is SharedItemsViewModel.TypesLoadedState -> { + initTabs(state.types) + } + else -> {} + } + } + private fun clearEmptyLoading() { binding.sharedItemsTabs.visibility = View.VISIBLE binding.emptyContainer.emptyListView.visibility = View.GONE @@ -189,12 +199,12 @@ class SharedItemsActivity : AppCompatActivity() { binding.sharedItemsTabs.addTab(tabVoice) } - // if(sharedItemTypes.contains(SharedItemType.LOCATION)) { - // val tabLocation: TabLayout.Tab = binding.sharedItemsTabs.newTab() - // tabLocation.tag = SharedItemType.LOCATION - // tabLocation.text = "location" - // binding.sharedItemsTabs.addTab(tabLocation) - // } + if (sharedItemTypes.contains(SharedItemType.LOCATION)) { + val tabLocation: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabLocation.tag = SharedItemType.LOCATION + tabLocation.setText(R.string.nc_shared_items_location) + binding.sharedItemsTabs.addTab(tabLocation) + } // if(sharedItemTypes.contains(SharedItemType.DECKCARD)) { // val tabDeckCard: 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 5784b90df..47a7e44a4 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 @@ -33,6 +33,7 @@ import com.nextcloud.talk.polls.ui.PollMainDialogFragment import com.nextcloud.talk.shareditems.activities.SharedItemsActivity import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem +import com.nextcloud.talk.shareditems.model.SharedLocationItem import com.nextcloud.talk.shareditems.model.SharedPollItem class SharedItemsAdapter( @@ -71,6 +72,7 @@ class SharedItemsAdapter( when (val item = items[position]) { is SharedPollItem -> holder.onBind(item, ::showPoll) is SharedFileItem -> holder.onBind(item) + is SharedLocationItem -> 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 1c1db0947..4dc88fc33 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 @@ -23,6 +23,7 @@ package com.nextcloud.talk.shareditems.adapters import android.content.Context +import android.content.Intent import android.text.format.Formatter import android.view.View import android.widget.ProgressBar @@ -33,6 +34,7 @@ import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.SharedItemListBinding import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem +import com.nextcloud.talk.shareditems.model.SharedLocationItem import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.DateUtils @@ -79,6 +81,25 @@ class SharedItemsListViewHolder( } } + override fun onBind(item: SharedLocationItem) { + super.onBind(item) + + binding.fileName.text = item.name + binding.fileMetadata.visibility = View.GONE + 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.geoUri) + browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + it.context.startActivity(browserIntent) + } + } + companion object { private const val ONE_SECOND_IN_MILLIS = 1000 } 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 47dad1d85..1cf78f8ad 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 @@ -42,6 +42,7 @@ import com.facebook.imagepipeline.request.ImageRequestBuilder import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem +import com.nextcloud.talk.shareditems.model.SharedLocationItem import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DrawableUtils @@ -128,6 +129,8 @@ abstract class SharedItemsViewHolder( open fun onBind(item: SharedPollItem, showPoll: (item: SharedItem, context: Context) -> Unit) {} + open fun onBind(item: SharedLocationItem) {} + private fun staticImage( mimeType: String?, image: SimpleDraweeView diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedLocationItem.kt b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedLocationItem.kt new file mode 100644 index 000000000..2d5c6ea2b --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedLocationItem.kt @@ -0,0 +1,30 @@ +/* + * 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 SharedLocationItem( + override val id: String, + override val name: String, + override val actorId: String, + override val actorName: String, + val geoUri: 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 02131f050..c3babb654 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 @@ -22,6 +22,7 @@ package com.nextcloud.talk.shareditems.repositories +import android.net.Uri import android.util.Log import com.nextcloud.talk.R import com.nextcloud.talk.api.NcApi @@ -31,6 +32,7 @@ import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedItemType import com.nextcloud.talk.shareditems.model.SharedItems +import com.nextcloud.talk.shareditems.model.SharedLocationItem import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.ApiUtils import io.reactivex.Observable @@ -101,16 +103,27 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : ) } else if (it.value.messageParameters?.containsKey("object") == true) { val objectParameters = it.value.messageParameters!!["object"]!! - if ("talk-poll" == objectParameters["type"]) { - items[it.value.id] = SharedPollItem( - objectParameters["id"]!!, - objectParameters["name"]!!, - actorParameters["id"]!!, - actorParameters["name"]!! - ) + when (objectParameters["type"]) { + "talk-poll" -> { + items[it.value.id] = SharedPollItem( + objectParameters["id"]!!, + objectParameters["name"]!!, + actorParameters["id"]!!, + actorParameters["name"]!! + ) + } + "geo-location" -> { + items[it.value.id] = SharedLocationItem( + objectParameters["id"]!!, + objectParameters["name"]!!, + actorParameters["id"]!!, + actorParameters["name"]!!, + Uri.parse(objectParameters["id"]!!.replace("geo:", "geo:0,0?z=11&q=")) + ) + } } } else { - Log.w(TAG, "location and deckcard are not yet supported") + Log.w(TAG, "Item contains neither 'file' or 'object'.") } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7afb88779..a9e332253 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -430,6 +430,7 @@ Shared items Images, files, voice messages … No shared items + Location Talk recording from %1$s (%2$s) From 81a3e8216dd947abfe1038a5ab040f9c67d3a62b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Tue, 9 Aug 2022 14:00:00 +0200 Subject: [PATCH 4/4] Shared items: Add tab for other MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves: #2029 Signed-off-by: Tim Krüger --- .../activities/SharedItemsActivity.kt | 12 ++++----- .../adapters/SharedItemsAdapter.kt | 2 ++ .../adapters/SharedItemsListViewHolder.kt | 13 +++++++++ .../adapters/SharedItemsViewHolder.kt | 3 +++ .../talk/shareditems/model/SharedOtherItem.kt | 27 +++++++++++++++++++ .../repositories/SharedItemsRepositoryImpl.kt | 9 +++++++ 6 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/shareditems/model/SharedOtherItem.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 2392346bd..483dbbeb6 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 @@ -213,12 +213,12 @@ class SharedItemsActivity : AppCompatActivity() { // binding.sharedItemsTabs.addTab(tabDeckCard) // } - // if(sharedItemTypes.contains(SharedItemType.OTHER)) { - // val tabOther: TabLayout.Tab = binding.sharedItemsTabs.newTab() - // tabOther.tag = SharedItemType.OTHER - // tabOther.setText(R.string.shared_items_other) - // binding.sharedItemsTabs.addTab(tabOther) - // } + if (sharedItemTypes.contains(SharedItemType.OTHER)) { + val tabOther: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabOther.tag = SharedItemType.OTHER + tabOther.setText(R.string.shared_items_other) + binding.sharedItemsTabs.addTab(tabOther) + } binding.sharedItemsTabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { 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 47a7e44a4..0445195ab 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 @@ -34,6 +34,7 @@ import com.nextcloud.talk.shareditems.activities.SharedItemsActivity import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedLocationItem +import com.nextcloud.talk.shareditems.model.SharedOtherItem import com.nextcloud.talk.shareditems.model.SharedPollItem class SharedItemsAdapter( @@ -73,6 +74,7 @@ class SharedItemsAdapter( is SharedPollItem -> holder.onBind(item, ::showPoll) is SharedFileItem -> holder.onBind(item) is SharedLocationItem -> holder.onBind(item) + is SharedOtherItem -> 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 4dc88fc33..28195e0ee 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 @@ -35,6 +35,7 @@ import com.nextcloud.talk.databinding.SharedItemListBinding import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedLocationItem +import com.nextcloud.talk.shareditems.model.SharedOtherItem import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.DateUtils @@ -100,6 +101,18 @@ class SharedItemsListViewHolder( } } + override fun onBind(item: SharedOtherItem) { + super.onBind(item) + + binding.fileName.text = item.name + binding.fileMetadata.visibility = View.GONE + image.hierarchy.setPlaceholderImage(R.drawable.ic_mimetype_file) + image.setColorFilter( + ContextCompat.getColor(image.context, R.color.high_emphasis_menu_icon), + android.graphics.PorterDuff.Mode.SRC_IN + ) + } + companion object { private const val ONE_SECOND_IN_MILLIS = 1000 } 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 1cf78f8ad..0c05be81f 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 @@ -43,6 +43,7 @@ import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.shareditems.model.SharedFileItem import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedLocationItem +import com.nextcloud.talk.shareditems.model.SharedOtherItem import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DrawableUtils @@ -131,6 +132,8 @@ abstract class SharedItemsViewHolder( open fun onBind(item: SharedLocationItem) {} + open fun onBind(item: SharedOtherItem) {} + private fun staticImage( mimeType: String?, image: SimpleDraweeView diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedOtherItem.kt b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedOtherItem.kt new file mode 100644 index 000000000..7d3ae324a --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/shareditems/model/SharedOtherItem.kt @@ -0,0 +1,27 @@ +/* + * 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 + +data class SharedOtherItem( + override val id: String, + override val name: String, + override val actorId: String, + override val actorName: String, +) : 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 c3babb654..f2d669560 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 @@ -33,6 +33,7 @@ import com.nextcloud.talk.shareditems.model.SharedItem import com.nextcloud.talk.shareditems.model.SharedItemType import com.nextcloud.talk.shareditems.model.SharedItems import com.nextcloud.talk.shareditems.model.SharedLocationItem +import com.nextcloud.talk.shareditems.model.SharedOtherItem import com.nextcloud.talk.shareditems.model.SharedPollItem import com.nextcloud.talk.utils.ApiUtils import io.reactivex.Observable @@ -121,6 +122,14 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi) : 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"]!! + ) + } } } else { Log.w(TAG, "Item contains neither 'file' or 'object'.")