Browse Source

Merge branch '20241029_accompany_sdk' into dev

# Conflicts:
#	BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java
#	BaseLibrary/src/main/java/com/cooleshow/base/utils/UiUtils.java
#	BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/WebStartHelper.java
#	BaseLibrary/src/main/res/values/colors.xml
#	settings.gradle
#	usercenter/src/main/java/com/cooleshow/usercenter/helper/UserHelper.java
Pq 4 months ago
parent
commit
d48835e44b
100 changed files with 1556 additions and 55 deletions
  1. 3 2
      BaseLibrary/build.gradle
  2. 18 0
      BaseLibrary/src/main/java/com/cooleshow/base/bean/ShareIntentBean.java
  3. 31 0
      BaseLibrary/src/main/java/com/cooleshow/base/common/CommonConfig.java
  4. 17 4
      BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java
  5. 25 0
      BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.java
  6. 11 0
      BaseLibrary/src/main/java/com/cooleshow/base/utils/FileUtils.java
  7. 3 0
      BaseLibrary/src/main/java/com/cooleshow/base/utils/MyFileUtils.java
  8. 50 1
      BaseLibrary/src/main/java/com/cooleshow/base/utils/UiUtils.java
  9. 4 7
      BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/WebStartHelper.java
  10. 14 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/DialogUtil.java
  11. 42 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/ProgressLoading2.java
  12. 6 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/dialog/CommonConfirmDialog2.java
  13. 131 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/dialog/CommonFilterDialogV2.java
  14. 1 1
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/span/CenterImageSpan.java
  15. 5 0
      BaseLibrary/src/main/res/drawable/shape_2dc7aa_16dp.xml
  16. 115 0
      BaseLibrary/src/main/res/layout/common_download_popu2.xml
  17. 34 0
      BaseLibrary/src/main/res/layout/dialog_common_filter_v2_layout.xml
  18. 26 0
      BaseLibrary/src/main/res/layout/item_dialog_common_filter_layout.xml
  19. 62 29
      BaseLibrary/src/main/res/layout/progress_dialog.xml
  20. 1 0
      BaseLibrary/src/main/res/values/colors.xml
  21. 1 2
      BaseLibrary/src/main/res/values/styles.xml
  22. 8 8
      accompany/src/main/java/com/daya/orchestra/accompany/js/JsInterfaceAccomPanyUtils.java
  23. 1 1
      accompany/src/main/java/com/daya/orchestra/accompany/web/AccompanyActivity.java
  24. 1 0
      accompanySDK/.gitignore
  25. 49 0
      accompanySDK/build.gradle
  26. 0 0
      accompanySDK/consumer-rules.pro
  27. BIN
      accompanySDK/libs/accompany_release_1.0.3_2410251726.aar
  28. BIN
      accompanySDK/libs/camerakit_release_1.0.0_2407171443.aar
  29. BIN
      accompanySDK/libs/ffmpegCmd-release_1.0.2_2410081548.aar
  30. BIN
      accompanySDK/libs/midiplaylib_release_1.0.0_2403011515.aar
  31. 21 0
      accompanySDK/proguard-rules.pro
  32. 26 0
      accompanySDK/src/androidTest/java/com/daya/accompanysdk/ExampleInstrumentedTest.java
  33. 4 0
      accompanySDK/src/main/AndroidManifest.xml
  34. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_0.png
  35. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_1.png
  36. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_10.png
  37. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_11.png
  38. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_12.png
  39. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_13.png
  40. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_14.png
  41. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_15.png
  42. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_16.png
  43. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_17.png
  44. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_18.png
  45. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_19.png
  46. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_2.png
  47. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_20.png
  48. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_21.png
  49. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_22.png
  50. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_23.png
  51. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_24.png
  52. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_25.png
  53. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_26.png
  54. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_27.png
  55. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_28.png
  56. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_29.png
  57. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_3.png
  58. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_4.png
  59. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_5.png
  60. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_6.png
  61. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_7.png
  62. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_8.png
  63. BIN
      accompanySDK/src/main/assets/lottie/accompany/images/img_9.png
  64. 195 0
      accompanySDK/src/main/java/com/daya/accompanysdk/engine/GlideEngine.java
  65. 247 0
      accompanySDK/src/main/java/com/daya/accompanysdk/manager/AccompanyHelper.java
  66. 36 0
      accompanySDK/src/main/java/com/daya/accompanysdk/utils/Utils.java
  67. 161 0
      accompanySDK/src/main/java/com/daya/accompanysdk/widget/AccompanyLoadingView.java
  68. 207 0
      accompanySDK/src/main/java/com/daya/accompanysdk/widget/CustomDelayCheckView.java
  69. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_check_fail.png
  70. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_check_ing.png
  71. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_check_prepare.png
  72. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_check_success.png
  73. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_icon_back.png
  74. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_icon_ball.png
  75. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_icon_ball2.png
  76. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_icon_delay_check_tip1.png
  77. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_icon_delay_check_tip2.png
  78. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_icon_delay_check_tip3.png
  79. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_icon_delay_check_tip4.png
  80. BIN
      accompanySDK/src/main/res/drawable-xhdpi/ac_icon_tip.png
  81. BIN
      accompanySDK/src/main/res/drawable-xhdpi/icon_accompany_back.png
  82. BIN
      accompanySDK/src/main/res/drawable-xhdpi/icon_accompany_loading_progress_bg.png
  83. BIN
      accompanySDK/src/main/res/drawable-xhdpi/icon_accompany_no_permiss_bg1.png
  84. BIN
      accompanySDK/src/main/res/drawable-xhdpi/icon_no_permission_cancel_bg.png
  85. BIN
      accompanySDK/src/main/res/drawable-xhdpi/icon_no_permission_confirm_bg.png
  86. BIN
      accompanySDK/src/main/res/drawable-xhdpi/icon_no_permission_content_bg.png
  87. BIN
      accompanySDK/src/main/res/drawable-xhdpi/icon_no_permission_tip_bg.png
  88. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_check_fail.png
  89. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_check_ing.png
  90. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_check_prepare.png
  91. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_check_success.png
  92. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_delay_check_bg.png
  93. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_back.png
  94. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_ball.png
  95. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_ball2.png
  96. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_delay_check_tip1.png
  97. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_delay_check_tip2.png
  98. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_delay_check_tip3.png
  99. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_delay_check_tip4.png
  100. BIN
      accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_tip.png

+ 3 - 2
BaseLibrary/build.gradle

