| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package com.example.modifier
- import android.content.Context
- import android.content.DialogInterface
- import android.content.Intent
- import android.net.Uri
- import android.os.Bundle
- import android.provider.Settings
- import android.util.Log
- import androidx.activity.enableEdgeToEdge
- import androidx.activity.result.contract.ActivityResultContracts
- import androidx.appcompat.app.AppCompatActivity
- import androidx.navigation.fragment.NavHostFragment
- import androidx.navigation.ui.NavigationUI.setupWithNavController
- import com.example.modifier.databinding.ActivityMainBinding
- import com.example.modifier.service.ModifierService
- import com.example.modifier.utils.ROOT_ACCESS
- import com.example.modifier.utils.enableAccessibility
- import com.example.modifier.utils.enableOverlay
- import com.example.modifier.utils.getIPAddress
- import com.example.modifier.utils.hasRootAccess
- import com.google.android.material.dialog.MaterialAlertDialogBuilder
- import kotlinx.coroutines.CoroutineScope
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.delay
- import kotlinx.coroutines.launch
- import kotlinx.coroutines.withContext
- class MainActivity : AppCompatActivity() {
- private lateinit var mBinding: ActivityMainBinding
- var r = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
- requestSystemAlertWindowPermission()
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- enableEdgeToEdge()
- mBinding = ActivityMainBinding.inflate(layoutInflater)
- setContentView(mBinding.root)
- val navHostFragment =
- supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
- val controller = navHostFragment.navController
- setupWithNavController(mBinding.nav, controller)
- CoroutineScope(Dispatchers.IO).launch {
- if (hasRootAccess()) {
- ROOT_ACCESS = true
- if (!enableAccessibility()) {
- val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- startActivity(intent)
- delay(1000);
- finish();
- }
- enableOverlay()
- } else {
- if (ModifierService.instance != null) {
- return@launch
- }
- //request system_alert permission
- withContext(Dispatchers.Main) {
- requestAccessibilityPermission()
- }
- }
- Log.i("getIPAddress", getIPAddress().joinToString())
- }
- }
- private fun requestSystemAlertWindowPermission(): Boolean {
- if (!Settings.canDrawOverlays(this)) {
- MaterialAlertDialogBuilder(this)
- .setTitle("Operation Needed")
- .setMessage("Enable System Alert Window Permission")
- .setCancelable(false)
- .setPositiveButton("OK") { _: DialogInterface?, _: Int ->
- val intent = Intent(
- Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
- Uri.parse("package:$packageName")
- )
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
- r.launch(intent)
- }
- .show()
- return false
- }
- return true
- }
- private fun requestAccessibilityPermission(): Boolean {
- if (ModifierService.instance == null) {
- MaterialAlertDialogBuilder(this@MainActivity)
- .setTitle("Operation Needed")
- .setMessage("Enable Accessibility Service")
- .setCancelable(false)
- .setPositiveButton("Open Settings") { _: DialogInterface?, _: Int ->
- val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
- r.launch(intent)
- }
- .show()
- return false
- }
- return true
- }
- }
|