this is a squash of: * manager: introduce app package info API for webui-next (KernelSU-Next/KernelSU-Next@58167a4) * manager: sort a-z order for webui-next list packages api (KernelSU-Next/KernelSU-Next@4a9733c) * manager: implement getPackagesIcons and cacheAllPackageIcons api to webui-next (KernelSU-Next/KernelSU-Next@a361fa3) * manager/webui: let getPackagesIcons generate icon and store in cache as well when called (KernelSU-Next/KernelSU-Next@6afa86d) * POC: load icon app via ksu://icon/[packageName] (KernelSU-Next#674) (KernelSU-Next/KernelSU-Next@bc9927b) * manager: refine webui package manager (KOWX712/KernelSU@0400c42) Co-Authored-By: Rifat Azad <33044977+rifsxd@users.noreply.github.com> Co-Authored-By: Fahrez256Bit <167403685+fahrez256@users.noreply.github.com> Signed-off-by: KOWX712 <leecc0503@gmail.com> --------- Signed-off-by: KOWX712 <leecc0503@gmail.com> Co-authored-by: Rifat Azad <33044977+rifsxd@users.noreply.github.com> Co-authored-by: Fahrez256Bit <167403685+fahrez256@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
72 lines
2.4 KiB
Kotlin
72 lines
2.4 KiB
Kotlin
package com.sukisu.ultra
|
|
|
|
import android.app.Application
|
|
import android.system.Os
|
|
import androidx.lifecycle.ViewModelProvider
|
|
import androidx.lifecycle.ViewModelStore
|
|
import androidx.lifecycle.ViewModelStoreOwner
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.launch
|
|
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
|
import coil.Coil
|
|
import coil.ImageLoader
|
|
import com.dergoogler.mmrl.platform.Platform
|
|
import me.zhanghai.android.appiconloader.coil.AppIconFetcher
|
|
import me.zhanghai.android.appiconloader.coil.AppIconKeyer
|
|
import okhttp3.Cache
|
|
import okhttp3.OkHttpClient
|
|
import java.io.File
|
|
import java.util.Locale
|
|
|
|
lateinit var ksuApp: KernelSUApplication
|
|
|
|
class KernelSUApplication : Application(), ViewModelStoreOwner {
|
|
|
|
lateinit var okhttpClient: OkHttpClient
|
|
private val appViewModelStore by lazy { ViewModelStore() }
|
|
|
|
override fun onCreate() {
|
|
super.onCreate()
|
|
ksuApp = this
|
|
|
|
// For faster response when first entering superuser or webui activity
|
|
val superUserViewModel = ViewModelProvider(this)[SuperUserViewModel::class.java]
|
|
CoroutineScope(Dispatchers.Main).launch {
|
|
superUserViewModel.fetchAppList()
|
|
}
|
|
|
|
Platform.setHiddenApiExemptions()
|
|
|
|
val context = this
|
|
val iconSize = resources.getDimensionPixelSize(android.R.dimen.app_icon_size)
|
|
Coil.setImageLoader(
|
|
ImageLoader.Builder(context)
|
|
.components {
|
|
add(AppIconKeyer())
|
|
add(AppIconFetcher.Factory(iconSize, false, context))
|
|
}
|
|
.build()
|
|
)
|
|
|
|
val webroot = File(dataDir, "webroot")
|
|
if (!webroot.exists()) {
|
|
webroot.mkdir()
|
|
}
|
|
|
|
// Provide working env for rust's temp_dir()
|
|
Os.setenv("TMPDIR", cacheDir.absolutePath, true)
|
|
|
|
okhttpClient =
|
|
OkHttpClient.Builder().cache(Cache(File(cacheDir, "okhttp"), 10 * 1024 * 1024))
|
|
.addInterceptor { block ->
|
|
block.proceed(
|
|
block.request().newBuilder()
|
|
.header("User-Agent", "SukiSU/${BuildConfig.VERSION_CODE}")
|
|
.header("Accept-Language", Locale.getDefault().toLanguageTag()).build()
|
|
)
|
|
}.build()
|
|
}
|
|
override val viewModelStore: ViewModelStore
|
|
get() = appViewModelStore
|
|
} |