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