lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
app/src/main/java/com/sinata/xqmuse/ui/mine/ShareActivity.kt
@@ -1,126 +1,125 @@
package com.sinata.xqmuse.ui.mine
import android.Manifest
import android.content.Intent
import android.graphics.Bitmap
import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore
import android.util.Log
import android.webkit.WebChromeClient
import android.webkit.WebSettings
import android.webkit.WebViewClient
import androidx.core.os.bundleOf
import androidx.core.view.drawToBitmap
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.utils.SPUtils
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.visible
import cn.sinata.xldutils.utils.BitmapUtils
import com.github.zackratos.ultimatebar.UltimateBar
import com.share.utils.ShareUtils
import com.sinata.xqmuse.R
import com.sinata.xqmuse.dialog.TipDialog
import com.sinata.xqmuse.dialog.ShareDialog
import com.sinata.xqmuse.network.Apis
import com.sinata.xqmuse.network.HttpManager
import com.sinata.xqmuse.network.request
import com.sinata.xqmuse.ui.home.ScannerActivity
import com.sinata.xqmuse.utils.extention.clickDelay
import com.sinata.xqmuse.utils.getQRcodeImg
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.interfaces.StringCallback
import com.tbruyelle.rxpermissions2.RxPermissions
import com.umeng.socialize.bean.SHARE_MEDIA
import com.ypx.imagepicker.utils.PBitmapUtils
import kotlinx.android.synthetic.main.activity_share.*
import org.jetbrains.anko.bundleOf
import org.jetbrains.anko.startActivityForResult
import kotlinx.android.synthetic.main.layout_share_img.*
import kotlinx.android.synthetic.main.layout_share_img.view.*
import org.jetbrains.anko.backgroundColor
import org.jetbrains.anko.toast
import java.io.File
import java.io.FileOutputStream
class ShareActivity:BaseActivity() {
    private val code by lazy {  //不为空则需要直接绑定
        intent.getStringExtra("code")
    }
    private val userId by lazy { intent.getStringExtra("userId") }
    private var qrcode = ""
    private var poster = ""
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_share)
        titleBar.leftClick { finish() }
        UltimateBar.with(this)
            .statusDark(true)
            .create().immersionBar() //沉浸状态栏
        titleBar.titleView.text = "好友推广"
        val settings = webView.settings
        settings.javaScriptEnabled = true
        settings.javaScriptCanOpenWindowsAutomatically = true
        settings.defaultTextEncodingName = "utf-8"
        settings.domStorageEnabled = true
        settings.setSupportZoom(true)
