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