Skip to content

Commit 13efe06

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 029c47a commit 13efe06

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
@@ -179,7 +179,12 @@ class ConversationsListActivity : BaseActivity() {
179179
super.onCreate(savedInstanceState)
180180
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
181181

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

184189
conversationsListViewModel = ViewModelProvider(this, viewModelFactory)[ConversationsListViewModel::class.java]
185190
contextChatViewModel = ViewModelProvider(this, viewModelFactory)[ContextChatViewModel::class.java]
@@ -975,6 +980,7 @@ class ConversationsListActivity : BaseActivity() {
975980
is ConversationOpsAction.ShareLink -> shareConversationLink(conversation)
976981
is ConversationOpsAction.Rename -> renameConversation(conversation)
977982
is ConversationOpsAction.ToggleArchive -> handleArchiving(conversation)
983+
is ConversationOpsAction.AddToHomeScreen -> addConversationToHomeScreen(conversation)
978984
is ConversationOpsAction.Leave -> leaveConversation(conversation)
979985
is ConversationOpsAction.Delete -> showDeleteConversationDialog(conversation)
980986
}
@@ -991,6 +997,16 @@ class ConversationsListActivity : BaseActivity() {
991997
)
992998
}
993999

1000+
private fun addConversationToHomeScreen(conversation: ConversationModel) {
1001+
val user = currentUser ?: return
1002+
val success = ShortcutManagerHelper.requestPinShortcut(this, conversation, user)
1003+
if (success) {
1004+
showSnackbar(resources.getString(R.string.nc_shortcut_created))
1005+
} else {
1006+
showSnackbar(resources.getString(R.string.nc_common_error_sorry))
1007+
}
1008+
}
1009+
9941010
@Suppress("Detekt.TooGenericExceptionCaught", "TooGenericExceptionCaught")
9951011
private fun handleArchiving(conversation: ConversationModel) {
9961012
val apiVersion = ApiUtils.getConversationApiVersion(currentUser!!, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V1))
@@ -1077,6 +1093,14 @@ class ConversationsListActivity : BaseActivity() {
10771093
WorkManager.getInstance(this).getWorkInfoByIdLiveData(worker.id).observeForever { workInfo ->
10781094
when (workInfo?.state) {
10791095
WorkInfo.State.SUCCEEDED -> {
1096+
currentUser?.id?.let { userId ->
1097+
ShortcutManagerHelper.disableConversationShortcut(
1098+
this,
1099+
conversation.token,
1100+
userId,
1101+
resources.getString(R.string.nc_shortcut_conversation_deleted)
1102+
)
1103+
}
10801104
showSnackbar(
10811105
String.format(resources.getString(R.string.left_conversation), conversation.displayName)
10821106
)

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)