Browse Source

优化七鱼客服,增加权限授权弹窗

zk 1 year ago
parent
commit
90b63acea7

+ 1 - 1
app/build.gradle

@@ -55,7 +55,7 @@ android {
 
 
     def env_release = PROD
-    def env_debug = LOCAL
+    def env_debug = PROD
 
     buildTypes {
         release {

+ 30 - 0
app/src/main/java/com/datarecovery/master/data/consts/ChannelHelper.java

@@ -0,0 +1,30 @@
+package com.datarecovery.master.data.consts;
+
+import com.atmob.user.AtmobUser;
+
+public class ChannelHelper {
+
+
+    public static boolean isTargetSDChannel(String targetChannel) {
+        if (AtmobUser.getAtmobTgPlatformId() != ChannelId.SD) {
+            return false;
+        }
+        String atmobChannel = AtmobUser.getAtmobChannel();
+        if (atmobChannel == null || targetChannel == null) {
+            return false;
+        }
+        int index = atmobChannel.indexOf(targetChannel, atmobChannel.length() - targetChannel.length());
+        return index != -1;
+    }
+
+
+    public static boolean isTargetSuffixChannel(String targetChannel) {
+        String atmobChannel = AtmobUser.getAtmobChannel();
+        if (atmobChannel == null || targetChannel == null) {
+            return false;
+        }
+        int index = atmobChannel.indexOf(targetChannel, atmobChannel.length() - targetChannel.length());
+        return index != -1;
+    }
+
+}

+ 0 - 9
app/src/main/java/com/datarecovery/master/data/repositories/ConfigRepository.java

@@ -76,15 +76,6 @@ public class ConfigRepository {
     }
 
 
-    public static boolean isTargetSuffixChannel(String targetChannel) {
-        String atmobChannel = AtmobUser.getAtmobChannel();
-        if (atmobChannel == null || targetChannel == null) {
-            return false;
-        }
-        int index = atmobChannel.indexOf(targetChannel, atmobChannel.length() - targetChannel.length());
-        return index != -1;
-    }
-
     public static boolean isIsOpenTrialMembership() {
         return isOpenTrialMembership;
     }

+ 2 - 1
app/src/main/java/com/datarecovery/master/module/member/MemberViewModel.java

@@ -20,6 +20,7 @@ import com.datarecovery.master.data.api.bean.PayOptionsBean;
 import com.datarecovery.master.data.api.bean.WechatPaymentSignBean;
 import com.datarecovery.master.data.api.response.MemberDetailResponse;
 import com.datarecovery.master.data.api.response.MemberPayResponse;
+import com.datarecovery.master.data.consts.ChannelHelper;
 import com.datarecovery.master.data.consts.ChannelId;
 import com.datarecovery.master.data.consts.Constants;
 import com.datarecovery.master.data.consts.ErrorCode;
@@ -316,7 +317,7 @@ public class MemberViewModel extends BaseViewModel {
 
 
     public void onMemberSubscribeClick() {
-        if (ConfigRepository.isTargetSuffixChannel(ChannelId.VIVO)) {
+        if (ChannelHelper.isTargetSuffixChannel(ChannelId.VIVO)) {
             if (!BoxingUtil.boxing(accountRepository.getIsLogin().getValue())) {
                 ToastUtil.show(R.string.no_login, ToastUtil.LENGTH_SHORT);
                 LoginActivity.start(ActivityUtil.getTopActivity(), ReportUtil.getReportId(memberType));

+ 12 - 0
app/src/main/java/com/datarecovery/master/module/mine/MineViewModel.java

@@ -12,6 +12,8 @@ import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
 import com.datarecovery.master.data.api.response.CustomerUrlResponse;
+import com.datarecovery.master.data.consts.ChannelHelper;
+import com.datarecovery.master.data.consts.ChannelId;
 import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.data.repositories.ConfigRepository;
@@ -45,6 +47,7 @@ public class MineViewModel extends BaseViewModel {
     private final MutableLiveData<Boolean> showLoading = new MutableLiveData<>();
     private final SingleLiveEvent<?> showExitDialog = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showLogoutDialog = new SingleLiveEvent<>();
+    private final MutableLiveData<String> mineAppealText = new MutableLiveData<>();
     private final LiveData<String> loginTips;
 
     private final AccountRepository accountRepository;
@@ -67,6 +70,15 @@ public class MineViewModel extends BaseViewModel {
                 return ContextUtil.getContext().getString(R.string.mine_logged, phone);
             }
         });
+        if (ChannelHelper.isTargetSuffixChannel(ChannelId.HUAWEI)) {
+            mineAppealText.setValue(ContextUtil.getContext().getString(R.string.mine_appeal_hw));
+        } else {
+            mineAppealText.setValue(ContextUtil.getContext().getString(R.string.mine_appeal));
+        }
+    }
+
+    public LiveData<String> getMineAppealText() {
+        return mineAppealText;
     }
 
     public LiveData<Boolean> getShowLoading() {

+ 119 - 0
app/src/main/java/com/datarecovery/master/sdk/qiyu/QiYuHelper.java

@@ -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();
+            }
+        }
+
+    }
+
     /**
      * 账号注销使用
      */

+ 1 - 1
app/src/main/res/layout/fragment_mine.xml

@@ -204,7 +204,7 @@
                         isGone="@{!mineViewModel.isLogin || AtmobUser.getAtmobTgPlatformId() == ChannelId.BD}"
                         layout="@layout/layout_item_settings"
                         settingsIcon="@{@drawable/icon_small_appeal}"
-                        settingsName="@{@string/mine_appeal}"
+                        settingsName="@{mineViewModel.mineAppealText}"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
                         android:onClick="@{()->mineViewModel.onAppealClick()}" />

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -201,6 +201,7 @@
     <string name="trial_export_video_fail_content">您目前只可以试看该视频的50%,如需观看该视频的全部,请点击「去恢复」。</string>
     <string name="trial_export_audio_fail_content">您目前只可以试听该音频的50%,如需试听该音频的全部,请点击「去恢复」。</string>
     <string name="mine_appeal">申诉</string>
+    <string name="mine_appeal_hw">申诉退费</string>
     <string name="scanning_progress">已扫描%d%%</string>
     <string name="trial_scanning_finish_content">目前只扫描到%d%%,您如需要开放「深层扫描」查看全部数据,请点击去「去恢复」按钮。</string>
     <string name="order_cancel_order">取消订单</string>