Browse Source

增加我的作品分享以及H5分享链接流程

Pq 1 year ago
parent
commit
3b8a993b7f
24 changed files with 724 additions and 309 deletions
  1. 54 0
      BaseLibrary/src/main/java/com/cooleshow/base/bean/ShareIntentBean.java
  2. 2 0
      BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java
  3. 34 0
      BaseLibrary/src/main/java/com/cooleshow/base/constanst/ShareType.java
  4. 282 0
      BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/CommonShareHelper.java
  5. 100 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/dialog/ShareDialog.java
  6. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_share_copy.png
  7. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_share_wx.png
  8. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_share_wx_circle.png
  9. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_share_copy.png
  10. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_share_wx.png
  11. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_share_wx_circle.png
  12. 126 0
      BaseLibrary/src/main/res/layout/dialog_share_layout.xml
  13. 1 0
      BaseLibrary/src/main/res/values/colors.xml
  14. 1 1
      musicMerge/src/main/java/com/cooleshow/musicmerge/contract/MusicFileHandleContract.java
  15. 2 2
      musicMerge/src/main/java/com/cooleshow/musicmerge/presenter/MusicFileHandlePresenter.java
  16. 99 3
      musicMerge/src/main/java/com/cooleshow/musicmerge/ui/MusicHandleActivity.java
  17. 2 0
      musicMerge/src/main/res/values/strings.xml
  18. 6 168
      student/src/main/java/com/cooleshow/student/helper/ShareHelper.java
  19. 2 1
      student/src/main/java/com/cooleshow/student/ui/web/HtmlActivity.java
  20. 2 1
      student/src/main/java/com/cooleshow/student/ui/web/HtmlHorizontalScreenActivity.java
  21. 3 2
      student/src/main/java/com/cooleshow/student/widgets/dialog/LiveRoomShareDialog.java
  22. 4 129
      teacher/src/main/java/com/cooleshow/teacher/helper/ShareHelper.java
  23. 2 1
      teacher/src/main/java/com/cooleshow/teacher/ui/web/HtmlActivity.java
  24. 2 1
      teacher/src/main/java/com/cooleshow/teacher/ui/web/HtmlHorizontalScreenActivity.java

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

@@ -0,0 +1,54 @@
+package com.cooleshow.base.bean;
+
+import com.umeng.socialize.bean.SHARE_MEDIA;
+
+/**
+ * Author by pq, Date on 2024/3/8.
+ */
+public class ShareIntentBean {
+    private String linkUrl;
+    private String title;
+    private String des;
+    private String thumb;
+    private SHARE_MEDIA share_media;
+
+    public SHARE_MEDIA getShare_media() {
+        return share_media;
+    }
+
+    public void setShare_media(SHARE_MEDIA share_media) {
+        this.share_media = share_media;
+    }
+
+    public String getThumb() {
+        return thumb;
+    }
+
+    public void setThumb(String thumb) {
+        this.thumb = thumb;
+    }
+
+    public String getLinkUrl() {
+        return linkUrl;
+    }
+
+    public void setLinkUrl(String linkUrl) {
+        this.linkUrl = linkUrl;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDes() {
+        return des;
+    }
+
+    public void setDes(String des) {
+        this.des = des;
+    }
+}

+ 2 - 0
BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java

@@ -177,4 +177,6 @@ public abstract class WebConstants {
     public static final String MY_WORKS = getBaseUrlH5() + "/#/creation?id=%s";////我的作品
     public static final String MY_WORKS = getBaseUrlH5() + "/#/creation?id=%s";////我的作品
 
 
     public static final String ICP_QUERY = "https://beian.miit.gov.cn";////工信部网站
     public static final String ICP_QUERY = "https://beian.miit.gov.cn";////工信部网站
+
+    public static final String MY_WORKS_SHARE = getBaseUrlH5() + "/#/shareCreation?id=%s";////我的作品分享地址
 }
 }

+ 34 - 0
BaseLibrary/src/main/java/com/cooleshow/base/constanst/ShareType.java

@@ -0,0 +1,34 @@
+package com.cooleshow.base.constanst;
+
+import com.contrarywind.interfaces.IPickerViewData;
+
+/**
+ * Author by pq, Date on 2022/12/23.
+ */
+public enum ShareType implements IPickerViewData {
+    WEIXIN("WEIXIN", "微信好友"),
+    WEIXIN_CIRCLE("WEIXIN_CIRCLE", "朋友圈"),
+    COPY_LINK("COPY_LINK", "复制链接");
+
+
+    private final String value;
+    private final String id;
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    ShareType(String id, String s) {
+        this.id = id;
+        this.value = s;
+    }
+
+    @Override
+    public String getPickerViewText() {
+        return getValue();
+    }
+}

+ 282 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/CommonShareHelper.java

