package com.casic.smarttube.extensions import android.content.Context import com.casic.smarttube.BuildConfig import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener import com.casic.smarttube.model.ErrorMessageModel import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.extensions.dateToTimestamp import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject import top.zibin.luban.Luban import top.zibin.luban.OnCompressListener import java.io.File import java.text.SimpleDateFormat import java.util.Date import java.util.Locale import java.util.regex.Pattern /** * String扩展方法 */ fun String.separateResponseCode(): Int { if (this.isBlank()) { return 404 } return JSONObject(this).getInt("code") } fun String.toErrorMessage(): String { val errorModel = Gson().fromJson<ErrorMessageModel>( this, object : TypeToken<ErrorMessageModel>() {}.type ) return errorModel.message.toString() } /** * 下载路径为 http://xx.com/static/ 拼接downloadUrl * */ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } //拼接图片地址 fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } //电量转图片 fun String.toBatteryImage(): Int { if (this.isBlank()) { return R.drawable.ic_battery_0 } try { when (this.toInt()) { in 0..10 -> return R.drawable.ic_battery_0 in 11..30 -> return R.drawable.ic_battery_1 in 31..60 -> return R.drawable.ic_battery_2 in 61..90 -> return R.drawable.ic_battery_3 in 91..100 -> return R.drawable.ic_battery_4 } } catch (e: ClassCastException) { e.printStackTrace() } return R.drawable.ic_battery_0 } //极好点: RSRP>-85dBm; SINR>25 //好点: RSRP=-85~-95dBm;SINR:16-25 //中点: RSRP=-95~-105dBm;SINR:11-15 //差点: RSRP=-105~-115dBm;SINR:3-10 //极差点: RSRP<-115dB;SINR<3 //信号转图片 fun String.toSignalImage(): Int { if (this.isBlank()) { return R.drawable.ic_signal_1 } try { return when { this.toInt() < -115 -> R.drawable.ic_signal_1 this.toInt() >= -115 && this.toInt() < -105 -> R.drawable.ic_signal_2 this.toInt() >= -105 && this.toInt() < -95 -> R.drawable.ic_signal_3 this.toInt() >= -95 && this.toInt() < -85 -> R.drawable.ic_signal_4 else -> R.drawable.ic_signal_5 } } catch (e: ClassCastException) { e.printStackTrace() } return R.drawable.ic_signal_1 } fun String.toTextColor(context: Context): Int { if (this.isBlank()) { return R.color.battery_low.convertColor(context) } try { when (this.toInt()) { in 0..10 -> return R.color.battery_low.convertColor(context) in 11..30 -> return R.color.battery_medium_low.convertColor(context) in 31..60 -> return R.color.battery_medium.convertColor(context) in 61..90 -> return R.color.battery_medium_high.convertColor(context) in 91..100 -> return R.color.battery_high.convertColor(context) } } catch (e: ClassCastException) { e.printStackTrace() } return R.color.battery_low.convertColor(context) } /** * 时间转月日 */ fun String.dateToMonthDay(): String { val timestamp = this.dateToTimestamp() val dateFormat = SimpleDateFormat("MM-dd HH:mm", Locale.CHINA) return dateFormat.format(Date(timestamp)) } fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) .ignoreBy(100) .setTargetDir(context.createCompressImageDir().toString()) .filter { !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) } .setCompressListener(object : OnCompressListener { override fun onStart() { } override fun onSuccess(file: File) { listener.onSuccess(file) } override fun onError(e: Throwable) { listener.onError(e) } }).launch() } fun String.isNumber(): Boolean { if (this.isBlank()) { return false } val pattern = Pattern.compile("[0-9]*") return pattern.matcher(this).matches() } //val currentVersion = "1.0.3" //val serverVersion = "1.0.1" fun String.compareVersion(): Boolean { return try { val versionParts = this.split(".").map { it.trim() } if (versionParts.size < 3) { throw IllegalArgumentException("Version string must have at least three parts") } val version = versionParts.mapIndexed { index, part -> if (part.isEmpty()) { throw NumberFormatException("Empty version part at index $index") } part.toInt() } val versionCode = version.getOrElse(0) { 0 } * 100 + version.getOrElse(1) { 0 } * 10 + version.getOrElse(2) { 0 } versionCode <= BuildConfig.VERSION_CODE } catch (e: Exception) { false } }