From 6e0ca3958b1d47cd4877c12cf4b505e58b392c6b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 28 Jul 2022 16:03:13 +0200 Subject: [PATCH] Shortcuts must first start MainActivity to ensure the session is restored. --- .../im/vector/app/features/MainActivity.kt | 17 +++++++++++++++++ .../app/features/home/ShortcutCreator.kt | 4 ++-- .../home/room/detail/RoomDetailActivity.kt | 18 +----------------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/MainActivity.kt b/vector/src/main/java/im/vector/app/features/MainActivity.kt index 61127e2c82..0f658a2d8c 100644 --- a/vector/src/main/java/im/vector/app/features/MainActivity.kt +++ b/vector/src/main/java/im/vector/app/features/MainActivity.kt @@ -86,6 +86,8 @@ class MainActivity : VectorBaseActivity(), UnlockedActivity private const val EXTRA_ARGS = "EXTRA_ARGS" private const val EXTRA_NEXT_INTENT = "EXTRA_NEXT_INTENT" private const val EXTRA_INIT_SESSION = "EXTRA_INIT_SESSION" + private const val EXTRA_ROOM_ID = "EXTRA_ROOM_ID" + private const val ACTION_ROOM_DETAILS_FROM_SHORTCUT = "ROOM_DETAILS_FROM_SHORTCUT" // Special action to clear cache and/or clear credentials fun restartApp(activity: Activity, args: MainActivityArgs) { @@ -107,6 +109,14 @@ class MainActivity : VectorBaseActivity(), UnlockedActivity intent.putExtra(EXTRA_NEXT_INTENT, nextIntent) return intent } + + // Shortcuts can't have intents with parcelables + fun shortcutIntent(context: Context, roomId: String): Intent { + return Intent(context, MainActivity::class.java).apply { + action = ACTION_ROOM_DETAILS_FROM_SHORTCUT + putExtra(EXTRA_ROOM_ID, roomId) + } + } } private val startAppViewModel: StartAppViewModel by viewModel() @@ -171,6 +181,13 @@ class MainActivity : VectorBaseActivity(), UnlockedActivity } else if (intent.hasExtra(EXTRA_INIT_SESSION)) { setResult(RESULT_OK) finish() + } else if (intent.action == ACTION_ROOM_DETAILS_FROM_SHORTCUT) { + val roomId = intent.getStringExtra(EXTRA_ROOM_ID) + if (roomId?.isNotEmpty() == true) { + // TODO Add a trigger Shortcut to the analytics. + navigator.openRoom(this, roomId) + } + finish() } else { args = parseArgs() if (args.clearCredentials || args.isUserLoggedOut || args.clearCache) { diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt index 23cbe3dfa2..a51b8eff63 100644 --- a/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt +++ b/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt @@ -27,7 +27,7 @@ import androidx.core.graphics.drawable.IconCompat import im.vector.app.BuildConfig import im.vector.app.core.glide.GlideApp import im.vector.app.core.utils.DimensionConverter -import im.vector.app.features.home.room.detail.RoomDetailActivity +import im.vector.app.features.MainActivity import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.util.toMatrixItem import javax.inject.Inject @@ -58,7 +58,7 @@ class ShortcutCreator @Inject constructor( @WorkerThread fun create(roomSummary: RoomSummary, rank: Int = 1): ShortcutInfoCompat { - val intent = RoomDetailActivity.shortcutIntent(context, roomSummary.roomId) + val intent = MainActivity.shortcutIntent(context, roomSummary.roomId) val bitmap = try { val glideRequests = GlideApp.with(context) val matrixItem = roomSummary.toMatrixItem() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailActivity.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailActivity.kt index a58eed42e1..75cda67ce6 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailActivity.kt @@ -99,12 +99,7 @@ class RoomDetailActivity : super.onCreate(savedInstanceState) supportFragmentManager.registerFragmentLifecycleCallbacks(fragmentLifecycleCallbacks, false) waitingView = views.waitingView.waitingView - val timelineArgs: TimelineArgs? = if (intent?.action == ACTION_ROOM_DETAILS_FROM_SHORTCUT) { - TimelineArgs(roomId = intent?.extras?.getString(EXTRA_ROOM_ID)!!) - } else { - intent?.extras?.getParcelable(EXTRA_ROOM_DETAIL_ARGS) - } - if (timelineArgs == null) return + val timelineArgs: TimelineArgs = intent?.extras?.getParcelable(EXTRA_ROOM_DETAIL_ARGS) ?: return intent.putExtra(Mavericks.KEY_ARG, timelineArgs) currentRoomId = timelineArgs.roomId @@ -187,10 +182,7 @@ class RoomDetailActivity : } companion object { - const val EXTRA_ROOM_DETAIL_ARGS = "EXTRA_ROOM_DETAIL_ARGS" - const val EXTRA_ROOM_ID = "EXTRA_ROOM_ID" - const val ACTION_ROOM_DETAILS_FROM_SHORTCUT = "ROOM_DETAILS_FROM_SHORTCUT" fun newIntent(context: Context, timelineArgs: TimelineArgs, firstStartMainActivity: Boolean): Intent { val intent = Intent(context, RoomDetailActivity::class.java).apply { @@ -202,14 +194,6 @@ class RoomDetailActivity : intent } } - - // Shortcuts can't have intents with parcelables - fun shortcutIntent(context: Context, roomId: String): Intent { - return Intent(context, RoomDetailActivity::class.java).apply { - action = ACTION_ROOM_DETAILS_FROM_SHORTCUT - putExtra(EXTRA_ROOM_ID, roomId) - } - } } override fun mxToBottomSheetNavigateToRoom(roomId: String, trigger: ViewRoom.Trigger?) {