SetupActivity.kt raw

   1  package io.github.domi04151309.alwayson.activities
   2  
   3  import android.Manifest
   4  import android.content.Intent
   5  import android.content.pm.PackageManager
   6  import android.os.Bundle
   7  import android.provider.Settings
   8  import android.text.format.DateFormat
   9  import android.widget.Button
  10  import android.widget.Toast
  11  import androidx.core.app.ActivityCompat
  12  import androidx.fragment.app.Fragment
  13  import androidx.fragment.app.FragmentTransaction
  14  import androidx.preference.PreferenceManager
  15  import com.google.android.material.elevation.SurfaceColors
  16  import io.github.domi04151309.alwayson.R
  17  import io.github.domi04151309.alwayson.activities.setup.DrawOverOtherAppsFragment
  18  import io.github.domi04151309.alwayson.activities.setup.PhoneStateFragment
  19  import io.github.domi04151309.alwayson.helpers.P
  20  
  21  class SetupActivity : BaseActivity() {
  22      private var currentFragment = DRAW_OVER_OTHER_APPS_FRAGMENT
  23      private var isActionRequired = false
  24  
  25      override fun onCreate(savedInstanceState: Bundle?) {
  26          super.onCreate(savedInstanceState)
  27          setContentView(R.layout.activity_setup)
  28  
  29          window.statusBarColor = SurfaceColors.SURFACE_0.getColor(this)
  30  
  31          val prefsEditor = PreferenceManager.getDefaultSharedPreferences(this).edit()
  32          swapContentFragment(DrawOverOtherAppsFragment(), DRAW_OVER_OTHER_APPS_FRAGMENT)
  33  
  34          if (DateFormat.is24HourFormat(this)) {
  35              prefsEditor.putBoolean(P.USE_12_HOUR_CLOCK, false)
  36                  .apply()
  37          } else {
  38              prefsEditor.putBoolean(P.USE_12_HOUR_CLOCK, true).apply()
  39          }
  40  
  41          prefsEditor.putInt(P.DOUBLE_TAP_SPEED, P.DOUBLE_TAP_SPEED_DEFAULT).apply()
  42  
  43          findViewById<Button>(R.id.skipBtn).setOnClickListener {
  44              when (currentFragment) {
  45                  NO_FRAGMENT ->
  46                      swapContentFragment(DrawOverOtherAppsFragment(), DRAW_OVER_OTHER_APPS_FRAGMENT)
  47  
  48                  DRAW_OVER_OTHER_APPS_FRAGMENT ->
  49                      swapContentFragment(PhoneStateFragment(), PHONE_STATE_FRAGMENT)
  50  
  51                  PHONE_STATE_FRAGMENT ->
  52                      startActivity(Intent(this, MainActivity::class.java))
  53              }
  54          }
  55  
  56          findViewById<Button>(R.id.continueBtn).setOnClickListener {
  57              when (currentFragment) {
  58                  NO_FRAGMENT -> {
  59                      swapContentFragment(DrawOverOtherAppsFragment(), DRAW_OVER_OTHER_APPS_FRAGMENT)
  60                  }
  61  
  62                  DRAW_OVER_OTHER_APPS_FRAGMENT -> {
  63                      if (Settings.canDrawOverlays(this)) {
  64                          swapContentFragment(PhoneStateFragment(), PHONE_STATE_FRAGMENT)
  65                      } else {
  66                          startActivity(Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION))
  67                          isActionRequired = true
  68                      }
  69                  }
  70  
  71                  PHONE_STATE_FRAGMENT -> {
  72                      if (applicationContext.checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
  73                          != PackageManager.PERMISSION_GRANTED
  74                      ) {
  75                          ActivityCompat.requestPermissions(
  76                              this,
  77                              arrayOf(Manifest.permission.READ_PHONE_STATE),
  78                              0,
  79                          )
  80                      } else {
  81                          prefsEditor.putBoolean("setup_complete", true).apply()
  82                          startActivity(Intent(this, MainActivity::class.java))
  83                      }
  84                  }
  85              }
  86          }
  87      }
  88  
  89      override fun onStart() {
  90          super.onStart()
  91          if (isActionRequired) {
  92              when (currentFragment) {
  93                  DRAW_OVER_OTHER_APPS_FRAGMENT -> {
  94                      if (!Settings.canDrawOverlays(this)) {
  95                          Toast.makeText(this, R.string.setup_error, Toast.LENGTH_LONG).show()
  96                      } else {
  97                          swapContentFragment(PhoneStateFragment(), PHONE_STATE_FRAGMENT)
  98                      }
  99                  }
 100              }
 101              isActionRequired = false
 102          }
 103      }
 104  
 105      @Deprecated("Deprecated in Java")
 106      override fun onBackPressed() {
 107          super.onBackPressed()
 108          if (currentFragment > NO_FRAGMENT) currentFragment--
 109      }
 110  
 111      private fun swapContentFragment(
 112          fragment: Fragment,
 113          id: Byte,
 114      ) {
 115          currentFragment = id
 116          supportFragmentManager.beginTransaction()
 117              .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
 118              .replace(R.id.content, fragment, null)
 119              .addToBackStack(null)
 120              .commitAllowingStateLoss()
 121      }
 122  
 123      companion object {
 124          const val NO_FRAGMENT: Byte = 0
 125          const val DRAW_OVER_OTHER_APPS_FRAGMENT: Byte = 1
 126          const val PHONE_STATE_FRAGMENT: Byte = 2
 127      }
 128  }
 129