Files
assistant-android/app/src/main/java/com/gh/common/util/FloatingBackViewManager.kt
2023-01-06 19:20:39 +08:00

121 lines
3.5 KiB
Kotlin

package com.gh.common.util
import android.app.Activity
import android.os.Build
import android.view.Gravity
import android.view.View
import android.widget.TextView
import com.gh.gamecenter.R
import com.gh.gamecenter.common.utils.dip2px
import com.gh.gamecenter.energy.EnergyBridge
import com.lightgame.utils.Util_System_Keyboard
import com.lzf.easyfloat.EasyFloat
import com.lzf.easyfloat.enums.ShowPattern
import com.lzf.easyfloat.enums.SidePattern
/**
* 返回小浮窗管理类
* 支持两种类型,网页活动(type_activity) 和 积分任务(type_task)
*
* 两种浮窗冲突,显示其中一个的时候就会把另一个判定为隐藏
*/
object FloatingBackViewManager {
const val TYPE_ACTIVITY = "type_activity"
const val TYPE_TASK = "type_task"
private const val FLOATING_BACK_VIEW = "floating_back_view"
private var mType = ""
private var mActivityUrl = ""
private var mLastPositionY = 114F.dip2px()
/**
* 显示返回小浮窗
*/
fun showBackView(activity: Activity) {
// 不支持 Android 4.1 的设备
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN) return
EasyFloat.with(activity)
.setLayout(R.layout.layout_task_back)
.setTag(FLOATING_BACK_VIEW)
.setAnimator(null)
.setGravity(Gravity.TOP.xor(Gravity.START), 0, mLastPositionY)
.setSidePattern(SidePattern.LEFT)
.setShowPattern(ShowPattern.CURRENT_ACTIVITY)
.registerCallback {
createResult { _, _, view ->
val titleView = view?.findViewById<TextView>(R.id.titleTv)
view?.setOnClickListener {
// 先收起键盘
Util_System_Keyboard.hideSoftKeyboard(activity)
if (mType == TYPE_ACTIVITY) {
titleView?.text = "返回活动"
DirectUtils.directToWebView(activity, mActivityUrl, ("返回活动浮窗"))
} else if (mType == TYPE_TASK) {
titleView?.text = "返回任务"
activity.startActivity(EnergyBridge.getEnergyCenterIntent(activity))
}
disableBackView()
}
}
dragEnd { view ->
// 记录停止拖动的最后位置
view.findViewById<View>(R.id.titleTv)?.apply {
val outLocation = IntArray(2)
getLocationOnScreen(outLocation)
val yOffset = outLocation[1]
mLastPositionY = yOffset
}
}
}
.show()
}
/**
* 隐藏返回小浮窗
*/
@JvmStatic
fun dismissBackView() {
EasyFloat.dismiss(FLOATING_BACK_VIEW)
}
fun getType(): String {
return mType
}
/**
* 启用返回小浮窗
* @param type 类型
* @param activityUrl 类型为活动的时候用的地址
*/
fun enableBackView(type: String, activityUrl: String = "") {
mType = type
mActivityUrl = activityUrl
}
/**
* 停用返回小浮窗
*/
@JvmStatic
fun disableBackView() {
mType = ""
mActivityUrl = ""
}
/**
* 返回小浮窗类型是否为活动
*/
fun isTypeActivity(): Boolean {
return mType == TYPE_ACTIVITY
}
}