@@ -195,9 +195,7 @@ dependencies {
 //    api 'com.sina.weibo.sdk:core:10.10.0'  不能用
 
 
-    api project(path: ':camerakit')
     api 'org.java-websocket:Java-WebSocket:1.5.1'
-    api project(path: ':midiplaylib')
     api 'org.greenrobot:eventbus:3.1.1'
 
     api 'com.github.bingoogolapple.BGAQRCode-Android:zxing:1.3.8'
@@ -219,4 +217,7 @@ dependencies {
     compileOnly files('libs/emoji-ios-release.aar')
     compileOnly files('libs/emoji-release.aar')
     compileOnly files('libs/filedownload-1.0.0.aar')
+
+    //依赖引导页模块
+    api project(':guide')
 }

+ 18 - 0
BaseLibrary/src/main/java/com/cooleshow/base/bean/ShareIntentBean.java

@@ -10,8 +10,18 @@ public class ShareIntentBean {
     private String title;
     private String des;
     private String thumb;
+    private int thumbRes;
+    private String id;
     private SHARE_MEDIA share_media;
 
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
     public SHARE_MEDIA getShare_media() {
         return share_media;
     }
@@ -28,6 +38,14 @@ public class ShareIntentBean {
         this.thumb = thumb;
     }
 
+    public int getThumbRes() {
+        return thumbRes;
+    }
+
+    public void setThumbRes(int thumbRes) {
+        this.thumbRes = thumbRes;
+    }
+
     public String getLinkUrl() {
         return linkUrl;
     }

+ 31 - 0
BaseLibrary/src/main/java/com/cooleshow/base/common/CommonConfig.java

@@ -0,0 +1,31 @@
+package com.cooleshow.base.common;
+
+import android.text.TextUtils;
+
+/**
+ * Author by pq, Date on 2023/2/9.
+ */
+public class CommonConfig {
+    public static String APP_MY_WORKS_GUIDE_TAG = "AppMyWorks";
+    public static boolean isNeedShowMusicMergeGuide = true;
+    public static boolean isNeedRequestMusicMergeGuideInfo = true;
+
+    public static void resetGuide() {
+        isNeedRequestMusicMergeGuideInfo = true;
+        isNeedShowMusicMergeGuide = true;
+    }
+
+
+    public static boolean isNeedRequestGuideInfo(String guideTag) {
+        if (TextUtils.equals(guideTag, APP_MY_WORKS_GUIDE_TAG)) {
+            return isNeedRequestMusicMergeGuideInfo;
+        }
+        return false;
+    }
+
+    public static void updateNoNeedRequest(String guideTag) {
+        if (TextUtils.equals(guideTag, APP_MY_WORKS_GUIDE_TAG)) {
+            isNeedRequestMusicMergeGuideInfo = false;
+        }
+    }
+}

+ 17 - 4
BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java

@@ -15,9 +15,12 @@ public abstract class WebConstants {
     public static final String WEB_JS_INTERFACE = "COLEXIU";
     public static final String WEB_URL = "web_url";//
     public static final String WEB_TITLE = "title";//
-    public static final String WEB_SOCKET_URL_TEST = "wss://dev.colexiu.com/audioAnalysis";
-    public static final String WEB_SOCKET_URL_RELEASE = "wss://online.colexiu.com/audioAnalysis";
-    public static final String WEB_SOCKET_URL_PRERELEASE = "wss://ponline.colexiu.com/audioAnalysis";
+    public static final String WEB_SHOW_LOADINGANIM = "showLoadingAnim";//
+    //临时测试
+//    public static final String WEB_SOCKET_URL_TEST = "wss://dev.colexiu.com/audioAnalysis";
+    public static final String WEB_SOCKET_URL_TEST = "wss://test.kt.colexiu.com/audioAnalysis_kt";
+    public static final String WEB_SOCKET_URL_RELEASE = "wss://mec.colexiu.com/audioAnalysis";
+    public static final String WEB_SOCKET_URL_PRERELEASE = "wss://dev.kt.colexiu.com/audioAnalysis_kt";
 
     public static String getCustomUAParams() {
         if (BaseApplication.Companion.isTeacherClient()) {
@@ -51,6 +54,10 @@ public abstract class WebConstants {
         return BaseApplication.Companion.isTeacherClient() ? getTeacherBaseUrlH5() : getStudentBaseUrlH5();
     }
 
+    private static String getAccompanyBaseUrl() {
+        return BuildConfig.BASE_SERVER_URL + "klx-music-score/";
+    }
+
     //直播课列表
     public static final String STUDENT_LIVE_CLASS = getBaseUrlH5() + "/#/liveClass";
     //视频课列表
@@ -146,7 +153,7 @@ public abstract class WebConstants {
     //曲谱审核失败 - 重新编辑页面
     public static final String EDIT_SCORE_PAGE = getBaseUrlH5() + "/#/music-upload/%s/edit";
     //曲谱审核成功
-    public static final String SCORE_DETAIL_PAGE = BuildConfig.BASE_SERVER_URL + "accompany?id=%s";
+    public static final String SCORE_DETAIL_PAGE = getAccompanyBaseUrl() + "?id=%s";
     //老师端提现签署协议页面
     public static final String PROTOCOL_SIGN_BY_TEACHER_WIYHDRAW = getBaseUrlH5() + "/#/cashProtocol";
     //老师端交易记录页面
@@ -190,5 +197,11 @@ public abstract class WebConstants {
 
     public static final String TEACHER_APPOINTMENT_COURSE_SETTING = getBaseUrlH5() + "/#/practiceSettingTimer";//老师端约课时间段配置
     public static final String STUDENT_FREE_CARD = getBaseUrlH5() + "/#/discount-card";//畅学卡
+
+    public static String getAccompanyUA() {
+        return WebConstants.WEB_UA_PARAMS + WebConstants.getCustomUAParams();
+    }
+
+    public static final String WORKS_MUSIC_SCORE = getAccompanyBaseUrl() + "#/simple-detail?id=%s&musicRenderType=%s&part-index=%s";////作品合成单行铺面
 }
 

+ 25 - 0
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.java

@@ -1,5 +1,6 @@
 package com.cooleshow.base.ui.activity;
 
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.ImageView;
@@ -98,6 +99,30 @@ public abstract class BaseActivity<V extends ViewBinding> extends RxAppCompatAct
         mLoading.setCanceledOnTouchOutside(cancelable);
     }
 
+    public void showLoadingAndCancel(String text) {
+        if (mLoading != null && !mLoading.isShowing()) {
+            mLoading.showLoadingAndCancel(text);
+        }
+    }
+
+    public void setLoadingCancelClick(View.OnClickListener onClickListener) {
+        if (mLoading != null) {
+            mLoading.setClickListener(onClickListener);
+        }
+    }
+
+    public void setLoadingStyle(Drawable drawable, int contentTestSize,int textColor){
+        if (mLoading != null) {
+            mLoading.setLoadingStyle(drawable,contentTestSize,textColor);
+        }
+    }
+
+    public void updateDimAmount(float dimAmount) {
+        if (mLoading != null) {
+            mLoading.updateDimAmount(dimAmount);
+        }
+    }
+
     @Override
     public void hideLoading() {
         if (mLoading != null) {

+ 11 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/FileUtils.java

@@ -49,6 +49,8 @@ import javax.net.ssl.HttpsURLConnection;
 
 import okhttp3.ResponseBody;
 
+import static android.os.Environment.DIRECTORY_MUSIC;
+
 /**
  * <pre>
  *     author: Blankj
@@ -2072,4 +2074,13 @@ public final class FileUtils {
         }
         return false;
     }
+
+    public static String getPublicDirectoryMusic() {
+        try {
+            File file = Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC);
+            return file.getAbsolutePath();
+        } catch (Exception e) {
+            return "";
+        }
+    }
 }

+ 3 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/MyFileUtils.java

@@ -1675,6 +1675,9 @@ public class MyFileUtils {
     }
 
     public static boolean isVideo(String filePath) {
+        if(TextUtils.isEmpty(filePath)){
+            return false;
+        }
         File file = new File(filePath);
         if (!file.exists()) {
             return false;

+ 50 - 1
BaseLibrary/src/main/java/com/cooleshow/base/utils/UiUtils.java

@@ -21,14 +21,17 @@ import android.util.DisplayMetrics;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.cooleshow.base.R;
 import com.cooleshow.base.common.BaseApplication;
 import com.cooleshow.base.constanst.StyleConfig;
+import com.cooleshow.base.widgets.BaseDialog;
 import com.cooleshow.base.widgets.DialogUtil;
+import com.cooleshow.base.widgets.ViewHolder;
+import com.cooleshow.base.widgets.span.CenterImageSpan;
 import com.cooleshow.base.widgets.span.QMUIAlignMiddleImageSpan;
-import com.rui.common_base.widget.span.CenterImageSpan;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
@@ -462,4 +465,50 @@ public class UiUtils {
             }
         }
     }
+
+    public static void setTextMarquee(TextView textView) {
+        if (textView != null) {
+            textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
+            textView.setSingleLine(true);
+            textView.setSelected(true);
+            textView.setFocusable(true);
+            textView.setFocusableInTouchMode(true);
+            textView.setMarqueeRepeatLimit(-1);
+        }
+    }
+
+    public static void showSaveCopyDialog(FragmentManager fragmentmanager, Context context, String title, String content,String filePath) {
+        DialogUtil.showInCenter(fragmentmanager, R.layout.common_download_popu2, new DialogUtil.ShowListener() {
+            @Override
+            public void onShow(ViewHolder holder, BaseDialog dialog) {
+                TextView tvTitle = holder.getView(com.cooleshow.base.R.id.tv_title);
+                TextView tvContent = holder.getView(com.cooleshow.base.R.id.tv_content);
+                TextView btncancel = holder.getView(com.cooleshow.base.R.id.tv_cancel);
+                TextView btnCommit = holder.getView(com.cooleshow.base.R.id.tv_confirm);
+                TextView tv_copy = holder.getView(com.cooleshow.base.R.id.tv_copy);
+                ImageView iv_close = holder.getView(com.cooleshow.base.R.id.iv_close);
+                View view_title_bg = holder.getView(com.cooleshow.base.R.id.view_title_bg);
+                tvTitle.setText(title);
+                tvContent.setText(content);
+                btnCommit.setText("复制路径");
+                btncancel.setText("我知道了");
+                tv_copy.setVisibility(View.GONE);
+                view_title_bg.setVisibility(View.GONE);
+                iv_close.setVisibility(View.GONE);
+                iv_close.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        dialog.dismiss();
+                    }
+                });
+                btncancel.setOnClickListener(view -> {
+                    dialog.dismiss();
+                });
+                btnCommit.setOnClickListener(view -> {
+                    ToastUtil.getInstance().showShort("复制成功");
+                    ClipboardUtils.copyText(filePath);
+                });
+            }
+        });
+    }
 }

+ 4 - 7
BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/WebStartHelper.java

@@ -41,13 +41,6 @@ public class WebStartHelper {
      * * @param id
      */
     public static void startAccompany(String id) {
-        ARouter.getInstance().build(RouterPath.Accompany.ACTIVITY_ACCOMPANY_HTML)
-                .withString("url", String.format(WebConstants.SCORE_DETAIL_PAGE, id))
-                .withBoolean("isHideTitle", true)
-                .withBoolean("statusBarTextColor", true)
-                .withBoolean("isOpenLight", true)
-                .withInt("orientation", 0)
-                .navigation();
     }
 
     /**
@@ -317,4 +310,8 @@ public class WebStartHelper {
                 .withString(WebConstants.WEB_URL, WebConstants.STUDENT_FREE_CARD)
                 .navigation();
     }
+
+    public static String getWorksMusicScoreUrl(String musicId, String musicRenderType, String partIndex,boolean isVideo) {
+        return String.format(WebConstants.WORKS_MUSIC_SCORE, musicId, musicRenderType,partIndex);
+    }
 }

+ 14 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/DialogUtil.java

@@ -39,6 +39,20 @@ public class DialogUtil {
                 .show(fragmentmanager);
     }
 
+    public static void showInCenterNoCancel(FragmentManager fragmentmanager, int resourcesId, ShowListener showListener) {
+        CommonDialog.init().setLayoutId(resourcesId)
+                .setConvertListener(new ViewConvertListener() {
+                    @Override
+                    public void convertView(ViewHolder holder, BaseDialog dialog) {
+                        showListener.onShow(holder, dialog);
+                    }
+                })
+                .setDimAmount(0.7f)
+                .setGravity(Gravity.CENTER)
+                .setOutCancel(false)
+                .show(fragmentmanager);
+    }
+
     public static void showInCenterWithClose(FragmentManager fragmentmanager, int resourcesId, String title, String content, OnDialogButtonClickListener onDialogButtonClickListener) {
         if (fragmentmanager == null) {
             return;

+ 42 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/ProgressLoading2.java

@@ -3,11 +3,14 @@ package com.cooleshow.base.widgets;
 import android.app.Dialog;
 import android.content.Context;
 import android.graphics.drawable.AnimationDrawable;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.view.Gravity;
 import android.view.View;
+import android.view.Window;
 import android.view.WindowManager;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.airbnb.lottie.LottieAnimationView;
@@ -24,6 +27,9 @@ public class ProgressLoading2 extends BaseFullDialog {
     private ImageView mImageView;
     private TextView mTvLoadingText;
     private LottieAnimationView mViewLoadingAnim;
+    private TextView mTvCancel;
+    private LinearLayout mLlContent;
+    private View.OnClickListener mClickListener;
 
     public ProgressLoading2(@NonNull Context context) {
         super(context, R.style.LightProgressDialog);
@@ -42,9 +48,14 @@ public class ProgressLoading2 extends BaseFullDialog {
         mImageView = findViewById(R.id.iv_loading);
         mTvLoadingText = findViewById(R.id.tv_loading_text);
         mViewLoadingAnim = findViewById(R.id.view_loading_anim);
+        mTvCancel = findViewById(R.id.tv_cancel_loading);
+        mLlContent = findViewById(R.id.ll_content);
         mViewLoadingAnim.setImageAssetsFolder("lottie/refresh/images/");
         mViewLoadingAnim.setAnimation("lottie/refresh_anim.json");
         mViewLoadingAnim.loop(true);
+        if (mClickListener != null) {
+            mTvCancel.setOnClickListener(mClickListener);
+        }
     }
 
     public void showLoading() {
@@ -69,6 +80,17 @@ public class ProgressLoading2 extends BaseFullDialog {
         }
     }
 
+    public void showLoadingAndCancel(String text) {
+        showLoading(text);
+        if (mTvCancel != null) {
+            mTvCancel.setVisibility(View.VISIBLE);
+        }
+    }
+
+    public void setClickListener(View.OnClickListener clickListener) {
+        mClickListener = clickListener;
+    }
+
     public void updateLoadingText(String text) {
         if (mTvLoadingText != null) {
             mTvLoadingText.setText(text);
@@ -86,4 +108,24 @@ public class ProgressLoading2 extends BaseFullDialog {
             mViewLoadingAnim.cancelAnimation();
         }
     }
+
+    public void setLoadingStyle(Drawable drawable, int contentTestSize, int textColor) {
+        if (mLlContent != null) {
+            mLlContent.setBackground(drawable);
+        }
+        if (mTvLoadingText != null) {
+            mTvLoadingText.setTextSize(contentTestSize);
+            mTvLoadingText.setTextColor(textColor);
+        }
+    }
+
+    public void updateDimAmount(float dimAmount) {
+        Window window = getWindow();
+        if (window != null) {
+            WindowManager.LayoutParams attributes = window.getAttributes();
+            attributes.gravity = Gravity.CENTER;
+            attributes.dimAmount = dimAmount;
+            window.setAttributes(attributes);
+        }
+    }
 }

+ 6 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/dialog/CommonConfirmDialog2.java

@@ -164,4 +164,10 @@ public class CommonConfirmDialog2 extends BaseFullDialog {
             mTvCancel.setOnClickListener(listener);
         }
     }
+
+
+    public void setIsCanCel(boolean isCanCel){
+        setCancelable(isCanCel);
+        setCanceledOnTouchOutside(isCanCel);
+    }
 }

+ 131 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/dialog/CommonFilterDialogV2.java

@@ -0,0 +1,131 @@
+package com.cooleshow.base.widgets.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.contrarywind.interfaces.IPickerViewData;
+import com.cooleshow.base.R;
+import com.cooleshow.base.interfaces.IFilterViewData;
+
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2023/2/20.
+ */
+public class CommonFilterDialogV2<T> extends Dialog implements View.OnClickListener {
+
+    private RecyclerView mRecyclerView;
+    private BaseQuickAdapter<T, BaseViewHolder> mAdapter;
+    private OnEventListener mEventListener;
+    private int selectPos = -1;
+
+    public CommonFilterDialogV2(@NonNull Context context) {
+        super(context, R.style.BottomDialogStyle);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.dialog_common_filter_v2_layout);
+        Window window = getWindow();
+        //设置dialog在屏幕底部
+        window.setGravity(Gravity.BOTTOM);
+        //设置dialog弹出时的动画效果,从屏幕底部向上弹出
+        window.setWindowAnimations(R.style.BottomAnimation);
+        window.getDecorView().setPadding(0, 0, 0, 0);
+        //获得window窗口的属性
+        WindowManager.LayoutParams lp = window.getAttributes();
+        //设置窗口宽度为充满全屏
+        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+        //设置窗口高度为包裹内容
+        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+        lp.horizontalMargin = 0;
+        lp.verticalMargin = 0;
+        //将设置好的属性set回去
+        window.setAttributes(lp);
+
+        mRecyclerView = findViewById(R.id.recyclerView);
+        mAdapter = new BaseQuickAdapter<T, BaseViewHolder>(R.layout.item_dialog_common_filter_layout) {
+            @Override
+            protected void convert(@NonNull BaseViewHolder holder, T t) {
+                String text = "";
+                if (t instanceof IFilterViewData) {
+                    IFilterViewData iFilterData = (IFilterViewData) t;
+                    text = iFilterData.getShowName();
+                }
+                if (t instanceof IPickerViewData) {
+                    IPickerViewData iPickerViewData = (IPickerViewData) t;
+                    text = iPickerViewData.getPickerViewText();
+                }
+                if (t instanceof String) {
+                    text = (String) t;
+                }
+                TextView tv_text = holder.getView(R.id.tv_text);
+                tv_text.setText(text);
+                if (holder.getLayoutPosition() == selectPos) {
+                    tv_text.setBackgroundResource(R.drawable.shape_f2f2f2_6dp);
+                    tv_text.setTextColor(getContext().getResources().getColor(R.color.color_2dc7aa));
+                } else {
+                    tv_text.setBackgroundColor(Color.TRANSPARENT);
+                    tv_text.setTextColor(getContext().getResources().getColor(R.color.color_333333));
+                }
+            }
+        };
+        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+        mRecyclerView.setAdapter(mAdapter);
+        TextView tv_cancel = findViewById(R.id.tv_cancel);
+        tv_cancel.setOnClickListener(this);
+        mAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (mEventListener != null) {
+                    dismiss();
+                    mEventListener.onItemClickListener(adapter, position);
+                    selectPos = position;
+                    mAdapter.notifyDataSetChanged();
+                }
+            }
+        });
+    }
+
+    public void setData(List<T> data) {
+        if (mAdapter != null) {
+            mAdapter.setNewInstance(data);
+        }
+    }
+
+    public void setSelectPos(int pos) {
+        this.selectPos = pos;
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_cancel) {
+            dismiss();
+            return;
+        }
+    }
+
+    public void setOnEventListener(OnEventListener listener) {
+        this.mEventListener = listener;
+    }
+
+    public interface OnEventListener {
+        void onItemClickListener(BaseQuickAdapter baseQuickAdapter, int pos);
+    }
+}

+ 1 - 1
BaseLibrary/src/main/java/com/cooleshow/base/widgets/span/CenterImageSpan.java

@@ -1,4 +1,4 @@
-package com.rui.common_base.widget.span;
+package com.cooleshow.base.widgets.span;
 
 import android.content.Context;
 import android.graphics.Bitmap;

+ 5 - 0
BaseLibrary/src/main/res/drawable/shape_2dc7aa_16dp.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/color_2dc7aa" />
+    <corners android:radius="16dp" />
+</shape>

+ 115 - 0
BaseLibrary/src/main/res/layout/common_download_popu2.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_marginStart="@dimen/dp_32"
+        android:layout_marginEnd="@dimen/dp_32"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bg_white_20dp"
+        android:paddingBottom="20dp">
+
+        <View
+            android:id="@+id/view_title_bg"
+            android:layout_width="match_parent"
+            android:layout_height="49dp"
+            android:background="@drawable/shape_defaff_to_white_20dp"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:paddingTop="20dp"
+            android:textColor="@color/color_1a1a1a"
+            android:textSize="@dimen/sp_18"
+            android:textStyle="bold"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="我是标题" />
+
+        <TextView
+            android:id="@+id/tv_content"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:gravity="left"
+            android:paddingTop="20dp"
+            android:textColor="@color/color_666666"
+            android:textSize="@dimen/sp_16"
+            android:lineSpacingMultiplier="1.2"
+            app:layout_constraintRight_toLeftOf="@+id/tv_copy"
+            app:layout_constraintLeft_toLeftOf="parent"
+            android:maxLines="2"
+            app:layout_goneMarginEnd="20dp"
+            android:ellipsize="end"
+            android:includeFontPadding="false"
+            app:layout_constraintTop_toBottomOf="@+id/tv_title"
+            tools:text="文件已保存到以下地址 C:/文件/dei/dei/dei/dei/dei/dei/dei/dei" />
+
+        <TextView
+            android:visibility="gone"
+            android:id="@+id/tv_copy"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:textColor="@color/color_01c1b5"
+            android:textSize="@dimen/sp_16"
+            android:text="复制"
+            android:paddingStart="5dp"
+            android:paddingEnd="25dp"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_content"
+            app:layout_constraintRight_toRightOf="parent" />
+
+
+
+        <TextView
+            android:layout_marginTop="25dp"
+            android:id="@+id/tv_cancel"
+            android:layout_width="0dp"
+            android:layout_height="40dp"
+            android:layout_marginStart="20dp"
+            android:layout_marginEnd="8dp"
+            android:background="@drawable/shape_border_dbdbdb_1dp_22dp"
+            android:gravity="center"
+            android:text="取消"
+            android:textColor="@color/color_666666"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toLeftOf="@+id/tv_confirm"
+            app:layout_constraintTop_toBottomOf="@+id/tv_content" />
+
+        <TextView
+            android:id="@+id/tv_confirm"
+            android:layout_width="0dp"
+            android:layout_height="40dp"
+            android:layout_marginStart="8dp"
+            android:layout_marginEnd="20dp"
+            android:background="@drawable/shape_2dc7aa_22dp"
+            android:gravity="center"
+            android:text="打开文件"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintLeft_toRightOf="@+id/tv_cancel"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/tv_cancel" />
+
+        <ImageView
+            android:id="@+id/iv_close"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            android:layout_marginEnd="20dp"
+            android:layout_marginTop="24dp"
+            android:src="@drawable/icon_close_black"
+            android:layout_width="18dp"
+            android:layout_height="18dp"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</LinearLayout>

+ 34 - 0
BaseLibrary/src/main/res/layout/dialog_common_filter_v2_layout.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@drawable/bg_white_top_10dp"
+    android:orientation="vertical"
+    android:paddingTop="15dp"
+    android:paddingBottom="15dp">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/recyclerView"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:overScrollMode="never"
+        android:scrollbars="none" />
+
+    <View
+        android:layout_marginTop="10dp"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@color/color_f2f2f2" />
+
+    <TextView
+        android:id="@+id/tv_cancel"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:gravity="center"
+        android:text="取消"
+        android:textColor="@color/color_aaaaaa"
+        android:textSize="@dimen/sp_16"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+</LinearLayout>

+ 26 - 0
BaseLibrary/src/main/res/layout/item_dialog_common_filter_layout.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="44dp"
+    android:paddingStart="13dp"
+    android:paddingEnd="13dp"
+    xmlns:tools="http://schemas.android.com/tools">
+
+
+    <TextView
+        android:id="@+id/tv_text"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        tools:text="已完成"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_16"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 62 - 29
BaseLibrary/src/main/res/layout/progress_dialog.xml

@@ -3,41 +3,74 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     style="@style/WrapWrap.Vertical"
-    android:layout_width="100dp"
-    android:minHeight="100dp"
-    android:paddingTop="12dp"
-    android:paddingBottom="12dp"
+    android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:background="@drawable/bg_white_10dp"
-    android:gravity="center">
+    android:layout_gravity="center"
+    android:gravity="center"
+    android:minWidth="80dp">
 
-    <ImageView
-        android:visibility="gone"
-        android:id="@+id/iv_loading"
-        style="@style/WrapWrap"
+    <LinearLayout
+        android:background="@drawable/bg_white_10dp"
+        android:paddingEnd="13dp"
+        android:paddingStart="13dp"
+        android:paddingBottom="5dp"
+        android:paddingTop="20dp"
+        android:gravity="center_horizontal"
+        android:minHeight="98dp"
+        android:id="@+id/ll_content"
+        android:minWidth="98dp"
+        android:orientation="vertical"
         android:layout_gravity="center"
-        android:background="@drawable/progress_dialog_anim" />
-
-    <com.airbnb.lottie.LottieAnimationView
-        android:id="@+id/view_loading_anim"
         android:layout_width="wrap_content"
-        android:layout_height="47dp"
-        android:layout_gravity="center"
-        app:lottie_autoPlay="false"
-        app:lottie_imageAssetsFolder="lottie/refresh/images/"
-        app:lottie_loop="true" />
+        android:layout_height="wrap_content">
+
+        <ImageView
+            android:id="@+id/iv_loading"
+            style="@style/WrapWrap"
+            android:layout_gravity="center"
+            android:background="@drawable/progress_dialog_anim"
+            android:visibility="gone" />
+
+        <com.airbnb.lottie.LottieAnimationView
+            android:id="@+id/view_loading_anim"
+            android:layout_width="80dp"
+            android:layout_height="48dp"
+            android:layout_gravity="center"
+            app:lottie_autoPlay="true"
+            app:lottie_clipToCompositionBounds="false"
+            app:lottie_imageAssetsFolder="lottie/refresh/images/"
+            app:lottie_loop="true" />
 
 
+        <TextView
+            android:id="@+id/tv_loading_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal|bottom"
+            android:layout_marginTop="5dp"
+            android:gravity="center"
+            android:text="加载中"
+            android:textColor="@color/color_333333"
+            android:textSize="@dimen/sp_12"
+            android:visibility="visible"
+            tools:text="加载中" />
+
+    </LinearLayout>
+
     <TextView
-        android:layout_marginTop="5dp"
-        android:layout_gravity="center_horizontal|bottom"
-        android:id="@+id/tv_loading_text"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="加载中"
-        tools:text="加载中"
+        android:id="@+id/tv_cancel_loading"
+        android:layout_width="90dp"
+        android:layout_height="30dp"
+        android:layout_below="@+id/ll_content"
+        android:layout_centerHorizontal="true"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="12dp"
+        android:background="@drawable/shape_16dp_border_1dp"
         android:gravity="center"
-        android:textColor="@color/color_333333"
-        android:textSize="@dimen/sp_12"
-        android:visibility="visible" />
+        android:paddingStart="14dp"
+        android:paddingEnd="14dp"
+        android:text="@string/cancel"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_13"
+        android:visibility="gone" />
 </LinearLayout>

+ 1 - 0
BaseLibrary/src/main/res/values/colors.xml

@@ -218,6 +218,7 @@
     <color name="color_ff5151">#FF5151</color>
     <color name="color_131415">#131415</color>
     <color name="color_f73f3b">#F73F3B</color>
+    <color name="color_2cb99e">#2CB99E</color>
     <color name="color_99ffffff">#99ffffff</color>
     <color name="color_66ffffff">#66ffffff</color>
     <color name="color_33ffffff">#33ffffff</color>

+ 1 - 2
BaseLibrary/src/main/res/values/styles.xml

@@ -24,8 +24,7 @@
         <item name="android:windowIsFloating">true</item>
         <item name="android:windowContentOverlay">@null</item>
         <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
-        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan
-        </item>
+        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
     </style>
 
     <style name="LightProgressDialog" parent="@style/LightDialog">

+ 8 - 8
accompany/src/main/java/com/daya/orchestra/accompany/js/JsInterfaceAccomPanyUtils.java

@@ -151,14 +151,14 @@ public class JsInterfaceAccomPanyUtils extends Object {
                     } catch (Exception e) {
                     }
 
-                    ARouter.getInstance().build(RouterPath.Accompany.ACTIVITY_ACCOMPANY_HTML)
-                            .withString("url", content.optString("url"))
-                            .withBoolean("isHideTitle", isHideTitle)
-                            .withBoolean("statusBarTextColor", statusBarTextColor)
-                            .withBoolean("isOpenLight", isOpenLight)
-                            .withInt("orientation", orientation)
-                            .withInt("c_orientation", c_orientation)
-                            .navigation();
+//                    ARouter.getInstance().build(RouterPath.Accompany.ACTIVITY_ACCOMPANY_HTML)
+//                            .withString("url", content.optString("url"))
+//                            .withBoolean("isHideTitle", isHideTitle)
+//                            .withBoolean("statusBarTextColor", statusBarTextColor)
+//                            .withBoolean("isOpenLight", isOpenLight)
+//                            .withInt("orientation", orientation)
+//                            .withInt("c_orientation", c_orientation)
+//                            .navigation();
 
                 } else if ("startEvaluating".equals(api)) {
                     if (onListener != null) {

+ 1 - 1
accompany/src/main/java/com/daya/orchestra/accompany/web/AccompanyActivity.java

@@ -78,7 +78,7 @@ import static com.cooleshow.base.common.WebConstants.WEB_URL;
  * @author Ryan
  * 类说明:
  */
-@Route(path = RouterPath.Accompany.ACTIVITY_ACCOMPANY_HTML)
+//@Route(path = RouterPath.Accompany.ACTIVITY_ACCOMPANY_HTML)
 public class AccompanyActivity extends BaseActivity<ActivityAccompanyBinding> {
     public static final String TAG = "AccompanyActivity";
     FrameLayout camera;

+ 1 - 0
accompanySDK/.gitignore

@@ -0,0 +1 @@
+/build

+ 49 - 0
accompanySDK/build.gradle

@@ -0,0 +1,49 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-kapt'
+apply plugin: 'org.jetbrains.kotlin.android'
+
+
+kapt {
+    arguments {
+        arg("AROUTER_MODULE_NAME", project.getName())
+        // 是否生成路由文档,"enable":生成文档,其他字符串不生成路由文档
+        arg("AROUTER_GENERATE_DOC", "enable")
+    }
+}
+
+android {
+    compileSdkVersion rootProject.ext.android['compileSdkVersion']
+
+    defaultConfig {
+        namespace 'com.daya.accompanysdk'
+        minSdkVersion rootProject.ext.android.minSdkVersion
+        targetSdkVersion rootProject.ext.android.targetSdkVersion
+
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        consumerProguardFiles "consumer-rules.pro"
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+}
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    implementation 'androidx.appcompat:appcompat:1.3.0'
+    implementation 'com.google.android.material:material:1.4.0'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+    testImplementation 'junit:junit:4.13.2'
+    api fileTree(dir: 'libs', include: ['*.jar','*.aar'])
+    implementation project(':BaseLibrary')
+    implementation project(':usercenter')
+    implementation 'com.airbnb.android:lottie:5.0.3'
+}

+ 0 - 0
accompanySDK/consumer-rules.pro


BIN
accompanySDK/libs/accompany_release_1.0.3_2410251726.aar


BIN
accompanySDK/libs/camerakit_release_1.0.0_2407171443.aar


BIN
accompanySDK/libs/ffmpegCmd-release_1.0.2_2410081548.aar


BIN
accompanySDK/libs/midiplaylib_release_1.0.0_2403011515.aar


+ 21 - 0
accompanySDK/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 26 - 0
accompanySDK/src/androidTest/java/com/daya/accompanysdk/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.daya.accompanysdk;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+    @Test
+    public void useAppContext() {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        assertEquals("com.daya.accompanysdk.test", appContext.getPackageName());
+    }
+}

+ 4 - 0
accompanySDK/src/main/AndroidManifest.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+</manifest>

BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_0.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_1.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_10.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_11.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_12.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_13.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_14.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_15.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_16.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_17.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_18.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_19.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_2.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_20.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_21.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_22.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_23.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_24.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_25.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_26.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_27.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_28.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_29.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_3.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_4.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_5.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_6.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_7.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_8.png


BIN
accompanySDK/src/main/assets/lottie/accompany/images/img_9.png


+ 195 - 0
accompanySDK/src/main/java/com/daya/accompanysdk/engine/GlideEngine.java

@@ -0,0 +1,195 @@
+package com.daya.accompanysdk.engine;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.PointF;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions;
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.BitmapImageViewTarget;
+import com.bumptech.glide.request.target.ImageViewTarget;
+import com.bumptech.glide.request.transition.DrawableCrossFadeFactory;
+import com.luck.picture.lib.engine.ImageEngine;
+import com.luck.picture.lib.listener.OnImageCompleteCallback;
+import com.luck.picture.lib.tools.MediaUtils;
+import com.luck.picture.lib.widget.longimage.ImageSource;
+import com.luck.picture.lib.widget.longimage.ImageViewState;
+import com.luck.picture.lib.widget.longimage.SubsamplingScaleImageView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.graphics.drawable.RoundedBitmapDrawable;
+import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
+
+/**
+ * Description:
+ * Copyright  : Copyright (c) 2019
+ * Company    : 大雅乐盟
+ * Author     : r
+ * Date       : 2019/12/21 16:36
+ */
+public class GlideEngine implements ImageEngine {
+
+    /**
+     * 加载图片
+     *
+     * @param context
+     * @param url
+     * @param imageView
+     */
+    @Override
+    public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
+        // * other https://www.jianshu.com/p/28f5bcee409f
+        DrawableCrossFadeFactory drawableCrossFadeFactory =
+                new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
+        Glide.with(context)
+                .load(url)
+                .transition(DrawableTransitionOptions.withCrossFade(drawableCrossFadeFactory))
+                .into(imageView);
+    }
+
+    @Override
+    public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView, SubsamplingScaleImageView longImageView, OnImageCompleteCallback callback) {
+        DrawableCrossFadeFactory drawableCrossFadeFactory =
+                new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
+        Glide.with(context)
+                .load(url)
+                .transition(DrawableTransitionOptions.withCrossFade(drawableCrossFadeFactory))
+                .into(imageView);
+    }
+
+
+//    /**
+//     * 加载网络图片适配长图方案
+//     * # 注意:此方法只有加载网络图片才会回调
+//     *
+//     * @param context
+//     * @param url
+//     * @param imageView
+//     * @param longImageView
+//     */
+//    @Override
+//    public void loadImage(@NonNull Context context, @NonNull String url,
+//                          @NonNull ImageView imageView,
+//                          SubsamplingScaleImageView longImageView) {
+//        Glide.with(context)
+//                .asBitmap()
+//                .load(url)
+//                .into(new ImageViewTarget<Bitmap>(imageView) {
+//                    @Override
+//                    protected void setResource(@Nullable Bitmap resource) {
+//                        if (resource != null) {
+//                            boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(),
+//                                    resource.getHeight());
+//                            longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE);
+//                            imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE);
+//                            if (eqLongImage) {
+//                                // 加载长图
+//                                longImageView.setQuickScaleEnabled(true);
+//                                longImageView.setZoomEnabled(true);
+//                                longImageView.setPanEnabled(true);
+//                                longImageView.setDoubleTapZoomDuration(100);
+//                                longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
+//                                longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
+//                                longImageView.setImage(ImageSource.bitmap(resource),
+//                                        new ImageViewState(0, new PointF(0, 0), 0));
+//                            } else {
+//                                // 普通图片
+//                                imageView.setImageBitmap(resource);
+//                            }
+//                        }
+//                    }
+//                });
+//    }
+
+    /**
+     * 加载相册目录
+     *
+     * @param context   上下文
+     * @param url       图片路径
+     * @param imageView 承载图片ImageView
+     */
+    @Override
+    public void loadFolderImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
+        // * other https://www.jianshu.com/p/28f5bcee409f
+        DrawableCrossFadeFactory drawableCrossFadeFactory =
+                new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
+        Glide.with(context)
+                .asBitmap()
+                .load(url)
+                .override(180, 180)
+                .centerCrop()
+                .sizeMultiplier(0.5f)
+                .apply(new RequestOptions().placeholder(com.luck.picture.lib.R.drawable.picture_image_placeholder))
+                .transition(BitmapTransitionOptions.withCrossFade(drawableCrossFadeFactory))
+                .into(new BitmapImageViewTarget(imageView) {
+                    @Override
+                    protected void setResource(Bitmap resource) {
+                        RoundedBitmapDrawable circularBitmapDrawable =
+                                RoundedBitmapDrawableFactory.
+                                        create(context.getResources(), resource);
+                        circularBitmapDrawable.setCornerRadius(8);
+                        imageView.setImageDrawable(circularBitmapDrawable);
+                    }
+                });
+    }
+
+
+//    /**
+//     * 加载gif
+//     *
+//     * @param context   上下文
+//     * @param url       图片路径
+//     * @param imageView 承载图片ImageView
+//     */
+//    @Override
+//    public void loadAsGifImage(@NonNull Context context, @NonNull String url,
+//                               @NonNull ImageView imageView) {
+//        Glide.with(context)
+//                .asGif()
+//                .load(url)
+//                .into(imageView);
+//    }
+
+    /**
+     * 加载图片列表图片
+     *
+     * @param context   上下文
+     * @param url       图片路径
+     * @param imageView 承载图片ImageView
+     */
+    @Override
+    public void loadGridImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
+        // * other https://www.jianshu.com/p/28f5bcee409f
+        DrawableCrossFadeFactory drawableCrossFadeFactory =
+                new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
+        Glide.with(context)
+                .load(url)
+                .override(200, 200)
+                .centerCrop()
+                .apply(new RequestOptions().placeholder(com.luck.picture.lib.R.drawable.picture_image_placeholder))
+                .transition(DrawableTransitionOptions.withCrossFade(drawableCrossFadeFactory))
+                .into(imageView);
+    }
+
+
+    private GlideEngine() {
+    }
+
+    private static GlideEngine instance;
+
+    public static GlideEngine createGlideEngine() {
+        if (null == instance) {
+            synchronized (GlideEngine.class) {
+                if (null == instance) {
+                    instance = new GlideEngine();
+                }
+            }
+        }
+        return instance;
+    }
+}

