提交 de23c355 编写于 作者: taohebin@dcloud.io's avatar taohebin@dcloud.io

fix: uni-progress-notification createNotificationProgress增加onClick

上级 fc2cfbf1
## 1.0.4(2023-11-30)
1. createNotificationProgress增加`onClick`回调
2.修复在小米部分系统上,通知消息会归类于不重要通知的bug
## 1.0.3(2023-11-28)
更新截图
## 1.0.2(2023-11-28) ## 1.0.2(2023-11-28)
修改资源的包名 修改资源的包名
## 1.0.1(2023-11-28) ## 1.0.1(2023-11-28)
......
{ {
"id": "uni-progress-notification", "id": "uni-progress-notification",
"displayName": "uni-progress-notification", "displayName": "uni-progress-notification",
"version": "1.0.2", "version": "1.0.4",
"description": "uni-progress-notification", "description": "uni-progress-notification",
"keywords": [ "keywords": [
"uni-progress-notification" "uni-progress-notification"
......
...@@ -26,7 +26,12 @@ export type CreateNotificationProgressOptions = { ...@@ -26,7 +26,12 @@ export type CreateNotificationProgressOptions = {
/** /**
* 进度 * 进度
*/ */
progress : number progress : number,
/**
* 点击通知消息回调
* @defaultValue null
*/
onClick? : (() => void) | null
} }
``` ```
...@@ -51,7 +56,7 @@ export type FinishNotificationProgressOptions = { ...@@ -51,7 +56,7 @@ export type FinishNotificationProgressOptions = {
/** /**
* 点击通知消息回调 * 点击通知消息回调
*/ */
callback : () => void onClick : () => void
} }
``` ```
......
...@@ -4,45 +4,58 @@ import Build from 'android.os.Build'; ...@@ -4,45 +4,58 @@ import Build from 'android.os.Build';
import View from 'android.view.View'; import View from 'android.view.View';
import Color from 'android.graphics.Color'; import Color from 'android.graphics.Color';
import WindowManager from 'android.view.WindowManager'; import WindowManager from 'android.view.WindowManager';
import { globalNotificationProgressFinishCallBack } from './index.uts'; import { globalNotificationProgressFinishCallBack, globalNotificationProgressCallBack } from './index.uts';
import { ACTION_DOWNLOAD_FINISH } from "./constant.uts" import { ACTION_DOWNLOAD_FINISH, ACTION_DOWNLOAD_PROGRESS } from "./constant.uts"
export class TransparentActivity extends Activity { export class TransparentActivity extends Activity {
constructor() { constructor() {
super() super()
} }
override onCreate(savedInstanceState : Bundle | null) { override onCreate(savedInstanceState : Bundle | null) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
this.fullScreen(this) this.fullScreen(this)
const action = this.getIntent().getAction() const action = this.getIntent().getAction()
if (action == ACTION_DOWNLOAD_FINISH) { if (action == ACTION_DOWNLOAD_FINISH) {
globalNotificationProgressFinishCallBack() setTimeout(() => {
this.overridePendingTransition(0, 0) globalNotificationProgressFinishCallBack()
} globalNotificationProgressFinishCallBack = () => { }
}, 100)
this.overridePendingTransition(0, 0)
}
setTimeout(() => { if (action == ACTION_DOWNLOAD_PROGRESS) {
this.finish() setTimeout(() => {
}, 20) globalNotificationProgressCallBack?.()
} globalNotificationProgressCallBack = () => { }
}, 100)
this.overridePendingTransition(0, 0)
}
private fullScreen(activity : Activity) { setTimeout(() => {
if (Build.VERSION.SDK_INT >= 19) { this.finish()
if (Build.VERSION.SDK_INT >= 21) { }, 20)
const window = activity.getWindow(); }
const decorView = window.getDecorView();
const option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option); @Suppress("DEPRECATION")
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); private fullScreen(activity : Activity) {
window.setStatusBarColor(Color.TRANSPARENT); if (Build.VERSION.SDK_INT >= 19) {
} else { if (Build.VERSION.SDK_INT >= 21) {
const window = activity.getWindow(); const window = activity.getWindow();
const attributes = window.getAttributes(); const decorView = window.getDecorView();
const flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; const option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
attributes.flags |= flagTranslucentStatus; decorView.setSystemUiVisibility(option);
window.setAttributes(attributes); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
} window.setStatusBarColor(Color.TRANSPARENT);
} } else {
} const window = activity.getWindow();
const attributes = window.getAttributes();
const flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
attributes.flags |= flagTranslucentStatus;
window.setAttributes(attributes);
}
}
}
} }
\ No newline at end of file
...@@ -6,9 +6,9 @@ import Notification from 'android.app.Notification'; ...@@ -6,9 +6,9 @@ import Notification from 'android.app.Notification';
import Intent from 'android.content.Intent'; import Intent from 'android.content.Intent';
import ComponentName from 'android.content.ComponentName'; import ComponentName from 'android.content.ComponentName';
import PendingIntent from 'android.app.PendingIntent'; import PendingIntent from 'android.app.PendingIntent';
import { CreateNotificationProgressOptions, FinishNotificationProgressOptions } from '../interface.uts'; import { CreateNotificationProgressOptions, FinishNotificationProgressOptions } from '../interface.uts';
import { ACTION_DOWNLOAD_FINISH, ACTION_DOWNLOAD_PROGRESS} from "./constant.uts" import { ACTION_DOWNLOAD_FINISH, ACTION_DOWNLOAD_PROGRESS } from "./constant.uts"
export { TransparentActivity } from './TransparentActivity.uts'; export { TransparentActivity } from './TransparentActivity.uts';
...@@ -26,11 +26,17 @@ let histroyProgress = 0 ...@@ -26,11 +26,17 @@ let histroyProgress = 0
let isProgress = false let isProgress = false
export let globalNotificationProgressCallBack : (() => void) | null = () => { }
export let globalNotificationProgressFinishCallBack = () => { } export let globalNotificationProgressFinishCallBack = () => { }
export function createNotificationProgress(options : CreateNotificationProgressOptions) : void { export function createNotificationProgress(options : CreateNotificationProgressOptions) : void {
const { content, progress } = options const { content, progress, onClick } = options
if (progress == 100) { if (progress == 100) {
clearTimeout(timeId)
const context = UTSAndroid.getAppContext() as Context
realCreateNotificationProgress(options.title ?? getAppName(context), content, progress, onClick)
reset()
return return
} }
...@@ -39,13 +45,13 @@ export function createNotificationProgress(options : CreateNotificationProgressO ...@@ -39,13 +45,13 @@ export function createNotificationProgress(options : CreateNotificationProgressO
return return
} }
const context = UTSAndroid.getAppContext() as Context const context = UTSAndroid.getAppContext() as Context
if (!isProgress) { if (!isProgress) {
realCreateNotificationProgress(options.title ?? getAppName(context), content, histroyProgress) realCreateNotificationProgress(options.title ?? getAppName(context), content, histroyProgress, onClick)
isProgress = true isProgress = true
} else { } else {
timeId = setTimeout(() => { timeId = setTimeout(() => {
realCreateNotificationProgress(options.title ?? getAppName(context), content, histroyProgress) realCreateNotificationProgress(options.title ?? getAppName(context), content, histroyProgress, onClick)
timeId = -1 timeId = -1
}, 1000) }, 1000)
} }
...@@ -60,12 +66,13 @@ export function cancelNotificationProgress() : void { ...@@ -60,12 +66,13 @@ export function cancelNotificationProgress() : void {
} }
function realCreateNotificationProgress(title : string, content : string, progress : number) : void { function realCreateNotificationProgress(title : string, content : string, progress : number, cb : (() => void) | null) : void {
globalNotificationProgressCallBack = cb
const context = UTSAndroid.getAppContext() as Context const context = UTSAndroid.getAppContext() as Context
const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
createDownloadChannel(notificationManager) createDownloadChannel(notificationManager)
const builder = createNotificationBuilder(context) const builder = createNotificationBuilder(context)
builder.setProgress(100, progress.toInt(), false) builder.setProgress(100, progress.toInt(), false)
builder.setContentTitle(title) builder.setContentTitle(title)
builder.setContentText(content) builder.setContentText(content)
builder.setContentIntent(createPendingIntent(context, ACTION_DOWNLOAD_PROGRESS)); builder.setContentIntent(createPendingIntent(context, ACTION_DOWNLOAD_PROGRESS));
...@@ -73,16 +80,17 @@ function realCreateNotificationProgress(title : string, content : string, progre ...@@ -73,16 +80,17 @@ function realCreateNotificationProgress(title : string, content : string, progre
} }
export function finishNotificationProgress(options : FinishNotificationProgressOptions) { export function finishNotificationProgress(options : FinishNotificationProgressOptions) {
globalNotificationProgressFinishCallBack = options.callback globalNotificationProgressFinishCallBack = options.onClick
const context = UTSAndroid.getAppContext() as Context const context = UTSAndroid.getAppContext() as Context
const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
createDownloadChannel(notificationManager) createDownloadChannel(notificationManager)
const builder = createNotificationBuilder(context) const builder = createNotificationBuilder(context)
builder.setProgress(0, 0, false) builder.setProgress(0, 0, false)
builder.setContentTitle(options.title ?? getAppName(context)) builder.setContentTitle(options.title ?? getAppName(context))
builder.setContentText(options.content) builder.setContentText(options.content)
builder.setOngoing(false) //小米rom setOngoing未false的时候,会被通知管理器归为不重要通知
// builder.setOngoing(false)
builder.setAutoCancel(true); builder.setAutoCancel(true);
builder.setContentIntent(createPendingIntent(context, ACTION_DOWNLOAD_FINISH)); builder.setContentIntent(createPendingIntent(context, ACTION_DOWNLOAD_FINISH));
notificationManager.notify(DOWNLOAD_PROGRESS_NOTIFICATION_ID, builder.build()) notificationManager.notify(DOWNLOAD_PROGRESS_NOTIFICATION_ID, builder.build())
...@@ -122,7 +130,7 @@ function createDownloadChannel(notificationManager : NotificationManager) { ...@@ -122,7 +130,7 @@ function createDownloadChannel(notificationManager : NotificationManager) {
notificationManager.createNotificationChannel(channel) notificationManager.createNotificationChannel(channel)
} }
} }
@Suppress("DEPRECATION")
function createNotificationBuilder(context : Context) : Notification.Builder { function createNotificationBuilder(context : Context) : Notification.Builder {
if (notificationBuilder == null) { if (notificationBuilder == null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
...@@ -130,13 +138,14 @@ function createNotificationBuilder(context : Context) : Notification.Builder { ...@@ -130,13 +138,14 @@ function createNotificationBuilder(context : Context) : Notification.Builder {
} else { } else {
notificationBuilder = new Notification.Builder(context) notificationBuilder = new Notification.Builder(context)
} }
notificationBuilder!!.setSmallIcon(context.getApplicationInfo().icon) notificationBuilder!.setSmallIcon(context.getApplicationInfo().icon)
notificationBuilder!!.setOngoing(true) notificationBuilder!.setOngoing(true)
notificationBuilder!!.setSound(null) notificationBuilder!.setSound(null)
} }
return notificationBuilder!! return notificationBuilder!
} }
@Suppress("DEPRECATION")
function getAppName(context : Context) : string { function getAppName(context : Context) : string {
let appName = "" let appName = ""
try { try {
...@@ -147,4 +156,4 @@ function getAppName(context : Context) : string { ...@@ -147,4 +156,4 @@ function getAppName(context : Context) : string {
e.printStackTrace() e.printStackTrace()
} }
return appName return appName
} }
\ No newline at end of file
...@@ -24,7 +24,10 @@ export type uni = { ...@@ -24,7 +24,10 @@ export type uni = {
uni.createNotificationProgress({ uni.createNotificationProgress({
title: "正在下载升级包", title: "正在下载升级包",
content: "进度 50%", content: "进度 50%",
progress: 50 progress: 50,
onClick:()=>{
console.log("正在下载");
}
} }
``` ```
*/ */
...@@ -54,7 +57,7 @@ export type uni = { ...@@ -54,7 +57,7 @@ export type uni = {
uni.finishNotificationProgress({ uni.finishNotificationProgress({
title: "安装升级包", title: "安装升级包",
content: "下载完成。", content: "下载完成。",
callback: () => { onClick: () => {
uni.installApk({ uni.installApk({
filePath: e.tempFilePath, filePath: e.tempFilePath,
complete(res) { complete(res) {
...@@ -107,7 +110,12 @@ export type CreateNotificationProgressOptions = { ...@@ -107,7 +110,12 @@ export type CreateNotificationProgressOptions = {
/** /**
* 进度 * 进度
*/ */
progress : number progress : number,
/**
* 点击通知消息回调
* @defaultValue null
*/
onClick? : (() => void) | null
} }
...@@ -124,7 +132,7 @@ export type FinishNotificationProgressOptions = { ...@@ -124,7 +132,7 @@ export type FinishNotificationProgressOptions = {
/** /**
* 点击通知消息回调 * 点击通知消息回调
*/ */
callback : () => void onClick : () => void
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册