|
|
@@ -1,8 +1,11 @@
|
|
|
package com.datarecovery.master.sdk.qiyu;
|
|
|
|
|
|
+import android.app.AlertDialog;
|
|
|
import android.app.Application;
|
|
|
import android.content.Context;
|
|
|
+import android.content.DialogInterface;
|
|
|
import android.text.TextUtils;
|
|
|
+import android.widget.Toast;
|
|
|
|
|
|
import com.atmob.common.data.KVUtils;
|
|
|
import com.atmob.common.logging.AtmobLog;
|
|
|
@@ -10,6 +13,7 @@ import com.atmob.common.runtime.ContextUtil;
|
|
|
import com.datarecovery.master.BuildConfig;
|
|
|
import com.datarecovery.master.R;
|
|
|
import com.datarecovery.master.data.repositories.AccountRepository;
|
|
|
+import com.datarecovery.master.dialog.CommonSureDialog;
|
|
|
import com.datarecovery.master.module.browser.BrowserActivity;
|
|
|
import com.datarecovery.master.utils.SystemUtil;
|
|
|
import com.qiyukf.nimlib.sdk.RequestCallback;
|
|
|
@@ -19,7 +23,16 @@ import com.qiyukf.unicorn.api.UICustomization;
|
|
|
import com.qiyukf.unicorn.api.Unicorn;
|
|
|
import com.qiyukf.unicorn.api.YSFOptions;
|
|
|
import com.qiyukf.unicorn.api.YSFUserInfo;
|
|
|
+import com.qiyukf.unicorn.api.event.EventCallback;
|
|
|
+import com.qiyukf.unicorn.api.event.EventProcessFactory;
|
|
|
+import com.qiyukf.unicorn.api.event.SDKEvents;
|
|
|
+import com.qiyukf.unicorn.api.event.UnicornEventBase;
|
|
|
+import com.qiyukf.unicorn.api.event.entry.RequestPermissionEventEntry;
|
|
|
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.UUID;
|
|
|
|
|
|
public class QiYuHelper {
|
|
|
@@ -29,6 +42,8 @@ public class QiYuHelper {
|
|
|
private static final String ysfAppId = BuildConfig.QIYU_APP_KEY;
|
|
|
private static final String VISITOR_KEY = "visitor_key";
|
|
|
|
|
|
+ private static CommonSureDialog permissonDialog;
|
|
|
+
|
|
|
public static void init(Application application) {
|
|
|
Unicorn.config(application, ysfAppId, options(), new GlideImageLoader(application));
|
|
|
}
|
|
|
@@ -73,9 +88,113 @@ public class QiYuHelper {
|
|
|
YSFOptions options = new YSFOptions();
|
|
|
options.statusBarNotificationConfig = new StatusBarNotificationConfig();
|
|
|
options.onMessageItemClickListener = BrowserActivity::start;
|
|
|
+ options.sdkEvents = new SDKEvents();
|
|
|
+ options.sdkEvents.eventProcessFactory = eventType -> {
|
|
|
+ if (eventType == 5) {
|
|
|
+ return new RequestPermissionEvent();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ };
|
|
|
return options;
|
|
|
}
|
|
|
|
|
|
+ public static class RequestPermissionEvent implements UnicornEventBase<RequestPermissionEventEntry> {
|
|
|
+ private final Map<String, String> h5MessageHandlerMap = new HashMap<>();
|
|
|
+
|
|
|
+
|
|
|
+ public RequestPermissionEvent() {
|
|
|
+ h5MessageHandlerMap.put("android.permission.RECORD_AUDIO", "麦克风");
|
|
|
+ h5MessageHandlerMap.put("android.permission.CAMERA", "相机");
|
|
|
+ h5MessageHandlerMap.put("android.permission.READ_EXTERNAL_STORAGE", "存储");
|
|
|
+ h5MessageHandlerMap.put("android.permission.WRITE_EXTERNAL_STORAGE", "存储");
|
|
|
+ h5MessageHandlerMap.put("android.permission.READ_MEDIA_AUDIO", "多媒体文件");
|
|
|
+ h5MessageHandlerMap.put("android.permission.READ_MEDIA_IMAGES", "多媒体文件");
|
|
|
+ h5MessageHandlerMap.put("android.permission.READ_MEDIA_VIDEO", "多媒体文件");
|
|
|
+ h5MessageHandlerMap.put("android.permission.POST_NOTIFICATIONS", "通知栏权限");
|
|
|
+ }
|
|
|
+
|
|
|
+ private String transToPermissionStr(List<String> permissionList) {
|
|
|
+ if (permissionList == null || permissionList.isEmpty()) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ HashSet<String> set = new HashSet<>();
|
|
|
+ for (int i = 0; i < permissionList.size(); i++) {
|
|
|
+ if (!TextUtils.isEmpty(h5MessageHandlerMap.get(permissionList.get(i)))) {
|
|
|
+ set.add(h5MessageHandlerMap.get(permissionList.get(i)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (set.isEmpty()) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ StringBuilder str = new StringBuilder();
|
|
|
+ for (String temp : set) {
|
|
|
+ str.append(temp);
|
|
|
+ str.append("、");
|
|
|
+ }
|
|
|
+ if (str.length() > 0) {
|
|
|
+ str.deleteCharAt(str.length() - 1);
|
|
|
+ }
|
|
|
+ return str.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param requestPermissionEventEntry 获取权限相关的类
|
|
|
+ * @param context 当前界面的 context 对象,使用之前请判断是否为 null
|
|
|
+ * @param callback sdk 的回调对象 注意:如果该事件 sdk 不需要回调的时候,这个对象会为 null,所以当使用的时候需要做一下非null判断
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void onEvent(RequestPermissionEventEntry requestPermissionEventEntry, Context context, EventCallback<RequestPermissionEventEntry> callback) {
|
|
|
+
|
|
|
+ //申请权限的场景
|
|
|
+ //从本地选择媒体文件(视频和图片):0
|
|
|
+ //拍摄视频场景:1
|
|
|
+ //保存图片到本地:2
|
|
|
+ //保存视频到本地:3
|
|
|
+ //选择本地视频:4
|
|
|
+ //选择本地文件:5
|
|
|
+ //选择本地图片:6
|
|
|
+ //拍照:7
|
|
|
+ //录音:8
|
|
|
+ //视频客服:9
|
|
|
+ //通知栏权限:10
|
|
|
+ int type = requestPermissionEventEntry.getScenesType();
|
|
|
+ String content = null;
|
|
|
+ switch (type) {
|
|
|
+ case 0:
|
|
|
+ content = "使用媒体权限,用于发送媒体客服协助解答疑惑";
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ content = "使用拍摄视频场景相关权限,用于发送客服协助解答疑惑";
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ content = "使用视频权限,用于发送视频客服协助解答疑惑";
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ content = "使用文件权限,用于发送文件客服协助解答疑惑";
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ content = "使用相册权限,用于发送图片客服协助解答疑惑";
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ content = "使用相机权限,用于发送客服协助解答疑惑";
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ content = "使用录音权限,用于发送客服协助解答疑惑";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (TextUtils.isEmpty(content)) {
|
|
|
+ callback.onProcessEventSuccess(requestPermissionEventEntry);
|
|
|
+ } else {
|
|
|
+ CommonSureDialog permissionDialog = new CommonSureDialog(context);
|
|
|
+ permissionDialog.setDialogTitle(R.string.dialog_kind_tips);
|
|
|
+ permissionDialog.setDialogContent(content);
|
|
|
+ permissionDialog.setOnDialogClickListener(() -> callback.onProcessEventSuccess(requestPermissionEventEntry));
|
|
|
+ permissionDialog.show();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 账号注销使用
|
|
|
*/
|