android 推送消息彈框

彈框?qū)崿F(xiàn) 盡量使用Activity dialog只能寄托在activity或者activity的context上连舍,使用application的context會報錯害碾。

實現(xiàn)步驟

1详幽、

 <activity
            android:name=".module.v2.home.activity.NotifyActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@style/tran_style" />

<style name="tran_style" parent="Theme.AppCompat.Light">
        <!-- 是否支持透window明度 -->
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@color/transparent_20</item>
        <item name="android:windowNoTitle">true</item>
        <!-- 隱藏狀態(tài)欄 -->
        <item name="android:windowFullscreen">false</item>
        <item name="android:windowCloseOnTouchOutside">false</item>
    </style>

2畜份、

package com.cias.vas.lib.module.v2.home.activity

import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.cias.core.utils.AppManager
import com.cias.core.utils.ToastUtil
import com.cias.vas.lib.R
import com.cias.vas.lib.base.model.BaseResponseV2Model
import com.cias.vas.lib.common.pushconst.PushModel
import com.cias.vas.lib.common.zdqconst.IntentConstant
import com.cias.vas.lib.data.RetrofitRiskClient
import com.cias.vas.lib.module.v2.home.model.PushDataModel
import com.cias.vas.lib.module.v2.order.activity.AuditDetailActivity
import com.cias.vas.lib.module.v2.order.activity.GrabOrderDetailActivity
import com.cias.vas.lib.module.v2.order.activity.OrderDetailActivity
import com.cias.vas.lib.module.v2.order.activity.TakeOrderDetailActivity
import com.cias.vas.lib.module.v2.order.model.*
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers

/**
 *
 * @Description:
 * @Author: zhoudequn
 * @CreateDate: 2022/2/24 10:51
 */
class NotifyActivity : AppCompatActivity() {


    companion object {
        val CONTENT: String = "content"
        val MESSAGE_TYPE: String = "messageType"
        val DATA: String = "data"
    }

