Commit 725a51a7 authored by wanglei's avatar wanglei

...

parent 09aaa6f5
package com.base.browserwhite.bean
class NewsBean(
val imageUri: String = "",
val tittle: String = "",
val webIcon: String = "",
val webSite: String,
val time: Long = 0
val newsId: Long = 0,
val publishTime: Long = 0,
val headline: String = "",//标题
val orgImgPath: String = "",//原媒体图片
val mediaName:String="",
val mediaIcon:String="",//媒体icon
val categoryId:Int=0,
val type:Int=0,
val linkPath:String="",//网站链接
)
\ No newline at end of file
......@@ -8,6 +8,7 @@ import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.utils.AppPreferences
import com.base.browserwhite.utils.BarUtils
import com.base.browserwhite.utils.KotlinExt.toFormatSize
import com.google.gson.JsonObject
class ResultActivity : BaseActivity<ActivityResultBinding>() {
......@@ -22,7 +23,6 @@ class ResultActivity : BaseActivity<ActivityResultBinding>() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
val from = intent.getStringExtra("from")
when (from) {
JUNK_CLEANER -> {
......
package com.base.browserwhite.utils
import android.util.Base64
import java.security.SecureRandom
import javax.crypto.Cipher
import javax.crypto.spec.GCMParameterSpec
import javax.crypto.spec.SecretKeySpec
object AESHelper {
private const val aesKey = "g78bbcrtr4iaeekw"
private val cipher by lazy {
Cipher.getInstance("AES/GCM/NoPadding")
}
fun encrypt(content: String): String {
try {
val iv = ByteArray(12).apply {
SecureRandom().nextBytes(this)
}
val contentBytes = content.toByteArray(Charsets.UTF_8)
val params = GCMParameterSpec(128, iv)
cipher.init(
Cipher.ENCRYPT_MODE,
secretKey, params
)
val encryptData = cipher.doFinal(contentBytes)
if (encryptData.size != contentBytes.size + 16) {
throw IllegalStateException("Encryption failed")
}
val message = ByteArray(12 + contentBytes.size + 16)
System.arraycopy(iv, 0, message, 0, 12)
System.arraycopy(encryptData, 0, message, 12, encryptData.size)
return String(Base64.encode(message, Base64.NO_WRAP), Charsets.UTF_8)
} catch (_: Exception) {
}
return content
}
@Synchronized
fun decrypt(content: String): String {
try {
val con = content.replace(" ".toRegex(), "+")
val contentByte = Base64.decode(con, Base64.NO_WRAP)
require(contentByte.size >= 12 + 16)
val params = GCMParameterSpec(128, contentByte, 0, 12)
cipher.init(
Cipher.DECRYPT_MODE,
secretKey, params
)
val decryptData = cipher.doFinal(contentByte, 12, contentByte.size - 12)
return String(decryptData, Charsets.UTF_8)
} catch (_: Exception) {
}
return content
}
private val secretKey by lazy {
SecretKeySpec(aesKey.toByteArray(), "AES")
}
}
\ No newline at end of file
package com.base.browserwhite.utils
object ConfigHelper {
const val privacyPolicy = "https://sites.google.com/view/dumpsterphoto-recovery/home"
// 域名
const val eventUrl = "https://rp.rocioxyn.xyz"
const val apiUrl = "https://api.rocioxyn.xyz"
//admob test id
const val openAdmobIdTest = "ca-app-pub-3940256099942544/9257395921"
const val bannerAdmobIdTest = "ca-app-pub-3940256099942544/9214589741"
const val interAdmobIdTest = "ca-app-pub-3940256099942544/1033173712"
const val nativeAdmobIdTest = "ca-app-pub-3940256099942544/2247696110"
// admob广告id
const val interAdmobId = "ca-app-pub-3940256099942544/1033173111"
const val nativeAdmobId = "ca-app-pub-3940256099942544/2247696111"
const val openAdmobId = "/6499/example/app-open"
const val bannerAdmobId = "ca-app-pub-3940256099942544/9214581111"
//max id
const val interAdMaxId = "b31e7f6d11ee659e"
const val nativeAdMaxId = "96e8fe78b0efc5d1"
const val openAdMaxId = "d1d943cdd3127c90"
const val bannerMaxId = "ca-app-pub-3940256099942544/9214589741"
//一定展示大图广告
var mustShowNativeAd: Boolean = false
// 正式包名
const val packageName = "com.pdfninja.pdfreaderandimagetopdf.bmw"
val noLoadingActivities = listOf(
"full", // 过滤全屏广告
"adActivity",
"AdActivity",
"AppLovinFullscreenActivity",
// SplashActivity::class.java.simpleName
// 返回前台时不跳转启动页的 activity
)
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ object LogEx {
val isOpen = true
val filterTAG = arrayOf(
"FileHexEx",
"MediaStoreUtils",
)
fun logDebug(tag: String, content: String, isMust: Boolean = false) {
......
package com.base.browserwhite.utils
import com.base.browserwhite.BuildConfig
import com.base.browserwhite.bean.NewsBean
import com.base.browserwhite.bean.WebSiteGroupBean
import com.google.gson.Gson
import com.google.gson.JsonParser
import com.google.gson.reflect.TypeToken
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import okhttp3.Call
import okhttp3.Callback
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response
import okhttp3.logging.HttpLoggingInterceptor
import org.json.JSONObject
import java.io.IOException
import java.lang.reflect.Type
object NewsUtils {
private val TAG = "NewsUtils"
private val url by lazy {
val pkg = ConfigHelper.packageName
val pkgSubString = pkg.filter { it.isLowerCase() }.substring(4, 9)
val url = StringBuilder("${ConfigHelper.apiUrl}/${pkgSubString}ne")
url.append("?pkg=$pkg")
url.toString()
}
fun requestNews(
categoryId: Int,
pageNumber: Long? = null,
beanCallBack: (beanList: List<NewsBean>) -> Unit
) {
val pkg = ConfigHelper.packageName
val s = JSONObject()
s.put("categoryId", categoryId)
pageNumber?.let {
s.put("pageNumber", pageNumber)
}
val s2 = JSONObject()
.put("${pkg}_3", AppPreferences.getInstance().getString("Equipment", ""))
.put("${pkg}_4", AppPreferences.getInstance().getString("Manufacturer", ""))
.put("${pkg}_5", AppPreferences.getInstance().getString("svn", ""))
.put("${pkg}_8", BuildConfig.VERSION_NAME)
.put("${pkg}_9", AppPreferences.getInstance().getString("uuid", ""))
.put("${pkg}_10", AppPreferences.getInstance().getString("gid", ""))
.put("${pkg}_13", "android")
.put("${pkg}_14", BuildConfig.VERSION_CODE)
.put("${pkg}_15", "google")
.put("${pkg}_24", BuildConfig.BUILD_TYPE)
val data = JSONObject()
.put("data", s)
.put("bp", s2)
.toString()
val body = AESHelper.encrypt(data)
.toRequestBody("application/json;charset=utf-8".toMediaTypeOrNull())
val client = OkHttpClient.Builder().apply {
if (BuildConfig.DEBUG) {
addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
}
}.build()
val request = Request.Builder()
.url(url)
.post(body)
.build()
CoroutineScope(Dispatchers.IO).launch {
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
LogEx.logDebug(TAG, "onFailure $e")
}
override fun onResponse(call: Call, response: Response) {
response.body?.string()?.let {
LogEx.logDebug(TAG, "NewsUtils it=$it")
val dataJson = getDataJson(it)
LogEx.logDebug(TAG, "dataJson dataJson=$dataJson")
val list = parseNewsBean(dataJson)
LogEx.logDebug(TAG, "${list.size}")
beanCallBack.invoke(list)
}
}
})
}
}
private fun getDataJson(jsonString: String): String {
val jsonRootObject = JsonParser.parseString(jsonString).getAsJsonObject()
return jsonRootObject["result"].getAsJsonObject()["data"].toString()
}
private fun parseNewsBean(jsonString: String): List<NewsBean> {
val newsBeanListType: Type = object : TypeToken<List<NewsBean>>() {}.type
return Gson().fromJson(jsonString, newsBeanListType)
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment