SpoofActivity: Allow users to import spoof configs with open document contract

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-06-02 00:07:22 +08:00
parent a0f13e6040
commit 2f80ef1109
5 changed files with 52 additions and 4 deletions

View File

@@ -74,7 +74,7 @@ class SpoofDeviceProvider private constructor(var context: Context) {
private val spoofDevicesFromUser: List<Properties>
get() {
val deviceNames: MutableList<Properties> = ArrayList()
val defaultDir = File(PathUtil.getExternalPath())
val defaultDir = File(PathUtil.getSpoofDirectory(context))
val files = defaultDir.listFiles()
if (defaultDir.exists() && files != null) {
for (file in files) {

View File

@@ -24,6 +24,7 @@ import android.os.Environment
import com.aurora.extensions.isLAndAbove
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.File
import java.util.UUID
fun Context.getInternalBaseDirectory(): String {
return (getExternalFilesDir(null) ?: filesDir).path
@@ -86,6 +87,17 @@ object PathUtil {
fun needsStorageManagerPerm(fileList: List<File>): Boolean {
return fileList.any { it.type == File.FileType.OBB || it.type == File.FileType.PATCH }
}
fun getSpoofDirectory(context: Context): String {
return "${context.getInternalBaseDirectory()}/SpoofConfigs"
}
fun getNewEmptySpoofConfig(context: Context): java.io.File {
val file = java.io.File("${getSpoofDirectory(context)}/${UUID.randomUUID()}.properties")
file.parentFile?.mkdirs()
file.createNewFile()
return file
}
}
fun Context.isExternalStorageEnable(): Boolean {

View File

@@ -33,6 +33,7 @@ import com.aurora.extensions.toast
import com.aurora.store.R
import com.aurora.store.data.providers.NativeDeviceInfoProvider
import com.aurora.store.databinding.ActivityGenericPagerBinding
import com.aurora.store.util.PathUtil
import com.aurora.store.view.ui.commons.BaseActivity
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
@@ -44,8 +45,17 @@ class SpoofActivity : BaseActivity() {
private lateinit var B: ActivityGenericPagerBinding
private val startForDocument =
registerForActivityResult(ActivityResultContracts.CreateDocument("text/x-java-properties")) {
// Android is weird, even if export device config with proper mime type, it will refuse to open
// it again with same mime type
private val importMimeType = "application/octet-stream"
private val exportMimeType = "text/x-java-properties"
private val startForDocumentImport =
registerForActivityResult(ActivityResultContracts.OpenDocument()) {
if (it != null) importDeviceConfig(it) else toast(R.string.toast_import_failed)
}
private val startForDocumentExport =
registerForActivityResult(ActivityResultContracts.CreateDocument(exportMimeType)) {
if (it != null) exportDeviceConfig(it) else toast(R.string.toast_export_failed)
}
@@ -80,8 +90,12 @@ class SpoofActivity : BaseActivity() {
onBackPressedDispatcher.onBackPressed()
return true
}
R.id.action_import -> {
startForDocumentImport.launch(arrayOf(importMimeType))
}
R.id.action_export -> {
startForDocument.launch("aurora_store_${Build.BRAND}_${Build.DEVICE}.properties")
startForDocumentExport
.launch("aurora_store_${Build.BRAND}_${Build.DEVICE}.properties")
}
}
return super.onOptionsItemSelected(item)
@@ -111,6 +125,22 @@ class SpoofActivity : BaseActivity() {
}.attach()
}
private fun importDeviceConfig(uri: Uri) {
task {
contentResolver.openInputStream(uri)?.use { input ->
PathUtil.getNewEmptySpoofConfig(this).outputStream().use {
input.copyTo(it)
}
}
} successUi {
toast(R.string.toast_import_success)
recreate()
} failUi {
it.printStackTrace()
toast(R.string.toast_import_failed)
}
}
private fun exportDeviceConfig(uri: Uri) {
task {
NativeDeviceInfoProvider(this)