You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
oa-base/uni_modules/uni-registerRequestPermissi.../utssdk/app-android/index.uts

124 lines
4.9 KiB
Plaintext

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 Context from 'android.content.Context';
import WindowManager from 'android.view.WindowManager';
let PermissionTipsView : View | null = null
let permissionTips : HashMap<String, String> = new HashMap<String, String>()
var permissionListener : RequestPermissionListener | null = null
var listener : RequestPermissionTipsListener | null = null
export const unregisterRequestPermissionTipsListener : UnregisterRequestPermissionTipsListener = (_ : 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
}
}
export const registerRequestPermissionTipsListener : 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>) => {
let activity = UTSAndroid.getUniActivity()!
if (PermissionTipsView != null && PermissionTipsView!.getParent() != null) {
PermissionTipsView!.setAnimation(null);
((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView)
}
if (permissions.length > 0) {
PermissionTipsView = createPermissionWindow(activity, permissions);
if (PermissionTipsView != null) {
(activity.findViewById(android.R.id.content) as ViewGroup).addView(PermissionTipsView!)
}
}
if (listener != null)
listener!.onConfirm?.invoke(permissions)
})
permissionListener!.onComplete((permissions : Array<string>) => {
// clearTimeout(timeoutRequestId)
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 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();
}