SpoofActivity: Allow users to import spoof configs with open document contract
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user