1
1
package com.osfans.trime.ui.main
2
2
3
- import android.Manifest
4
3
import android.content.Intent
5
- import android.content.pm.PackageManager
6
- import android.os.Build
7
4
import android.os.Bundle
8
5
import android.view.Menu
9
6
import android.view.MenuItem
10
7
import android.view.ViewGroup
11
8
import androidx.activity.viewModels
12
- import androidx.appcompat.app.AlertDialog
13
9
import androidx.appcompat.app.AppCompatActivity
14
10
import androidx.appcompat.app.AppCompatDelegate
15
- import androidx.core.app.ActivityCompat
16
11
import androidx.core.view.ViewCompat
17
12
import androidx.core.view.WindowInsetsCompat
18
13
import androidx.core.view.forEach
@@ -22,22 +17,20 @@ import androidx.navigation.fragment.NavHostFragment
22
17
import androidx.navigation.ui.AppBarConfiguration
23
18
import androidx.navigation.ui.setupWithNavController
24
19
import com.blankj.utilcode.util.ToastUtils
20
+ import com.hjq.permissions.OnPermissionCallback
21
+ import com.hjq.permissions.Permission
22
+ import com.hjq.permissions.XXPermissions
25
23
import com.osfans.trime.R
26
24
import com.osfans.trime.core.Rime
27
25
import com.osfans.trime.data.AppPrefs
28
26
import com.osfans.trime.databinding.ActivityPrefBinding
29
27
import com.osfans.trime.ui.setup.SetupActivity
30
- import com.osfans.trime.util.RimeUtils
31
28
import com.osfans.trime.util.applyTranslucentSystemBars
32
29
import com.osfans.trime.util.withLoadingDialog
33
30
import kotlinx.coroutines.Dispatchers
34
- import kotlinx.coroutines.delay
35
- import kotlinx.coroutines.launch
36
31
import kotlinx.coroutines.withContext
37
32
38
- class PrefMainActivity :
39
- AppCompatActivity (),
40
- ActivityCompat .OnRequestPermissionsResultCallback {
33
+ class PrefMainActivity : AppCompatActivity () {
41
34
private val viewModel: MainViewModel by viewModels()
42
35
private val prefs get() = AppPrefs .defaultInstance()
43
36
@@ -107,28 +100,6 @@ class PrefMainActivity :
107
100
if (SetupActivity .shouldSetup()) {
108
101
startActivity(Intent (this , SetupActivity ::class .java))
109
102
}
110
- requestExternalStoragePermission()
111
- }
112
-
113
- override fun onRequestPermissionsResult (
114
- requestCode : Int ,
115
- permissions : Array <out String >,
116
- grantResults : IntArray
117
- ) {
118
- if (requestCode == PERMISSION_REQUEST_EXTERNAL_STORAGE ) {
119
- // Request for external storage permission
120
- if (grantResults.size == 2 && grantResults[0 ] == PackageManager .PERMISSION_GRANTED ) {
121
- lifecycleScope.launch {
122
- ToastUtils .showShort(R .string.external_storage_permission_granted)
123
- delay(500 )
124
- RimeUtils .deploy(this @PrefMainActivity)
125
- }
126
- } else {
127
- // Permission request was denied
128
- ToastUtils .showShort(R .string.external_storage_permission_denied)
129
- }
130
- }
131
- super .onRequestPermissionsResult(requestCode, permissions, grantResults)
132
103
}
133
104
134
105
override fun onCreateOptionsMenu (menu : Menu ? ): Boolean {
@@ -145,7 +116,7 @@ class PrefMainActivity :
145
116
lifecycleScope.withLoadingDialog(
146
117
this , 200L , R .string.deploy_progress
147
118
) {
148
- withContext(Dispatchers .IO ) {
119
+ withContext(Dispatchers .Default ) {
149
120
Rime .destroy()
150
121
Rime .get(this @PrefMainActivity, true )
151
122
}
@@ -161,47 +132,31 @@ class PrefMainActivity :
161
132
}
162
133
}
163
134
164
- private fun requestExternalStoragePermission () {
165
- if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
166
- if (ActivityCompat .checkSelfPermission(this , Manifest .permission.WRITE_EXTERNAL_STORAGE ) ==
167
- PackageManager .PERMISSION_GRANTED
168
- ) {
169
- // Permission is already available, return
170
- return
171
- } else {
172
- if (ActivityCompat .shouldShowRequestPermissionRationale(this , Manifest .permission.WRITE_EXTERNAL_STORAGE )) {
173
- AlertDialog .Builder (this )
174
- .setMessage(R .string.external_storage_access_required)
175
- .setCancelable(true )
176
- .setPositiveButton(android.R .string.ok) { _, _ ->
177
- ActivityCompat .requestPermissions(
178
- this ,
179
- arrayOf(
180
- Manifest .permission.WRITE_EXTERNAL_STORAGE ,
181
- Manifest .permission.READ_EXTERNAL_STORAGE
182
- ),
183
- PERMISSION_REQUEST_EXTERNAL_STORAGE
184
- )
185
- }
186
- .setNegativeButton(android.R .string.cancel, null )
187
- .show()
188
- } else {
189
- ToastUtils .showShort(R .string.external_storage_permission_not_available)
135
+ override fun onResume () {
136
+ super .onResume()
137
+ requestExternalStoragePermission()
138
+ }
190
139
191
- ActivityCompat .requestPermissions(
192
- this ,
193
- arrayOf(
194
- Manifest .permission. WRITE_EXTERNAL_STORAGE ,
195
- Manifest .permission. READ_EXTERNAL_STORAGE
196
- ),
197
- PERMISSION_REQUEST_EXTERNAL_STORAGE
198
- )
140
+ private fun requestExternalStoragePermission () {
141
+ XXPermissions . with ( this )
142
+ .permission( Permission . Group . STORAGE )
143
+ .request( object : OnPermissionCallback {
144
+ override fun onGranted ( permissions : MutableList < String > ? , all : Boolean ) {
145
+ if (all) {
146
+ ToastUtils .showShort( R .string.external_storage_permission_granted)
147
+ }
199
148
}
200
- }
201
- }
202
- }
203
149
204
- companion object {
205
- private const val PERMISSION_REQUEST_EXTERNAL_STORAGE = 0
150
+ override fun onDenied (permissions : MutableList <String >? , never : Boolean ) {
151
+ if (never) {
152
+ ToastUtils .showShort(R .string.external_storage_permission_denied)
153
+ XXPermissions .startPermissionActivity(
154
+ this @PrefMainActivity, permissions
155
+ )
156
+ } else {
157
+ ToastUtils .showShort(R .string.external_storage_permission_denied)
158
+ }
159
+ }
160
+ })
206
161
}
207
162
}
0 commit comments