Skip to content

Commit 2d699df

Browse files
committed
feat: reqeust notification permission
1 parent 8965aac commit 2d699df

File tree

2 files changed

+56
-8
lines changed

2 files changed

+56
-8
lines changed

appupdate/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="com.azhon.appupdate">
44

5-
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
65
<uses-permission android:name="android.permission.INTERNET" />
6+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
7+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
78

89
<application android:usesCleartextTraffic="true">
910
<service android:name=".service.DownloadService" />

appupdate/src/main/java/com/azhon/appupdate/view/UpdateDialogActivity.kt

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.azhon.appupdate.view
22

3+
import android.Manifest
34
import android.content.Intent
5+
import android.content.pm.PackageManager
46
import android.graphics.drawable.GradientDrawable
57
import android.graphics.drawable.StateListDrawable
8+
import android.os.Build
69
import android.os.Bundle
710
import android.view.Gravity
811
import android.view.View
@@ -11,6 +14,7 @@ import android.widget.Button
1114
import android.widget.ImageView
1215
import android.widget.TextView
1316
import androidx.appcompat.app.AppCompatActivity
17+
import androidx.core.app.ActivityCompat
1418
import com.azhon.appupdate.R
1519
import com.azhon.appupdate.config.Constant
1620
import com.azhon.appupdate.listener.OnButtonClickListener
@@ -37,6 +41,7 @@ class UpdateDialogActivity : AppCompatActivity(), View.OnClickListener {
3741

3842
private val install = 0x45
3943
private val error = 0x46
44+
private val permissionCode = 0x47
4045
private var manager: DownloadManager? = null
4146
private lateinit var apk: File
4247
private lateinit var progressBar: NumberProgressBar
@@ -144,18 +149,51 @@ class UpdateDialogActivity : AppCompatActivity(), View.OnClickListener {
144149
ApkUtil.installApk(this, Constant.AUTHORITIES!!, apk)
145150
return
146151
}
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()
152154
}
153-
manager?.onButtonClickListener?.onButtonClick(OnButtonClickListener.UPDATE)
154-
startService(Intent(this, DownloadService::class.java))
155155
}
156156
}
157157
}
158158

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+
159197
override fun onBackPressed() {
160198
if (manager?.forcedUpgrade == true) return
161199
super.onBackPressed()
@@ -196,6 +234,15 @@ class UpdateDialogActivity : AppCompatActivity(), View.OnClickListener {
196234
}
197235
}
198236

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+
199246
override fun onDestroy() {
200247
super.onDestroy()
201248
manager?.onDownloadListeners?.remove(listenerAdapter)

0 commit comments

Comments
 (0)