//        settings.textZoom = 200
        settings.useWideViewPort = true
        settings.loadWithOverviewMode = true
        settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
        webView.webChromeClient = object : WebChromeClient() {}
        webView.webViewClient = object : WebViewClient() {}
        webView.backgroundColor = 0
        webView.background.alpha = 0
        getShareInfo()
        iv_scan.clickDelay {
            val rxPermissions = RxPermissions(this)
            if (rxPermissions.isGranted(Manifest.permission.CAMERA))
                startActivityForResult<ScannerActivity>(1)
            else if ((SPUtils.instance().getBoolean("CAMERA_REFUSE")))
                myToast("没有相机权限")
            else{
                val tipDialog = cn.sinata.xldutils.widget.TipDialog()
                tipDialog.arguments =
                    bundleOf("msg" to "为了扫描好友二维码,我们需要获取相机访问权限", "ok" to "去授权", "cancel" to "不需要")
                tipDialog.setCallback(object : cn.sinata.xldutils.widget.TipDialog.OnClickCallback {
                    override fun onOk() {
                        rxPermissions.request(Manifest.permission.CAMERA)
                            .subscribe {
                                if (it) {
                                    startActivityForResult<ScannerActivity>(1)
                                } else{
                                    SPUtils.instance().put("CAMERA_REFUSE", true).apply()
                                    myToast("没有相机权限")
        iv_back.setOnClickListener { finish() }
        tv_action.setOnClickListener {
            val shareDialog = ShareDialog()
            shareDialog.arguments = bundleOf("isSave" to true)
            shareDialog.callback = object :StringCallback{
                override fun onResult(rst: String) {
                    if (rst == "wx"){
                        ShareUtils.share(this@ShareActivity,SHARE_MEDIA.WEIXIN,Const.SHARE.SHARE_CONTENT,Const.SHARE.SHARE_TITLE,Apis.SHARE_APP.format(userId),null,"")
                    }else if (rst == "circle"){
                        ShareUtils.share(this@ShareActivity,SHARE_MEDIA.WEIXIN_CIRCLE,Const.SHARE.SHARE_CONTENT,Const.SHARE.SHARE_TITLE,Apis.SHARE_APP.format(userId),null,"")
                    }else{
                        RxPermissions(this@ShareActivity).request(Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe {
                            if (it)
                                try {
                                    toast("图片生成中…")
                                    val copyPath = PBitmapUtils.getPickerFileDirectory(this@ShareActivity).absolutePath  + "/" + System.currentTimeMillis() + ".png"
                                    val file = File(copyPath)
                                    if (!file.exists()) {
                                        file.createNewFile()
                                    }
                                    val fors = FileOutputStream(file)
                                    layout_share.drawToBitmap().compress(Bitmap.CompressFormat.PNG, 0, fors)
                                    fors.flush()
                                    fors.close()
                                    MediaStore.Images.Media.insertImage(this@ShareActivity.contentResolver, file.absolutePath, copyPath, null);
                                    toast("保存成功")
                                } catch (e: Exception) {
                                    Log.e(Const.Tag, e.message ?:"")
                                    toast("保存失败")
                                }
                            }
                    }
                    override fun onCancel() {
                        SPUtils.instance().put("CAMERA_REFUSE", true).apply()
                    }
                })
                tipDialog.show(supportFragmentManager, "camera")
            }
        }
        tv_bind.clickDelay {
            val code = et_code.text.toString()
            if (code.length!=6)
                myToast("请填写6位邀请码")
            else
                HttpManager.getBindingUserName(code).request(this){_,data->
                    TipDialog.show(supportFragmentManager,"确认绑定用户“${data}”吗?",object : TipDialog.OnClickCallback{
                        override fun onOk() {
                            HttpManager.binding(code).request(this@ShareActivity){_,_->
                                myToast("绑定成功")
                                getShareInfo()
                            }
                            else
                                toast("缺少文件存储权限")
                        }
                        override fun onCancel() {
                        }
                    })
                    }
                }
            }
            shareDialog.show(supportFragmentManager,"share")
        }
    }
    private fun getShareInfo(){
        HttpManager.peopleList().request(this){_,data->
            tv_rule.text = data?.content
            tv_my_friend.text = "我邀请的好友:${if (data?.people.isNullOrEmpty()) "暂未绑定" else data!!.people}"
            tv_my_invitor.text = data?.invite
            iv_code.setImageBitmap(getQRcodeImg(this, Apis.SHARE_URL+data?.code))
            if (data?.invite?.isNullOrEmpty() == true){
                iv_scan.visible()
                tv_bind.visible()
                et_code.visible()
                if (!code.isNullOrEmpty()){
                    et_code.setText(code)
                    tv_bind.callOnClick()
                }
            }else{
                iv_scan.gone()
                tv_bind.gone()
                et_code.gone()
                if (!code.isNullOrEmpty()){
                    myToast("你已经绑定过邀请人")
                }
        HttpManager.shareInfo().request(this){_,data->
            this.qrcode = data?.qrCode?:""
            this.poster = data?.poster?:""
            data?.apply {
                iv_code.setImageURI(qrCode)
                val sHead =
                    "<html><head><meta name=\"viewport\" content=\"width=device-width, " + "initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes\" />" + "<style>img{max-width:100% !important;height:auto !important;}</style>" + "<style>body{max-width:100% !important;}</style>" + "</head><body>"
                webView!!.loadDataWithBaseURL(
                    null,
                    sHead + rules,
                    "text/html",
                    "utf-8",
                    null
                )
                iv_share.setImageURI(poster)
                //分享view
                iv_poster.setImageURI(poster)
                iv_share_code.setImageURI(qrCode)
            }
        }
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK&&data!=null){
            val rst = data.getStringExtra("result")?:""
            if (rst.startsWith(Apis.SHARE_URL))
                et_code.setText(rst.substring(rst.length-6))
            else
                myToast("二维码错误")
        }
    }
}