    lateinit var mTvTitle: TextView
    lateinit var mTvContent: TextView
    lateinit var mTvOk: TextView
    lateinit var mTvLook: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ImmersionBar.with(this).fitsSystemWindows(false)
            .statusBarColor(R.color.white).statusBarDarkFont(true, 0.2f)
            .init()
        supportActionBar?.hide()
        setContentView(R.layout.activity_notify)
        mTvTitle = findViewById(R.id.tv_title)
        mTvContent = findViewById<TextView>(R.id.tv_content)
        mTvOk = findViewById(R.id.tv_ok)
        mTvLook = findViewById(R.id.tv_look)
        findViewById<TextView>(R.id.tv_ok)
            .setOnClickListener {
                finish()
            }
        intentGetTypeAndContent()
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        intentGetTypeAndContent()
    }


    private fun intentGetTypeAndContent() {
        val msgType = intent?.getStringExtra(MESSAGE_TYPE)
        val content = intent?.getStringExtra(CONTENT)
        val data = intent?.getStringExtra(DATA)

        var pushdataModel: PushDataModel? = null
        if (!TextUtils.isEmpty(data)) {
            pushdataModel = Gson().fromJson(data, PushDataModel::class.java)
        }
        mTvContent.text = content
        when (msgType) {
            PushModel.CREATE_ORDER -> {
                mTvLook.visibility = View.GONE
                mTvOk.text = getString(R.string.vas_sure)
                mTvOk.setOnClickListener {
                    finish()
                }
            }
            PushModel.CANCEL_ORDER -> {
                mTvLook.visibility = View.GONE
                mTvOk.text = "關(guān)閉"
                mTvOk.setOnClickListener {
                    //隅很、在訂單詳情頁(含搶單詳情頁面)寄症,當(dāng)前訂單任務(wù)狀態(tài)流轉(zhuǎn)至 已取消 或 已辦理 或 服務(wù)人員變更
                    // 序愚,有推送彈窗憔披,關(guān)閉彈窗后返回到【作業(yè)列表】頁面
                    closeByTaskStatus(pushdataModel)
//                    finish()
                }
            }
            PushModel.RE_AUDIT_ORDER -> {
                mTvLook.visibility = View.VISIBLE
                mTvOk.text = "稍后查看"
                mTvLook.setOnClickListener {
                    //進入詳情訂單
                    jumpDetailByOrderInfo(pushdataModel!!)
                    finish()
                }
                mTvOk.setOnClickListener {
                    finish()
                }
            }

            PushModel.CANCEL_REJECT -> {
                mTvLook.visibility = View.VISIBLE
                mTvOk.text = "稍后查看"
                mTvLook.setOnClickListener {
                    //請求詳情接口 然后跳轉(zhuǎn)到詳情頁面
                    val reqModel = OrderDetailReqModel()
                    reqModel.orderNo = pushdataModel!!.orderNo
                    reqModel.taskNo = pushdataModel!!.taskNo
                    queryOrderDetail(reqModel)
                    finish()
                }
                mTvOk.setOnClickListener {
                    finish()
                }
            }
            PushModel.UPDATE_ORDER, PushModel.REMIND_ORDER -> {
                mTvLook.visibility = View.GONE
                mTvOk.text = "我知道了"
                mTvOk.setOnClickListener {
                    finish()
                }
            }
            //產(chǎn)品變更 單獨設(shè)置標(biāo)題 內(nèi)容
            PushModel.CHANGE_ORDER -> {
                mTvTitle.text = "產(chǎn)品變更"
                mTvLook.visibility = View.GONE
                mTvOk.text = "關(guān)閉"
                if (!TextUtils.isEmpty(data)) {
                    val productChangeModel =
                        Gson().fromJson(data, PushProductChangeEventModel::class.java)
                    productChange(productChangeModel)
                }
                mTvOk.setOnClickListener {
                    goHome()
                    finish()
                }
            }
        }
    }

    private fun closeByTaskStatus(item: PushDataModel?) {
        var tempTaskNo: String? = null
        //如果任務(wù)棧中有訂單詳情 并且任務(wù)號一樣 點擊關(guān)閉回到列表
        val currentAct = AppManager.getAppManager().currentActivity()
        if (currentAct != null) {
            if (currentAct is GrabOrderDetailActivity) {
                tempTaskNo = currentAct.mTaskNo
            }
            if (currentAct is TakeOrderDetailActivity) {
                tempTaskNo = currentAct.mTaskNo
            }
        }
        if (item?.taskNo.equals(tempTaskNo)) {
            goHome()
        }
        finish()
    }

    private fun goHome() {
        val intent = Intent(this, HomeV2Activity::class.java)
        startActivity(intent)
    }

    private fun jumpDetailByOrderInfo(item: PushDataModel) {
        when (item.cateGoryCode) {
            OrderServiceType.RESCUE_NO_DESTINATION, OrderServiceType.RESCUE_HAS_DESTINATION -> {
                when (item.orderStatus) {
                    OrderStatusType.AUDIT_RETURN, OrderStatusType.SETTLEMENT_RETURN -> {
                        jumpAuditDetail(item)
                    }
                    else -> {
                        when (item.taskStatus) {
                            TaskStatus.TAKE, TaskStatus.START, TaskStatus.ARRIVE,
                            TaskStatus.WORK_START, TaskStatus.WORK_END,
                            -> {
                                jumpNewOrderDetail(item)
                            }
                            else -> {
                                jumpAuditDetail(item)
                            }
                        }
                    }
                }
            }
            else -> {
                jumpOldOrderDetail(item)
            }
        }
    }

    private fun productChange(model: PushProductChangeEventModel) {
        val sb = StringBuilder()
        sb.append("變更后\n\n")
        sb.append(model.changeRemark + "\n\n")

        sb.append("優(yōu)惠內(nèi)容:")
        if (!TextUtils.isEmpty(model.rightTypeName)) {
            sb.append(model.rightTypeName + ",")
        }
        model?.extraProductDiscount?.forEach {
            if (it == model?.extraProductDiscount!!.last()) {
                sb.append(it.name)
                if (it.value > 0) {
                    sb.append("(" + it.value + ")")
                }
            } else {
                sb.append(it.name)
                if (it.value > 0) {
                    sb.append("(" + it.value + "),")
                }
            }
        }
        mTvContent.text = sb.toString()
    }

    private fun jumpNewOrderDetail(item: PushDataModel) {
        val intent = Intent(this, TakeOrderDetailActivity::class.java)
        intent.putExtra(IntentConstant.INTENT_KEY_1, item.orderNo)
        intent.putExtra(IntentConstant.INTENT_KEY_2, item.taskNo)
        startActivity(intent)
    }

    private fun jumpAuditDetail(item: PushDataModel) {
        val intent = Intent(this, AuditDetailActivity::class.java)
        intent.putExtra(IntentConstant.INTENT_KEY_1, item.orderNo)
        intent.putExtra(IntentConstant.INTENT_KEY_2, item.taskNo)
        startActivity(intent)
    }

    private fun jumpOldOrderDetail(item: PushDataModel) {
        val intent = Intent(this, OrderDetailActivity::class.java)
        intent.putExtra(IntentConstant.INTENT_KEY_1, item.orderNo)
        intent.putExtra(IntentConstant.INTENT_KEY_2, item.taskNo)
        startActivity(intent)
    }


    fun queryOrderDetail(reqModel: OrderDetailReqModel) {
        RetrofitRiskClient.getInstance().apiService.queryOrderDetail(reqModel)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<BaseResponseV2Model<OrderInfoModel>> {

                override fun onNext(t: BaseResponseV2Model<OrderInfoModel>) {
                    if (200 == t.code && t?.data != null) {
                        val model = PushDataModel()
                        model.orderNo = t.data.orderNo
                        model.taskNo = t.data.taskNo
                        model.cateGoryCode = t.data.appServiceType
                        model.orderStatus = t.data.orderStatus
                        model.taskStatus = t.data.taskStatus
                        jumpDetailByOrderInfo(model)
                    }

                }

                override fun onSubscribe(d: Disposable) {
                }

                override fun onError(e: Throwable) {
                    ToastUtil.show(e.message)
                }

                override fun onComplete() {
                }
            })
    }


    override fun onBackPressed() {

    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爸吮,隨后出現(xiàn)的幾起案子芬膝,更是在濱河造成了極大的恐慌,老刑警劉巖形娇,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锰霜,死亡現(xiàn)場離奇詭異,居然都是意外死亡桐早,警方通過查閱死者的電腦和手機癣缅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門纫事,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人所灸,你說我怎么就攤上這事丽惶。” “怎么了爬立?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵钾唬,是天一觀的道長。 經(jīng)常有香客問我侠驯,道長抡秆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任吟策,我火速辦了婚禮儒士,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘檩坚。我一直安慰自己着撩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布匾委。 她就那樣靜靜地躺著拖叙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赂乐。 梳的紋絲不亂的頭發(fā)上薯鳍,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音挨措,去河邊找鬼挖滤。 笑死,一個胖子當(dāng)著我的面吹牛浅役,可吹牛的內(nèi)容都是我干的斩松。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼担租,長吁一口氣:“原來是場噩夢啊……” “哼砸民!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奋救,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤岭参,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尝艘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體演侯,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年背亥,在試婚紗的時候發(fā)現(xiàn)自己被綠了秒际。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悬赏。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖娄徊,靈堂內(nèi)的尸體忽然破棺而出闽颇,到底是詐尸還是另有隱情,我是刑警寧澤寄锐,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布兵多,位于F島的核電站,受9級特大地震影響橄仆,放射性物質(zhì)發(fā)生泄漏剩膘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一盆顾、第九天 我趴在偏房一處隱蔽的房頂上張望怠褐。 院中可真熱鬧,春花似錦您宪、人聲如沸奈懒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筐赔。三九已至,卻和暖如春揖铜,著一層夾襖步出監(jiān)牢的瞬間尸诽,已是汗流浹背嫉晶。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烦味,地道東北人峦椰。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓龄寞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汤功。 傳聞我的和親對象是個殘疾皇子物邑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容