Skip to content

Commit e23c47c

Browse files
committed
feat: adapt shortcuts to Compose conversation operations sheet
Upstream migrated the conversation bottom dialog to a Compose ModalBottomSheet. Adapt our shortcut features to the new architecture: - Add AddToHomeScreen action to ConversationOpsAction sealed class - Add "Add to home screen" menu item in ConversationOperationsSheet - Wire handler in ConversationsListActivity.handleConversationOpsAction - Fix back-stack: pass KEY_INTERNAL_USER_ID to ConversationsListActivity via intent so it reads the correct user from DB instead of stale cache Signed-off-by: angrymuesli <github.visibly626@slmails.com>
1 parent 41baf6f commit e23c47c

5 files changed

Lines changed: 38 additions & 5 deletions

File tree

app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,6 @@ class MainActivity :
298298
private fun handleDeepLink(intent: Intent): Boolean {
299299
val deepLinkResult = intent.data?.let { DeepLinkHandler.parseDeepLink(it) } ?: return false
300300

301-
Log.d(TAG, "Handling deep link: token=${deepLinkResult.roomToken}, server=${deepLinkResult.serverUrl}")
302-
303301
val disposable = userManager.users
304302
.subscribeOn(Schedulers.io())
305303
.observeOn(AndroidSchedulers.mainThread())
@@ -339,6 +337,7 @@ class MainActivity :
339337
// Open conversation list first so back press shows correct user's conversations
340338
val listIntent = Intent(context, ConversationsListActivity::class.java)
341339
listIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
340+
listIntent.putExtra(BundleKeys.KEY_INTERNAL_USER_ID, targetUser.id)
342341

343342
val chatIntent = Intent(context, ChatActivity::class.java)
344343
chatIntent.putExtra(KEY_ROOM_TOKEN, deepLinkResult.roomToken)

app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,12 @@ class ConversationsListActivity : BaseActivity() {
178178
super.onCreate(savedInstanceState)
179179
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
180180

181-
currentUser = currentUserProviderOld.currentUser.blockingGet()
181+
val targetUserId = intent.getLongExtra(KEY_INTERNAL_USER_ID, 0L)
182+
currentUser = if (targetUserId != 0L) {
183+
userManager.getUserWithId(targetUserId).blockingGet()
184+
} else {
185+
currentUserProviderOld.currentUser.blockingGet()
186+
}
182187

183188
conversationsListViewModel = ViewModelProvider(this, viewModelFactory)[ConversationsListViewModel::class.java]
184189
contextChatViewModel = ViewModelProvider(this, viewModelFactory)[ContextChatViewModel::class.java]
@@ -939,6 +944,7 @@ class ConversationsListActivity : BaseActivity() {
939944
is ConversationOpsAction.ShareLink -> shareConversationLink(conversation)
940945
is ConversationOpsAction.Rename -> renameConversation(conversation)
941946
is ConversationOpsAction.ToggleArchive -> handleArchiving(conversation)
947+
is ConversationOpsAction.AddToHomeScreen -> addConversationToHomeScreen(conversation)
942948
is ConversationOpsAction.Leave -> leaveConversation(conversation)
943949
is ConversationOpsAction.Delete -> showDeleteConversationDialog(conversation)
944950
}
@@ -955,6 +961,16 @@ class ConversationsListActivity : BaseActivity() {
955961
)
956962
}
957963

964+
private fun addConversationToHomeScreen(conversation: ConversationModel) {
965+
val user = currentUser ?: return
966+
val success = ShortcutManagerHelper.requestPinShortcut(this, conversation, user)
967+
if (success) {
968+
showSnackbar(resources.getString(R.string.nc_shortcut_created))
969+
} else {
970+
showSnackbar(resources.getString(R.string.nc_common_error_sorry))
971+
}
972+
}
973+
958974
@Suppress("Detekt.TooGenericExceptionCaught", "TooGenericExceptionCaught")
959975
private fun handleArchiving(conversation: ConversationModel) {
960976
val apiVersion = ApiUtils.getConversationApiVersion(currentUser!!, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V1))
@@ -1041,6 +1057,14 @@ class ConversationsListActivity : BaseActivity() {
10411057
WorkManager.getInstance(this).getWorkInfoByIdLiveData(worker.id).observeForever { workInfo ->
10421058
when (workInfo?.state) {
10431059
WorkInfo.State.SUCCEEDED -> {
1060+
currentUser?.id?.let { userId ->
1061+
ShortcutManagerHelper.disableConversationShortcut(
1062+
this,
1063+
conversation.token,
1064+
userId,
1065+
resources.getString(R.string.nc_shortcut_conversation_deleted)
1066+
)
1067+
}
10441068
showSnackbar(
10451069
String.format(resources.getString(R.string.left_conversation), conversation.displayName)
10461070
)

app/src/main/java/com/nextcloud/talk/conversationlist/ui/ConversationOperationsSheet.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ private data class ConversationOpsVisibility(
5353
val showShareLink: Boolean,
5454
val showRename: Boolean,
5555
val isArchived: Boolean,
56+
val showAddToHomeScreen: Boolean,
5657
val showLeave: Boolean,
5758
val showDelete: Boolean
5859
)
@@ -70,6 +71,7 @@ private fun computeVisibility(conversation: ConversationModel, user: User): Conv
7071
showShareLink = !ConversationUtils.isNoteToSelfConversation(conversation),
7172
showRename = spreedCap != null && ConversationUtils.isNameEditable(conversation, spreedCap),
7273
isArchived = conversation.hasArchived,
74+
showAddToHomeScreen = true,
7375
showLeave = conversation.canLeaveConversation,
7476
showDelete = conversation.canDeleteConversation
7577
)
@@ -165,6 +167,12 @@ private fun ConversationOpsManageGroup(
165167
stringResource(R.string.archive_conversation)
166168
}
167169
ConversationOpsMenuItem(archiveIcon, archiveLabel) { onAction(ConversationOpsAction.ToggleArchive) }
170+
if (visibility.showAddToHomeScreen) {
171+
ConversationOpsMenuItem(
172+
R.drawable.ic_home,
173+
stringResource(R.string.nc_add_to_home_screen)
174+
) { onAction(ConversationOpsAction.AddToHomeScreen) }
175+
}
168176
if (visibility.showLeave) {
169177
ConversationOpsMenuItem(
170178
R.drawable.ic_exit_to_app_black_24dp,

app/src/main/java/com/nextcloud/talk/conversationlist/ui/ConversationOpsAction.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ sealed class ConversationOpsAction {
1515
object ShareLink : ConversationOpsAction()
1616
object Rename : ConversationOpsAction()
1717
object ToggleArchive : ConversationOpsAction()
18+
object AddToHomeScreen : ConversationOpsAction()
1819
object Leave : ConversationOpsAction()
1920
object Delete : ConversationOpsAction()
2021
}

app/src/main/java/com/nextcloud/talk/utils/ShortcutManagerHelper.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ object ShortcutManagerHelper {
128128
*/
129129
@Suppress("DEPRECATION")
130130
private fun createLegacyShortcut(context: Context, conversation: ConversationModel, user: User): Boolean {
131-
if (user.id == null || user.baseUrl == null) {
131+
val baseUrl = user.baseUrl
132+
if (user.id == null || baseUrl == null) {
132133
Log.w(TAG, "Cannot create legacy shortcut: user ID or base URL is null")
133134
return false
134135
}
@@ -137,7 +138,7 @@ object ShortcutManagerHelper {
137138

138139
val uri = DeepLinkHandler.createConversationUri(
139140
roomToken = conversation.token,
140-
serverUrl = user.baseUrl!!,
141+
serverUrl = baseUrl,
141142
username = user.username
142143
)
143144

0 commit comments

Comments
 (0)