Skip to content

Commit

Permalink
Fix some compile warnings
Browse files Browse the repository at this point in the history
Migrate to Androidx Activity Result APIs
  • Loading branch information
yuhan6665 committed Jul 30, 2021
1 parent 0b52c78 commit c033358
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 106 deletions.
72 changes: 34 additions & 38 deletions V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import android.view.KeyEvent
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import com.tbruyelle.rxpermissions.RxPermissions
import com.tencent.mmkv.MMKV
import com.v2ray.ang.AppConfig
Expand All @@ -43,17 +44,16 @@ import java.net.URL
import java.util.concurrent.TimeUnit

class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener {
companion object {
private const val REQUEST_CODE_VPN_PREPARE = 0
private const val REQUEST_SCAN = 1
private const val REQUEST_FILE_CHOOSER = 2
private const val REQUEST_SCAN_URL = 3
}
private lateinit var binding: ActivityMainBinding

private val adapter by lazy { MainRecyclerAdapter(this) }
private val mainStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_MAIN, MMKV.MULTI_PROCESS_MODE) }
private val settingsStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_SETTING, MMKV.MULTI_PROCESS_MODE) }
private val requestVpnPermission = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
startV2Ray()
}
}
private var mItemTouchHelper: ItemTouchHelper? = null
val mainViewModel: MainViewModel by lazy { ViewModelProviders.of(this).get(MainViewModel::class.java) }

Expand All @@ -73,7 +73,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
if (intent == null) {
startV2Ray()
} else {
startActivityForResult(intent, REQUEST_CODE_VPN_PREPARE)
requestVpnPermission.launch(intent)
}
} else {
startV2Ray()
Expand Down Expand Up @@ -170,38 +170,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
super.onPause()
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_CODE_VPN_PREPARE ->
if (resultCode == RESULT_OK) {
startV2Ray()
}
REQUEST_SCAN ->
if (resultCode == RESULT_OK) {
importBatchConfig(data?.getStringExtra("SCAN_RESULT"))
}
REQUEST_FILE_CHOOSER -> {
val uri = data?.data
if (resultCode == RESULT_OK && uri != null) {
readContentFromUri(uri)
}
}
REQUEST_SCAN_URL ->
if (resultCode == RESULT_OK) {
importConfigCustomUrl(data?.getStringExtra("SCAN_RESULT"))
}
}
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return true
}

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
R.id.import_qrcode -> {
importQRcode(REQUEST_SCAN)
importQRcode(true)
true
}
R.id.import_clipboard -> {
Expand Down Expand Up @@ -236,7 +212,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
true
}
R.id.import_config_custom_url_scan -> {
importQRcode(REQUEST_SCAN_URL)
importQRcode(false)
true
}

Expand Down Expand Up @@ -279,7 +255,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
/**
* import config from qrcode
*/
fun importQRcode(requestCode: Int): Boolean {
fun importQRcode(forConfig: Boolean): Boolean {
// try {
// startActivityForResult(Intent("com.google.zxing.client.android.SCAN")
// .addCategory(Intent.CATEGORY_DEFAULT)
Expand All @@ -289,14 +265,29 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
.request(Manifest.permission.CAMERA)
.subscribe {
if (it)
startActivityForResult(Intent(this, ScannerActivity::class.java), requestCode)
if (forConfig)
scanQRCodeForConfig.launch(Intent(this, ScannerActivity::class.java))
else
scanQRCodeForUrlToCustomConfig.launch(Intent(this, ScannerActivity::class.java))
else
toast(R.string.toast_permission_denied)
}
// }
return true
}

private val scanQRCodeForConfig = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
importBatchConfig(it.data?.getStringExtra("SCAN_RESULT"))
}
}

private val scanQRCodeForUrlToCustomConfig = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
importConfigCustomUrl(it.data?.getStringExtra("SCAN_RESULT"))
}
}