+ 247 - 0
accompanySDK/src/main/java/com/daya/accompanysdk/manager/AccompanyHelper.java

@@ -0,0 +1,247 @@
+package com.daya.accompanysdk.manager;
+
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.webkit.ClientCertRequest;
+import android.webkit.WebView;
+
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.cooleshow.base.common.BaseConstant;
+import com.cooleshow.base.common.WebConstants;
+import com.cooleshow.base.data.auth.Https;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.utils.LOG;
+import com.cooleshow.base.utils.helper.upload.UploadHelper;
+import com.cooleshow.usercenter.constants.UserConstants;
+import com.cooleshow.usercenter.helper.UserHelper;
+import com.daya.accompanysdk.R;
+import com.daya.accompanysdk.engine.GlideEngine;
+import com.daya.accompanysdk.utils.Utils;
+import com.daya.accompanysdk.widget.CustomDelayCheckView;
+import com.daya.orchestra.accompany.bean.AccompanyStartParams;
+import com.daya.orchestra.accompany.bean.MusicSaveParams;
+import com.daya.orchestra.accompany.bean.WebConfig;
+import com.daya.orchestra.accompany.callback.ResultCallback;
+import com.daya.orchestra.accompany.common.AccompanyEventImpl;
+import com.daya.orchestra.accompany.common.AccompanyManager;
+import com.daya.orchestra.accompany.helper.CacheHelper;
+import com.daya.orchestra.accompany.widget.BaseDelayCheckView;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.tools.SPUtils;
+
+import org.json.JSONObject;
+
+import java.io.File;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import okhttp3.internal.platform.Platform;
+import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
+
+/**
+ * Author by pq, Date on 2024/1/17.
+ */
+public class AccompanyHelper {
+
+    private AccompanyHelper() {
+    }
+
+    private static class AccompanyHelperHolder {
+        private static AccompanyHelper sHelper = new AccompanyHelper();
+    }
+
+    public static AccompanyHelper getInstance() {
+        return AccompanyHelperHolder.sHelper;
+    }
+
+    public void initAccompany(Application application) {
+        AccompanyManager.getInstance().init(application, new AccompanyEventImpl() {
+            @Override
+            public void showPermissionTipDialog(FragmentManager fragmentManager, Context context, String s, String s1) {
+                Utils.showPermissionTipDialog2(fragmentManager, context, s, s1);
+            }
+
+            @Override
+            public String getBaseServerUrl() {
+                return BaseConstant.SERVER_ADDRESS;
+            }
+
+            @Override
+            public void toUpload(Activity activity, File file, String s, String s1, ResultCallback<Object> resultCallback) {
+                UploadHelper uploadHelper = new UploadHelper(activity, s, s1);
+                uploadHelper.uploadFile(file);
+                uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
+                    @Override
+                    public void onSuccess(String url) {
+                        if (resultCallback != null) {
+                            resultCallback.onSuccess(url);
+                        }
+                    }
+
+                    @Override
+                    protected void onFailure() {
+                        if (resultCallback != null) {
+                            resultCallback.onFail(0, "");
+                        }
+                    }
+
+                });
+            }
+
+            @Override
+            public void logout() {
+                ARouter.getInstance().build(RouterPath.UserCenter.PATH_VERIFY_LOGIN)
+                        .withString(UserConstants.PHONE_NUM_KEY, UserHelper.getUserPhone())
+                        .navigation();
+            }
+
+            @Override
+            public void goChat(String s, String s1) {
+
+            }
+
+            @Override
+            public void openWebView(JSONObject jsonObject) {
+                try {
+                    JSONObject content = jsonObject.getJSONObject("content");
+                    boolean isHideTitle = false;
+                    boolean statusBarTextColor = false;
+                    boolean isOpenLight = false;
+                    boolean showLoadingAnim = false;
+                    int orientation = -1;
+                    int c_orientation = -1;
+                    try {
+                        isHideTitle = content.optBoolean("isHideTitle");
+                        statusBarTextColor = content.optBoolean("statusBarTextColor");
+                        isOpenLight = content.optBoolean("isOpenLight");
+                        showLoadingAnim = content.optBoolean("showLoadingAnim");
+                        orientation = content.optInt("orientation");
+                        c_orientation = content.optInt("c_orientation");
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+
+                    String path = RouterPath.WebCenter.ACTIVITY_HTML;
+                    ARouter.getInstance().build(path)
+                            .withString(WebConstants.WEB_URL, content.optString("url"))
+                            .withBoolean("isHideTitle", isHideTitle)
+                            .withBoolean("statusBarTextColor", statusBarTextColor)
+                            .withBoolean("isOpenLight", isOpenLight)
+                            .withBoolean("showLoadingAnim", showLoadingAnim)
+                            .withInt("orientation", orientation)
+                            .withInt("c_orientation", c_orientation)
+                            .navigation();
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+
+            @Override
+            public boolean onReceivedClientCertRequest(WebView view, ClientCertRequest request) {
+                LOG.i("onReceivedClientCertRequest");
+                boolean proceed = Https.proceed(com.cooleshow.base.utils.Utils.getApp(), request);
+                return proceed;
+            }
+
+            @Override
+            public void openMusicMergePage(Activity activity, MusicSaveParams musicSaveParams, int requestCode) {
+                LOG.i("openMusicMergePage:"+musicSaveParams.getMusicSheetId()+"\nmusicRenderType:"+musicSaveParams.getMusicRenderType()+"\nspeedRate:"+musicSaveParams.getEvaluationSpeed());
+                ARouter.getInstance().build(RouterPath.MusicTuner.MUSIC_MERGE_PAGE)
+                        .withString("accompanyUrl", musicSaveParams.getAccompanyUrl())
+                        .withString("recordFilePath", musicSaveParams.getRecordFilePath())
+                        .withString("recordId", musicSaveParams.getRecordId())
+                        .withString("title", musicSaveParams.getTitle())
+                        .withString("musicSheetId", musicSaveParams.getMusicSheetId())
+                        .withString("musicRenderType", musicSaveParams.getMusicRenderType())
+                        .withString("coverImg", musicSaveParams.getCoverImg())
+                        .withFloat("speedRate", musicSaveParams.getEvaluationSpeed())
+                        .withInt("part-index", musicSaveParams.getPartIndex())
+                        .withInt("defaultDelay", musicSaveParams.getDefaultDelay())
+                        .withInt("evaluateDelay", musicSaveParams.getEvaluateDelay())//此字段给IOS使用
+                        .withInt("c_orientation", ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
+                        .navigation(activity, requestCode);
+            }
+
+            @Override
+            public void selectPicture(Fragment fragment,ActivityResultLauncher<Intent> activityResultLauncher) {
+                PictureSelector.create(fragment)
+                        .openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
+                        .loadImageEngine(GlideEngine.createGlideEngine())
+                        .theme(R.style.picture_daya_style)// 主题样式设置 具体参考 values/styles   用法:R .style.picture.white.style
+                        .selectionMode(PictureConfig.SINGLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
+                        .enableCrop(false)// 是否裁剪 true or false
+                        .showCropGrid(false)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
+                        .compress(true)// 是否压缩 true or false
+                        .circleDimmedLayer(false)// 是否圆形裁剪 true or false
+                        .forResult(activityResultLauncher);
+            }
+
+            @Override
+            public BaseDelayCheckView getDelayCheckView(Context context) {
+                return new CustomDelayCheckView(context);
+            }
+        });
+        AccompanyManager.getInstance().setLogDebugMode(com.cooleshow.base.BuildConfig.DEBUG);
+        setWebConfig();
+        AccompanyManager.getInstance().clearDelay();//清除延迟检测值
+        AccompanyManager.getInstance().setLoadingAnimRes(R.layout.accompany_loading_layout,R.drawable.icon_accompany_back);
+    }
+
+    private void setWebConfig(){
+        WebConfig webConfig = new WebConfig();
+        webConfig.setWeb_UA_params(WebConstants.getAccompanyUA());
+        webConfig.setWebJsInterfaceName(WebConstants.WEB_JS_INTERFACE);
+        webConfig.setCustomWebSocketUrl(WebConstants.getWebSocketUrl());
+        AccompanyManager.getInstance().setWebConfig(webConfig);
+    }
+
+    public void loginAccompany(String userId, String userToken) {
+        AccompanyManager.getInstance().login(userId, userToken);
+    }
+
+    public void startAccompanyPage(Context context, String url) {
+        startAccompanyPage(context, url, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, -1);
+    }
+
+    public void startAccompanyPage(Context context, String url, int orientation) {
+        startAccompanyPage(context, url, orientation, -1);
+    }
+
+
+    public void startAccompanyPage(Context context, String url, int orientation, int c_orientation) {
+        AccompanyStartParams accompanyStartParams = new AccompanyStartParams();
+        accompanyStartParams.setUrl(url);
+        accompanyStartParams.setOrientation(orientation);
+        accompanyStartParams.setC_orientation(c_orientation);
+        accompanyStartParams.setHideTitle(true);
+        accompanyStartParams.setOpenLight(true);
+        //管理端和学校端可能存在切账号流程,所以每次进入之前重新设置下相关参数把
+        setWebConfig();
+        AccompanyManager.getInstance().startAccompany(context, accompanyStartParams);
+    }
+
+    /**
+     * 临时处理
+     * @param context
+     * @param url
+     * @param orientation
+     * @param c_orientation
+     */
+    public void startAccompanyPageByToken(Context context, String url, int orientation, int c_orientation){
+        boolean status = url.contains("?");
+        String userAuthorization = CacheHelper.getUserToken();
+        if (status) {
+            url = (url + "&Authorization=" + userAuthorization);
+        } else {
+            url = (url + "?Authorization=" + userAuthorization);
+        }
+        startAccompanyPage(context,url,orientation,c_orientation);
+    }
+}

+ 36 - 0
accompanySDK/src/main/java/com/daya/accompanysdk/utils/Utils.java

@@ -0,0 +1,36 @@
+package com.daya.accompanysdk.utils;
+
+import android.content.Context;
+import android.text.SpannableString;
+import android.view.View;
+import android.widget.TextView;
+
+import com.cooleshow.base.utils.PermissionUtils;
+import com.cooleshow.base.utils.UiUtils;
+import com.cooleshow.base.widgets.DialogUtil;
+import com.daya.accompanysdk.R;
+
+import androidx.fragment.app.FragmentManager;
+
+/**
+ * Author by pq, Date on 2024/10/9.
+ */
+public class Utils {
+
+    public static void showPermissionTipDialog2(FragmentManager fragmentmanager, Context context, String title, String tip) {
+        DialogUtil.showInCenterNoCancel(fragmentmanager, R.layout.accompany_permissions_popu2, (holder, dialog) -> {
+            TextView tvContent = holder.getView(R.id.tv_content);
+            View btncancel = holder.getView(R.id.btn_cancel);
+            View btnCommit = holder.getView(R.id.btn_commit);
+            SpannableString string = UiUtils.diffColorString("请", tip, "访问权限", context.getResources().getColor(R.color.color_080808), context.getResources().getColor(R.color.color_f95234));
+            tvContent.setText(string);
+            btncancel.setOnClickListener(view1 -> {
+                dialog.dismiss();
+            });
+            btnCommit.setOnClickListener(view1 -> {
+                PermissionUtils.toSelfSetting(context);
+                dialog.dismiss();
+            });
+        });
+    }
+}

+ 161 - 0
accompanySDK/src/main/java/com/daya/accompanysdk/widget/AccompanyLoadingView.java

@@ -0,0 +1,161 @@
+package com.daya.accompanysdk.widget;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import com.airbnb.lottie.LottieAnimationView;
+import com.cooleshow.base.utils.SizeUtils;
+import com.daya.accompanysdk.R;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+/**
+ * Author by pq, Date on 2024/12/5.
+ */
+public class AccompanyLoadingView extends FrameLayout {
+    public static final int MESSAGE_TYPE_UPDATE_LOADING_START = 5010;//开始更新加载loading
+    public static final int MESSAGE_TYPE_UPDATE_LOADING = 5011;//更新加载loading
+    public static final int MESSAGE_TYPE_UPDATE_LOADING_COMPLETE = 5012;//完成加载loading
+    public static final int MESSAGE_TYPE_HIDE_LOADING = 5013;//隐藏加载loading
+    private int currentProgressCount = 0;
+
+    private LottieAnimationView mLottieAnimationView;
+    private TextView mTvLoadingTip;
+    private ProgressBar mProgress;
+    private ImageView mLoadingBack;
+    private Handler mLoadHandler = new Handler(Looper.getMainLooper()) {
+        @Override
+        public void handleMessage(@NonNull Message msg) {
+            if (msg.what == MESSAGE_TYPE_UPDATE_LOADING) {
+                currentProgressCount++;
+                if (currentProgressCount <= 10) {
+                    updateProgress(4);
+                } else if (currentProgressCount <= 30) {
+                    updateProgress(2);
+                } else {
+                    updateProgress(1);
+                }
+                sendProgressMessage(MESSAGE_TYPE_UPDATE_LOADING, 1000);
+                return;
+            }
+
+            if (msg.what == MESSAGE_TYPE_UPDATE_LOADING_START) {
+                showLoadingAnim();
+                sendProgressMessage(MESSAGE_TYPE_UPDATE_LOADING, 1000);
+                return;
+            }
+
+            if (msg.what == MESSAGE_TYPE_UPDATE_LOADING_COMPLETE) {
+                if (mProgress == null) {
+                    return;
+                }
+                mProgress.setProgress(100);
+                sendProgressMessage(MESSAGE_TYPE_HIDE_LOADING, 300);
+                return;
+            }
+
+            if (msg.what == MESSAGE_TYPE_HIDE_LOADING) {
+                hideLoadingAnim();
+                return;
+            }
+        }
+    };
+
+    public AccompanyLoadingView(@NonNull Context context) {
+        this(context, null);
+    }
+
+    public AccompanyLoadingView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, -1);
+    }
+
+    public AccompanyLoadingView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init() {
+        LayoutInflater.from(getContext()).inflate(R.layout.accompany_loading_layout, this);
+        mLottieAnimationView = findViewById(R.id.view_loading_anim);
+        mTvLoadingTip = findViewById(R.id.tv_loading_tip);
+        mProgress = findViewById(R.id.progress);
+        mLoadingBack = findViewById(R.id.loading_back);
+    }
+
+    private void showLoadingAnim() {
+        if (getVisibility() == View.VISIBLE) {
+            if (mLottieAnimationView != null) {
+                currentProgressCount = 0;
+                mLottieAnimationView.setAnimation(R.raw.accompany_loading);
+                mProgress.setProgress(0);
+                mLoadingBack.setVisibility(View.VISIBLE);
+                mLottieAnimationView.playAnimation();
+            }
+        }
+    }
+
+    private void updateProgress(int progress) {
+        if (mProgress == null) {
+            return;
+        }
+        int currentProgress = mProgress.getProgress();
+        int totalProgress = currentProgress + progress;
+        if (totalProgress > 99) {
+            totalProgress = 99;
+        }
+        mProgress.setProgress(totalProgress);
+    }
+
+    private void sendProgressMessage(int type, int delayedTime) {
+        Message message = Message.obtain();
+        message.what = type;
+        mLoadHandler.sendMessageDelayed(message, delayedTime);
+    }
+
+    private void hideLoadingAnim() {
+        currentProgressCount = 0;
+        mLottieAnimationView.cancelAnimation();
+        mLottieAnimationView.clearAnimation();
+        if (mLoadHandler != null) {
+            mLoadHandler.removeCallbacksAndMessages(null);
+        }
+    }
+
+    public void startShow() {
+        if(getVisibility()!=View.VISIBLE){
+            setVisibility(View.VISIBLE);
+            sendProgressMessage(MESSAGE_TYPE_UPDATE_LOADING_START, 0);
+        }
+    }
+
+    public void stopAndHide() {
+        sendProgressMessage(MESSAGE_TYPE_UPDATE_LOADING_COMPLETE, 0);
+        setVisibility(View.GONE);
+    }
+
+    public void setBackClickListener(View.OnClickListener listener) {
+        if (mLoadingBack != null) {
+            mLoadingBack.setOnClickListener(listener);
+        }
+    }
+
+    public void release() {
+        if (mLoadHandler != null) {
+            mLoadHandler.removeCallbacksAndMessages(null);
+        }
+        if (mLottieAnimationView != null) {
+            mLottieAnimationView.cancelAnimation();
+        }
+    }
+}

+ 207 - 0
accompanySDK/src/main/java/com/daya/accompanysdk/widget/CustomDelayCheckView.java

@@ -0,0 +1,207 @@
+package com.daya.accompanysdk.widget;
+
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.animation.LinearInterpolator;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import com.airbnb.lottie.LottieAnimationView;
+import com.cooleshow.base.utils.SizeUtils;
+import com.cooleshow.base.utils.helper.QMUIDeviceHelper;
+import com.daya.accompanysdk.R;
+import com.daya.orchestra.accompany.widget.BaseDelayCheckView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.constraintlayout.widget.ConstraintSet;
+
+/**
+ * Author by pq, Date on 2024/10/14.
+ */
+public class CustomDelayCheckView extends BaseDelayCheckView {
+
+    private ImageView mIvBack;
+    private View mViewRetry;
+    private LottieAnimationView mViewAnim1;
+    private LottieAnimationView mViewAnim2;
+    private LottieAnimationView mViewAnim3;
+    private LottieAnimationView mViewAnim4;
+    private LottieAnimationView mViewAnim5;
+    private ImageView mIvBall;
+    private ImageView mIvCenter;
+    private ImageView mIvTip;
+    private LinearLayout mLlEarphoneTip;
+    private ObjectAnimator mCenterAnim;
+    private ConstraintLayout mCsRoot;
+
+    public CustomDelayCheckView(@NonNull Context context) {
+        super(context);
+    }
+
+    public CustomDelayCheckView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public CustomDelayCheckView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    @Override
+    protected int getLayoutRes() {
+        return R.layout.ac_custom_delay_check_layout;
+    }
+
+    @Override
+    public void initView() {
+        super.initView();
+        mIvBack = findViewById(R.id.iv_close);
+        mViewAnim1 = findViewById(R.id.view_anim1);
+        mViewAnim2 = findViewById(R.id.view_anim2);
+        mViewAnim3 = findViewById(R.id.view_anim3);
+        mViewAnim4 = findViewById(R.id.view_anim4);
+        mViewAnim5 = findViewById(R.id.view_anim5);
+        mIvTip = findViewById(R.id.iv_tip);
+        mViewRetry = findViewById(R.id.view_retry);
+        mIvCenter = findViewById(R.id.iv_center);
+        mLlEarphoneTip = findViewById(R.id.ll_earphone_tip);
+        mCsRoot = findViewById(R.id.cs_root);
+        fitPad();
+    }
+
+    private void fitPad() {
+        boolean isTablet = QMUIDeviceHelper.isTablet(getContext());
+        ConstraintSet constraintSet =new ConstraintSet();
+        constraintSet.clone(mCsRoot);
+        constraintSet.connect(R.id.iv_center,ConstraintSet.TOP,ConstraintSet.PARENT_ID, ConstraintSet.TOP);
+        constraintSet.connect(R.id.iv_center,ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT);
+        constraintSet.connect(R.id.iv_center,ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT);
+        if(isTablet){
+            constraintSet.connect(R.id.iv_center,ConstraintSet.BOTTOM, R.id.iv_tip, ConstraintSet.TOP);
+        }else{
+            constraintSet.setMargin(R.id.iv_center,ConstraintSet.TOP, SizeUtils.dp2px(6));
+        }
+        constraintSet.applyTo(mCsRoot);
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+
+        mCenterAnim = ObjectAnimator.ofFloat(mIvCenter, "translationY", 0f, 24f);
+        mCenterAnim.setDuration(1000);
+        mCenterAnim.setRepeatCount(ValueAnimator.INFINITE);
+        mCenterAnim.setInterpolator(new LinearInterpolator());
+        mCenterAnim.setRepeatMode(ValueAnimator.REVERSE);
+        mCenterAnim.start();
+
+        this.mLlEarphoneTip.setOnClickListener(new OnClickListener() {
+            public void onClick(View v) {
+                CustomDelayCheckView.this.mLlEarphoneTip.setVisibility(View.GONE);
+            }
+        });
+    }
+
+    @Override
+    public void showAnimStep(int step) {
+        if (mViewRetry != null) {
+            mViewRetry.setVisibility(step == CHECK_FAIL ? View.VISIBLE : View.GONE);
+        }
+        if (step != CHECK_COMPLETED) {
+            if (step == CHECK_PREPARE) {
+                resetAnim();
+            }
+            if (step == CHECK_FAIL_TIP_EARPHONE) {
+                mLlEarphoneTip.setVisibility(View.VISIBLE);
+                return;
+            } else {
+                mLlEarphoneTip.setVisibility(View.GONE);
+            }
+            int mainAnimRes = getMainAnimRes(step);
+            mIvCenter.setImageResource(mainAnimRes);
+            mIvTip.setImageResource(getTipImgRes(step));
+        } else {
+            handleCompletedAnim();
+        }
+    }
+
+    private void handleCompletedAnim() {
+
+    }
+
+    private int getMainAnimRes(int step) {
+        if (step == CHECK_PREPARE) {
+            return R.drawable.ac_check_prepare;
+        }
+        if (step == CHECK_ING) {
+            return R.drawable.ac_check_ing;
+        }
+        if (step == CHECK_SUCCESS) {
+            return R.drawable.ac_check_success;
+        }
+        if (step == CHECK_FAIL) {
+            return R.drawable.ac_check_fail;
+        }
+        return R.drawable.ac_check_prepare;
+    }
+
+    private void resetAnim() {
+
+    }
+
+    private int getTipImgRes(int step) {
+        if (step == CHECK_PREPARE) {
+            return R.drawable.ac_icon_delay_check_tip1;
+        }
+        if (step == CHECK_ING) {
+            return R.drawable.ac_icon_delay_check_tip2;
+        }
+        if (step == CHECK_SUCCESS) {
+            return R.drawable.ac_icon_delay_check_tip3;
+        }
+        if (step == CHECK_FAIL) {
+            return R.drawable.ac_icon_delay_check_tip4;
+        }
+        return R.drawable.ac_icon_delay_check_tip1;
+    }
+
+    @Override
+    public void setOnViewClickListener(OnClickListener onViewClickListener) {
+        super.setOnViewClickListener(onViewClickListener);
+        if (mIvBack != null) {
+            mIvBack.setOnClickListener(onViewClickListener);
+        }
+        if (mViewRetry != null) {
+            mViewRetry.setOnClickListener(onViewClickListener);
+        }
+    }
+
+    @Override
+    public void release() {
+        super.release();
+        if (mViewAnim1 != null) {
+            mViewAnim1.cancelAnimation();
+            mViewAnim1.clearAnimation();
+        }
+
+        if (mViewAnim2 != null) {
+            mViewAnim2.cancelAnimation();
+            mViewAnim2.clearAnimation();
+        }
+        if (mIvBall != null) {
+            mIvBall.clearAnimation();
+        }
+
+        if (mIvCenter != null) {
+            mIvCenter.clearAnimation();
+        }
+        if (mCenterAnim != null) {
+            mCenterAnim.cancel();
+            mCenterAnim =null;
+        }
+    }
+}

BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_check_fail.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_check_ing.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_check_prepare.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_check_success.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_icon_back.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_icon_ball.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_icon_ball2.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_icon_delay_check_tip1.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_icon_delay_check_tip2.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_icon_delay_check_tip3.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_icon_delay_check_tip4.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/ac_icon_tip.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/icon_accompany_back.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/icon_accompany_loading_progress_bg.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/icon_accompany_no_permiss_bg1.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/icon_no_permission_cancel_bg.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/icon_no_permission_confirm_bg.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/icon_no_permission_content_bg.png


BIN
accompanySDK/src/main/res/drawable-xhdpi/icon_no_permission_tip_bg.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_check_fail.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_check_ing.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_check_prepare.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_check_success.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_delay_check_bg.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_back.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_ball.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_ball2.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_delay_check_tip1.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_delay_check_tip2.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_delay_check_tip3.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_delay_check_tip4.png


BIN
accompanySDK/src/main/res/drawable-xxhdpi/ac_icon_tip.png


Some files were not shown because too many files changed in this diff