@@ -0,0 +1,282 @@
+package com.cooleshow.base.utils.helper;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+import android.util.Base64;
+
+import com.cooleshow.base.bean.ShareIntentBean;
+import com.cooleshow.base.utils.AppUtils;
+import com.cooleshow.base.utils.FileUtils;
+import com.cooleshow.base.utils.MyFileUtils;
+import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.utils.Utils;
+import com.umeng.socialize.ShareAction;
+import com.umeng.socialize.UMShareAPI;
+import com.umeng.socialize.UMShareListener;
+import com.umeng.socialize.bean.SHARE_MEDIA;
+import com.umeng.socialize.media.UMImage;
+import com.umeng.socialize.media.UMWeb;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.ObservableEmitter;
+import io.reactivex.rxjava3.core.ObservableOnSubscribe;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+
+/**
+ * Author by pq, Date on 2022/5/31.
+ */
+public class CommonShareHelper {
+    public static final String WECHAT_TAG = "wechat";
+    public static final String WECHAT_CIRCLE_TAG = "wechat_circle";
+    public static final String SINA_TAG = "sina";
+    public static final String IMAGE_TAG = "image";
+    public static final String VIDEO_TAG = "video";
+
+    public static final String LINK_TAG = "link";
+
+    public static void saveImg(Context context, String base64, ResultCallBack resultCallBack) {
+        Observable.create(new ObservableOnSubscribe<File>() {
+            @Override
+            public void subscribe(ObservableEmitter<File> emitter) throws Exception {
+                File file = saveImgToLocalFile(base64);
+                emitter.onNext(file);
+            }
+        }).subscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Observer<File>() {
+                    @Override
+                    public void onSubscribe(Disposable d) {
+
+                    }
+
+                    @Override
+                    public void onNext(File file) {
+                        if (context != null) {
+                            try {
+                                MediaStore.Images.Media.insertImage(context.getContentResolver(),
+                                        file.getAbsolutePath(), file.getName(), null);
+                                // 最后通知图库更新
+                                context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
+                                        Uri.fromFile(new File(file.getPath()))));
+                                if (resultCallBack != null) {
+                                    resultCallBack.onResult(true);
+                                }
+                            } catch (FileNotFoundException e) {
+                                ToastUtil.getInstance().show(context, "保存失败");
+                                e.printStackTrace();
+                            }
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        if (resultCallBack != null) {
+                            resultCallBack.onResult(false);
+                        }
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+
+
+    public static void saveImg(Context context, Bitmap bitmap, ResultCallBack resultCallBack) {
+        Observable.create(new ObservableOnSubscribe<File>() {
+                    @Override
+                    public void subscribe(ObservableEmitter<File> emitter) throws Exception {
+                        File file = saveImgToLocalFile(bitmap);
+                        emitter.onNext(file);
+                    }
+                }).subscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Observer<File>() {
+                    @Override
+                    public void onSubscribe(Disposable d) {
+
+                    }
+
+                    @Override
+                    public void onNext(File file) {
+                        if (context != null) {
+                            try {
+                                MediaStore.Images.Media.insertImage(context.getContentResolver(),
+                                        file.getAbsolutePath(), file.getName(), null);
+                                // 最后通知图库更新
+                                context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
+                                        Uri.fromFile(new File(file.getPath()))));
+                                if (resultCallBack != null) {
+                                    resultCallBack.onResult(true);
+                                }
+                            } catch (FileNotFoundException e) {
+                                ToastUtil.getInstance().show(context, "保存失败");
+                                e.printStackTrace();
+                            }
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        if (resultCallBack != null) {
+                            resultCallBack.onResult(false);
+                        }
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+
+
+    private static File saveImgToLocalFile(String base64) {
+        byte[] bytes;
+        if (base64.startsWith("data:image/png;base64")) {
+            String[] split = base64.split(",");
+            bytes = Base64.decode(split[1], Base64.DEFAULT);
+        } else {
+            bytes = Base64.decode(base64, Base64.DEFAULT);
+        }
+        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
+        File parentFile = new File(FileUtils.getCacheDir(Utils.getApp()) + File.separator + "share");
+        if (!parentFile.exists()) {
+            parentFile.mkdirs();
+        }
+        String targetFileName = "IMG_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + ".png";
+        File file = new File(parentFile, targetFileName);
+        FileUtils.saveImageToLocal(bitmap, file.getAbsolutePath());
+        return new File(file.getAbsolutePath());
+    }
+
+    public static File saveImgToLocalFile(Bitmap bitmap) {
+        File parentFile = new File(FileUtils.getCacheDir(Utils.getApp()) + File.separator + "share");
+        if (!parentFile.exists()) {
+            parentFile.mkdirs();
+        }
+        String targetFileName = "IMG_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + ".png";
+        File file = new File(parentFile, targetFileName);
+        FileUtils.saveImageToLocal(bitmap, file.getAbsolutePath());
+        return new File(file.getAbsolutePath());
+    }
+
+    public static void parseShareActivity(Activity activity, JSONObject jsonObject, UMShareListener shareListener) {
+        JSONObject content = null;
+        try {
+            content = jsonObject.getJSONObject("content");
+            String shareTitle = content.getString("title");
+            String shareDesc = content.getString("desc");
+            String type = content.getString("type");
+            String shareType = content.getString("shareType");
+            SHARE_MEDIA share_media = SHARE_MEDIA.WEIXIN;
+            if (TextUtils.equals(shareType, WECHAT_TAG)) {
+                //分享微信
+                share_media = SHARE_MEDIA.WEIXIN;
+            }
+            if (TextUtils.equals(shareType, WECHAT_CIRCLE_TAG)) {
+                //分享朋友圈
+                share_media = SHARE_MEDIA.WEIXIN_CIRCLE;
+            }
+            if (TextUtils.equals(shareType, SINA_TAG)) {
+                //分享新浪微博
+                share_media = SHARE_MEDIA.SINA;
+            }
+            if (!UMShareAPI.get(Utils.getApp()).isInstall(activity, share_media)) {
+                ToastUtil.getInstance().show(Utils.getApp(), "应用未安装,分享失败");
+                return;
+            }
+            if (TextUtils.equals(type, IMAGE_TAG)) {
+                //分享图片
+                String imageData = content.getString("image");
+                UMImage image = new UMImage(activity, MyFileUtils.base64ToBitmap(imageData.split(",")[1]));//bitmap文件
+                image.setThumb(image);
+                image.compressFormat =Bitmap.CompressFormat.PNG;
+                image.compressStyle = UMImage.CompressStyle.SCALE;
+                image.setTitle(shareTitle);
+                image.setDescription(shareDesc);
+                new ShareAction(activity).withMedia(image)
+                        .setPlatform(share_media)
+                        .setCallback(shareListener)
+                        .share();
+            }
+
+            if (TextUtils.equals(type, VIDEO_TAG)) {
+                String videoUrl = content.optString("video");
+                UMWeb video = new UMWeb(videoUrl);
+                video.setTitle(shareTitle);
+                video.setDescription(shareDesc.isEmpty() ? shareTitle : shareDesc);
+                new ShareAction(activity).withMedia(video)
+                        .setPlatform(share_media)
+                        .setCallback(shareListener)
+                        .share();
+                return;
+            }
+
+            if (TextUtils.equals(type, LINK_TAG)) {
+                String url = content.optString("url");
+                if (TextUtils.isEmpty(url)) {
+                    return;
+                }
+                String thumb = content.optString("thumb");
+                ShareIntentBean bean = new ShareIntentBean();
+                bean.setLinkUrl(url);
+                bean.setTitle(shareTitle);
+                bean.setDes(shareDesc);
+                bean.setShare_media(share_media);
+                bean.setThumb(thumb);
+                toShareUrl(activity, bean, shareListener);
+                return;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void toShareUrl(Activity activity, ShareIntentBean intentBean, UMShareListener shareListener) {
+        if (intentBean == null) {
+            return;
+        }
+        try {
+            UMWeb web = new UMWeb(intentBean.getLinkUrl());
+            UMImage image;
+            if (!TextUtils.isEmpty(intentBean.getThumb())) {
+                image = new UMImage(activity, intentBean.getThumb());
+            } else {
+                image = new UMImage(activity, AppUtils.getAppIconId());
+            }
+            web.setTitle(intentBean.getTitle());//标题
+            web.setThumb(image);//缩略图
+            web.setDescription(intentBean.getDes());//描述
+            new ShareAction(activity).withMedia(web)
+                    .setPlatform(intentBean.getShare_media())
+                    .setCallback(shareListener)
+                    .share();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public interface ResultCallBack {
+        void onResult(boolean isSuccess);
+    }
+}

+ 100 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/dialog/ShareDialog.java

@@ -0,0 +1,100 @@
+package com.cooleshow.base.widgets.dialog;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+import com.cooleshow.base.R;
+import com.cooleshow.base.constanst.ShareType;
+import com.cooleshow.base.utils.UiUtils;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Author by pq, Date on 2022/6/11.
+ */
+public class ShareDialog extends BaseFullDialog implements View.OnClickListener {
+    private OnEventListener mEventListener;
+
+
+    public ShareDialog(@NonNull Context context) {
+        super(context, R.style.DialogStyle);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.dialog_share_layout);
+        setCancelable(false);
+        setCanceledOnTouchOutside(false);
+        initParams();
+
+        findViewById(R.id.iv_wx).setOnClickListener(this);
+        findViewById(R.id.iv_wx_circle).setOnClickListener(this);
+        findViewById(R.id.iv_copy_link).setOnClickListener(this);
+        findViewById(R.id.iv_close).setOnClickListener(this);
+        findViewById(R.id.tv_cancel).setOnClickListener(this);
+    }
+
+    private void initParams() {
+        Window window = getWindow();
+        //设置dialog在屏幕底部
+        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);
+    }
+
+    private void initListener() {
+    }
+
+
+    @Override
+    public void onClick(View v) {
+        if (UiUtils.isFastClick(500)) {
+            return;
+        }
+        int id = v.getId();
+        if (id == R.id.tv_cancel || id == R.id.iv_close) {
+            dismiss();
+            return;
+        }
+        if (id == R.id.iv_wx) {
+            toShare(ShareType.WEIXIN);
+            return;
+        }
+
+        if (id == R.id.iv_wx_circle) {
+            toShare(ShareType.WEIXIN_CIRCLE);
+            return;
+        }
+
+        if (id == R.id.iv_copy_link) {
+            toShare(ShareType.COPY_LINK);
+            return;
+        }
+    }
+
+    private void toShare(ShareType shareType) {
+        if (mEventListener != null) {
+            mEventListener.toShare(shareType);
+        }
+    }
+
+    public void setOnEventListener(OnEventListener listener) {
+        this.mEventListener = listener;
+    }
+
+    public interface OnEventListener {
+        void toShare(ShareType shareType);
+    }
+}

BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_share_copy.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_share_wx.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_share_wx_circle.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_share_copy.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_share_wx.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_share_wx_circle.png


+ 126 - 0
BaseLibrary/src/main/res/layout/dialog_share_layout.xml

@@ -0,0 +1,126 @@
+<?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="300dp"
+    android:layout_gravity="center"
+    android:layout_height="wrap_content"
+    android:background="@drawable/shape_10dp_white">
+
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingStart="22dp"
+        android:paddingTop="15dp"
+        android:text="作品发布成功!快来分享吧!"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_16"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/iv_close"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="12dp"
+        android:src="@drawable/icon_close_dialog"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+    <ImageView
+        android:id="@+id/iv_wx"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        android:layout_marginTop="14dp"
+        android:paddingStart="14dp"
+        android:paddingTop="10dp"
+        android:paddingEnd="14dp"
+        android:paddingBottom="10dp"
+        app:layout_constraintRight_toLeftOf="@+id/iv_wx_circle"
+        android:src="@drawable/icon_share_wx"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/tv_title" />
+
+    <ImageView
+        android:id="@+id/iv_wx_circle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingStart="14dp"
+        android:paddingTop="10dp"
+        android:paddingEnd="14dp"
+        android:paddingBottom="10dp"
+        app:layout_constraintRight_toLeftOf="@+id/iv_copy_link"
+        android:src="@drawable/icon_share_wx_circle"
+        app:layout_constraintLeft_toRightOf="@+id/iv_wx"
+        app:layout_constraintTop_toTopOf="@+id/iv_wx" />
+
+    <ImageView
+        android:layout_marginEnd="10dp"
+        android:id="@+id/iv_copy_link"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingStart="14dp"
+        android:paddingTop="10dp"
+        android:paddingEnd="14dp"
+        android:paddingBottom="10dp"
+        app:layout_constraintRight_toRightOf="parent"
+        android:src="@drawable/icon_share_copy"
+        app:layout_constraintLeft_toRightOf="@+id/iv_wx_circle"
+        app:layout_constraintTop_toTopOf="@+id/iv_wx" />
+
+
+    <TextView
+        android:id="@+id/tv_wx_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="微信好友"
+        android:textColor="@color/color_646566"
+        android:textSize="@dimen/sp_12"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_wx"
+        app:layout_constraintRight_toRightOf="@+id/iv_wx"
+        app:layout_constraintTop_toBottomOf="@+id/iv_wx" />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="朋友圈"
+        android:textColor="@color/color_646566"
+        android:textSize="@dimen/sp_12"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_wx_circle"
+        app:layout_constraintRight_toRightOf="@+id/iv_wx_circle"
+        app:layout_constraintTop_toBottomOf="@+id/iv_wx_circle" />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="复制链接"
+        android:textColor="@color/color_646566"
+        android:textSize="@dimen/sp_12"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_copy_link"
+        app:layout_constraintRight_toRightOf="@+id/iv_copy_link"
+        app:layout_constraintTop_toBottomOf="@+id/iv_copy_link" />
+
+    <View
+        android:id="@+id/view_line"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:layout_marginStart="13dp"
+        android:layout_marginTop="17dp"
+        android:layout_marginEnd="13dp"
+        android:background="@color/color_f2f2f2"
+        app:layout_constraintTop_toBottomOf="@+id/tv_wx_title" />
+
+    <TextView
+        android:id="@+id/tv_cancel"
+        android:layout_width="match_parent"
+        android:layout_height="57dp"
+        android:gravity="center"
+        android:text="@string/cancel"
+        android:textColor="@color/color_aaaaaa"
+        android:textSize="@dimen/sp_16"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/view_line" />
+</androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -204,5 +204,6 @@
     <color name="color_e6ffffff">#e6ffffff</color>
     <color name="color_e6ffffff">#e6ffffff</color>
     <color name="color_f0fffc">#F0FFFC</color>
     <color name="color_f0fffc">#F0FFFC</color>
     <color name="color_fff3f5">#FFF3F5</color>
     <color name="color_fff3f5">#FFF3F5</color>
+    <color name="color_646566">#646566</color>
 
 
 </resources>
 </resources>

+ 1 - 1
musicMerge/src/main/java/com/cooleshow/musicmerge/contract/MusicFileHandleContract.java

@@ -7,7 +7,7 @@ import com.cooleshow.musicmerge.bean.MusicDataBean;
  * Author by pq, Date on 2023/9/7.
  * Author by pq, Date on 2023/9/7.
  */
  */
 public interface MusicFileHandleContract extends BaseView {
 public interface MusicFileHandleContract extends BaseView {
-    void saveWorksSuccess();
+    void saveWorksSuccess(Object data, String des,String imgCover);
     void getDetailSuccess(MusicDataBean data);
     void getDetailSuccess(MusicDataBean data);
     void saveWorksDraftSuccess();
     void saveWorksDraftSuccess();
 
 

+ 2 - 2
musicMerge/src/main/java/com/cooleshow/musicmerge/presenter/MusicFileHandlePresenter.java

@@ -49,9 +49,9 @@ public class MusicFileHandlePresenter extends BasePresenter<MusicFileHandleContr
         }
         }
         addSubscribe(create(Api.class).save(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString()), BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<Object>(getView()) {
         addSubscribe(create(Api.class).save(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString()), BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<Object>(getView()) {
             @Override
             @Override
-            protected void onSuccess(Object data) {
+            protected void onSuccess(Object worksId) {
                 if (getView() != null) {
                 if (getView() != null) {
-                    getView().saveWorksSuccess();
+                    getView().saveWorksSuccess(worksId,des,imgCover);
                 }
                 }
             }
             }
 
 

+ 99 - 3
musicMerge/src/main/java/com/cooleshow/musicmerge/ui/MusicHandleActivity.java

@@ -1,6 +1,7 @@
 package com.cooleshow.musicmerge.ui;
 package com.cooleshow.musicmerge.ui;
 
 
 import android.animation.ObjectAnimator;
 import android.animation.ObjectAnimator;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ActivityInfo;
 import android.graphics.Color;
 import android.graphics.Color;
@@ -24,10 +25,14 @@ import android.widget.SeekBar;
 
 
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.alibaba.android.arouter.launcher.ARouter;
 import com.alibaba.android.arouter.launcher.ARouter;
+import com.cooleshow.base.bean.ShareIntentBean;
+import com.cooleshow.base.common.WebConstants;
 import com.cooleshow.base.constanst.Constants;
 import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.constanst.ShareType;
 import com.cooleshow.base.constanst.UploadConstants;
 import com.cooleshow.base.constanst.UploadConstants;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.ClipboardUtils;
 import com.cooleshow.base.utils.FileUtils;
 import com.cooleshow.base.utils.FileUtils;
 import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.base.utils.GsonUtils;
 import com.cooleshow.base.utils.GsonUtils;
@@ -39,10 +44,12 @@ import com.cooleshow.base.utils.SizeUtils;
 import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.UrlUtils;
 import com.cooleshow.base.utils.UrlUtils;
+import com.cooleshow.base.utils.helper.CommonShareHelper;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.base.widgets.dialog.CommonConfirmDialog;
 import com.cooleshow.base.widgets.dialog.CommonConfirmDialog;
 import com.cooleshow.base.widgets.dialog.CommonConfirmDialog2;
 import com.cooleshow.base.widgets.dialog.CommonConfirmDialog2;
+import com.cooleshow.base.widgets.dialog.ShareDialog;
 import com.cooleshow.musicmerge.R;
 import com.cooleshow.musicmerge.R;
 import com.cooleshow.musicmerge.bean.MusicDataBean;
 import com.cooleshow.musicmerge.bean.MusicDataBean;
 import com.cooleshow.musicmerge.bean.MusicInfoBean;
 import com.cooleshow.musicmerge.bean.MusicInfoBean;
@@ -57,6 +64,9 @@ import com.cooleshow.musicmerge.viewmodel.MusicMergeViewModel;
 import com.cooleshow.musicmerge.widget.MergeLoadingTipDialog;
 import com.cooleshow.musicmerge.widget.MergeLoadingTipDialog;
 import com.luck.picture.lib.PictureSelector;
 import com.luck.picture.lib.PictureSelector;
 import com.luck.picture.lib.entity.LocalMedia;
 import com.luck.picture.lib.entity.LocalMedia;
+import com.umeng.socialize.UMShareAPI;
+import com.umeng.socialize.UMShareListener;
+import com.umeng.socialize.bean.SHARE_MEDIA;
 
 
 import java.io.File;
 import java.io.File;
 import java.util.List;
 import java.util.List;
@@ -69,7 +79,7 @@ import androidx.lifecycle.ViewModelProvider;
  * Author by pq, Date on 2023/8/28.
  * Author by pq, Date on 2023/8/28.
  */
  */
 @Route(path = RouterPath.MusicTuner.MUSIC_MERGE_PAGE)
 @Route(path = RouterPath.MusicTuner.MUSIC_MERGE_PAGE)
-public class MusicHandleActivity extends BaseMVPActivity<AcMusicHandleLayoutBinding, MusicFileHandlePresenter> implements View.OnClickListener, MusicFileHandleContract, TextureView.SurfaceTextureListener {
+public class MusicHandleActivity extends BaseMVPActivity<AcMusicHandleLayoutBinding, MusicFileHandlePresenter> implements View.OnClickListener, MusicFileHandleContract, TextureView.SurfaceTextureListener, UMShareListener {
     public static final int REQUEST_CODE_LOCAL = 0x19;
     public static final int REQUEST_CODE_LOCAL = 0x19;
     public static final int REQUEST_CODE_LOCAL_VIDEO_COVER = 0x20;
     public static final int REQUEST_CODE_LOCAL_VIDEO_COVER = 0x20;
     public static final int REQUEST_CODE_VIDEO_COVER = 0x29;
     public static final int REQUEST_CODE_VIDEO_COVER = 0x29;
@@ -1093,12 +1103,76 @@ public class MusicHandleActivity extends BaseMVPActivity<AcMusicHandleLayoutBind
 
 
 
 
     @Override
     @Override
-    public void saveWorksSuccess() {
+    public void saveWorksSuccess(Object data, String des,String imgCover) {
         if (!checkActivityExist()) {
         if (!checkActivityExist()) {
             return;
             return;
         }
         }
         currentStep = 2;
         currentStep = 2;
-        showToastViewAndFinish("发布成功", true);
+//        showToastViewAndFinish("发布成功", true);
+
+        String worksId = null;
+        if (data instanceof String) {
+            worksId = (String) data;
+        }
+        if (!TextUtils.isEmpty(worksId)) {
+            ShareIntentBean shareIntentBean = buildShareData(worksId, des,imgCover);
+            toShowShareDialog(shareIntentBean, true);
+        } else {
+            showToastViewAndFinish(getString(R.string.publish_success), true);
+        }
+    }
+
+    private ShareIntentBean buildShareData(String worksId,String shareDes,String imgCover){
+        ShareIntentBean bean = new ShareIntentBean();
+        String url = String.format(WebConstants.MY_WORKS_SHARE, worksId);
+        bean.setLinkUrl(url);
+        bean.setTitle(getString(R.string.share_works_title));
+        bean.setDes(shareDes);
+        bean.setThumb(imgCover);
+        return bean;
+    }
+
+    private void toShowShareDialog(ShareIntentBean intentBean, boolean isReCallBack) {
+        toUpdateLoadingText(getCurrentProgress(100), getString(R.string.publish_success));
+        mHandler.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                hideLoading();
+                showShareDialog(intentBean, isReCallBack);
+            }
+        }, 1500);
+    }
+
+    private void showShareDialog(ShareIntentBean intentBean, boolean isReCallBack) {
+        ShareDialog shareDialog = new ShareDialog(this);
+        shareDialog.setOnEventListener(new ShareDialog.OnEventListener() {
+            @Override
+            public void toShare(ShareType shareType) {
+                goShare(intentBean, shareType);
+            }
+        });
+        shareDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
+            @Override
+            public void onDismiss(DialogInterface dialog) {
+                toFinish(isReCallBack);
+            }
+        });
+        shareDialog.show();
+    }
+
+    private void goShare(ShareIntentBean intentBean, ShareType shareType) {
+        if (shareType == ShareType.COPY_LINK) {
+            ClipboardUtils.copyText(intentBean.getLinkUrl());
+            ToastUtil.getInstance().showShort("复制成功");
+            return;
+        } else if (shareType == ShareType.WEIXIN) {
+            intentBean.setShare_media(SHARE_MEDIA.WEIXIN);
+        } else if (shareType == ShareType.WEIXIN_CIRCLE) {
+            intentBean.setShare_media(SHARE_MEDIA.WEIXIN_CIRCLE);
+        }
+        if (intentBean.getShare_media() != null) {
+            CommonShareHelper.toShareUrl(MusicHandleActivity.this, intentBean, this);
+        }
     }
     }
 
 
     private void toFinish(boolean isReCallBack) {
     private void toFinish(boolean isReCallBack) {
@@ -1269,6 +1343,7 @@ public class MusicHandleActivity extends BaseMVPActivity<AcMusicHandleLayoutBind
     @Override
     @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         super.onActivityResult(requestCode, resultCode, data);
+        UMShareAPI.get(MusicHandleActivity.this).onActivityResult(requestCode, resultCode, data);
         if (resultCode == RESULT_OK) {
         if (resultCode == RESULT_OK) {
             if (requestCode == REQUEST_CODE_LOCAL || requestCode == REQUEST_CODE_LOCAL_VIDEO_COVER) {
             if (requestCode == REQUEST_CODE_LOCAL || requestCode == REQUEST_CODE_LOCAL_VIDEO_COVER) {
                 if (data != null) {
                 if (data != null) {
@@ -1330,6 +1405,7 @@ public class MusicHandleActivity extends BaseMVPActivity<AcMusicHandleLayoutBind
     public void onDestroy() {
     public void onDestroy() {
         releaseAnim();
         releaseAnim();
         super.onDestroy();
         super.onDestroy();
+        UMShareAPI.get(MusicHandleActivity.this).release();
         if (mHandler != null) {
         if (mHandler != null) {
             mHandler.removeCallbacksAndMessages(null);
             mHandler.removeCallbacksAndMessages(null);
         }
         }
@@ -1410,4 +1486,24 @@ public class MusicHandleActivity extends BaseMVPActivity<AcMusicHandleLayoutBind
             }
             }
         }
         }
     }
     }
+
+    @Override
+    public void onStart(SHARE_MEDIA shareMedia) {
+
+    }
+
+    @Override
+    public void onResult(SHARE_MEDIA shareMedia) {
+        ToastUtil.getInstance().showShort("分享成功啦");
+    }
+
+    @Override
+    public void onError(SHARE_MEDIA shareMedia, Throwable throwable) {
+        ToastUtil.getInstance().showShort("分享失败啦");
+    }
+
+    @Override
+    public void onCancel(SHARE_MEDIA shareMedia) {
+        ToastUtil.getInstance().showShort("分享取消了");
+    }
 }
 }

+ 2 - 0
musicMerge/src/main/res/values/strings.xml

@@ -6,4 +6,6 @@
     <string name="audio_merge_tip">音频合成中</string>
     <string name="audio_merge_tip">音频合成中</string>
     <string name="save_draft_tip">正在保存草稿</string>
     <string name="save_draft_tip">正在保存草稿</string>
     <string name="loading_str">加载中</string>
     <string name="loading_str">加载中</string>
+    <string name="share_works_title">我在酷乐秀发布了演奏作品</string>
+    <string name="publish_success">发布成功</string>
 </resources>
 </resources>

+ 6 - 168
student/src/main/java/com/cooleshow/student/helper/ShareHelper.java

@@ -16,6 +16,7 @@ import com.cooleshow.base.utils.FileUtils;
 import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.Utils;
+import com.cooleshow.base.utils.helper.CommonShareHelper;
 import com.cooleshow.chatmodule.utils.helper.ChatGroupHelper;
 import com.cooleshow.chatmodule.utils.helper.ChatGroupHelper;
 import com.cooleshow.chatmodule.utils.helper.IMShareHelper;
 import com.cooleshow.chatmodule.utils.helper.IMShareHelper;
 import com.umeng.socialize.ShareAction;
 import com.umeng.socialize.ShareAction;
@@ -45,127 +46,15 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
  * Author by pq, Date on 2022/5/31.
  * Author by pq, Date on 2022/5/31.
  */
  */
 public class ShareHelper {
 public class ShareHelper {
-
-    public static final String WECHAT_TAG = "wechat";
-    public static final String WECHAT_CIRCLE_TAG = "wechat_circle";
-    public static final String SINA_TAG = "sina";
-    public static final String IMAGE_TAG = "image";
-    public static final String VIDEO_TAG = "video";
-
-    public static void saveImg(Context context, String base64, ResultCallBack resultCallBack) {
-        Observable.create(new ObservableOnSubscribe<File>() {
-                    @Override
-                    public void subscribe(ObservableEmitter<File> emitter) throws Exception {
-                        File file = saveImgToLocalFile(base64);
-                        emitter.onNext(file);
-                    }
-                }).subscribeOn(Schedulers.newThread())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new Observer<File>() {
-                    @Override
-                    public void onSubscribe(Disposable d) {
-
-                    }
-
-                    @Override
-                    public void onNext(File file) {
-                        if (context != null) {
-                            try {
-                                MediaStore.Images.Media.insertImage(context.getContentResolver(),
-                                        file.getAbsolutePath(), file.getName(), null);
-                                // 最后通知图库更新
-                                context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
-                                        Uri.fromFile(new File(file.getPath()))));
-                                if (resultCallBack != null) {
-                                    resultCallBack.onResult(true);
-                                }
-                            } catch (FileNotFoundException e) {
-                                ToastUtil.getInstance().show(context, "保存失败");
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-
-                    @Override
-                    public void onError(Throwable e) {
-                        if (resultCallBack != null) {
-                            resultCallBack.onResult(false);
-                        }
-                    }
-
-                    @Override
-                    public void onComplete() {
-
-                    }
-                });
+    public static void saveImg(Context context, String base64, CommonShareHelper.ResultCallBack resultCallBack) {
+        CommonShareHelper.saveImg(context, base64, resultCallBack);
     }
     }
 
 
-    public static void saveImg(Context context, Bitmap bitmap, ResultCallBack resultCallBack) {
-        Observable.create(new ObservableOnSubscribe<File>() {
-                    @Override
-                    public void subscribe(ObservableEmitter<File> emitter) throws Exception {
-                        File file = saveImageToGallery(bitmap);
-                        emitter.onNext(file);
-                    }
-                }).subscribeOn(Schedulers.newThread())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new Observer<File>() {
-                    @Override
-                    public void onSubscribe(Disposable d) {
-
-                    }
-
-                    @Override
-                    public void onNext(File file) {
-                        if (context != null) {
-                            try {
-                                MediaStore.Images.Media.insertImage(context.getContentResolver(),
-                                        file.getAbsolutePath(), file.getName(), null);
-                                // 最后通知图库更新
-                                context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
-                                        Uri.fromFile(new File(file.getPath()))));
-                                if (resultCallBack != null) {
-                                    resultCallBack.onResult(true);
-                                }
-                            } catch (FileNotFoundException e) {
-                                ToastUtil.getInstance().show(context, "保存失败");
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-
-                    @Override
-                    public void onError(Throwable e) {
-                        if (resultCallBack != null) {
-                            resultCallBack.onResult(false);
-                        }
-                    }
-
-                    @Override
-                    public void onComplete() {
-
-                    }
-                });
+    public static void saveImg(Context context, Bitmap bitmap, CommonShareHelper.ResultCallBack resultCallBack) {
+        CommonShareHelper.saveImg(context, bitmap, resultCallBack);
     }
     }
 
 
 
 
-    private static File saveImgToLocalFile(String base64) {
-        byte[] bytes;
-        if (base64.startsWith("data:image/png;base64")) {
-            String[] split = base64.split(",");
-            bytes = Base64.decode(split[1], Base64.DEFAULT);
-        } else {
-            bytes = Base64.decode(base64, Base64.DEFAULT);
-        }
-        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
-        File file = saveImageToGallery(bitmap);
-        return new File(file.getAbsolutePath());
-    }
-
-    public interface ResultCallBack {
-        void onResult(boolean isSuccess);
-    }
-
     public static void parseShareContactData(File file, Intent data) {
     public static void parseShareContactData(File file, Intent data) {
         if (data == null) {
         if (data == null) {
             return;
             return;
@@ -217,58 +106,7 @@ public class ShareHelper {
     }
     }
 
 
 
 
-    public static File saveImageToGallery(Bitmap bitmap) {
-        File parentFile = new File(FileUtils.getCacheDir(Utils.getApp()) + File.separator + "share");
-        if (!parentFile.exists()) {
-            parentFile.mkdirs();
-        }
-        String targetFileName = "IMG_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + ".png";
-        File file = new File(parentFile, targetFileName);
-        FileUtils.saveImageToLocal(bitmap, file.getAbsolutePath());
-        return file;
-    }
-
     public static void parseShareActivity(Activity activity, JSONObject jsonObject, UMShareListener shareListener) {
     public static void parseShareActivity(Activity activity, JSONObject jsonObject, UMShareListener shareListener) {
-        JSONObject content = null;
-        try {
-            content = jsonObject.getJSONObject("content");
-            String shareTitle = content.getString("title");
-            String shareDesc = content.getString("desc");
-            String type = content.getString("type");
-            String shareType = content.getString("shareType");
-            SHARE_MEDIA share_media = SHARE_MEDIA.WEIXIN;
-            if (TextUtils.equals(shareType, WECHAT_TAG)) {
-                //分享微信
-                share_media = SHARE_MEDIA.WEIXIN;
-            }
-            if (TextUtils.equals(shareType, WECHAT_CIRCLE_TAG)) {
-                //分享朋友圈
-                share_media = SHARE_MEDIA.WEIXIN_CIRCLE;
-            }
-            if (TextUtils.equals(shareType, SINA_TAG)) {
-                //分享新浪微博
-                share_media = SHARE_MEDIA.SINA;
-            }
-            if (!UMShareAPI.get(Utils.getApp()).isInstall(activity, share_media)) {
-                ToastUtil.getInstance().show(Utils.getApp(), "应用未安装,分享失败");
-                return;
-            }
-            if (TextUtils.equals(type, IMAGE_TAG)) {
-                //分享图片
-                String imageData = content.getString("image");
-                UMImage image = new UMImage(activity, MyFileUtils.base64ToBitmap(imageData.split(",")[1]));//bitmap文件
-                image.setThumb(image);
-                image.compressFormat =Bitmap.CompressFormat.PNG;
-                image.compressStyle = UMImage.CompressStyle.SCALE;
-                image.setTitle(shareTitle);
-                image.setDescription(shareDesc);
-                new ShareAction(activity).withMedia(image)
-                        .setPlatform(share_media)
-                        .setCallback(shareListener)
-                        .share();
-            }
-        } catch (JSONException e) {
-            e.printStackTrace();
-        }
+        CommonShareHelper.parseShareActivity(activity, jsonObject, shareListener);
     }
     }
 }
 }

+ 2 - 1
student/src/main/java/com/cooleshow/student/ui/web/HtmlActivity.java

@@ -70,6 +70,7 @@ import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.UriUtils;
 import com.cooleshow.base.utils.UriUtils;
 import com.cooleshow.base.utils.WebParamsUtils;
 import com.cooleshow.base.utils.WebParamsUtils;
+import com.cooleshow.base.utils.helper.CommonShareHelper;
 import com.cooleshow.base.utils.helper.DialogHelper;
 import com.cooleshow.base.utils.helper.DialogHelper;
 import com.cooleshow.base.utils.helper.DownloadHelper;
 import com.cooleshow.base.utils.helper.DownloadHelper;
 import com.cooleshow.base.utils.helper.GlideEngine;
 import com.cooleshow.base.utils.helper.GlideEngine;
@@ -717,7 +718,7 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                 .subscribe(permission -> {
                 .subscribe(permission -> {
                     PermissionTipHelper.getInstance().dismissDialog();
                     PermissionTipHelper.getInstance().dismissDialog();
                     if (permission) {
                     if (permission) {
-                        ShareHelper.saveImg(this, base64, new ShareHelper.ResultCallBack() {
+                        ShareHelper.saveImg(this, base64, new CommonShareHelper.ResultCallBack() {
                             @Override
                             @Override
                             public void onResult(boolean isSuccess) {
                             public void onResult(boolean isSuccess) {
                                 if (isSuccess) {
                                 if (isSuccess) {

+ 2 - 1
student/src/main/java/com/cooleshow/student/ui/web/HtmlHorizontalScreenActivity.java

@@ -59,6 +59,7 @@ import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.UriUtils;
 import com.cooleshow.base.utils.UriUtils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.WebParamsUtils;
 import com.cooleshow.base.utils.WebParamsUtils;
+import com.cooleshow.base.utils.helper.CommonShareHelper;
 import com.cooleshow.base.utils.helper.DialogHelper;
 import com.cooleshow.base.utils.helper.DialogHelper;
 import com.cooleshow.base.utils.helper.GlideEngine;
 import com.cooleshow.base.utils.helper.GlideEngine;
 import com.cooleshow.base.utils.helper.PermissionTipHelper;
 import com.cooleshow.base.utils.helper.PermissionTipHelper;
@@ -661,7 +662,7 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
                 .subscribe(permission -> {
                 .subscribe(permission -> {
                     PermissionTipHelper.getInstance().dismissDialog();
                     PermissionTipHelper.getInstance().dismissDialog();
                     if (permission) {
                     if (permission) {
-                        ShareHelper.saveImg(this, base64, new ShareHelper.ResultCallBack() {
+                        ShareHelper.saveImg(this, base64, new CommonShareHelper.ResultCallBack() {
                             @Override
                             @Override
                             public void onResult(boolean isSuccess) {
                             public void onResult(boolean isSuccess) {
                                 if (isSuccess) {
                                 if (isSuccess) {

+ 3 - 2
student/src/main/java/com/cooleshow/student/widgets/dialog/LiveRoomShareDialog.java

@@ -17,6 +17,7 @@ import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.SizeUtils;
 import com.cooleshow.base.utils.SizeUtils;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.utils.helper.CommonShareHelper;
 import com.cooleshow.student.R;
 import com.cooleshow.student.R;
 import com.cooleshow.student.helper.ShareHelper;
 import com.cooleshow.student.helper.ShareHelper;
 import com.cooleshow.student.ui.web.HtmlActivity;
 import com.cooleshow.student.ui.web.HtmlActivity;
@@ -81,7 +82,7 @@ public class LiveRoomShareDialog extends Dialog {
             public void onClick(View v) {
             public void onClick(View v) {
                 Bitmap bitmapByView = ShareHelper.createBitmapByView(mShareView);
                 Bitmap bitmapByView = ShareHelper.createBitmapByView(mShareView);
                 if (bitmapByView != null) {
                 if (bitmapByView != null) {
-                    ShareHelper.saveImg(getContext(), bitmapByView, new ShareHelper.ResultCallBack() {
+                    ShareHelper.saveImg(getContext(), bitmapByView, new CommonShareHelper.ResultCallBack() {
                         @Override
                         @Override
                         public void onResult(boolean isSuccess) {
                         public void onResult(boolean isSuccess) {
                             if (isSuccess) {
                             if (isSuccess) {
@@ -101,7 +102,7 @@ public class LiveRoomShareDialog extends Dialog {
             public void onClick(View v) {
             public void onClick(View v) {
                 Bitmap bitmapByView = ShareHelper.createBitmapByView(mShareView);
                 Bitmap bitmapByView = ShareHelper.createBitmapByView(mShareView);
                 //此处待优化,最好子线程去保存
                 //此处待优化,最好子线程去保存
-                File file = ShareHelper.saveImageToGallery(bitmapByView);
+                File file = CommonShareHelper.saveImgToLocalFile(bitmapByView);
                 if (bitmapByView != null) {
                 if (bitmapByView != null) {
                     if (mOnEventListener != null) {
                     if (mOnEventListener != null) {
                         mOnEventListener.onShare(file);
                         mOnEventListener.onShare(file);

+ 4 - 129
teacher/src/main/java/com/cooleshow/teacher/helper/ShareHelper.java

@@ -15,6 +15,7 @@ import com.cooleshow.base.utils.FileUtils;
 import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.Utils;
+import com.cooleshow.base.utils.helper.CommonShareHelper;
 import com.cooleshow.chatmodule.utils.helper.ChatGroupHelper;
 import com.cooleshow.chatmodule.utils.helper.ChatGroupHelper;
 import com.cooleshow.chatmodule.utils.helper.IMShareHelper;
 import com.cooleshow.chatmodule.utils.helper.IMShareHelper;
 import com.umeng.socialize.ShareAction;
 import com.umeng.socialize.ShareAction;
@@ -44,91 +45,9 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
  * Author by pq, Date on 2022/5/31.
  * Author by pq, Date on 2022/5/31.
  */
  */
 public class ShareHelper {
 public class ShareHelper {
-    public static final String WECHAT_TAG = "wechat";
-    public static final String WECHAT_CIRCLE_TAG = "wechat_circle";
-    public static final String SINA_TAG = "sina";
-    public static final String IMAGE_TAG = "image";
-    public static final String VIDEO_TAG = "video";
-
-    public static void saveImg(Context context, String base64, ResultCallBack resultCallBack) {
-        Observable.create(new ObservableOnSubscribe<File>() {
-            @Override
-            public void subscribe(ObservableEmitter<File> emitter) throws Exception {
-                File file = saveImgToLocalFile(base64);
-                emitter.onNext(file);
-            }
-        }).subscribeOn(Schedulers.newThread())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new Observer<File>() {
-                    @Override
-                    public void onSubscribe(Disposable d) {
-
-                    }
-
-                    @Override
-                    public void onNext(File file) {
-                        if (context != null) {
-                            try {
-                                MediaStore.Images.Media.insertImage(context.getContentResolver(),
-                                        file.getAbsolutePath(), file.getName(), null);
-                                // 最后通知图库更新
-                                context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
-                                        Uri.fromFile(new File(file.getPath()))));
-                                if (resultCallBack != null) {
-                                    resultCallBack.onResult(true);
-                                }
-                            } catch (FileNotFoundException e) {
-                                ToastUtil.getInstance().show(context, "保存失败");
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-
-                    @Override
-                    public void onError(Throwable e) {
-                        if (resultCallBack != null) {
-                            resultCallBack.onResult(false);
-                        }
-                    }
-
-                    @Override
-                    public void onComplete() {
-
-                    }
-                });
-    }
-
-
-    private static File saveImgToLocalFile(String base64) {
-        byte[] bytes;
-        if (base64.startsWith("data:image/png;base64")) {
-            String[] split = base64.split(",");
-            bytes = Base64.decode(split[1], Base64.DEFAULT);
-        } else {
-            bytes = Base64.decode(base64, Base64.DEFAULT);
-        }
-        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
-        File parentFile = new File(FileUtils.getCacheDir(Utils.getApp()) + File.separator + "share");
-        if (!parentFile.exists()) {
-            parentFile.mkdirs();
-        }
-        String targetFileName = "IMG_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + ".png";
-        File file = new File(parentFile, targetFileName);
-        FileUtils.saveImageToLocal(bitmap, file.getAbsolutePath());
-        return new File(file.getAbsolutePath());
+    public static void saveImg(Context context, String base64, CommonShareHelper.ResultCallBack resultCallBack) {
+        CommonShareHelper.saveImg(context,base64,resultCallBack);
     }
     }
-
-    private static File saveImgToLocalFile(Bitmap bitmap) {
-        File parentFile = new File(FileUtils.getCacheDir(Utils.getApp()) + File.separator + "share");
-        if (!parentFile.exists()) {
-            parentFile.mkdirs();
-        }
-        String targetFileName = "IMG_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + ".png";
-        File file = new File(parentFile, targetFileName);
-        FileUtils.saveImageToLocal(bitmap, file.getAbsolutePath());
-        return new File(file.getAbsolutePath());
-    }
-
     public static void parseShareContactData(String base64, Intent data) {
     public static void parseShareContactData(String base64, Intent data) {
         String targetId = data.getStringExtra("targetId");
         String targetId = data.getStringExtra("targetId");
         int conversationValue = data.getIntExtra("conversation", -1);
         int conversationValue = data.getIntExtra("conversation", -1);
@@ -151,50 +70,6 @@ public class ShareHelper {
     }
     }
 
 
     public static void parseShareActivity(Activity activity, JSONObject jsonObject, UMShareListener shareListener) {
     public static void parseShareActivity(Activity activity, JSONObject jsonObject, UMShareListener shareListener) {
-        JSONObject content = null;
-        try {
-            content = jsonObject.getJSONObject("content");
-            String shareTitle = content.getString("title");
-            String shareDesc = content.getString("desc");
-            String type = content.getString("type");
-            String shareType = content.getString("shareType");
-            SHARE_MEDIA share_media = SHARE_MEDIA.WEIXIN;
-            if (TextUtils.equals(shareType, WECHAT_TAG)) {
-                //分享微信
-                share_media = SHARE_MEDIA.WEIXIN;
-            }
-            if (TextUtils.equals(shareType, WECHAT_CIRCLE_TAG)) {
-                //分享朋友圈
-                share_media = SHARE_MEDIA.WEIXIN_CIRCLE;
-            }
-            if (TextUtils.equals(shareType, SINA_TAG)) {
-                //分享新浪微博
-                share_media = SHARE_MEDIA.SINA;
-            }
-            if (!UMShareAPI.get(Utils.getApp()).isInstall(activity, share_media)) {
-                ToastUtil.getInstance().show(Utils.getApp(), "应用未安装,分享失败");
-                return;
-            }
-            if (TextUtils.equals(type, IMAGE_TAG)) {
-                //分享图片
-                String imageData = content.getString("image");
-                UMImage image = new UMImage(activity, MyFileUtils.base64ToBitmap(imageData.split(",")[1]));//bitmap文件
-                image.setThumb(image);
-                image.compressFormat =Bitmap.CompressFormat.PNG;
-                image.compressStyle = UMImage.CompressStyle.SCALE;
-                image.setTitle(shareTitle);
-                image.setDescription(shareDesc);
-                new ShareAction(activity).withMedia(image)
-                        .setPlatform(share_media)
-                        .setCallback(shareListener)
-                        .share();
-            }
-        } catch (JSONException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public interface ResultCallBack {
-        void onResult(boolean isSuccess);
+        CommonShareHelper.parseShareActivity(activity,jsonObject,shareListener);
     }
     }
 }
 }

+ 2 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/web/HtmlActivity.java

@@ -68,6 +68,7 @@ import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.UriUtils;
 import com.cooleshow.base.utils.UriUtils;
 import com.cooleshow.base.utils.WebParamsUtils;
 import com.cooleshow.base.utils.WebParamsUtils;
+import com.cooleshow.base.utils.helper.CommonShareHelper;
 import com.cooleshow.base.utils.helper.DialogHelper;
 import com.cooleshow.base.utils.helper.DialogHelper;
 import com.cooleshow.base.utils.helper.DownloadHelper;
 import com.cooleshow.base.utils.helper.DownloadHelper;
 import com.cooleshow.base.utils.helper.GlideEngine;
 import com.cooleshow.base.utils.helper.GlideEngine;
@@ -830,7 +831,7 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                 .subscribe(permission -> {
                 .subscribe(permission -> {
                     PermissionTipHelper.getInstance().dismissDialog();
                     PermissionTipHelper.getInstance().dismissDialog();
                     if (permission) {
                     if (permission) {
-                        ShareHelper.saveImg(this, base64, new ShareHelper.ResultCallBack() {
+                        ShareHelper.saveImg(this, base64, new CommonShareHelper.ResultCallBack() {
                             @Override
                             @Override
                             public void onResult(boolean isSuccess) {
                             public void onResult(boolean isSuccess) {
                                 if (isSuccess) {
                                 if (isSuccess) {

+ 2 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/web/HtmlHorizontalScreenActivity.java

@@ -58,6 +58,7 @@ import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.UriUtils;
 import com.cooleshow.base.utils.UriUtils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.WebParamsUtils;
 import com.cooleshow.base.utils.WebParamsUtils;
+import com.cooleshow.base.utils.helper.CommonShareHelper;
 import com.cooleshow.base.utils.helper.DialogHelper;
 import com.cooleshow.base.utils.helper.DialogHelper;
 import com.cooleshow.base.utils.helper.GlideEngine;
 import com.cooleshow.base.utils.helper.GlideEngine;
 import com.cooleshow.base.utils.helper.PermissionTipHelper;
 import com.cooleshow.base.utils.helper.PermissionTipHelper;
@@ -658,7 +659,7 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
                 .subscribe(permission -> {
                 .subscribe(permission -> {
                     PermissionTipHelper.getInstance().dismissDialog();
                     PermissionTipHelper.getInstance().dismissDialog();
                     if (permission) {
                     if (permission) {
-                        ShareHelper.saveImg(this, base64, new ShareHelper.ResultCallBack() {
+                        ShareHelper.saveImg(this, base64, new CommonShareHelper.ResultCallBack() {
                             @Override
                             @Override
                             public void onResult(boolean isSuccess) {
                             public void onResult(boolean isSuccess) {
                                 if (isSuccess) {
                                 if (isSuccess) {