桥接 子项目提供接口给主工程实现

32 阅读1分钟

AndroidUtilitiesInterface

package aaa.bridge

import android.content.Intent
import android.view.View
import androidx.annotation.UiThread
import androidx.annotation.WorkerThread

interface AndroidUtilitiesInterface {
    fun getViewInset(view: View?): Int
    fun formatterBannedUntil(date: Long): String

    @UiThread
    fun showCopyToast(text: String = "")

    @UiThread
    fun internalIntent(intent: Intent)

    @UiThread
    fun createShareAlert(text: String)

    suspend fun checkTGUser(tgId: Long, url: String, successCallback: () -> Unit)

    @UiThread
    fun gotoGooglePlayUpdate()

    @UiThread
    fun gotoStandaloneUpdate()
}

AndroidUtilitiesBridge

package aaa.bridge

import android.content.Intent
import android.view.View

object AndroidUtilitiesBridge : AndroidUtilitiesInterface {
    private var impl: AndroidUtilitiesInterface? = null

    fun setImpl(androidUtilitiesInterface: AndroidUtilitiesInterface) {
        impl = androidUtilitiesInterface
    }

    override fun getViewInset(view: View?): Int {
        return impl?.getViewInset(view) ?: 0
    }

    override fun formatterBannedUntil(date: Long): String {
        return impl?.formatterBannedUntil(date) ?: ""
    }

    override fun showCopyToast(text: String) {
        impl?.showCopyToast(text)
    }

    override fun internalIntent(intent: Intent) {
        impl?.internalIntent(intent)
    }

    override fun createShareAlert(text: String) {
        impl?.createShareAlert(text)
    }

    override suspend fun checkTGUser(tgId: Long, url: String, successCallback: () -> Unit) {
        impl?.checkTGUser(tgId, url, successCallback)
    }

    override fun gotoGooglePlayUpdate() {
        impl?.gotoGooglePlayUpdate()
    }

    override fun gotoStandaloneUpdate() {
        impl?.gotoStandaloneUpdate()
    }
}
package aaa.bridge

import android.content.Intent
import android.graphics.Color
import android.text.TextUtils
import android.view.View
import androidx.core.net.toUri
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.Utils
import com.hjq.toast.Toaster
import conso.server.servicecommon.proto.entity.ConsoPeer
import global.xfinite.conso.auth.AuthBot3Handle
import global.xfinite.conso.cache.usernameresolver.UsernameResolverCache
import global.xfinite.conso.consobasefragment.ConsoBaseFragment
import global.xfinite.conso.customchatmessagecell.redpacket.RedPacketMessageFactory
import global.xfinite.conso.discover.aiexplore.tab.AiExploreViewHolderImpl
import global.xfinite.conso.flow.ScopeDefaultLaunch
import global.xfinite.conso.framelayoutpagemanager.FrameLayoutPage
import global.xfinite.conso.framelayoutpagemanager.FrameLayoutSubPageInterface
import global.xfinite.conso.global.ConsoUrlCustomDefine
import global.xfinite.conso.global.GlobalNotification
import global.xfinite.conso.global.getAccountNum
import global.xfinite.conso.logtool.LogTool
import global.xfinite.conso.memory.MemoryUsageMonitor
import global.xfinite.conso.referral.invite.ReferralInviteViewHolderImpl
import global.xfinite.conso.referral.mint.referralcode.ReferralMintReferralCodeViewHolderImpl
import global.xfinite.conso.view.VerifiedComposeView
import global.xfinite.conso.view.VerifiedViewImpl
import kotlinx.coroutines.delay
import org.telegram.messenger.AccountInstance
import org.telegram.messenger.AndroidUtilities
import org.telegram.messenger.BotWebViewVibrationEffect
import org.telegram.messenger.BuildVars
import org.telegram.messenger.DialogObject
import org.telegram.messenger.LocaleController
import org.telegram.messenger.MessagesController
import org.telegram.messenger.R
import org.telegram.messenger.SendMessagesHelper
import org.telegram.messenger.UserConfig
import org.telegram.messenger.browser.Browser
import org.telegram.tgnet.ConnectionsManager
import org.telegram.tgnet.TLRPC
import org.telegram.ui.ActionBar.Theme
import org.telegram.ui.ChatActivity
import org.telegram.ui.Components.Bulletin
import org.telegram.ui.Components.BulletinFactory
import org.telegram.ui.Components.ShareAlert
import org.telegram.ui.LaunchActivity
import org.telegram.ui.bots.BotWebViewAttachedSheet
import org.telegram.ui.bots.WebViewRequestProps
import java.util.Base64
import kotlin.math.abs

class AndroidUtilitiesImpl : AndroidUtilitiesInterface {
    companion object {
        private val TAG by lazy { AndroidUtilitiesImpl::class.java.simpleName }
    }

    init {
        GlobalNotification.shared

        Toaster.init(Utils.getApp())

        ReferralMintReferralCodeViewHolderImpl
        ReferralInviteViewHolderImpl
        AiExploreViewHolderImpl

        VerifiedViewImpl.setVerifiedComposeCreateCallback { VerifiedComposeView() }

        FrameLayoutPage.makeConsoBaseFragment = { tgId, fragment ->
            (fragment as? FrameLayoutSubPageInterface)?.let { view ->
                ConsoBaseFragment(tgId, view)
            }
        }
 
        ScopeDefaultLaunch {
            for (i in 0..20) {

                delay(1000)

                try {
                    val pm = Utils.getApp().packageManager
                    val telegramInfo = pm.getPackageInfo("org.telegram.messenger", 0)
                    if (telegramInfo != null) {
                        AuthBot3Handle.isTelegramInPhone = 1
                        break
                    } else {
                        AuthBot3Handle.isTelegramInPhone = 0
                    }
                } catch (_: Exception) {
                }
            }
        }
    }

    override fun getViewInset(view: View?): Int {
        return AndroidUtilities.getViewInset(view)
    }

    override fun formatterBannedUntil(date: Long): String {
        return LocaleController.getInstance().formatterBannedUntil.format(date * 1000)
    }

    override fun showCopyToast(text: String) {
     
    }

    override fun internalIntent(intent: Intent) {
        LaunchActivity.instance.onNewIntent(intent)
    }

    override fun createShareAlert(text: String) {
        val shareAlert =
            ShareAlert.createShareAlert(LaunchActivity.instance, null, text, false, text, false)
        shareAlert.show()
    }

    override suspend fun checkTGUser(tgId: Long, url: String, successCallback: () -> Unit) {
        try {
          
        } catch (_: Exception) {
        }
    }

    override fun gotoGooglePlayUpdate() {
      
    }

    override fun gotoStandaloneUpdate() {
//        LaunchActivity.instance.checkAppUpdate(true)
    }
}