@@ -34,11 +34,7 @@ class MainActivity : AppCompatActivity() {
3434
3535 createChannel()
3636
37- requestPermission(this , Manifest .permission.SEND_SMS )
38- requestPermission(this , Manifest .permission.RECEIVE_SMS )
39- requestPermission(this , READ_PHONE_NUMBERS )
40- requestPermission(this , Manifest .permission.READ_PHONE_STATE )
41- requestPermission(this , Manifest .permission.RECEIVE_SMS )
37+ requestPermissions(this )
4238
4339 setOwner(getPhoneNumber(this ))
4440 setActiveStatus(this )
@@ -121,8 +117,35 @@ class MainActivity : AppCompatActivity() {
121117 val switch = findViewById<SwitchMaterial >(R .id.cardSwitch)
122118 switch.isChecked = Settings .getActiveStatus(context)
123119 switch.setOnCheckedChangeListener{
124- _, isChecked -> Settings .setActiveStatusAsync(context, isChecked)
120+ _, isChecked ->
121+ run {
122+ if (isChecked && ! hasAllPermissions(context)) {
123+ Toast .makeText(context, " PERMISSIONS_NOT_GRANTED" , Toast .LENGTH_SHORT ).show()
124+ } else {
125+ Settings .setActiveStatusAsync(context, isChecked)
126+ }
127+ }
128+ }
129+ }
130+
131+ private fun hasAllPermissions (context : Context ): Boolean {
132+ if (ActivityCompat .checkSelfPermission(
133+ context,
134+ Manifest .permission.SEND_SMS
135+ ) == PackageManager .PERMISSION_GRANTED && ActivityCompat .checkSelfPermission(
136+ context,
137+ READ_PHONE_NUMBERS
138+ ) == PackageManager .PERMISSION_GRANTED && ActivityCompat .checkSelfPermission(
139+ context,
140+ Manifest .permission.RECEIVE_SMS
141+ ) == PackageManager .PERMISSION_GRANTED && ActivityCompat .checkSelfPermission(
142+ context,
143+ Manifest .permission.READ_PHONE_STATE
144+ ) == PackageManager .PERMISSION_GRANTED
145+ ) {
146+ return true
125147 }
148+ return false
126149 }
127150
128151 private fun setOwner (phoneNumber : String ) {
@@ -157,41 +180,35 @@ class MainActivity : AppCompatActivity() {
157180 Manifest .permission.READ_PHONE_STATE
158181 ) != PackageManager .PERMISSION_GRANTED
159182 ) {
160- return " NO_PHONE_NUMBER "
183+ return Settings .getOwnerOrDefault( this )
161184 }
162185
163186 if (telephonyManager.line1Number != null ) {
164187 Settings .setOwnerAsync(context, telephonyManager.line1Number)
165188 }
166189
167- return telephonyManager.line1Number ? : " NO_PHONE_NUMBER "
190+ return telephonyManager.line1Number ? : Settings .getOwnerOrDefault( this )
168191 }
169192
170- private fun requestPermission (context : Context , permission : String ) {
171- // Register the permissions callback, which handles the user's response to the
172- // system permissions dialog. Save the return value, an instance of
173- // ActivityResultLauncher. You can use either a val, as shown in this snippet,
174- // or a late init var in your onAttach() or onCreate() method.
175- val requestPermissionLauncher =
176- registerForActivityResult(
177- ActivityResultContracts .RequestPermission ()
178- ) { isGranted: Boolean ->
179- if (isGranted) {
180- val toast = Toast .makeText(context, " Granted" , Toast .LENGTH_SHORT )
181- toast.show()
182- } else {
183- val toast = Toast .makeText(context, " NOT Granted" , Toast .LENGTH_LONG )
184- toast.show()
185- }
193+ private fun requestPermissions (context : Context ) {
194+ if (! Settings .isLoggedIn(context)) {
195+ return
196+ }
197+
198+ val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts .RequestMultiplePermissions ()) { permissions ->
199+ permissions.entries.forEach {
200+ Timber .d(" ${it.key} = ${it.value} " )
201+ setOwner(getPhoneNumber(context))
186202 }
187- if (ActivityCompat .checkSelfPermission(
188- context,
189- permission
190- ) != PackageManager .PERMISSION_GRANTED
191- ) {
192- // You can directly ask for the permission.
193- // The registered ActivityResultCallback gets the result of this request.
194- requestPermissionLauncher.launch(permission)
195203 }
204+
205+ requestPermissionLauncher.launch(
206+ arrayOf(
207+ Manifest .permission.SEND_SMS ,
208+ Manifest .permission.RECEIVE_SMS ,
209+ READ_PHONE_NUMBERS ,
210+ Manifest .permission.READ_PHONE_STATE
211+ )
212+ )
196213 }
197214}
0 commit comments