lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.sinata.xqmuse.utils.extention
 
import android.app.Activity
import android.content.Context
import android.graphics.Bitmap
import android.util.Log
import android.view.View
import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.Fragment
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.utils.SPUtils
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
import com.sinata.xqmuse.R
import com.sinata.xqmuse.ui.login.LoginActivity
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.interfaces.StringCallback
import com.sinata.xqmuse.utils.OSSUtil
import com.sinata.xqmuse.utils.extention.ViewClickDelay.SPACE_TIME
import com.sinata.xqmuse.utils.extention.ViewClickDelay.hash
import com.sinata.xqmuse.utils.extention.ViewClickDelay.lastClickTime
import com.sinata.xqmuse.utils.glide.GlideUtil
import com.ypx.imagepicker.utils.PBitmapUtils
import kotlinx.android.synthetic.main.activity_course_deatil.*
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.support.v4.startActivity
import org.jetbrains.anko.toast
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
 
 
fun String.uploadWithCompress(act:BaseActivity,callback: StringCallback){
    Luban.with(act).load(File(this))
        .ignoreBy(100).setTargetDir(PBitmapUtils.getPickerFileDirectory(act).absolutePath + File.separator)
        .filter { path -> path.isNotEmpty() || path.toLowerCase().endsWith(".gif") }
        .setCompressListener(object :OnCompressListener{
            override fun onSuccess(file: File) {
                Log.e("gwx","压缩完成")
                Thread(Runnable {
                    val uploadSingle = OSSUtil(act).uploadSingle(file.path)
                    act.runOnUiThread {
                        act.dismissDialog()
                        callback.onResult(uploadSingle)
                        if (file.path != this@uploadWithCompress)
                            file.delete()
                    }
                }).start()
            }
 
            override fun onError(e: Throwable?) {
                e?.printStackTrace()
                act.dismissDialog()
            }
 
            override fun onStart() {
                Log.e("gwx","压缩开始")
                act.showDialog(canCancel = false)
            }
        }).launch()
}
 
object ViewClickDelay {
    var hash: Int = 0
    var lastClickTime: Long = 0
    var SPACE_TIME: Long = 2000
}
 
infix fun View.clickDelay(clickAction: () -> Unit) {
    this.setOnClickListener {
        if (this.hashCode() != hash) {
            hash = this.hashCode()
            lastClickTime = System.currentTimeMillis()
            clickAction()
        } else {
            val currentTime = System.currentTimeMillis()
            if (currentTime - lastClickTime > SPACE_TIME) {
                lastClickTime = System.currentTimeMillis()
                clickAction()
            }
        }
    }
}
 
/**
 * 使用Glide计算网络图片的宽高比加载长图
 * 父布局必须是ConstraintLayout:使用 dimensionRatio 属性
 */
fun String.loadLongImage(context:Context,imageView: ImageView){
    Glide.with(context).asBitmap().load(this)
        .into(object : SimpleTarget<Bitmap?>() {
            override fun onResourceReady(
                resource: Bitmap,
                transition: Transition<in Bitmap?>?
            ) {
                val layoutParams = imageView.layoutParams as ConstraintLayout.LayoutParams
                layoutParams.dimensionRatio =
                    "${resource.width}:${resource.height}"
                imageView.layoutParams = layoutParams
                GlideUtil.load(context,this@loadLongImage,imageView,0)
            }
        })
}
 
fun Double.formatDistance() = if(this>1000) "%.2fkm".format(this/1000) else "%dm".format(this.toInt())
 
//全局登录校验
fun Activity.checkLogin(toLogin:Boolean = false):Boolean{
    return if (SPUtils.instance().getString(Const.User.TOKEN).isNullOrEmpty()){
        if (toLogin){
            toast("请先登录")
            startActivity<LoginActivity>()
        }
        false
    } else
        true
}
 
fun Fragment.checkLogin(toLogin:Boolean = false):Boolean{
    return if (SPUtils.instance().getString(Const.User.TOKEN).isNullOrEmpty()){
        if (toLogin){
            requireContext().toast("请先登录")
            startActivity<LoginActivity>()
        }
        false
    } else
        true
}