Browse Source

Merge remote-tracking branch 'origin/dev' into dev

邓琴文 3 years ago
parent
commit
1741b9d215

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

@@ -1,5 +1,6 @@
 package com.cooleshow.base.utils;
 
+import android.app.Application;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
@@ -11,6 +12,7 @@ import android.net.Uri;
 import android.os.Build;
 import android.os.Environment;
 import android.os.StatFs;
+import android.provider.MediaStore;
 import android.provider.OpenableColumns;
 import android.text.TextUtils;
 import android.util.Base64;
@@ -31,10 +33,13 @@ import java.net.URL;
 import java.security.DigestInputStream;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 
 import javax.net.ssl.HttpsURLConnection;
 
@@ -1627,5 +1632,84 @@ public final class FileUtils {
         return file.getPath();
     }
 
+    public static File saveBase64ImgToLocalFile(String base64) throws Exception {
+        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 + "img");
+        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.saveImagToGallery(bitmap, file.getAbsolutePath());
+        if (file != null && file.exists()) {
+            try {
+                MediaStore.Images.Media.insertImage(Utils.getApp().getContentResolver(),
+                        file.getAbsolutePath(), file.getName(), null);
+                // 最后通知图库更新
+                Utils.getApp().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
+                        Uri.fromFile(new File(file.getPath()))));
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        }
+        return new File(file.getAbsolutePath());
+    }
+
+    /**
+     * 保存图片到图库
+     *
+     * @param bmp
+     */
+    public static void saveImagToGallery(Bitmap bmp, String path) throws Exception {
+        // 首先保存图片
+        File file = new File(path);
+        FileOutputStream fos = new FileOutputStream(file);
+        bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
+        fos.flush();
+        fos.close();
+    }
 
