SpoofActivity: Use CreateDocument contract for exporting properties

This lets us not request external storage manager permissions

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-06-01 23:21:45 +08:00
parent 71e5da32b4
commit a0f13e6040

View File

@@ -19,49 +19,34 @@
package com.aurora.store.view.ui.spoof
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.provider.Settings
import android.view.Menu
import android.view.MenuItem
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.aurora.extensions.isRAndAbove
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
import nl.komponents.kovenant.task
import nl.komponents.kovenant.ui.failUi
import nl.komponents.kovenant.ui.successUi
import java.io.FileOutputStream
class SpoofActivity : BaseActivity() {
private lateinit var B: ActivityGenericPagerBinding
private val startForStorageManagerResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (isRAndAbove() && Environment.isExternalStorageManager()) {
exportDeviceConfig()
} else {
toast(R.string.permissions_denied)
}
}
private val startForPermissions =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
if (it) exportDeviceConfig() else toast(R.string.permissions_denied)
private val startForDocument =
registerForActivityResult(ActivityResultContracts.CreateDocument("text/x-java-properties")) {
if (it != null) exportDeviceConfig(it) else toast(R.string.toast_export_failed)
}
override fun onConnected() {
@@ -96,25 +81,7 @@ class SpoofActivity : BaseActivity() {
return true
}
R.id.action_export -> {
if (isRAndAbove()) {
if (Environment.isExternalStorageManager()) {
exportDeviceConfig()
} else {
startForStorageManagerResult.launch(
Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
)
}
} else {
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
) {
exportDeviceConfig()
} else {
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
}
startForDocument.launch("aurora_store_${Build.BRAND}_${Build.DEVICE}.properties")
}
}
return super.onOptionsItemSelected(item)
@@ -144,16 +111,11 @@ class SpoofActivity : BaseActivity() {
}.attach()
}
private fun exportDeviceConfig() {
private fun exportDeviceConfig(uri: Uri) {
task {
NativeDeviceInfoProvider(this)
.getNativeDeviceProperties()
.store(
FileOutputStream(
PathUtil.getExternalPath() + "/native-device.properties.export"
),
"DEVICE_CONFIG"
)
.store(contentResolver.openOutputStream(uri), "DEVICE_CONFIG")
} successUi {
toast(R.string.toast_export_success)
} failUi {