/**
* import config from clipboard
*/
Expand Down Expand Up @@ -443,14 +434,19 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
intent.addCategory(Intent.CATEGORY_OPENABLE)

try {
startActivityForResult(
Intent.createChooser(intent, getString(R.string.title_file_chooser)),
REQUEST_FILE_CHOOSER)
chooseFileForCustomConfig.launch(Intent.createChooser(intent, getString(R.string.title_file_chooser)))
} catch (ex: android.content.ActivityNotFoundException) {
toast(R.string.toast_require_file_manager)
}
}

private val chooseFileForCustomConfig = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
val uri = it.data?.data
if (it.resultCode == RESULT_OK && uri != null) {
readContentFromUri(uri)
}
}

/**
* read content from uri
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.v2ray.ang.R
import com.v2ray.ang.util.Utils
import kotlinx.android.synthetic.main.fragment_routing_settings.*
import android.view.MenuInflater
import androidx.activity.result.contract.ActivityResultContracts
import com.tbruyelle.rxpermissions.RxPermissions
import com.v2ray.ang.AppConfig
import com.v2ray.ang.extension.toast
Expand All @@ -22,8 +23,6 @@ import java.net.URL
class RoutingSettingsFragment : Fragment() {
companion object {
private const val routing_arg = "routing_arg"
private const val REQUEST_SCAN_REPLACE = 11
private const val REQUEST_SCAN_APPEND = 12
}

val defaultSharedPreferences by lazy { PreferenceManager.getDefaultSharedPreferences(context) }
Expand Down Expand Up @@ -68,11 +67,11 @@ class RoutingSettingsFragment : Fragment() {
true
}
R.id.scan_replace -> {
scanQRcode(REQUEST_SCAN_REPLACE)
scanQRcode(true)
true
}
R.id.scan_append -> {
scanQRcode(REQUEST_SCAN_APPEND)
scanQRcode(false)
true
}
R.id.default_rules -> {
Expand All @@ -82,7 +81,7 @@ class RoutingSettingsFragment : Fragment() {
else -> super.onOptionsItemSelected(item)
}

fun scanQRcode(requestCode: Int): Boolean {
fun scanQRcode(forReplace: Boolean): Boolean {
// try {
// startActivityForResult(Intent("com.google.zxing.client.android.SCAN")
// .addCategory(Intent.CATEGORY_DEFAULT)
Expand All @@ -92,14 +91,31 @@ class RoutingSettingsFragment : Fragment() {
.request(Manifest.permission.CAMERA)
.subscribe {
if (it)
startActivityForResult(Intent(activity, ScannerActivity::class.java), requestCode)
if (forReplace)
scanQRCodeForReplace.launch(Intent(activity, ScannerActivity::class.java))
else
scanQRCodeForAppend.launch(Intent(activity, ScannerActivity::class.java))
else
activity?.toast(R.string.toast_permission_denied)
}
// }
return true
}

private val scanQRCodeForReplace = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
val content = it.data?.getStringExtra("SCAN_RESULT")
et_routing_content.text = Utils.getEditable(content!!)
}
}

private val scanQRCodeForAppend = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
val content = it.data?.getStringExtra("SCAN_RESULT")
et_routing_content.text = Utils.getEditable("${et_routing_content.text},$content")
}
}

fun setDefaultRules(): Boolean {
var url = AppConfig.v2rayCustomRoutingListUrl
when (requireArguments().getString(routing_arg)) {
Expand Down Expand Up @@ -129,22 +145,4 @@ class RoutingSettingsFragment : Fragment() {
}
return true
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_SCAN_REPLACE ->
if (resultCode == RESULT_OK) {
val content = data?.getStringExtra("SCAN_RESULT")
et_routing_content.text = Utils.getEditable(content!!)
}
REQUEST_SCAN_APPEND ->
if (resultCode == RESULT_OK) {
val content = data?.getStringExtra("SCAN_RESULT")
et_routing_content.text = Utils.getEditable("${et_routing_content.text},$content")
}
}
}


}
33 changes: 13 additions & 20 deletions V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScScannerActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,40 @@ import com.tbruyelle.rxpermissions.RxPermissions
import com.v2ray.ang.R
import com.v2ray.ang.util.AngConfigManager
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import com.v2ray.ang.extension.toast

class ScScannerActivity : BaseActivity() {
companion object {
private const val REQUEST_SCAN = 1
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_none)
importQRcode(REQUEST_SCAN)
importQRcode()
}

fun importQRcode(requestCode: Int): Boolean {
fun importQRcode(): Boolean {
RxPermissions(this)
.request(Manifest.permission.CAMERA)
.subscribe {
if (it)
startActivityForResult(Intent(this, ScannerActivity::class.java), requestCode)
scanQRCode.launch(Intent(this, ScannerActivity::class.java))
else
toast(R.string.toast_permission_denied)
}

return true
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_SCAN ->
if (resultCode == RESULT_OK) {
val count = AngConfigManager.importBatchConfig(data?.getStringExtra("SCAN_RESULT"), "")
if (count > 0) {
toast(R.string.toast_success)
} else {
toast(R.string.toast_failure)
}
startActivity(Intent(this, MainActivity::class.java))
}
private val scanQRCode = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
val count = AngConfigManager.importBatchConfig(it.data?.getStringExtra("SCAN_RESULT"), "")
if (count > 0) {
toast(R.string.toast_success)
} else {
toast(R.string.toast_failure)
}
startActivity(Intent(this, MainActivity::class.java))
}
finish()
}

}
37 changes: 13 additions & 24 deletions V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,14 @@ import android.content.Intent
import android.graphics.BitmapFactory
import android.view.Menu
import android.view.MenuItem
import androidx.activity.result.contract.ActivityResultContracts
import com.google.zxing.BarcodeFormat
import com.tbruyelle.rxpermissions.RxPermissions
import com.v2ray.ang.R
import com.v2ray.ang.extension.toast
import com.v2ray.ang.util.QRCodeDecoder

class ScannerActivity : BaseActivity(), ZXingScannerView.ResultHandler {
companion object {
private const val REQUEST_FILE_CHOOSER = 2
}


private var mScannerView: ZXingScannerView? = null

Expand Down Expand Up @@ -59,7 +56,7 @@ class ScannerActivity : BaseActivity(), ZXingScannerView.ResultHandler {
// mScannerView!!.resumeCameraPreview(this)
}

fun finished(text: String) {
private fun finished(text: String) {
val intent = Intent()
intent.putExtra("SCAN_RESULT", text)
setResult(Activity.RESULT_OK, intent)
Expand Down Expand Up @@ -97,30 +94,22 @@ class ScannerActivity : BaseActivity(), ZXingScannerView.ResultHandler {
//intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)

try {
startActivityForResult(
Intent.createChooser(intent, getString(R.string.title_file_chooser)),
REQUEST_FILE_CHOOSER)
chooseFile.launch(Intent.createChooser(intent, getString(R.string.title_file_chooser)))
} catch (ex: android.content.ActivityNotFoundException) {
toast(R.string.toast_require_file_manager)
}
}


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_FILE_CHOOSER -> {
val uri = data?.data
if (resultCode == RESULT_OK && uri != null) {
try {
val bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(uri))
val text = QRCodeDecoder.syncDecodeQRCode(bitmap)
finished(text)
} catch (e: Exception) {
e.printStackTrace()
toast(e.message.toString())
}
}
private val chooseFile = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
val uri = it.data?.data
if (it.resultCode == RESULT_OK && uri != null) {
try {
val bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(uri))
val text = QRCodeDecoder.syncDecodeQRCode(bitmap)
finished(text)
} catch (e: Exception) {
e.printStackTrace()
toast(e.message.toString())
}
}
}
Expand Down

0 comments on commit c033358

Please sign in to comment.