unknown
7 days ago
30 changed files with 830 additions and 80 deletions
-
46App.vue
-
7components/callPhone/callPhone.vue
-
4config/api.js
-
2config/site.config.js
-
12config/utils.js
-
12manifest.json
-
8pages/indexEntry/consult/pubComplaint/pubComplaint.vue
-
9pages/indexEntry/consult/pubConsult/pubConsult.vue
-
7pages/indexEntry/signIn/signAndOut/signAndOut.vue
-
7pages/indexEntry/signIn/signAndOut/signAndOutSubjiect1.vue
-
27pages/indexEntry/signIn/signIn.vue
-
27pages/indexEntry/theory/theory.vue
-
8pages/indexEntry/theory/webView.vue
-
6pages/mineEntry/personaInfo/personaInfo.vue
-
6pages/tabbar/index/comp/schoolItem.vue
-
24pages/tabbar/index/index.vue
-
7pages/tabbar/mine/index.vue
-
3store/index.js
-
230store/modules/permissionToast.js
-
50store/modules/user.js
-
8uni_modules/uni-registerRequestPermissionTips/changelog.md
-
115uni_modules/uni-registerRequestPermissionTips/package.json
-
95uni_modules/uni-registerRequestPermissionTips/readme.md
-
3uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/AndroidManifest.xml
-
3uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/config.json
-
148uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/index.uts
-
6uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/anim/popupwindow_enter.xml
-
5uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/anim/popupwindow_exit.xml
-
6uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/drawable/dcloud_permission_background.xml
-
19uni_modules/uni-registerRequestPermissionTips/utssdk/interface.uts
@ -0,0 +1,230 @@ |
|||
// 页面路径:store/index.js
|
|||
|
|||
const permissionToast = { |
|||
// 初始化状态
|
|||
state: { |
|||
// 处理应用程序权限请求
|
|||
WRITE_EXTERNAL_STORAGE: false, |
|||
ACCESS_FINE_LOCATION: false, |
|||
CAMERA: false, |
|||
CALL_PHONE: false, |
|||
/* #ifdef APP-PLUS */ |
|||
isIos: plus.os.name == "iOS", |
|||
/* #endif */ |
|||
mapping: { |
|||
'CAMERA': { |
|||
title: "洛阳学车对扫开相机/摄像头权限申请说明", |
|||
content: "便于您使用该功能拍照,扫码,打卡签到签退等功能", |
|||
methods: 'SET_CAMERA' |
|||
}, |
|||
'WRITE_EXTERNAL_STORAGE': { |
|||
title: "洛阳学车对存储空间/照片权限申请说明", |
|||
content: "便于您使用该功能上传您的照片/图片/视频及用于更换头像、下载、投诉与咨询等场景中读取和写入相册和文件内容。", |
|||
methods: 'SET_WRITE_EXTERNAL_STORAGE' |
|||
}, |
|||
'ACCESS_FINE_LOCATION': { |
|||
title: "洛阳学车对地理位置权限申请说明", |
|||
content: "洛阳学车应用程序可以提供基于位置的服务、定位导航、计算距离、扫码场地打卡等功能。", |
|||
methods: 'SET_ACCESS_FINE_LOCATION' |
|||
}, |
|||
'CALL_PHONE': { |
|||
title: "洛阳学车拨打/管理电话权限申请说明", |
|||
content: "便于您使用该功能联系驾校、教练场景下使用", |
|||
methods: 'SET_CALL_PHONE' |
|||
} |
|||
} |
|||
}, |
|||
mutations: { |
|||
// 管理权限告知目的
|
|||
SET_WRITE_EXTERNAL_STORAGE(state, val) { |
|||
state.WRITE_EXTERNAL_STORAGE = val |
|||
}, |
|||
SET_CALL_PHONE(state, val) { |
|||
state.CALL_PHONE = val |
|||
}, |
|||
SET_ACCESS_FINE_LOCATION(state, val) { |
|||
state.ACCESS_FINE_LOCATION = val |
|||
}, |
|||
SET_CAMERA(state,val) { |
|||
state.CAMERA = val |
|||
} |
|||
}, |
|||
actions: { |
|||
//权限获取
|
|||
async requestPermissions({state,dispatch,commit}, permissionID) { |
|||
console.log('gogogoog来了没??') |
|||
try { |
|||
if (!state[permissionID] && !state.isIos) { |
|||
var viewObj = await dispatch('nativeObjView', permissionID); |
|||
viewObj.show(); |
|||
} |
|||
console.log('android.permission.' + permissionID, '当前手机权限'); |
|||
return new Promise(async (resolve, reject) => { |
|||
//苹果不需要这个
|
|||
if (state.isIos) { |
|||
resolve(1); |
|||
return |
|||
} |
|||
// Android权限查询
|
|||
function requestAndroidPermission(permissionID_) { |
|||
return new Promise((resolve, reject) => { |
|||
plus.android.requestPermissions( |
|||
[permissionID_], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
|
|||
function(resultObj) { |
|||
var result = 0; |
|||
for (var i = 0; i < resultObj.granted.length; i++) { |
|||
var grantedPermission = resultObj.granted[i]; |
|||
console.log('已获取的权限:' + grantedPermission); |
|||
result = 1 |
|||
} |
|||
for (var i = 0; i < resultObj.deniedPresent.length; i++) { |
|||
var deniedPresentPermission = resultObj.deniedPresent[i]; |
|||
console.log('拒绝本次申请的权限:' + deniedPresentPermission); |
|||
result = 0 |
|||
} |
|||
for (var i = 0; i < resultObj.deniedAlways.length; i++) { |
|||
var deniedAlwaysPermission = resultObj.deniedAlways[i]; |
|||
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); |
|||
result = -1 |
|||
} |
|||
resolve(result); |
|||
}, |
|||
function(error) { |
|||
console.log('申请权限错误:' + error.code + " = " + error |
|||
.message); |
|||
resolve({ |
|||
code: error.code, |
|||
message: error.message |
|||
}); |
|||
} |
|||
); |
|||
}); |
|||
} |
|||
|
|||
const result = await requestAndroidPermission( |
|||
'android.permission.' + permissionID |
|||
); |
|||
if (result === 1) { |
|||
//'已获得授权'
|
|||
commit(state.mapping[permissionID].methods, true) |
|||
} else if (result === 0) { |
|||
//'未获得授权'
|
|||
commit(state.mapping[permissionID].methods, false) |
|||
} else { |
|||
commit(state.mapping[permissionID].methods, true) |
|||
uni.showModal({ |
|||
title: '提示', |
|||
content: '操作权限已被拒绝,请手动前往设置', |
|||
confirmText: "立即设置", |
|||
success: (res) => { |
|||
if (res.confirm) { |
|||
dispatch('gotoAppPermissionSetting') |
|||
} |
|||
} |
|||
}) |
|||
} |
|||
if (viewObj) viewObj.close() |
|||
resolve(result); |
|||
}); |
|||
} catch (error) { |
|||
console.log(error); |
|||
uni.$u.toast('应用定位权限已关闭,请手动打开') |
|||
uni.hideLoading() |
|||
reject(error); |
|||
} |
|||
}, |
|||
//提示框
|
|||
nativeObjView({state}, permissionID) { |
|||
const systemInfo = uni.getSystemInfoSync(); |
|||
const statusBarHeight = systemInfo.statusBarHeight; |
|||
const navigationBarHeight = systemInfo.platform === 'android' ? 48 : |
|||
44; // Set the navigation bar height based on the platform
|
|||
const totalHeight = statusBarHeight + navigationBarHeight; |
|||
let view = new plus.nativeObj.View('per-modal', { |
|||
top: '0px', |
|||
left: '0px', |
|||
width: '100%', |
|||
backgroundColor: '#444', |
|||
//opacity: .5;
|
|||
}) |
|||
view.drawRect({ |
|||
color: '#fff', |
|||
radius: '5px' |
|||
}, { |
|||
top: totalHeight + 'px', |
|||
left: '5%', |
|||
width: '90%', |
|||
height: "100px", |
|||
}) |
|||
view.drawText(state.mapping[permissionID].title, { |
|||
top: totalHeight + 5 + 'px', |
|||
left: "8%", |
|||
height: "30px" |
|||
}, { |
|||
align: "left", |
|||
color: "#000", |
|||
}, { |
|||
onClick: function(e) { |
|||
console.log(e); |
|||
} |
|||
}) |
|||
view.drawText(state.mapping[permissionID].content, { |
|||
top: totalHeight + 35 + 'px', |
|||
height: "60px", |
|||
left: "8%", |
|||
width: "84%" |
|||
}, { |
|||
whiteSpace: 'normal', |
|||
size: "14px", |
|||
align: "left", |
|||
color: "#656563" |
|||
}) |
|||
|
|||
function show() { |
|||
view = plus.nativeObj.View.getViewById('per-modal'); |
|||
view.show() |
|||
view = null //展示的时候也得清空,不然影响下次的关闭,不知道为啥
|
|||
} |
|||
|
|||
function close() { |
|||
view = plus.nativeObj.View.getViewById('per-modal'); |
|||
view.close(); |
|||
view = null |
|||
} |
|||
return { |
|||
show, |
|||
close |
|||
} |
|||
}, |
|||
// 跳转到**应用**的权限页面
|
|||
gotoAppPermissionSetting({state}) { |
|||
if (state.isIos) { |
|||
var UIApplication = plus.ios.import("UIApplication"); |
|||
var application2 = UIApplication.sharedApplication(); |
|||
var NSURL2 = plus.ios.import("NSURL"); |
|||
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
|
|||
var setting2 = NSURL2.URLWithString("app-settings:"); |
|||
application2.openURL(setting2); |
|||
|
|||
plus.ios.deleteObject(setting2); |
|||
plus.ios.deleteObject(NSURL2); |
|||
plus.ios.deleteObject(application2); |
|||
} else { |
|||
// console.log(plus.device.vendor);
|
|||
var Intent = plus.android.importClass("android.content.Intent"); |
|||
var Settings = plus.android.importClass("android.provider.Settings"); |
|||
var Uri = plus.android.importClass("android.net.Uri"); |
|||
var mainActivity = plus.android.runtimeMainActivity(); |
|||
var intent = new Intent(); |
|||
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); |
|||
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); |
|||
intent.setData(uri); |
|||
mainActivity.startActivity(intent); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
// 导出 store
|
|||
export default permissionToast |
@ -0,0 +1,8 @@ |
|||
## 1.0.3(2024-10-18) |
|||
修复4.25版引起的插件回调只触发一次的问题。 |
|||
## 1.0.2(2024-09-05) |
|||
修复uni.chooseImage或者其他部分情况下弹窗不显示的bug。 |
|||
## 1.0.1(2024-05-30) |
|||
修复云打包可能报错的bug |
|||
## 1.0.0(2024-03-09) |
|||
支持全局监听权限申请。当申请权限时,会在页面顶部显示申请权限的目的。 |
@ -0,0 +1,115 @@ |
|||
{ |
|||
"id": "uni-registerRequestPermissionTips", |
|||
"displayName": "uni-registerRequestPermissionTips", |
|||
"version": "1.0.3", |
|||
"description": "支持android平台全局监听权限的申请。当申请权限时,会在页面顶部显示申请权限的目的。主要解决上架华为应用市场审核要求:APP在调用终端权限时,应同步告知用户申请该权限的目的。", |
|||
"keywords": [ |
|||
"权限", |
|||
"权限申请", |
|||
"上架", |
|||
"华为" |
|||
], |
|||
"repository": "", |
|||
"engines": { |
|||
"HBuilderX": "^4.0" |
|||
}, |
|||
"dcloudext": { |
|||
"type": "uts", |
|||
"sale": { |
|||
"regular": { |
|||
"price": "0.00" |
|||
}, |
|||
"sourcecode": { |
|||
"price": "0.00" |
|||
} |
|||
}, |
|||
"contact": { |
|||
"qq": "" |
|||
}, |
|||
"declaration": { |
|||
"ads": "无", |
|||
"data": "无", |
|||
"permissions": "无" |
|||
}, |
|||
"npmurl": "" |
|||
}, |
|||
"uni_modules": { |
|||
"dependencies": [ |
|||
], |
|||
"uni-ext-api": { |
|||
"uni": { |
|||
"registerRequestPermissionTipsListener": { |
|||
"name": "registerRequestPermissionTipsListener", |
|||
"app": { |
|||
"js": false, |
|||
"kotlin": true, |
|||
"swift": false |
|||
} |
|||
}, |
|||
"unregisterRequestPermissionTipsListener": { |
|||
"name": "unregisterRequestPermissionTipsListener", |
|||
"app": { |
|||
"js": false, |
|||
"kotlin": true, |
|||
"swift": false |
|||
} |
|||
}, |
|||
"setRequestPermissionTips": { |
|||
"name": "setRequestPermissionTips", |
|||
"app": { |
|||
"js": false, |
|||
"kotlin": true, |
|||
"swift": false |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"encrypt": [], |
|||
"platforms": { |
|||
"cloud": { |
|||
"tcb": "y", |
|||
"aliyun": "y", |
|||
"alipay": "y" |
|||
}, |
|||
"client": { |
|||
"Vue": { |
|||
"vue2": "y", |
|||
"vue3": "y" |
|||
}, |
|||
"App": { |
|||
"app-android": "y", |
|||
"app-ios": "n", |
|||
"app-harmony": "u" |
|||
}, |
|||
"H5-mobile": { |
|||
"Safari": "n", |
|||
"Android Browser": "n", |
|||
"微信浏览器(Android)": "n", |
|||
"QQ浏览器(Android)": "n" |
|||
}, |
|||
"H5-pc": { |
|||
"Chrome": "n", |
|||
"IE": "n", |
|||
"Edge": "n", |
|||
"Firefox": "n", |
|||
"Safari": "n" |
|||
}, |
|||
"小程序": { |
|||
"微信": "n", |
|||
"阿里": "n", |
|||
"百度": "n", |
|||
"字节跳动": "n", |
|||
"QQ": "n", |
|||
"钉钉": "n", |
|||
"快手": "n", |
|||
"飞书": "n", |
|||
"京东": "n" |
|||
}, |
|||
"快应用": { |
|||
"华为": "n", |
|||
"联盟": "n" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,95 @@ |
|||
## registerRequestPermissionTipsListener(listener?) |
|||
注册权限监听事件 |
|||
## unregisterRequestPermissionTipsListener(listener?) |
|||
取消注册权限监听事件 |
|||
|
|||
## RequestPermissionTipsListener的属性值 |
|||
|名称 |类型 |描述 |必填 | |
|||
|:-- |:-- |:-- |:-- | |
|||
|onRequest |(permissions:Array<string>)=>void |申请系统权限回调,permissions为触发权限申请的所有权限 |否 | |
|||
|onConfirm |(permissions:Array<string>)=>void |弹出系统权限授权框回调,permissions为触发弹出权限授权框的所有权限 |否 | |
|||
|onComplete |(permissions:UTSJSONObject)=>void |权限申请完成回调,permissions包括权限及权限的状态。`grant`为权限已获取,`denied`为权限已拒绝 |否 | |
|||
|
|||
## setRequestPermissionTips(UTSJSONObject) |
|||
设置权限监听的说明。支持针对权限设置具体的说明。 |
|||
|
|||
参考:`{"android.permission.CAMERA":"<p>相机权限申请说明</p>"}` |
|||
|
|||
安卓权限列表可参考[谷歌官方文档](https://developer.android.com/reference/android/Manifest.permission)。 |
|||
|
|||
权限申请说明基于原生TextView实现,可以实现加载html内容,支持的标签及属性可参考: |
|||
``` |
|||
<b> 或 <strong>:加粗文本。 |
|||
<i> 或 <em>:斜体文本。 |
|||
<u>:下划线文本。 |
|||
<sup>:上标文本。 |
|||
<sub>:下标文本。 |
|||
<tt>:等宽字体文本。 |
|||
<big>:放大字体。 |
|||
<small>:缩小字体。 |
|||
<strike> 或 <s> 或 <del>:带有删除线的文本。 |
|||
<p>:段落。 |
|||
<div>:块级容器。 |
|||
<h1>,<h2>,<h3>,<h4>,<h5>,<h6>:区域标题元素。 |
|||
<ul>, <ol>, <li>:无序列表和有序列表。 |
|||
<br>:换行。 |
|||
<font color="..."> 和 <font size="...">:设置文本颜色和大小。 |
|||
``` |
|||
|
|||
## 示例 |
|||
|
|||
``` |
|||
<script> |
|||
import { |
|||
registerRequestPermissionTipsListener, |
|||
unregisterRequestPermissionTipsListener, |
|||
setRequestPermissionTips |
|||
} from "@/uni_modules/uni-registerRequestPermissionTips" |
|||
var PermissionTips = { |
|||
"android.permission.CAMERA": "<h4 style=\"font-size:40px;\">正在读取通讯录权限</h4><font color=#cccccc>通讯录权限不会获取任何信息,请注意</font>", |
|||
"android.permission.READ_PHONE_STATE": "<h4 style=\"font-size:40px;\">正在读取网络状态权限</h4><font color=#cccccc>通讯录权限不会获取任何信息,请注意通讯录权限不会获取任何信息,请注意通讯录权限不会获取任何信息,请注意</font>" |
|||
} |
|||
export default { |
|||
onLaunch: function() { |
|||
var brand = uni.getSystemInfoSync().deviceBrand |
|||
setRequestPermissionTips(PermissionTips) |
|||
registerRequestPermissionTipsListener({ |
|||
onRequest: (e) => { |
|||
console.log(e) |
|||
}, |
|||
onConfirm: (e) => { |
|||
console.log(e) |
|||
}, |
|||
onComplete: (e) => { |
|||
// 华为手机在权限禁止之后,再次申请权限不会出现权限申请框。此时应该引导用户去系统设置开启此权限,不应该频繁申请。 |
|||
if (brand.toLowerCase() == "huawei") { |
|||
var tips = {} |
|||
var hasDeniedPermission = false |
|||
for (var k in PermissionTips) { |
|||
if (e[k] != "denied") { |
|||
tips[k] = PermissionTips[k] |
|||
} else { |
|||
hasDeniedPermission = true |
|||
} |
|||
} |
|||
setRequestPermissionTips(tips) // 更新弹框提醒,防止华为手机不出现权限申请框时权限提醒框闪烁的情况 |
|||
if (hasDeniedPermission) |
|||
uni.showModal({ |
|||
content: "权限已经被拒绝,请前往设置中开启" |
|||
}) |
|||
} |
|||
} |
|||
}) |
|||
}, |
|||
onShow: function() { |
|||
console.log('App Show') |
|||
}, |
|||
onHide: function() { |
|||
console.log('App Hide') |
|||
}, |
|||
onExit: function() { |
|||
unregisterRequestPermissionTipsListener(null) |
|||
} |
|||
} |
|||
</script> |
|||
``` |
@ -0,0 +1,3 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="io.dcloud.uts.permissionrequest"> |
|||
</manifest> |
@ -0,0 +1,3 @@ |
|||
{ |
|||
"minSdkVersion": "21" |
|||
} |
@ -0,0 +1,148 @@ |
|||
import { UnregisterRequestPermissionTipsListener, RegisterRequestPermissionTipsListener, RequestPermissionTipsListener, SetRequestPermissionTips } from "../interface"; |
|||
import RelativeLayout from 'android.widget.RelativeLayout'; |
|||
import LinearLayout from 'android.widget.LinearLayout'; |
|||
import Color from 'android.graphics.Color'; |
|||
import TextView from 'android.widget.TextView'; |
|||
import ViewGroup from 'android.view.ViewGroup'; |
|||
import Activity from 'android.app.Activity'; |
|||
import HashMap from 'java.util.HashMap'; |
|||
import AnimationUtils from 'android.view.animation.AnimationUtils'; |
|||
import R from 'io.dcloud.uts.permissionrequest.R' |
|||
import Html from 'android.text.Html'; |
|||
import View from 'android.view.View'; |
|||
import Runnable from "java.lang.Runnable" |
|||
|
|||
let PermissionTipsView : View | null = null |
|||
let permissionTips : HashMap<String, String> = new HashMap<String, String>() |
|||
var permissionListener : RequestPermissionListener | null = null |
|||
var listener : RequestPermissionTipsListener | null = null |
|||
|
|||
@UTSJS.keepAlive |
|||
export function unregisterRequestPermissionTipsListener(e : RequestPermissionTipsListener | null) { |
|||
listener = null; |
|||
if (permissionListener != null) { |
|||
permissionListener!.stop() |
|||
permissionListener = null |
|||
} |
|||
if (PermissionTipsView != null) { |
|||
if (PermissionTipsView!.getParent() != null) { |
|||
PermissionTipsView!.setAnimation(null); |
|||
((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView) |
|||
} |
|||
PermissionTipsView = null |
|||
} |
|||
} |
|||
|
|||
@UTSJS.keepAlive |
|||
export function registerRequestPermissionTipsListener(l : RequestPermissionTipsListener | null) { |
|||
listener = l |
|||
if (permissionListener == null) { |
|||
permissionListener = uni.createRequestPermissionListener() |
|||
permissionListener!.onRequest((permissions : Array<string>) => { |
|||
if (listener != null) |
|||
listener!.onRequest?.invoke(permissions) |
|||
}) |
|||
permissionListener!.onConfirm((permissions : Array<string>) => { |
|||
UTSAndroid.getUniActivity()!.runOnUiThread(new ConfirmRunnable(permissions)) |
|||
}) |
|||
permissionListener!.onComplete((permissions : Array<string>) => { |
|||
UTSAndroid.getUniActivity()!.runOnUiThread(new CompleteRunnable(permissions)) |
|||
}) |
|||
} |
|||
} |
|||
|
|||
class ConfirmRunnable implements Runnable { |
|||
permissions : Array<string> |
|||
constructor(permissions : Array<string>) { |
|||
this.permissions = permissions |
|||
} |
|||
override run() { |
|||
let activity = UTSAndroid.getUniActivity()! |
|||
if (PermissionTipsView != null && PermissionTipsView!.getParent() != null) { |
|||
PermissionTipsView!.setAnimation(null); |
|||
((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView) |
|||
} |
|||
if (this.permissions.length > 0) { |
|||
try { |
|||
PermissionTipsView = createPermissionWindow(activity, this.permissions); |
|||
if (PermissionTipsView != null) { |
|||
(activity.findViewById(android.R.id.content) as ViewGroup).addView(PermissionTipsView!) |
|||
} |
|||
} catch (e) { |
|||
console.log(e) |
|||
} |
|||
} |
|||
if (listener != null) |
|||
listener!.onConfirm?.invoke(this.permissions) |
|||
} |
|||
} |
|||
|
|||
class CompleteRunnable implements Runnable { |
|||
permissions : Array<string> |
|||
constructor(permissions : Array<string>) { |
|||
this.permissions = permissions |
|||
} |
|||
override run() { |
|||
let activity = UTSAndroid.getUniActivity()! |
|||
if (PermissionTipsView != null) { |
|||
PermissionTipsView!.setAnimation(AnimationUtils.loadAnimation(activity, R.anim.popupwindow_exit)); |
|||
((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView!) |
|||
PermissionTipsView = null |
|||
} |
|||
if (listener != null) { |
|||
var permissionStatus = {} |
|||
for (var p in this.permissions) { |
|||
permissionStatus[p] = UTSAndroid.checkSystemPermissionGranted(UTSAndroid.getUniActivity()!, [p]) ? "grant" : "denied" |
|||
} |
|||
listener!.onComplete?.invoke(permissionStatus) |
|||
} |
|||
} |
|||
} |
|||
|
|||
export const setRequestPermissionTips : SetRequestPermissionTips = (tips : UTSJSONObject) => { |
|||
permissionTips.clear() |
|||
for (var k in tips) { |
|||
permissionTips.put(k, tips[k] != null ? tips[k].toString() : "") |
|||
} |
|||
} |
|||
|
|||
function createPermissionWindow(activity : Activity, permissions : Array<string>) : ViewGroup | null { |
|||
let rootView = new RelativeLayout(activity); |
|||
rootView.setBackgroundColor(Color.TRANSPARENT); |
|||
let backgroundView = new LinearLayout(activity); |
|||
backgroundView.setPadding(30, 0, 30, 30); |
|||
backgroundView.setOrientation(1) |
|||
backgroundView.setBackgroundResource(R.drawable.dcloud_permission_background); |
|||
let permissionTipsList : Array<string> = new Array<string>() |
|||
for (var p in permissions) { |
|||
if (permissionTips.containsKey(p) && permissionTipsList.indexOf(permissionTips.get(p)) == -1) { |
|||
permissionTipsList.push(permissionTips.get(p)!) |
|||
} |
|||
} |
|||
for (var p in permissionTipsList) { |
|||
let text = new TextView(activity); |
|||
text.setText(Html.fromHtml(p, Html.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING)) |
|||
text.setPadding(0, 30, 0, 0) |
|||
text.setTextSize((5 * getScale()).toFloat()) |
|||
text.setTextColor(Color.BLACK) |
|||
backgroundView.addView(text) |
|||
} |
|||
if (backgroundView.getChildCount() == 0) { |
|||
return null; |
|||
} |
|||
let rll = new RelativeLayout.LayoutParams(-1, -2) |
|||
rll.topMargin = (UTSAndroid.getStatusBarHeight() * getScale()).toInt(); |
|||
rll.leftMargin = 30; |
|||
rll.rightMargin = 30; |
|||
rll.bottomMargin = 30; |
|||
rootView.addView(backgroundView, rll) |
|||
rootView.setAnimation(AnimationUtils.loadAnimation(activity, R.anim.popupwindow_enter)); |
|||
return rootView; |
|||
} |
|||
|
|||
function getScale() : Float { |
|||
if (UTSAndroid.getUniActivity() != null) { |
|||
return UTSAndroid.getUniActivity()!.resources.displayMetrics.scaledDensity |
|||
} |
|||
return (0 as number).toFloat(); |
|||
} |
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<translate xmlns:android="http://schemas.android.com/apk/res/android" |
|||
android:duration="200" |
|||
android:fromYDelta="-100%" |
|||
android:toYDelta="0" > |
|||
</translate> |
@ -0,0 +1,5 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<translate xmlns:android="http://schemas.android.com/apk/res/android" |
|||
android:duration="200" |
|||
android:fromYDelta="0" |
|||
android:toYDelta="-100%" /> |
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<shape xmlns:android="http://schemas.android.com/apk/res/android" > |
|||
<corners android:radius="8dp" /> |
|||
<!-- <stroke android:color="@color/black" android:width="2dp"/>--> |
|||
<solid android:color="#ffffff"/> |
|||
</shape> |
@ -0,0 +1,19 @@ |
|||
export type RequestPermissionTipsListener = { |
|||
onRequest ?: ((permissions : Array<string>) => void) | null, |
|||
onConfirm ?: ((permission : Array<string>) => void) | null, |
|||
onComplete ?: ((permissions : UTSJSONObject) => void) | null |
|||
} |
|||
|
|||
|
|||
export type RegisterRequestPermissionTipsListener = (listener : RequestPermissionTipsListener | null) => void |
|||
export type UnregisterRequestPermissionTipsListener = (listener : RequestPermissionTipsListener | null) => void |
|||
export type SetRequestPermissionTips = (tips : UTSJSONObject) => void |
|||
|
|||
export interface Uni { |
|||
|
|||
registerRequestPermissionTipsListener : RegisterRequestPermissionTipsListener, |
|||
|
|||
unregisterRequestPermissionTipsListener : UnregisterRequestPermissionTipsListener |
|||
|
|||
setRequestPermissionTips : SetRequestPermissionTips |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue