Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit ecb8b019 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé
Browse files

Change FeatureLauncherActivity to depend on a target for managing launches

(cherry picked from commit 6e0175ab4ba8a37f4fe776d5e302235f33cacd12)
parent 16023cd6
Loading
Loading
Loading
Loading
+8 −45
Original line number Diff line number Diff line
@@ -5,13 +5,7 @@ import android.content.Intent
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import app.k9mail.core.ui.compose.common.activity.setActivityContent
import app.k9mail.core.ui.compose.common.navigation.toDeepLinkUri
import app.k9mail.feature.account.edit.navigation.NAVIGATION_ROUTE_ACCOUNT_EDIT_SERVER_SETTINGS_INCOMING
import app.k9mail.feature.account.edit.navigation.NAVIGATION_ROUTE_ACCOUNT_EDIT_SERVER_SETTINGS_OUTGOING
import app.k9mail.feature.account.edit.navigation.withAccountUuid
import app.k9mail.feature.account.setup.navigation.NAVIGATION_ROUTE_ACCOUNT_SETUP
import app.k9mail.feature.launcher.ui.FeatureLauncherApp
import app.k9mail.feature.onboarding.main.navigation.NAVIGATION_ROUTE_ONBOARDING
import com.fsck.k9.ui.base.K9Activity

