1
1
package com.azhon.appupdate.view
2
2
3
+ import android.Manifest
3
4
import android.content.Intent
5
+ import android.content.pm.PackageManager
4
6
import android.graphics.drawable.GradientDrawable
5
7
import android.graphics.drawable.StateListDrawable
8
+ import android.os.Build
6
9
import android.os.Bundle
7
10
import android.view.Gravity
8
11
import android.view.View
@@ -11,6 +14,7 @@ import android.widget.Button
11
14
import android.widget.ImageView
12
15
import android.widget.TextView
13
16
import androidx.appcompat.app.AppCompatActivity
17
+ import androidx.core.app.ActivityCompat
14
18
import com.azhon.appupdate.R
15
19
import com.azhon.appupdate.config.Constant
16
20
import com.azhon.appupdate.listener.OnButtonClickListener
@@ -37,6 +41,7 @@ class UpdateDialogActivity : AppCompatActivity(), View.OnClickListener {
37
41
38
42
private val install = 0x45
39
43
private val error = 0x46
44
+ private val permissionCode = 0x47
40
45
private var manager: DownloadManager ? = null
41
46
private lateinit var apk: File
42
47
private lateinit var progressBar: NumberProgressBar
@@ -144,18 +149,51 @@ class UpdateDialogActivity : AppCompatActivity(), View.OnClickListener {
144
149
ApkUtil .installApk(this , Constant .AUTHORITIES !! , apk)
145
150
return
146
151
}
147
- if (manager?.forcedUpgrade == true ) {
148
- btnUpdate.isEnabled = false
149
- btnUpdate.text = resources.getString(R .string.app_update_background_downloading)
150
- } else {
151
- finish()
152
+ if (! checkPermission()) {
153
+ startUpdate()
152
154
}
153
- manager?.onButtonClickListener?.onButtonClick(OnButtonClickListener .UPDATE )
154
- startService(Intent (this , DownloadService ::class .java))
155
155
}
156
156
}
157
157
}
158
158
159
+ /* *
160
+ * check Notification runtime permission [DownloadManager.showNotification] is true && when api>=33.
161
+ * @return false: can continue to download, true: request permission.
162
+ */
163
+ private fun checkPermission (): Boolean {
164
+ if (manager?.showNotification == false ) {
165
+ LogUtil .d(TAG , " checkPermission: manager.showNotification = false" )
166
+ return false
167
+ }
168
+ if (ActivityCompat .checkSelfPermission(
169
+ this ,
170
+ Manifest .permission.POST_NOTIFICATIONS
171
+ ) == PackageManager .PERMISSION_GRANTED
172
+ ) {
173
+ LogUtil .d(TAG , " checkPermission: has permission" )
174
+ return false
175
+ }
176
+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
177
+ LogUtil .d(TAG , " checkPermission: request permission" )
178
+ ActivityCompat .requestPermissions(
179
+ this , arrayOf(Manifest .permission.POST_NOTIFICATIONS ), permissionCode
180
+ )
181
+ return true
182
+ }
183
+ return false
184
+ }
185
+
186
+ private fun startUpdate () {
187
+ if (manager?.forcedUpgrade == true ) {
188
+ btnUpdate.isEnabled = false
189
+ btnUpdate.text = resources.getString(R .string.app_update_background_downloading)
190
+ } else {
191
+ finish()
192
+ }
193
+ manager?.onButtonClickListener?.onButtonClick(OnButtonClickListener .UPDATE )
194
+ startService(Intent (this , DownloadService ::class .java))
195
+ }
196
+
159
197
override fun onBackPressed () {
160
198
if (manager?.forcedUpgrade == true ) return
161
199
super .onBackPressed()
@@ -196,6 +234,15 @@ class UpdateDialogActivity : AppCompatActivity(), View.OnClickListener {
196
234
}
197
235
}
198
236
237
+ override fun onRequestPermissionsResult (
238
+ requestCode : Int , permissions : Array <out String >, grantResults : IntArray
239
+ ) {
240
+ super .onRequestPermissionsResult(requestCode, permissions, grantResults)
241
+ if (permissionCode == requestCode) {
242
+ startUpdate()
243
+ }
244
+ }
245
+
199
246
override fun onDestroy () {
200
247
super .onDestroy()
201
248
manager?.onDownloadListeners?.remove(listenerAdapter)
0 commit comments