+
+    /**
+     * 将assets中的sf2文件保存到sd卡供midi使用
+     *
+     * @param application
+     */
+    public static void CopyMidiFile(Application application) {
+        try {
+            File f = new File(application.getExternalFilesDir("colexiu") + "/dysf.sf2");
+            if (f.exists()) {
+                if (f.length() < 1024 * 1024 * 130) {
+                    //如果文件存在,并且低于138M
+                    //目前没有md5校验,所以先这样处理文件完整性的问题
+                    f.delete();
+                }
+            }
+            if (!f.exists()) {
+                InputStream is = application.getAssets().open("soundfont.sf2");
+                if (is == null) {
+                    return;
+                }
+                f.createNewFile();
+                OutputStream os = new FileOutputStream(f);
+                byte[] data = new byte[1024];
+                int len = 0;
+                while ((len = is.read(data)) != -1) {
+                    os.write(data, 0, len);
+                }
+                is.close();
+                os.close();
+            }
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
 }

BIN
midiplaylib/src/main/assets/soundfont.sf2


+ 2 - 2
midiplaylib/src/main/java/com/jinmingyunle/midiplaylib/MidiPlayerUtils.java

@@ -399,7 +399,7 @@ public class MidiPlayerUtils {
 
 
     private void playSound(Context context, float speed) {
-        if (BassMusicPlay.getInstance().LoadSoundFont(context.getApplicationContext().getExternalFilesDir("daya") + "/dysf.sf2")) {
+        if (BassMusicPlay.getInstance().LoadSoundFont(context.getApplicationContext().getExternalFilesDir("colexiu") + "/dysf.sf2")) {
             if (currentStartPosition != 0) {
                 BassMusicPlay.getInstance().Seek(currentStartPosition);
             }
@@ -424,7 +424,7 @@ public class MidiPlayerUtils {
         if (compleListener != null) {
             BassMusicPlay.getInstance().SetOnCompletionListener(compleListener);
         }
-        if (BassMusicPlay.getInstance().LoadSoundFont(mContext.getApplicationContext().getExternalFilesDir("daya") + "/dysf.sf2")) {
+        if (BassMusicPlay.getInstance().LoadSoundFont(mContext.getApplicationContext().getExternalFilesDir("colexiu") + "/dysf.sf2")) {
             if (currentStartPosition != 0) {
                 BassMusicPlay.getInstance().Seek(currentStartPosition);
             }

+ 26 - 5
student/src/main/java/com/cooleshow/student/App.java

@@ -11,6 +11,7 @@ import androidx.annotation.RequiresApi;
 import com.alibaba.android.arouter.launcher.ARouter;
 import com.cooleshow.base.common.BaseApplication;
 import com.cooleshow.base.data.net.CommonParamsHelper;
+import com.cooleshow.base.utils.FileUtils;
 import com.cooleshow.base.utils.ProcessUtils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.usercenter.helper.UserHelper;
@@ -22,6 +23,12 @@ import com.umeng.socialize.PlatformConfig;
 import com.vanniktech.emoji.EmojiManager;
 import com.vanniktech.emoji.ios.IosEmojiProvider;
 
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.ObservableEmitter;
+import io.reactivex.rxjava3.core.ObservableOnSubscribe;
+import io.reactivex.rxjava3.functions.Consumer;
+import io.reactivex.rxjava3.schedulers.Schedulers;
 import io.rong.push.RongPushClient;
 import io.rong.push.pushconfig.PushConfig;
 
@@ -33,6 +40,7 @@ import io.rong.push.pushconfig.PushConfig;
  */
 public class App extends BaseApplication {
     public static boolean isRefresh = false;
+
     @Override
     public void onCreate() {
         super.onCreate();
@@ -40,6 +48,7 @@ public class App extends BaseApplication {
         Utils.init(this);
         initCommonParams();
         initSDK();
+        initMidFile();
     }
 
     private void initSDK() {
@@ -51,11 +60,23 @@ public class App extends BaseApplication {
         initRong();
         initUmeng();
     }
-   /* public static String channel;
-    public void initBaseOtherSdk() {
-        channel = WalleChannelReader.getChannel(this);
-    }*/
-    private void initUmeng(){
+
+    private void initMidFile() {
+        Observable.create(new ObservableOnSubscribe<Object>() {
+            @Override
+            public void subscribe(@NonNull ObservableEmitter<Object> emitter) throws Throwable {
+                FileUtils.CopyMidiFile(App.this);
+            }
+        }).observeOn(Schedulers.io())
+                .subscribeOn(Schedulers.io())
+                .subscribe(new Consumer<Object>() {
+                    @Override
+                    public void accept(Object o) throws Throwable {
+                    }
+                });
+    }
+
+    private void initUmeng() {
         UMConfigure.init(this, "62a8394605844627b5b0554b", "app", UMConfigure.DEVICE_TYPE_PHONE, null);
         String FileProvider = "com.cooleshow.student.fileprovider";
         PlatformConfig.setWeixin("wx97408cd22c879ff7", "665a1608a16631dee40d737b4d1a0ad1");

+ 8 - 8
student/src/main/java/com/cooleshow/student/ui/mine/EditAddressActivity.java

@@ -91,7 +91,7 @@ public class EditAddressActivity extends BaseMVPActivity<ActivityEditAddressBind
                     ToastUtils.showShort("请输入收件人电话号码");
                     break;
                 }
-                if (phoneNumber.length()!=11) {
+                if (phoneNumber.length() != 11) {
                     ToastUtils.showShort("请输入正确电话号码");
                     break;
                 }
@@ -136,7 +136,7 @@ public class EditAddressActivity extends BaseMVPActivity<ActivityEditAddressBind
                 if (isAdd) {
                     presenter.createNewAddress(jsonObject.toString());
                 } else {
-                    presenter.updateAddress(id,jsonObject.toString());
+                    presenter.updateAddress(id, jsonObject.toString());
                 }
 
                 break;
@@ -153,7 +153,7 @@ public class EditAddressActivity extends BaseMVPActivity<ActivityEditAddressBind
     @Override
     protected void initView() {
         ARouter.getInstance().inject(this);
-        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "地址列表");
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "编辑地址");
         viewBinding.tvSave.setOnClickListener(this);
         viewBinding.imSetDefault.setOnClickListener(this);
         viewBinding.tvDistrictDetail.setOnClickListener(this);
@@ -163,18 +163,18 @@ public class EditAddressActivity extends BaseMVPActivity<ActivityEditAddressBind
             viewBinding.etName.setText(addressBean.name);
             viewBinding.etPhone.setText(addressBean.phoneNumber);
             if (!TextUtils.isEmpty(addressBean.province)) {
-                province=addressBean.province;
-                city= addressBean.city;
-                region=addressBean.region;
+                province = addressBean.province;
+                city = addressBean.city;
+                region = addressBean.region;
                 viewBinding.tvDistrictDetail.setText(addressBean.province + addressBean.city + addressBean.region);
                 viewBinding.tvDistrictDetail.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_1a1a1a));
             }
             viewBinding.etDetailAddress.setText(addressBean.detailAddress);
             id = addressBean.id;
             isDefaultAddress = addressBean.defaultStatus == 1;//是否是默认地址
-            if (addressBean.defaultStatus==1){
+            if (addressBean.defaultStatus == 1) {
                 viewBinding.imSetDefault.setImageResource(R.drawable.icon_switch_open);
-            }else{
+            } else {
                 viewBinding.imSetDefault.setImageResource(R.drawable.icon_switch_off);
             }
         }

+ 31 - 0
student/src/main/java/com/cooleshow/student/ui/web/AccompanyFragment.java

@@ -11,15 +11,19 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.media.AudioDeviceInfo;
 import android.media.AudioManager;
 import android.media.SoundPool;
+import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.os.SystemClock;
+import android.provider.MediaStore;
 import android.text.TextUtils;
+import android.util.Base64;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.View;
@@ -47,6 +51,7 @@ import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.AppUtils;
 import com.cooleshow.base.utils.HeadsetPlugListener;
 import com.cooleshow.base.utils.HeadsetPlugReceiver;
+import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.PermissionUtils;
 import com.cooleshow.base.utils.ToastUtils;
 import com.cooleshow.base.websocket.JWebSocketClient;
@@ -92,6 +97,7 @@ import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.lang.ref.WeakReference;
 import java.net.URI;
 import java.security.MessageDigest;
@@ -412,6 +418,8 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
                                     JSONObject jsonObject = new JSONObject();
                                     JSONObject headerObject = new JSONObject();
                                     headerObject.put("commond", "musicXml");
+                                    headerObject.put("type", "SOUND_COMPARE");
+                                    headerObject.put("status", 200);
                                     jsonObject.put("header", headerObject);
                                     jsonObject.put("body", msg.getJSONObject("content"));
                                     webSocketClient.send(jsonObject.toString());
@@ -518,6 +526,8 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
                     JSONObject jsonObject = new JSONObject();
                     JSONObject headerObject = new JSONObject();
                     headerObject.put("commond", "musicXml");
+                    headerObject.put("type", "SOUND_COMPARE");
+                    headerObject.put("status", 200);
                     jsonObject.put("header", headerObject);
                     jsonObject.put("body", message.getJSONObject("content"));
                     webSocketClient.send(jsonObject.toString());
@@ -1195,6 +1205,7 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
 
 
     public void sendMessage(String message) {
+        LogUtils.i("sendMessage:" + message);
         webView.evaluateJavascript("postMessage('" + message + "','*')", new ValueCallback<String>() {
             @Override
             public void onReceiveValue(String s) {
@@ -1851,7 +1862,27 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
 
     @Override
     public void savePicture(String base64, String uuid) {
+        try {
+            File file = com.cooleshow.base.utils.FileUtils.saveBase64ImgToLocalFile(base64);
+            sendSavePicCallBack("savePicture", "success",uuid);
+        } catch (Exception e) {
+            sendSavePicCallBack("savePicture", "fail",uuid);
+            e.printStackTrace();
+        }
+    }
 
+    private void sendSavePicCallBack(String api, String result,String uuid) {
+        JSONObject jsonObject = new JSONObject();
+        JSONObject contentJson = new JSONObject();
+        try {
+            jsonObject.put("api", api);
+            contentJson.put("status", result);
+            contentJson.put("uuid", uuid);
+            jsonObject.put("content", contentJson);
+            sendMessage(jsonObject.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
     private boolean goPay = false;

+ 24 - 0
teacher/src/main/java/com/cooleshow/teacher/App.java

@@ -9,6 +9,7 @@ import android.webkit.WebView;
 import com.alibaba.android.arouter.launcher.ARouter;
 import com.cooleshow.base.common.BaseApplication;
 import com.cooleshow.base.data.net.CommonParamsHelper;
+import com.cooleshow.base.utils.FileUtils;
 import com.cooleshow.base.utils.ProcessUtils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.usercenter.helper.UserHelper;
@@ -22,6 +23,13 @@ import com.vanniktech.emoji.ios.IosEmojiProvider;
 
 import androidx.annotation.RequiresApi;
 
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.ObservableEmitter;
+import io.reactivex.rxjava3.core.ObservableOnSubscribe;
+import io.reactivex.rxjava3.core.Scheduler;
+import io.reactivex.rxjava3.functions.Consumer;
+import io.reactivex.rxjava3.schedulers.Schedulers;
 import io.rong.imkit.IMCenter;
 import io.rong.push.RongPushClient;
 import io.rong.push.pushconfig.PushConfig;
@@ -39,6 +47,22 @@ public class App extends BaseApplication {
         Utils.init(this);
         initCommonParams();
         initSDK();
+        initMidFile();
+    }
+
+    private void initMidFile() {
+        Observable.create(new ObservableOnSubscribe<Object>() {
+            @Override
+            public void subscribe(@NonNull ObservableEmitter<Object> emitter) throws Throwable {
+                FileUtils.CopyMidiFile(App.this);
+            }
+        }).observeOn(Schedulers.io())
+                .subscribeOn(Schedulers.io())
+                .subscribe(new Consumer<Object>() {
+                    @Override
+                    public void accept(Object o) throws Throwable {
+                    }
+                });
     }
 
     private void initSDK() {

+ 1 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/mine/EditAddressActivity.java

@@ -152,7 +152,7 @@ public class EditAddressActivity extends BaseMVPActivity<ActivityEditAddressBind
     @Override
     protected void initView() {
         ARouter.getInstance().inject(this);
-        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "地址列表");
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "编辑地址");
         viewBinding.tvSave.setOnClickListener(this);
         viewBinding.imSetDefault.setOnClickListener(this);
         viewBinding.tvDistrictDetail.setOnClickListener(this);

+ 24 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/web/AccompanyFragment.java

@@ -417,6 +417,8 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
                                     JSONObject jsonObject = new JSONObject();
                                     JSONObject headerObject = new JSONObject();
                                     headerObject.put("commond", "musicXml");
+                                    headerObject.put("type", "SOUND_COMPARE");
+                                    headerObject.put("status", 200);
                                     jsonObject.put("header", headerObject);
                                     jsonObject.put("body", msg.getJSONObject("content"));
                                     webSocketClient.send(jsonObject.toString());
@@ -523,6 +525,8 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
                     JSONObject jsonObject = new JSONObject();
                     JSONObject headerObject = new JSONObject();
                     headerObject.put("commond", "musicXml");
+                    headerObject.put("type", "SOUND_COMPARE");
+                    headerObject.put("status", 200);
                     jsonObject.put("header", headerObject);
                     jsonObject.put("body", message.getJSONObject("content"));
                     webSocketClient.send(jsonObject.toString());
@@ -1857,7 +1861,27 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
 
     @Override
     public void savePicture(String base64, String uuid) {
+        try {
+            com.cooleshow.base.utils.FileUtils.saveBase64ImgToLocalFile(base64);
+            sendSavePicCallBack("savePicture", "success",uuid);
+        } catch (Exception e) {
+            sendSavePicCallBack("savePicture", "fail",uuid);
+            e.printStackTrace();
+        }
+    }
 
+    private void sendSavePicCallBack(String api, String result,String uuid) {
+        JSONObject jsonObject = new JSONObject();
+        JSONObject contentJson = new JSONObject();
+        try {
+            jsonObject.put("api", api);
+            contentJson.put("status", result);
+            contentJson.put("uuid", uuid);
+            jsonObject.put("content", contentJson);
+            sendMessage(jsonObject.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
     private boolean goPay = false;