class FeatureLauncherActivity : K9Activity() {
@@ -28,50 +22,19 @@ class FeatureLauncherActivity : K9Activity() {

    companion object {
        @JvmStatic
        fun launchOnboarding(context: Context) {
            val intent = Intent(context, FeatureLauncherActivity::class.java).apply {
                data = NAVIGATION_ROUTE_ONBOARDING.toDeepLinkUri()
                flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
            }
        fun launch(context: Context, target: FeatureLauncherTarget) {
            val intent = getIntent(context, target)
            context.startActivity(intent)
        }

        @JvmStatic
        fun launchSetupAccount(context: Context) {
            val intent = Intent(context, FeatureLauncherActivity::class.java).apply {
                data = NAVIGATION_ROUTE_ACCOUNT_SETUP.toDeepLinkUri()
            }
            context.startActivity(intent)
        fun getIntent(context: Context, target: FeatureLauncherTarget): Intent {
            return Intent(context, FeatureLauncherActivity::class.java).apply {
                data = target.toDeepLinkUri()
                if (target.flags != null) {
                    flags = target.flags
                }

        @JvmStatic
        fun getEditIncomingSettingsIntent(context: Context, accountUuid: String): Intent {
            val intent = Intent(context, FeatureLauncherActivity::class.java).apply {
                data = NAVIGATION_ROUTE_ACCOUNT_EDIT_SERVER_SETTINGS_INCOMING
                    .withAccountUuid(accountUuid).toDeepLinkUri()
            }
            return intent
        }

        @JvmStatic
        fun launchEditIncomingSettings(context: Context, accountUuid: String) {
            val intent = getEditIncomingSettingsIntent(context, accountUuid)
            context.startActivity(intent)
        }

        @JvmStatic
        fun getEditOutgoingSettingsIntent(context: Context, accountUuid: String): Intent {
            val intent = Intent(context, FeatureLauncherActivity::class.java).apply {
                data = NAVIGATION_ROUTE_ACCOUNT_EDIT_SERVER_SETTINGS_OUTGOING
                    .withAccountUuid(accountUuid).toDeepLinkUri()
            }
            return intent
        }

        @JvmStatic
        fun launchEditOutgoingSettings(context: Context, accountUuid: String) {
            val intent = getEditOutgoingSettingsIntent(context, accountUuid)
            context.startActivity(intent)
        }
    }
}
+39 −0
Original line number Diff line number Diff line
package app.k9mail.feature.launcher

import android.content.Intent
import android.net.Uri
import app.k9mail.core.ui.compose.common.navigation.toDeepLinkUri
import app.k9mail.feature.account.edit.navigation.withAccountUuid
import app.k9mail.feature.account.setup.navigation.NAVIGATION_ROUTE_ACCOUNT_SETUP
import app.k9mail.feature.onboarding.main.navigation.NAVIGATION_ROUTE_ONBOARDING

sealed class FeatureLauncherTarget(
    val route: String,
    val flags: Int? = null,
) {
    data object Onboarding : FeatureLauncherTarget(
        route = NAVIGATION_ROUTE_ONBOARDING,
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK,
    )

    data object AccountSetup : FeatureLauncherTarget(
        route = NAVIGATION_ROUTE_ACCOUNT_SETUP,
    )

    data class AccountEditIncomingSettings(val accountUuid: String) : FeatureLauncherTarget(
        route = NAVIGATION_ROUTE_ACCOUNT_SETUP,
    )

    data class AccountEditOutgoingSettings(val accountUuid: String) : FeatureLauncherTarget(
        route = NAVIGATION_ROUTE_ACCOUNT_SETUP,
    )

    fun toDeepLinkUri(): Uri {
        return when (this) {
            is AccountEditIncomingSettings -> route.withAccountUuid(accountUuid).toDeepLinkUri()
            is AccountEditOutgoingSettings -> route.withAccountUuid(accountUuid).toDeepLinkUri()

            else -> route.toDeepLinkUri()
        }
    }
}
+9 −2
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import android.content.Intent
import android.net.Uri
import androidx.core.app.PendingIntentCompat
import app.k9mail.feature.launcher.FeatureLauncherActivity
import app.k9mail.feature.launcher.FeatureLauncherTarget
import app.k9mail.legacy.account.Account
import app.k9mail.legacy.mailstore.MessageStoreManager
import app.k9mail.legacy.message.controller.MessageReference
@@ -110,12 +111,18 @@ internal class K9NotificationActionCreator(
    }

    override fun getEditIncomingServerSettingsIntent(account: Account): PendingIntent {
        val intent = FeatureLauncherActivity.getEditIncomingSettingsIntent(context, account.uuid)
        val intent = FeatureLauncherActivity.getIntent(
            context = context,
            target = FeatureLauncherTarget.AccountEditIncomingSettings(account.uuid),
        )
        return PendingIntentCompat.getActivity(context, account.accountNumber, intent, FLAG_UPDATE_CURRENT, false)!!
    }

    override fun getEditOutgoingServerSettingsIntent(account: Account): PendingIntent {
        val intent = FeatureLauncherActivity.getEditOutgoingSettingsIntent(context, account.uuid)
        val intent = FeatureLauncherActivity.getIntent(
            context = context,
            target = FeatureLauncherTarget.AccountEditOutgoingSettings(account.uuid),
        )
        return PendingIntentCompat.getActivity(context, account.accountNumber, intent, FLAG_UPDATE_CURRENT, false)!!
    }

+2 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import app.k9mail.core.featureflag.FeatureFlagKey
import app.k9mail.core.featureflag.FeatureFlagProvider
import app.k9mail.core.ui.legacy.designsystem.atom.icon.Icons
import app.k9mail.feature.launcher.FeatureLauncherActivity
import app.k9mail.feature.launcher.FeatureLauncherTarget
import app.k9mail.feature.navigation.drawer.FolderDrawer
import app.k9mail.feature.navigation.drawer.LegacyDrawer
import app.k9mail.feature.navigation.drawer.NavigationDrawer
@@ -151,7 +152,7 @@ open class MessageList :
        deleteIncompleteAccounts(accounts)
        val hasAccountSetup = accounts.any { it.isFinishedSetup }
        if (!hasAccountSetup) {
            FeatureLauncherActivity.launchOnboarding(this)
            FeatureLauncherActivity.launch(this, FeatureLauncherTarget.Onboarding)
            finish()
            return
        }
+3 −1
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@ import android.content.Intent;
import android.os.Parcelable;

import app.k9mail.feature.launcher.FeatureLauncherActivity;
import app.k9mail.feature.launcher.FeatureLauncherTarget;
import app.k9mail.feature.launcher.FeatureLauncherTarget.AccountSetup;
import app.k9mail.legacy.account.Account;
import com.fsck.k9.Preferences;
import com.fsck.k9.activity.MessageCompose;
@@ -19,7 +21,7 @@ public class MessageActions {
    public static void actionCompose(Context context, Account account) {
        Account defaultAccount = Preferences.getPreferences().getDefaultAccount();
        if (account == null && defaultAccount == null) {
            FeatureLauncherActivity.launchSetupAccount(context);
            FeatureLauncherActivity.launch(context, AccountSetup.INSTANCE);
        } else {
            String accountUuid = (account == null) ?
                    defaultAccount.getUuid() :
Loading