lfwidth">
    private static final String TAG = "AlterOneActivity";
94
    private static final int PIC_NUM = 3;
110
    private static final int PIC_NUM = 3;
95
    private ImageView iv_back;
111
    private ImageView iv_back;
241
     */
257
     */
242
    private void callGallery() {
258
    private void callGallery() {
243
        PictureSelector.create(this)
259
        PictureSelector.create(this)
244
                    .openGallery(PictureMimeType.ofImage())
245
                    .maxSelectNum(PIC_NUM-Bimp.tempSelectBitmap.size())
246
                    .selectionMode(PictureConfig.MULTIPLE)
247
                   // .selectionData(mSelectionData)//是否传入已选图片
248
                    .isCompress(true)//是否压缩
249
                    .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
250
                    .isGif(true)//是否显示gif
251
                    .isAndroidQTransform(true)
252
                    .imageEngine(GlideEngine.createGlideEngine())
253
                    .isWeChatStyle(false)// 是否开启微信图片选择风格
254
                    .isUseCustomCamera(false)// 是否使用自定义相机
255
                    .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
256
                    .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
257
                    .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
258
                    .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
259
                    .imageSpanCount(4)// 每行显示个数
260
                    .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
261
                    .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
260
                    .openGallery(SelectMimeType.ofImage())
261
                    .setSelectorUIStyle(PictureUtlis.getStyle())
262
                    .setImageEngine(GlideEngine.createGlideEngine())
263
                    .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
264
                    .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
265
                    .setCameraInterceptListener(new MeOnCameraInterceptListener())
266
                    .setSelectionMode(SelectModeConfig.MULTIPLE)
267
                    .setMaxSelectNum(PIC_NUM-Bimp.tempSelectBitmap.size())
268
                    .isEmptyResultReturn(true) //支持未选择返回
269
                    .setImageSpanCount(4)
270
                    .isPageStrategy(true)   // 是否开启分页模式
271
                    .isDisplayCamera(true) //是否显示相机入口
272
                    .isPreviewFullScreenMode(true)//预览点击全屏效果
273
                    .isCameraRotateImage(true) //拍照是否纠正旋转图片
274
                    .isEmptyResultReturn(true)//支持未选择返回
275
                    .isWithSelectVideoImage(false)//是否支持视频图片同选
276
                    .isSelectZoomAnim(true)// 选择缩略图缩放效果
277
                    .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
278
                    .isCameraRotateImage(true) //拍照是否纠正旋转图片
279
                    .isGif(false)// 是否显示gif文件
280
                    .isWebp(true)// 是否显示webp文件
281
                    .isBmp(true)//是否显示bmp文件
282
                    .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
283
                    .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
284
                    .isFastSlidingSelect(true) //快速滑动选择
285
                    .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
286
                    .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
287
                    .isPreviewImage(true)//是否预览图片
288
                    .setFilterMinFileSize(1) //过滤最小文件
262
                    .forResult(REQUEST_CODE_CHOOSE);
289
                    .forResult(REQUEST_CODE_CHOOSE);
263
    }
290
    }
264

291

289
                    @Override
316
                    @Override
290
                    public ObservableSource<Boolean> apply(Intent intent) throws Exception {
317
                    public ObservableSource<Boolean> apply(Intent intent) throws Exception {
291
                        try {
318
                        try {
292
                            mSelectionData= PictureSelector.obtainMultipleResult(data);
319
                            mSelectionData= PictureSelector.obtainSelectorList(data);
293

320

294
                            for (LocalMedia localMedia : mSelectionData) {
321
                            for (LocalMedia localMedia : mSelectionData) {
295
//                                Bitmap bitmap = BitmapFactory.decodeFile(getContentResolver().openInputStream(uri));
296
//                                File file = FileUtils.from(AlterOneActivity.this, uri);
297
//
298
//                                bitmap = FileUtils.rotateIfRequired(file, bitmap);
299
//                                bitmap = imageZoom(bitmap);
300
                                String path="";
301
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
302
                                    path= localMedia.getAndroidQToPath();
303
                                }else{
304
                                    path=localMedia.getPath();
305
                                }
322

323
                                String path= Util.getCompressAbsolutePath(localMedia);
324

306
                                ImageItem takePhoto = new ImageItem();
325
                                ImageItem takePhoto = new ImageItem();
307
                                takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
326
                                takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
308
                                Bimp.tempSelectBitmap.add(takePhoto);
327
                                Bimp.tempSelectBitmap.add(takePhoto);
805
                ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000)
824
                ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000)
806
                && (codePoint <= 0x10FFFF));
825
                && (codePoint <= 0x10FFFF));
807
    }
826
    }
808

827
/*
809
    @Override
828
    @Override
810
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
829
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
811
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
830
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
820
    @Override
839
    @Override
821
    public void onPermissionsDenied(int requestCode, List<String> perms) {
840
    public void onPermissionsDenied(int requestCode, List<String> perms) {
822

841

823
    }
842
    }*/
824

843

825
    @AfterPermissionGranted(RC_ALBUM_PERM)
826
    public void permissionTask() {
844
    public void permissionTask() {
827
        if (isPermissionOK()) {
845
        String[] callPhone  =
846
                new String[]{READ_MEDIA_IMAGES, CAMERA};
847

848
        XXPermissions.with(this)
849
                // 申请单个权限
850
                .permission(callPhone)
851
                .request(new OnPermissionCallback() {
852
                    @Override
853
                    public void onGranted(List<String> permissions, boolean all) {
854
                        if (all) {
855
                            callGallery();
856
                        }else{
857
                            showTextToast("获取部分权限成功,但部分权限未正常授予");
858
                        }
859
                    }
860
                    @Override
861
                    public void onDenied(List<String> permissions, boolean never) {
862
                        if (never) {
863
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
864
                            XXPermissions.startPermissionActivity(AlterOneActivity.this, permissions);
865
                        } else {
866
                            showTextToast("获取权限失败");
867
                        }
868
                    }
869
                });
870

871

872
      /*  if (isPermissionOK()) {
828
            callGallery();
873
            callGallery();
829
            // Have permission, do the thing!
874
            // Have permission, do the thing!
830
//            Toast.makeText(this, "TODO: Camera things", Toast.LENGTH_LONG).show();
875
//            Toast.makeText(this, "TODO: Camera things", Toast.LENGTH_LONG).show();
837
                    Manifest.permission.CAMERA,
882
                    Manifest.permission.CAMERA,
838
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
883
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
839
                    Manifest.permission.READ_EXTERNAL_STORAGE);
884
                    Manifest.permission.READ_EXTERNAL_STORAGE);
840
        }
885
        }*/
841
    }
886
    }
842

887

843
    private boolean isPermissionOK() {
888
    private boolean isPermissionOK() {

+ 79 - 41
app/src/main/java/com/electric/chargingpile/activity/CarOwnerCertificateActivity.java

16
import android.net.Uri;
16
import android.net.Uri;
17
import android.os.Build;
17
import android.os.Build;
18
import android.os.Bundle;
18
import android.os.Bundle;
19
import android.provider.MediaStore;
19
import android.text.Html;
20
import android.text.Html;
20
import android.text.TextUtils;
21
import android.text.TextUtils;
21
import android.util.Base64;
22
import android.util.Base64;
34
import com.bumptech.glide.load.engine.DiskCacheStrategy;
35
import com.bumptech.glide.load.engine.DiskCacheStrategy;
35
import com.bumptech.glide.request.target.CustomTarget;
36
import com.bumptech.glide.request.target.CustomTarget;
36
import com.bumptech.glide.request.transition.Transition;
37
import com.bumptech.glide.request.transition.Transition;
37
import com.electric.chargingpile.BuildConfig;
38
38
import com.electric.chargingpile.R;
39
import com.electric.chargingpile.R;
39
import com.electric.chargingpile.application.MainApplication;
40
import com.electric.chargingpile.application.MainApplication;
40
import com.electric.chargingpile.data.CarOwnerCertificateBean;
41
import com.electric.chargingpile.data.CarOwnerCertificateBean;
46
import com.electric.chargingpile.event.CarModelEvent;
47
import com.electric.chargingpile.event.CarModelEvent;
47
import com.electric.chargingpile.event.CarSeriesEvent;
48
import com.electric.chargingpile.event.CarSeriesEvent;
48
import com.electric.chargingpile.util.BarColorUtil;
49
import com.electric.chargingpile.util.BarColorUtil;
50
import com.electric.chargingpile.util.Bimp;
49
import com.electric.chargingpile.util.DES3;
51
import com.electric.chargingpile.util.DES3;
50
import com.electric.chargingpile.util.FileUtils;
52
import com.electric.chargingpile.util.FileUtils;
53
import com.electric.chargingpile.util.ImageFileCompressEngine;
51
import com.electric.chargingpile.util.JsonUtils;
54
import com.electric.chargingpile.util.JsonUtils;
52
import com.electric.chargingpile.util.LoadingDialog;
55
import com.electric.chargingpile.util.LoadingDialog;
56
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
57
import com.electric.chargingpile.util.MeSandboxFileEngine;
58
import com.electric.chargingpile.util.PictureUtlis;
53
import com.electric.chargingpile.util.ToastUtil;
59
import com.electric.chargingpile.util.ToastUtil;
54
import com.electric.chargingpile.util.Util;
60
import com.electric.chargingpile.util.Util;
55
import com.electric.chargingpile.view.TextImageView;
61
import com.electric.chargingpile.view.TextImageView;
56
import com.google.gson.Gson;
62
import com.google.gson.Gson;
57
import com.google.gson.reflect.TypeToken;
63
import com.google.gson.reflect.TypeToken;
58
64
59
import com.luck.picture.lib.PictureSelector;
65
66
import com.hjq.permissions.OnPermissionCallback;
67
import com.hjq.permissions.XXPermissions;
60
import com.luck.picture.lib.animators.AnimationType;
68
import com.luck.picture.lib.animators.AnimationType;
69
import com.luck.picture.lib.basic.PictureSelector;
61
import com.luck.picture.lib.config.PictureConfig;
70
import com.luck.picture.lib.config.PictureConfig;
62
import com.luck.picture.lib.config.PictureMimeType;
71
import com.luck.picture.lib.config.PictureMimeType;
72
import com.luck.picture.lib.config.SelectMimeType;
73
import com.luck.picture.lib.config.SelectModeConfig;
63
import com.luck.picture.lib.entity.LocalMedia;
74
import com.luck.picture.lib.entity.LocalMedia;
64
import com.zhy.http.okhttp.OkHttpUtils;
75
import com.zhy.http.okhttp.OkHttpUtils;
65
import com.zhy.http.okhttp.callback.StringCallback;
76
import com.zhy.http.okhttp.callback.StringCallback;
88
import pub.devrel.easypermissions.EasyPermissions;
99
import pub.devrel.easypermissions.EasyPermissions;
89
100
90
import static android.text.Html.FROM_HTML_MODE_LEGACY;
101
import static android.text.Html.FROM_HTML_MODE_LEGACY;
102
import static com.hjq.permissions.Permission.CAMERA;
103
import static com.hjq.permissions.Permission.READ_EXTERNAL_STORAGE;
104
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
91
105
92
/**
106
/**
93
 * 车主认证
107
 * 车主认证
94
 */
108
 */
95
109
96
public class CarOwnerCertificateActivity extends AppCompatActivity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
110
public class CarOwnerCertificateActivity extends AppCompatActivity implements View.OnClickListener {
97
111
98
    private static final int RC_ALBUM_PERM = 123;
112
    private static final int RC_ALBUM_PERM = 123;
99
    private static final int REQUEST_CODE_CHOOSE = 342;
113
    private static final int REQUEST_CODE_CHOOSE = 342;
441
455
442
                try {
456
                try {
443
//                    List<Uri> uriList = Matisse.obtainResult(data);
457
//                    List<Uri> uriList = Matisse.obtainResult(data);
444
                    List<LocalMedia> localList = PictureSelector.obtainMultipleResult(data);
458
                    List<LocalMedia> localList = PictureSelector.obtainSelectorList(data);
445
                    if (localList !=null && localList.size()>0 ){
459
                    if (localList !=null && localList.size()>0 ){
446
                        LocalMedia localMedia = localList.get(0);
460
                        LocalMedia localMedia = localList.get(0);
447
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
461
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
448
//                        File file = FileUtils.from(CarOwnerCertificateActivity.this, uri);
462
//                        File file = FileUtils.from(CarOwnerCertificateActivity.this, uri);
449
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
463
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
450
                        String path="";
451
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
452
                            path= localMedia.getAndroidQToPath();
453
                        }else{
454
                            path=localMedia.getPath();
455
                        }
464
                        String path= Util.getCompressAbsolutePath(localMedia);
456
                        insertBitmap =imageZoom( BitmapFactory.decodeFile(path));
465
                        insertBitmap =imageZoom( BitmapFactory.decodeFile(path));
457
                        subscriber.onComplete();
466
                        subscriber.onComplete();
458
                    }
467
                    }
662
            }
671
            }
663
        });
672
        });
664
    }
673
    }
674
/*
665
675
666
    @Override
676
    @Override
667
    public void onPermissionsGranted(int requestCode, List<String> perms) {
677
    public void onPermissionsGranted(int requestCode, List<String> perms) {
677
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
687
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
678
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
688
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
679
    }
689
    }
690
*/
680
691
681
    @AfterPermissionGranted(RC_ALBUM_PERM)
682
    public void permissionTask() {
692
    public void permissionTask() {
683
        if (isPermissionOK()) {
684
            PictureSelector.create(this)
685
                    .openGallery(PictureMimeType.ofImage())
686
                    .maxSelectNum(1)
687
                    .selectionMode(PictureConfig.SINGLE)
688
                    .isSingleDirectReturn(true)
689
                    .isCompress(true)//是否压缩
690
                    .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
691
                    .isGif(false)//是否显示gif
692
                    .isAndroidQTransform(true)
693
                    .imageEngine(GlideEngine.createGlideEngine())
694
                    .isWeChatStyle(false)// 是否开启微信图片选择风格
695
                    .isUseCustomCamera(false)// 是否使用自定义相机
696
                    .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
697
                    .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
698
                    .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
699
                    .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
700
                    .imageSpanCount(4)// 每行显示个数
701
                    .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
702
                    .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
703
                    .forResult(REQUEST_CODE_CHOOSE);
693
        String[] callPhone  =
694
                new String[]{READ_MEDIA_IMAGES, CAMERA};
695
696
        XXPermissions.with(this)
697
                // 申请单个权限
698
                .permission(callPhone)
699
                .request(new OnPermissionCallback() {
700
                    @Override
701
                    public void onGranted(List<String> permissions, boolean all) {
702
                        if (all) {
703
                            opendCamera();
704
                        }else{
705
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
706
                        }
707
                    }
708
                    @Override
709
                    public void onDenied(List<String> permissions, boolean never) {
710
                        if (never) {
711
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
712
                            XXPermissions.startPermissionActivity(CarOwnerCertificateActivity.this, permissions);
713
                        } else {
714
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
715
                        }
716
                    }
717
                });
704
718
719
    }
705
720
706
        } else {
707
            EasyPermissions.requestPermissions(
708
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
709
                    RC_ALBUM_PERM,
710
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
711
                    Manifest.permission.READ_EXTERNAL_STORAGE,
712
                    Manifest.permission.CAMERA
713
               .setCameraInterceptListener(new MeOnCameraInterceptListener());
714
        }
721
    private void opendCamera() {
722
        PictureSelector.create(CarOwnerCertificateActivity.this)
723
                .openGallery(SelectMimeType.ofImage())
724
                .setSelectorUIStyle(PictureUtlis.getStyle())
725
                .setImageEngine(GlideEngine.createGlideEngine())
726
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
727
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
728
                .setCameraInterceptListener(new MeOnCameraInterceptListener()   .setCameraInterceptListener(new MeOnCameraInterceptListener())
729
                .setSelectionMode(SelectModeConfig.SINGLE)
730
                .setMaxSelectNum(1)
731
                .isEmptyResultReturn(true) //支持未选择返回
732
                .setImageSpanCount(4)
733
                .isPageStrategy(true)   // 是否开启分页模式
734
                .isDisplayCamera(true) //是否显示相机入口
735
                .isPreviewFullScreenMode(true)//预览点击全屏效果
736
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
737
                .isEmptyResultReturn(true)//支持未选择返回
738
                .isWithSelectVideoImage(false)//是否支持视频图片同选
739
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
740
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
741
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
742
                .isGif(false)// 是否显示gif文件
743
                .isWebp(true)// 是否显示webp文件
744
                .isBmp(true)//是否显示bmp文件
745
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
746
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
747
                .isFastSlidingSelect(true) //快速滑动选择
748
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
749
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
750
                .isPreviewImage(true)//是否预览图片
751
                .setFilterMinFileSize(1) //过滤最小文件
752
                .forResult(REQUEST_CODE_CHOOSE);
715
    }
753
    }
716
754
717
    private boolean isPermissionOK() {
755
    private boolean isPermissionOK() {

+ 140 - 88
app/src/main/java/com/electric/chargingpile/activity/ChargingCommentActivity.java

11
import android.os.Bundle;
11
import android.os.Bundle;
12
import android.os.Handler;
12
import android.os.Handler;
13
import android.os.Message;
13
import android.os.Message;
14
import android.provider.MediaStore;
14
import android.text.Editable;
15
import android.text.Editable;
15
import android.text.Html;
16
import android.text.Html;
16
import android.text.TextUtils;
17
import android.text.TextUtils;
32
import android.widget.Toast;
33
import android.widget.Toast;
33
34
34
import androidx.appcompat.app.AppCompatActivity;
35
import androidx.appcompat.app.AppCompatActivity;
36
import androidx.fragment.app.Fragment;
35
import androidx.recyclerview.widget.GridLayoutManager;
37
import androidx.recyclerview.widget.GridLayoutManager;
36
import androidx.recyclerview.widget.RecyclerView;
38
import androidx.recyclerview.widget.RecyclerView;
37
39
55
import com.electric.chargingpile.util.DES3;
57
import com.electric.chargingpile.util.DES3;
56
import com.electric.chargingpile.util.DateUtils;
58
import com.electric.chargingpile.util.DateUtils;
57
import com.electric.chargingpile.util.DensityUtil;
59
import com.electric.chargingpile.util.DensityUtil;
60
import com.electric.chargingpile.util.IjkPlayerEngine;
61
import com.electric.chargingpile.util.ImageFileCompressEngine;
58
import com.electric.chargingpile.util.JsonUtils;
62
import com.electric.chargingpile.util.JsonUtils;
59
import com.electric.chargingpile.util.LoadingDialog;
63
import com.electric.chargingpile.util.LoadingDialog;
60
import com.electric.chargingpile.util.Md5Util;
64
import com.electric.chargingpile.util.Md5Util;
65
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
66
import com.electric.chargingpile.util.MeSandboxFileEngine;
67
import com.electric.chargingpile.util.PictureUtlis;
61
import com.electric.chargingpile.util.Res;
68
import com.electric.chargingpile.util.Res;
62
import com.electric.chargingpile.util.ScreenUtils;
69
import com.electric.chargingpile.util.ScreenUtils;
63
import com.electric.chargingpile.util.StatusConstants;
70
import com.electric.chargingpile.util.StatusConstants;
71
import com.electric.chargingpile.view.RatingBarView;
78
import com.electric.chargingpile.view.RatingBarView;
72
import com.google.gson.Gson;
79
import com.google.gson.Gson;
73
import com.google.gson.reflect.TypeToken;
80
import com.google.gson.reflect.TypeToken;
74
import com.luck.picture.lib.PictureSelector;
81
82
import com.hjq.permissions.OnPermissionCallback;
83
import com.hjq.permissions.XXPermissions;
84
import com.luck.lib.camerax.SimpleCameraX;
75
import com.luck.picture.lib.animators.AnimationType;
85
import com.luck.picture.lib.animators.AnimationType;
86
import com.luck.picture.lib.basic.PictureSelector;
76
import com.luck.picture.lib.config.PictureConfig;
87
import com.luck.picture.lib.config.PictureConfig;
77
import com.luck.picture.lib.config.PictureMimeType;
88
import com.luck.picture.lib.config.PictureMimeType;
89
import com.luck.picture.lib.config.SelectMimeType;
90
import com.luck.picture.lib.config.SelectModeConfig;
78
import com.luck.picture.lib.entity.LocalMedia;
91
import com.luck.picture.lib.entity.LocalMedia;
79
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
92
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
80
import com.upyun.library.common.SerialUploader;
93
import com.upyun.library.common.SerialUploader;
116
import pub.devrel.easypermissions.EasyPermissions;
129
import pub.devrel.easypermissions.EasyPermissions;
117
130
118
import static android.text.Html.FROM_HTML_MODE_LEGACY;
131
import static android.text.Html.FROM_HTML_MODE_LEGACY;
132
import static com.hjq.permissions.Permission.CAMERA;
133
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
134
import static com.hjq.permissions.Permission.READ_MEDIA_VIDEO;
135
import static com.luck.lib.camerax.CustomCameraConfig.BUTTON_STATE_ONLY_RECORDER;
136
119
/**
137
/**
120
 * 如果更改此页面,则需要同步更改 ChargingCommentActivity,
138
 * 如果更改此页面,则需要同步更改 ChargingCommentActivity,
121
 * ChargingCommentActivity 该页面为从我的->充电记录->去评论
139
 * ChargingCommentActivity 该页面为从我的->充电记录->去评论
122
 * */
140
 * */
123
public class ChargingCommentActivity extends AppCompatActivity implements View.OnClickListener, PlatformActionListener, EasyPermissions.PermissionCallbacks, GridImageAdapter.GridImgListener {
141
public class ChargingCommentActivity extends AppCompatActivity implements View.OnClickListener, PlatformActionListener,GridImageAdapter.GridImgListener {
124
    private static final String TAG = "ChargingCommentActivity";
142
    private static final String TAG = "ChargingCommentActivity";
125
    private static final int PIC_NUM = 3;
143
    private static final int PIC_NUM = 3;
126
    private ProgressDialog insertDialog;
144
    private ProgressDialog insertDialog;
469
                    setLayoutHintVisible(1);
487
                    setLayoutHintVisible(1);
470
                    //异步方式插入图片
488
                    //异步方式插入图片
471
//                    insertImagesSync(data);
489
//                    insertImagesSync(data);
472
                    Bimp.tempSelectMedia = PictureSelector.obtainMultipleResult(data);
490
                    Bimp.tempSelectMedia = PictureSelector.obtainSelectorList(data);
473
                    mAdapter.setMaxCount(3);
491
                    mAdapter.setMaxCount(3);
474
                    mInsterType = 1;
492
                    mInsterType = 1;
475
493
481
                    setLayoutHintVisible(2);
499
                    setLayoutHintVisible(2);
482
                    mInsterType = 2;
500
                    mInsterType = 2;
483
                    mAdapter.setMaxCount(1);
501
                    mAdapter.setMaxCount(1);
484
                    Bimp.tempSelectMedia = PictureSelector.obtainMultipleResult(data);
502
                    Bimp.tempSelectMedia = PictureSelector.obtainSelectorList(data);
485
                    mAdapter.setDatas(Bimp.tempSelectMedia);
503
                    mAdapter.setDatas(Bimp.tempSelectMedia);
486
                }
504
                }
487
            }
505
            }
514
532
515
        for (int i = 0; i < Bimp.tempSelectMedia.size(); i++) {
533
        for (int i = 0; i < Bimp.tempSelectMedia.size(); i++) {
516
            LocalMedia media = Bimp.tempSelectMedia.get(i);
534
            LocalMedia media = Bimp.tempSelectMedia.get(i);
517
            String path = "";
518
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q)
519
                path = media.getAndroidQToPath();
520
            else {
521
                path = media.getPath();
522
            }
535
            String path = Util.getCompressAbsolutePath(media);
523
            bm = imageZoom(BitmapFactory.decodeFile(path));
536
            bm = imageZoom(BitmapFactory.decodeFile(path));
524
            String file = bitmapToBase64(bm);
537
            String file = bitmapToBase64(bm);
525
            Map<String, String> par = new HashMap<String, String>();
538
            Map<String, String> par = new HashMap<String, String>();
861
                        } else if (Bimp.tempSelectMedia.size() > 0 && mInsterType == 2) {
874
                        } else if (Bimp.tempSelectMedia.size() > 0 && mInsterType == 2) {
862
                            //进行视频验证
875
                            //进行视频验证
863
                            LocalMedia media = Bimp.tempSelectMedia.get(0);
876
                            LocalMedia media = Bimp.tempSelectMedia.get(0);
864
                            String path = "";
865
                            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q)
866
                                path = media.getAndroidQToPath();
867
                            else {
868
                                path = media.getPath();
869
                            }
870
877
                            String path = Util.getCompressAbsolutePath(media);
871
878
872
                            getYouPaiData(path);
879
                            getYouPaiData(path);
873
                        } else {
880
                        } else {
1027
    }
1034
    }
1028
    private void addImg() {
1035
    private void addImg() {
1029
        PictureSelector.create(this)
1036
        PictureSelector.create(this)
1030
                .openGallery(PictureMimeType.ofImage())
1031
                .maxSelectNum(PIC_NUM)
1032
                .selectionMode(PictureConfig.MULTIPLE)
1033
                .selectionData(Bimp.tempSelectMedia)//是否传入已选图片
1034
                .isCompress(true)//是否压缩
1035
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
1036
                .isGif(true)//是否显示gif
1037
                .isAndroidQTransform(true)
1038
                .imageEngine(GlideEngine.createGlideEngine())
1039
                .isWeChatStyle(false)// 是否开启微信图片选择风格
1040
                .isUseCustomCamera(false)// 是否使用自定义相机
1041
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
1042
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
1043
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
1044
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
1045
                .imageSpanCount(4)// 每行显示个数
1046
                .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
1047
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
1037
                .openGallery(SelectMimeType.ofImage())
1038
                .setSelectorUIStyle(PictureUtlis.getStyle())
1039
                .setImageEngine(GlideEngine.createGlideEngine())
1040
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
1041
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
1042
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
1043
                .setSelectionMode(SelectModeConfig.MULTIPLE)
1044
                .setMaxSelectNum(PIC_NUM)
1045
                .isEmptyResultReturn(true) //支持未选择返回
1046
                .setImageSpanCount(4)
1047
                .isPageStrategy(true)   // 是否开启分页模式
1048
                .isDisplayCamera(true) //是否显示相机入口
1049
                .isPreviewFullScreenMode(true)//预览点击全屏效果
1050
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
1051
                .isEmptyResultReturn(true)//支持未选择返回
1052
                .isWithSelectVideoImage(false)//是否支持视频图片同选
1053
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
1054
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
1055
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
1056
                .isGif(true)// 是否显示gif文件
1057
                .isWebp(true)// 是否显示webp文件
1058
                .isBmp(true)//是否显示bmp文件
1059
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
1060
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
1061
                .isFastSlidingSelect(true) //快速滑动选择
1062
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
1063
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
1064
                .isPreviewImage(true)//是否预览图片
1065
                .setFilterMinFileSize(1) //过滤最小文件
1048
                .forResult(REQUEST_CODE_CHOOSE);
1066
                .forResult(REQUEST_CODE_CHOOSE);
1049
    }
1067
    }
1068
1050
    private void addVideo() {
1069
    private void addVideo() {
1051
        PictureSelector.create(this)
1070
        PictureSelector.create(this)
1052
                .openGallery(PictureMimeType.ofVideo())
1053
                .selectionMode(PictureConfig.SINGLE)
1054
                .isCompress(true)//是否压缩
1055
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
1056
                .isAndroidQTransform(true)
1057
                .imageEngine(GlideEngine.createGlideEngine())
1058
                .isWeChatStyle(false)// 是否开启微信图片选择风格
1059
                .isUseCustomCamera(false)// 是否使用自定义相机
1060
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
1061
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
1062
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
1063
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
1064
                .imageSpanCount(4)// 每行显示个数
1065
                .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
1066
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
1067
                .videoMaxSecond(16)   // 查询多少秒以内的视频
1068
                .videoMinSecond(2)   // 查询多少秒以内的视频
1069
                .recordVideoSecond(15)//录制视频秒数 默认60s
1070
                .isPreviewVideo(true)//是否预览视频
1071
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
1072
                .filterMaxFileSize( 100 * 1024 )//查询指定大小内的图片、视频、音频大小,单位 KB
1071
                .openGallery(SelectMimeType.ofVideo())
1072
                .setSelectorUIStyle(PictureUtlis.getStyle())
1073
                .setImageEngine(GlideEngine.createGlideEngine())
1074
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
1075
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
1076
                .setSelectionMode(SelectModeConfig.SINGLE) //设置单选
1077
                .isEmptyResultReturn(true) //支持未选择返回
1078
                .setImageSpanCount(3)
1079
                .isPageStrategy(true)   // 是否开启分页模式
1080
                .isDisplayCamera(true) //是否显示相机入口
1081
                .isPreviewFullScreenMode(true)//预览点击全屏效果
1082
                .isEmptyResultReturn(true)//支持未选择返回
1083
                .isWithSelectVideoImage(false)//是否支持视频图片同选
1084
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
1085
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
1086
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
1087
                .isGif(true)// 是否显示gif文件
1088
                .isWebp(true)// 是否显示webp文件
1089
                .isBmp(true)//是否显示bmp文件
1090
                .setFilterMinFileSize(1) //过滤最小文件
1091
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
1092
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
1093
                .isFastSlidingSelect(true) //快速滑动选择
1094
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
1095
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
1096
                .isPreviewImage(true)//是否预览图片
1097
                .setMaxSelectNum(1)//最大选择数量,默认9张
1098
                .setMinSelectNum(1)// 最小选择数量
1099
                .setRecordVideoMaxSecond(16) //视频录制最大时长
1100
                .setRecordVideoMinSecond(2) //视频录制最小时长
1101
                .setFilterVideoMaxSecond(16) //过滤视频最大时长
1102
                .setFilterVideoMinSecond(2) //过滤视频最小时长
1103
                .setVideoQuality(1)
1104
                .setCameraInterceptListener(new MeOnCameraInterceptListener(){
1105
                    @Override
1106
                    public void openCamera(Fragment fragment, int cameraMode, int requestCode) {
1107
                        SimpleCameraX camera = SimpleCameraX.of();
1108
                        camera.isAutoRotation(true);
1109
                        camera.setCameraMode(BUTTON_STATE_ONLY_RECORDER);
1110
                        camera.setVideoFrameRate(25);
1111
                        camera.setVideoBitRate(3 * 1024 * 1024);
1112
                        camera.isDisplayRecordChangeTime(true);
1113
                        camera.isManualFocusCameraPreview(true);
1114
                        camera.isZoomCameraPreview(true);
1115
                        camera.setImageEngine((context, url, imageView) -> Glide.with(context).load(url).into(imageView));
1116
                        camera.start(fragment.requireActivity(), fragment, requestCode);
1117
                    }
1118
                })
1119
                .isVideoPauseResumePlay(true) //视频支持暂停与播放
1073
                .forResult(REQUEST_VIDEO_CODE_CHOOSE);
1120
                .forResult(REQUEST_VIDEO_CODE_CHOOSE);
1074
    }
1121
    }
1075
1122
1095
1142
1096
    }
1143
    }
1097
1144
1098
    @Override
1099
    public void onPermissionsGranted(int requestCode, List<String> perms) {
1100
1101
    }
1102
1145
1103
    @Override
1104
    public void onPermissionsDenied(int requestCode, List<String> perms) {
1105
1106
    }
1107
1146
1108
    @AfterPermissionGranted(RC_ALBUM_PERM)
1109
    public void permissionTask() {
1147
    public void permissionTask() {
1110
        if (isPermissionOK()) {
1111
            addImg();
1112
            // Have permission, do the thing!
1113
//            Toast.makeText(this, "TODO: Camera things", Toast.LENGTH_LONG).show();
1114
//            ifTimeout();
1115
        } else {
1116
            // Ask for one permission
1117
            EasyPermissions.requestPermissions(
1118
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
1119
                    RC_ALBUM_PERM,
1120
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
1121
                    Manifest.permission.READ_EXTERNAL_STORAGE);
1122
        }
1148
        String[] callPhone  =
1149
                new String[]{READ_MEDIA_IMAGES,READ_MEDIA_VIDEO, CAMERA};
1150
        XXPermissions.with(this)
1151
                // 申请单个权限
1152
                .permission(callPhone)
1153
                .request(new OnPermissionCallback() {
1154
                    @Override
1155
                    public void onGranted(List<String> permissions, boolean all) {
1156
                        if (all) {
1157
                            addImg();
1158
                        }else{
1159
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
1160
                        }
1161
                    }
1162
                    @Override
1163
                    public void onDenied(List<String> permissions, boolean never) {
1164
                        if (never) {
1165
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
1166
                            XXPermissions.startPermissionActivity(ChargingCommentActivity.this, permissions);
1167
                        } else {
1168
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
1169
                        }
1170
                    }
1171
                });
1123
    }
1172
    }
1124
1173
1125
    private boolean isPermissionOK() {
1126
        return EasyPermissions.hasPermissions(this,
1127
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
1128
                Manifest.permission.READ_EXTERNAL_STORAGE
1129
        );
1130
    }
1131
1174
1132
    public class MyTopic extends RObject {
1175
    public class MyTopic extends RObject {
1133
        private String id;
1176
        private String id;
1386
        if (mInsterType == 1) {
1429
        if (mInsterType == 1) {
1387
            ImageDisplayActivity.actionStart(this, position);
1430
            ImageDisplayActivity.actionStart(this, position);
1388
        } else if (mInsterType == 2) {
1431
        } else if (mInsterType == 2) {
1389
            PictureSelector.create(ChargingCommentActivity.this)
1390
                    .themeStyle(com.luck.picture.lib.R.style.picture_default_style)
1391
                    .setPictureStyle(Util.getWhiteStyle(ChargingCommentActivity.this))// 动态自定义相册主题
1392
                    .externalPictureVideo(TextUtils.isEmpty(mLocalMedia.getAndroidQToPath()) ? mLocalMedia.getPath() : mLocalMedia.getAndroidQToPath());
1432
1433
            ArrayList<LocalMedia> list = new ArrayList<>();
1434
            list.add(mLocalMedia);
1435
            PictureSelector.create(this)
1436
                    .openPreview()
1437
                    .setImageEngine(GlideEngine.createGlideEngine())
1438
                    .setVideoPlayerEngine(new IjkPlayerEngine())
1439
                    .setSelectorUIStyle(PictureUtlis.getStyle())
1440
                    .isPreviewFullScreenMode(false)
1441
                    .isVideoPauseResumePlay(true)
1442
                    .isAutoVideoPlay(true)
1443
                    .isLoopAutoVideoPlay(true)
1444
                    .startActivityPreview(0,false, list);
1393
        }
1445
        }
1394
    }
1446
    }
1395
}
1447
}

+ 72 - 61
app/src/main/java/com/electric/chargingpile/activity/ClaimSurveyTwoActivity.java

75
import com.electric.chargingpile.util.Bimp;
75
import com.electric.chargingpile.util.Bimp;
76
import com.electric.chargingpile.util.DES3;
76
import com.electric.chargingpile.util.DES3;
77
import com.electric.chargingpile.util.FileUtils;
77
import com.electric.chargingpile.util.FileUtils;
78
import com.electric.chargingpile.util.ImageCropEngine;
79
import com.electric.chargingpile.util.ImageFileCompressEngine;
78
import com.electric.chargingpile.util.ImageItem;
80
import com.electric.chargingpile.util.ImageItem;
81
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
82
import com.electric.chargingpile.util.MeSandboxFileEngine;
79
import com.electric.chargingpile.util.OkHttpUtil;
83
import com.electric.chargingpile.util.OkHttpUtil;
80
import com.electric.chargingpile.util.PhotoUtils;
84
import com.electric.chargingpile.util.PhotoUtils;
85
import com.electric.chargingpile.util.PictureUtlis;
81
import com.electric.chargingpile.util.PublicWay;
86
import com.electric.chargingpile.util.PublicWay;
82
import com.electric.chargingpile.util.Res;
87
import com.electric.chargingpile.util.Res;
83
import com.electric.chargingpile.util.SharedPreferencesUtil;
88
import com.electric.chargingpile.util.SharedPreferencesUtil;
90
import com.google.android.gms.appindexing.AppIndex;
95
import com.google.android.gms.appindexing.AppIndex;
91
import com.google.android.gms.appindexing.Thing;
96
import com.google.android.gms.appindexing.Thing;
92
import com.google.android.gms.common.api.GoogleApiClient;
97
import com.google.android.gms.common.api.GoogleApiClient;
93
import com.luck.picture.lib.PictureSelector;
98
94
import com.luck.picture.lib.animators.AnimationType;
99
import com.luck.picture.lib.animators.AnimationType;
100
import com.luck.picture.lib.basic.PictureSelector;
95
import com.luck.picture.lib.config.PictureConfig;
101
import com.luck.picture.lib.config.PictureConfig;
96
import com.luck.picture.lib.config.PictureMimeType;
102
import com.luck.picture.lib.config.PictureMimeType;
103
import com.luck.picture.lib.config.SelectMimeType;
104
import com.luck.picture.lib.config.SelectModeConfig;
97
import com.luck.picture.lib.entity.LocalMedia;
105
import com.luck.picture.lib.entity.LocalMedia;
98
import com.squareup.okhttp.Request;
106
import com.squareup.okhttp.Request;
99
import com.squareup.okhttp.Response;
107
import com.squareup.okhttp.Response;
1830
1838
1831
    public void photo() {
1839
    public void photo() {
1832
        PictureSelector.create(this)
1840
        PictureSelector.create(this)
1833
                .openCamera(PictureMimeType.ofImage())
1834
                .selectionMode(PictureConfig.SINGLE)
1835
                .isSingleDirectReturn(true)
1836
                .isCompress(true)//是否压缩
1837
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
1838
                .isGif(false)//是否显示gif
1839
                .isAndroidQTransform(true)
1840
                .imageEngine(GlideEngine.createGlideEngine())
1841
                .isWeChatStyle(false)// 是否开启微信图片选择风格
1842
                .isUseCustomCamera(false)// 是否使用自定义相机
1843
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
1844
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
1845
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
1846
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
1847
                .imageSpanCount(4)// 每行显示个数
1848
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
1849
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
1850
                .isEnableCrop(true)
1851
                .rotateEnabled(false)//裁剪是否可旋转图片
1852
                .freeStyleCropEnabled(true)// 裁剪框拖动模式
1853
                //.isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
1854
                .circleDimmedLayer(false)// 是否开启圆形裁剪
1855
                .isDragFrame(true)//是否可拖动裁剪框(固定)
1856
                .showCropFrame(true)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
1857
                .showCropGrid(true)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
1841
                .openGallery(SelectMimeType.ofImage())
1842
                .setSelectorUIStyle(PictureUtlis.getStyle())
1843
                .setImageEngine(GlideEngine.createGlideEngine())
1844
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
1845
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
1846
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
1847
                .setSelectionMode(SelectModeConfig.SINGLE)
1848
                .setMaxSelectNum(1)
1849
                .setFilterMinFileSize(1) //过滤最小文件
1850
                .isEmptyResultReturn(true) //支持未选择返回
1851
                .setImageSpanCount(4)
1852
                .isPageStrategy(true)   // 是否开启分页模式
1853
                .isDisplayCamera(true) //是否显示相机入口
1854
                .isPreviewFullScreenMode(true)//预览点击全屏效果
1855
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
1856
                .isEmptyResultReturn(true)//支持未选择返回
1857
                .isWithSelectVideoImage(false)//是否支持视频图片同选
1858
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
1859
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
1860
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
1861
                .isGif(false)// 是否显示gif文件
1862
                .isWebp(true)// 是否显示webp文件
1863
                .isBmp(true)//是否显示bmp文件
1864
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
1865
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
1866
                .isFastSlidingSelect(true) //快速滑动选择
1867
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
1868
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
1869
                .isPreviewImage(true)//是否预览图片
1870
                .setCropEngine(new ImageCropEngine(1F,1F,true))
1858
                .forResult(PHOTO_REQUEST_CAMERA);
1871
                .forResult(PHOTO_REQUEST_CAMERA);
1859
1872
1860
    }
1873
    }
1861
    private void openPhotoAlbum() {
1874
    private void openPhotoAlbum() {
1862
        PictureSelector.create(this)
1875
        PictureSelector.create(this)
1863
                .openGallery(PictureMimeType.ofImage())
1864
                .isCamera(false)//列表是否显示拍照按钮
1865
                .selectionMode(PictureConfig.SINGLE)
1866
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
1867
                .isCompress(true)//是否压缩
1868
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
1869
                .isGif(false)//是否显示gif
1870
                .isAndroidQTransform(true)
1871
                .imageEngine(GlideEngine.createGlideEngine())
1872
                .isWeChatStyle(false)// 是否开启微信图片选择风格
1873
                .isUseCustomCamera(false)// 是否使用自定义相机
1874
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
1875
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
1876
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
1877
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
1878
                .imageSpanCount(4)// 每行显示个数
1879
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
1880
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
1881
                .rotateEnabled(false)//裁剪是否可旋转图片
1882
                .isEnableCrop(true)
1883
                .rotateEnabled(false)//裁剪是否可旋转图片
1884
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
1885
                .freeStyleCropEnabled(true)// 裁剪框拖动模式
1886
               // .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
1887
                .circleDimmedLayer(true)// 是否开启圆形裁剪
1888
                .isDragFrame(true)//是否可拖动裁剪框(固定)
1889
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
1890
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
1876
                .openGallery(SelectMimeType.ofImage())
1877
                .setSelectorUIStyle(PictureUtlis.getStyle())
1878
                .setImageEngine(GlideEngine.createGlideEngine())
1879
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
1880
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
1881
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
1882
                .setSelectionMode(SelectModeConfig.SINGLE)
1883
                .setMaxSelectNum(1)
1884
                .setFilterMinFileSize(1) //过滤最小文件
1885
                .isEmptyResultReturn(true) //支持未选择返回
1886
                .setImageSpanCount(4)
1887
                .isPageStrategy(true)   // 是否开启分页模式
1888
                .isDisplayCamera(true) //是否显示相机入口
1889
                .isPreviewFullScreenMode(true)//预览点击全屏效果
1890
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
1891
                .isEmptyResultReturn(true)//支持未选择返回
1892
                .isWithSelectVideoImage(false)//是否支持视频图片同选
1893
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
1894
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
1895
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
1896
                .isGif(false)// 是否显示gif文件
1897
                .isWebp(true)// 是否显示webp文件
1898
                .isBmp(true)//是否显示bmp文件
1899
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
1900
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
1901
                .isFastSlidingSelect(true) //快速滑动选择
1902
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
1903
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
1904
                .isPreviewImage(true)//是否预览图片
1905
                .setCropEngine(new ImageCropEngine(1F,1F,true))
1891
                .forResult(PHOTO_REQUEST_GALLERY);
1906
                .forResult(PHOTO_REQUEST_GALLERY);
1892
    }
1907
    }
1893
1908
1907
        //���ѡȡ
1922
        //���ѡȡ
1908
        if (resultCode == Activity.RESULT_OK){
1923
        if (resultCode == Activity.RESULT_OK){
1909
            if (requestCode == PHOTO_REQUEST_CAMERA || requestCode == PHOTO_REQUEST_GALLERY) {
1924
            if (requestCode == PHOTO_REQUEST_CAMERA || requestCode == PHOTO_REQUEST_GALLERY) {
1910
                List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
1925
                List<LocalMedia> medias = PictureSelector.obtainSelectorList(data);
1911
                if (medias != null && medias.size() > 0) {
1926
                if (medias != null && medias.size() > 0) {
1912
                    String path = "";
1913
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
1914
                        path = medias.get(0).getAndroidQToPath();
1915
                    } else {
1916
                        path = medias.get(0).getPath();
1917
                    }
1927
                    String path = Util.getCompressAbsolutePath(medias.get(0));
1928
1918
                    Bitmap bitmap = BitmapFactory.decodeFile(path);
1929
                    Bitmap bitmap = BitmapFactory.decodeFile(path);
1919
                    ImageItem takePhoto = new ImageItem();
1930
                    ImageItem takePhoto = new ImageItem();
1920
                    takePhoto.setBitmap(bitmap);
1931
                    takePhoto.setBitmap(bitmap);

+ 0 - 154
app/src/main/java/com/electric/chargingpile/activity/CompletePhotoActivity.java

1
package com.electric.chargingpile.activity;
2

3
import android.app.Activity;
4
/**
5
 * 已废弃
6
 * */
7
@Deprecated
8
public class CompletePhotoActivity extends Activity {
9
 /*   LinearLayout ll_addMore_photo;
10
    private static String srcPath = "";
11
    private ImageView image, updatePhoto_moveback;
12
    private File mPhotoFile;
13

14
    @Override
15
    protected void onCreate(Bundle savedInstanceState) {
16
        super.onCreate(savedInstanceState);
17
        setContentView(R.layout.activity_complete_photo);
18
        init();
19
    }
20

21
    private void init() {
22
        ll_addMore_photo = (LinearLayout) findViewById(R.id.ll_addMore_photo);
23
        ll_addMore_photo.setOnClickListener(this);
24

25
        image = (ImageView) findViewById(R.id.chargingpile_photoO);
26
        updatePhoto_moveback = (ImageView) findViewById(R.id.updatePhoto_moveback);
27
        updatePhoto_moveback.setOnClickListener(this);
28
    }
29

30
    @Override
31
    public void onClick(View view) {
32
        switch (view.getId()) {
33
            case R.id.ll_addMore_photo:
34
                String[] cameraSelect = {"拍照", "从相册选取"};
35
                new AlertDialog.Builder(CompletePhotoActivity.this)
36
                        .setTitle("提示")
37
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
38
                            @Override
39
                            public void onClick(DialogInterface dialog, int which) {
40
                                dialog.cancel();
41
                            }
42
                        })
43
                        .setItems(cameraSelect,
44
                                new DialogInterface.OnClickListener() {
45

46
                                    @Override
47
                                    public void onClick(DialogInterface dialog,
48
                                                        int which) {
49

50
                                        switch (which) {
51
                                            case 0:
52
                                                // Intent intent1 = new Intent(
53
                                                // MediaStore.ACTION_IMAGE_CAPTURE);
54
                                                // intent1.putExtra(
55
                                                // MediaStore.EXTRA_OUTPUT,
56
                                                // Uri.fromFile(new File(
57
                                                // Environment
58
                                                // .getExternalStorageDirectory(),
59
                                                // "zhanimage.jpg")));
60
                                                // startActivityForResult(intent1, 1);
61

62
                                                Intent openCameraIntent = new Intent(
63
                                                        MediaStore.ACTION_IMAGE_CAPTURE);
64
                                                Uri imageUri = Uri.fromFile(new File(
65
                                                        Environment
66
                                                                .getExternalStorageDirectory(),
67
                                                        "zhanimage.jpg"));
68
                                                openCameraIntent.putExtra(
69
                                                        MediaStore.EXTRA_OUTPUT,
70
                                                        imageUri);
71
                                                startActivityForResult(
72
                                                        openCameraIntent, 1);
73
                                                break;
74
                                            case 1:
75
                                                Intent intent = new Intent();
76
                                                intent.setType("image/*");
77
                                                intent.setAction(Intent.ACTION_GET_CONTENT);
78
                                                startActivityForResult(intent, 2);
79
                                                break;
80

81
                                            default:
82
                                                break;
83
                                        }
84
                                    }
85
                                }).show();
86
                break;
87
            case R.id.updatePhoto_moveback:
88
                setResult(RESULT_OK);
89
                this.finish();
90
                break;
91
        }
92
    }
93

94
    @Override
95
    public void onBackPressed() {
96
        super.onBackPressed();
97
        setResult(RESULT_OK);
98
        this.finish();
99
    }
100

101
    @Override
102
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
103
        super.onActivityResult(requestCode, resultCode, data);
104
        if (resultCode != RESULT_OK) {
105
            return;
106
        }
107
        if (requestCode == 1) {
108
            if (resultCode == Activity.RESULT_OK) {
109
                String sdStatus = Environment.getExternalStorageState();
110
                if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
111
                    return;
112
                }
113
                Bitmap bitmap = BitmapFactory.decodeFile(Environment
114
                        .getExternalStorageDirectory() + "/zhanimage.jpg");
115
                Bitmap newBitmap = ImageTools.zoomBitmap(bitmap,
116
                        bitmap.getWidth() / 5, bitmap.getHeight() / 5);
117
                bitmap.recycle();
118

119
                ImageTools.savePhotoToSDCard(newBitmap, Environment
120
                                .getExternalStorageDirectory().getAbsolutePath(),
121
                        "zhanimage");
122
                srcPath = Environment.getExternalStorageDirectory()
123
                        .getAbsolutePath() + "/zhanimage.png";
124
                Log.e("ccccccccccccc", srcPath);
125
                image.setImageBitmap(BitmapFactory.decodeFile(srcPath));
126

127
            }
128
        } else if (requestCode == 2) {
129
            if (data.getData() != null) {
130
                Uri mImageCaptureUri = data.getData();
131
                ContentResolver cr = this.getContentResolver();
132
                Cursor c = cr.query(mImageCaptureUri, null, null, null, null);
133
                c.moveToFirst();
134
                srcPath = c.getString(c.getColumnIndex("_data"));
135
                if (TextUtils.isEmpty(srcPath)) {
136
                    return;
137
                }
138
                mPhotoFile = new File(srcPath);
139
                Bitmap bmp = BitmapFactory.decodeFile(srcPath);
140
                Bitmap newBitmap = ImageTools.zoomBitmap(bmp,
141
                        bmp.getWidth() / 5, bmp.getHeight() / 5);
142
                bmp.recycle();
143

144
                ImageTools.savePhotoToSDCard(newBitmap, Environment
145
                                .getExternalStorageDirectory().getAbsolutePath(),
146
                        "zhanimage");
147
                srcPath = Environment.getExternalStorageDirectory()
148
                        .getAbsolutePath() + "/zhanimage.png";
149
                Log.e("ccccccccccccc", srcPath);
150
                image.setImageBitmap(BitmapFactory.decodeFile(srcPath));
151
            }
152
        }
153
    }*/
154
}

+ 0 - 1
app/src/main/java/com/electric/chargingpile/activity/CreditActivity.java

449
        mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
449
        mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
450
        mWebView.setDrawingCacheEnabled(true);
450
        mWebView.setDrawingCacheEnabled(true);
451
451
452
        settings.setAppCacheEnabled(true);
453
        settings.setDatabaseEnabled(true);
452
        settings.setDatabaseEnabled(true);
454
        settings.setDomStorageEnabled(true);
453
        settings.setDomStorageEnabled(true);
455
    }
454
    }

+ 74 - 75
app/src/main/java/com/electric/chargingpile/activity/EditAnswerActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import static com.hjq.permissions.Permission.CAMERA;
4
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
5
3
import android.Manifest;
6
import android.Manifest;
4
import android.app.ProgressDialog;
7
import android.app.ProgressDialog;
5
import android.content.Context;
8
import android.content.Context;
10
import android.os.Build;
13
import android.os.Build;
11
import android.os.Bundle;
14
import android.os.Bundle;
12
import android.os.Handler;
15
import android.os.Handler;
16
import android.provider.MediaStore;
13
import android.util.DisplayMetrics;
17
import android.util.DisplayMetrics;
14
import android.util.Log;
18
import android.util.Log;
15
import android.util.TypedValue;
19
import android.util.TypedValue;
32
import com.electric.chargingpile.util.AndroidBug5497Workaround;
36
import com.electric.chargingpile.util.AndroidBug5497Workaround;
33
import com.electric.chargingpile.util.BarColorUtil;
37
import com.electric.chargingpile.util.BarColorUtil;
34
import com.electric.chargingpile.util.FileUtils;
38
import com.electric.chargingpile.util.FileUtils;
39
import com.electric.chargingpile.util.ImageFileCompressEngine;
35
import com.electric.chargingpile.util.ImageUitl;
40
import com.electric.chargingpile.util.ImageUitl;
36
import com.electric.chargingpile.util.JsonUtils;
41
import com.electric.chargingpile.util.JsonUtils;
42
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
43
import com.electric.chargingpile.util.MeSandboxFileEngine;
44
import com.electric.chargingpile.util.PictureUtlis;
37
import com.electric.chargingpile.util.StringUtils;
45
import com.electric.chargingpile.util.StringUtils;
38
import com.electric.chargingpile.util.ToastUtil;
46
import com.electric.chargingpile.util.ToastUtil;
39
import com.electric.chargingpile.util.Util;
47
import com.electric.chargingpile.util.Util;
40
import com.electric.chargingpile.view.xrichtext.RichTextEditorForA;
48
import com.electric.chargingpile.view.xrichtext.RichTextEditorForA;
41
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
49
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
42
import com.luck.picture.lib.PictureSelector;
50
51
import com.hjq.permissions.OnPermissionCallback;
52
import com.hjq.permissions.XXPermissions;
43
import com.luck.picture.lib.animators.AnimationType;
53
import com.luck.picture.lib.animators.AnimationType;
54
import com.luck.picture.lib.basic.PictureSelector;
44
import com.luck.picture.lib.config.PictureConfig;
55
import com.luck.picture.lib.config.PictureConfig;
45
import com.luck.picture.lib.config.PictureMimeType;
56
import com.luck.picture.lib.config.PictureMimeType;
57
import com.luck.picture.lib.config.SelectMimeType;
58
import com.luck.picture.lib.config.SelectModeConfig;
46
import com.luck.picture.lib.entity.LocalMedia;
59
import com.luck.picture.lib.entity.LocalMedia;
47
import com.zhy.http.okhttp.OkHttpUtils;
60
import com.zhy.http.okhttp.OkHttpUtils;
48
import com.zhy.http.okhttp.callback.StringCallback;
61
import com.zhy.http.okhttp.callback.StringCallback;
66
import pub.devrel.easypermissions.EasyPermissions;
79
import pub.devrel.easypermissions.EasyPermissions;
67
import top.zibin.luban.Luban;
80
import top.zibin.luban.Luban;
68
import top.zibin.luban.OnCompressListener;
81
import top.zibin.luban.OnCompressListener;
69
70
public class EditAnswerActivity extends AppCompatActivity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
82
@Deprecated
83
public class EditAnswerActivity extends AppCompatActivity implements View.OnClickListener {
71
    private static final String TAG = "EditAnswerActivity";
84
    private static final String TAG = "EditAnswerActivity";
72
    private TextView tv_submit, tv_back, tv_point;
85
    private TextView tv_submit, tv_back, tv_point;
73
    private RichTextEditorForA et_new_content;
86
    private RichTextEditorForA et_new_content;
331
                try {
344
                try {
332
                    et_new_content.measure(0, 0);
345
                    et_new_content.measure(0, 0);
333
//                    List<Uri> uriList = Matisse.obtainResult(data);
346
//                    List<Uri> uriList = Matisse.obtainResult(data);
334
                   List<LocalMedia> selectionData= PictureSelector.obtainMultipleResult(data);
347
                   List<LocalMedia> selectionData= PictureSelector.obtainSelectorList(data);
335
                    if (selectionData!=null && selectionData.size()>0){
348
                    if (selectionData!=null && selectionData.size()>0){
336
                        LocalMedia media = selectionData.get(0);
349
                        LocalMedia media = selectionData.get(0);
337
350
338
//                        Uri uri = uriList.get(0);
339
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
340
//                        File file = FileUtils.from(EditAnswerActivity.this, uri);
341
//
342
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
343
//                        bitmap = imageZoom(bitmap);
344
                        String path="";
345
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
346
                            path= media.getAndroidQToPath();
347
                        }else{
348
                            path=media.getPath();
349
                        }
351
                        String path = Util.getCompressAbsolutePath(media);
352
350
                        insertBitmap = imageZoom(BitmapFactory.decodeFile(path));
353
                        insertBitmap = imageZoom(BitmapFactory.decodeFile(path));
351
354
352
                        u_path = path;
355
                        u_path = path;
400
            }
403
            }
401
404
402
            @Override
405
            @Override
403
            public void onSuccess(File file) {
406
            public void onSuccess(int index, File compressFile) {
404
                uploadPic(file.getPath(), u_path);
407
                uploadPic(file.getPath(), u_path);
405
            }
408
            }
406
409
407
            @Override
410
            @Override
408
            public void onError(Throwable e) {
411
            public void onError(int index, Throwable e) {
409
                Log.e(TAG, "onError: " + e.getMessage());
412
                Log.e(TAG, "onError: " + e.getMessage());
410
            }
413
            }
411
        }).launch();
414
        }).launch();
513
     * 调用图库选择
516
     * 调用图库选择
514
     */
517
     */
515
    private void callGallery() {
518
    private void callGallery() {
516
/*
517
        Matisse.from(EditAnswerActivity.this)
518
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
519
                .showSingleMediaType(true)
520
                .countable(true)
521
                .maxSelectable(1)
522
                .capture(true)
523
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
524
                .imageEngine(new GlideEngine())
525
                .forResult(REQUEST_CODE_CHOOSE);
526
*/
527
528
        PictureSelector.create(this)
519
        PictureSelector.create(this)
529
                .openGallery(PictureMimeType.ofImage())
530
                .maxSelectNum(1)
531
                .selectionMode(PictureConfig.SINGLE)
532
                .isSingleDirectReturn(true)
533
                .isCompress(true)//是否压缩
534
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
535
                .isGif(true)//是否显示gif
536
                .isAndroidQTransform(true)
537
                .imageEngine(GlideEngine.createGlideEngine())
538
                .isWeChatStyle(false)// 是否开启微信图片选择风格
539
                .isUseCustomCamera(false)// 是否使用自定义相机
540
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
541
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
542
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
543
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
544
                .imageSpanCount(4)// 每行显示个数
545
                .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
546
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
520
                .openGallery(SelectMimeType.ofImage())
521
                .setSelectorUIStyle(PictureUtlis.getStyle())
522
                .setImageEngine(GlideEngine.createGlideEngine())
523
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
524
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
525
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
526
                .setSelectionMode(SelectModeConfig.SINGLE)
527
                .setMaxSelectNum(1)
528
                .isEmptyResultReturn(true) //支持未选择返回
529
                .setImageSpanCount(4)
530
                .isPageStrategy(true)   // 是否开启分页模式
531
                .isDisplayCamera(true) //是否显示相机入口
532
                .isPreviewFullScreenMode(true)//预览点击全屏效果
533
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
534
                .isEmptyResultReturn(true)//支持未选择返回
535
                .isWithSelectVideoImage(false)//是否支持视频图片同选
536
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
537
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
538
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
539
                .isGif(false)// 是否显示gif文件
540
                .isWebp(true)// 是否显示webp文件
541
                .isBmp(true)//是否显示bmp文件
542
                .setFilterMinFileSize(1) //过滤最小文件
543
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
544
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
545
                .isFastSlidingSelect(true) //快速滑动选择
546
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
547
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
548
                .isPreviewImage(true)//是否预览图片
547
                .forResult(REQUEST_CODE_CHOOSE);
549
                .forResult(REQUEST_CODE_CHOOSE);
548
550
549
    }
551
    }
671
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, metrics);
673
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, metrics);
672
    }
674
    }
673
675
674
    @Override
675
    public void onPermissionsGranted(int requestCode, List<String> perms) {
676
    }
677
678
    @Override
679
    public void onPermissionsDenied(int requestCode, List<String> perms) {
680
    }
681
682
    @AfterPermissionGranted(RC_ALBUM_PERM)
683
    public void permissionTask() {
676
    public void permissionTask() {
684
        if (isPermissionOK()) {
685
            callGallery();
686
        } else {
687
            EasyPermissions.requestPermissions(
688
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
689
                    RC_ALBUM_PERM,
690
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
691
                    Manifest.permission.READ_EXTERNAL_STORAGE,
692
                    Manifest.permission.CAMERA);
693
        }
694
    }
695
696
    private boolean isPermissionOK() {
697
        return EasyPermissions.hasPermissions(this,
698
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
699
                Manifest.permission.READ_EXTERNAL_STORAGE,
700
                Manifest.permission.CAMERA
701
        );
677
        String[] callPhone  =
678
                new String[]{READ_MEDIA_IMAGES, CAMERA};
679
        XXPermissions.with(this)
680
                // 申请单个权限
681
                .permission(callPhone)
682
                .request(new OnPermissionCallback() {
683
                    @Override
684
                    public void onGranted(List<String> permissions, boolean all) {
685
                        if (all) {
686
                            callGallery();
687
                        }else{
688
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
689
                        }
690
                    }
691
                    @Override
692
                    public void onDenied(List<String> permissions, boolean never) {
693
                        if (never) {
694
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
695
                            XXPermissions.startPermissionActivity(EditAnswerActivity.this, permissions);
696
                        } else {
697
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
698
                        }
699
                    }
700
                });
702
    }
701
    }
703
}
702
}

+ 73 - 69
app/src/main/java/com/electric/chargingpile/activity/EditQuestionTwoActivity.java

14
14
15
import androidx.appcompat.app.AppCompatActivity;
15
import androidx.appcompat.app.AppCompatActivity;
16
16
17
import android.provider.MediaStore;
17
import android.util.Log;
18
import android.util.Log;
18
import android.view.KeyEvent;
19
import android.view.KeyEvent;
19
import android.view.View;
20
import android.view.View;
31
import com.electric.chargingpile.engine.GlideEngine;
32
import com.electric.chargingpile.engine.GlideEngine;
32
import com.electric.chargingpile.util.AndroidBug5497Workaround;
33
import com.electric.chargingpile.util.AndroidBug5497Workaround;
33
import com.electric.chargingpile.util.BarColorUtil;
34
import com.electric.chargingpile.util.BarColorUtil;
35
import com.electric.chargingpile.util.Bimp;
34
import com.electric.chargingpile.util.FileUtils;
36
import com.electric.chargingpile.util.FileUtils;
37
import com.electric.chargingpile.util.ImageFileCompressEngine;
35
import com.electric.chargingpile.util.ImageUitl;
38
import com.electric.chargingpile.util.ImageUitl;
36
import com.electric.chargingpile.util.JsonUtils;
39
import com.electric.chargingpile.util.JsonUtils;
40
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
41
import com.electric.chargingpile.util.MeSandboxFileEngine;
42
import com.electric.chargingpile.util.PictureUtlis;
37
import com.electric.chargingpile.util.ScreenUtils;
43
import com.electric.chargingpile.util.ScreenUtils;
38
import com.electric.chargingpile.util.StringUtils;
44
import com.electric.chargingpile.util.StringUtils;
39
import com.electric.chargingpile.util.ToastUtil;
45
import com.electric.chargingpile.util.ToastUtil;
41
import com.electric.chargingpile.view.CarTypeDialog;
47
import com.electric.chargingpile.view.CarTypeDialog;
42
import com.electric.chargingpile.view.xrichtext.RichTextEditor;
48
import com.electric.chargingpile.view.xrichtext.RichTextEditor;
43
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
49
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
44
import com.luck.picture.lib.PictureSelector;
50
51
import com.hjq.permissions.OnPermissionCallback;
52
import com.hjq.permissions.XXPermissions;
45
import com.luck.picture.lib.animators.AnimationType;
53
import com.luck.picture.lib.animators.AnimationType;
54
import com.luck.picture.lib.basic.PictureSelector;
46
import com.luck.picture.lib.config.PictureConfig;
55
import com.luck.picture.lib.config.PictureConfig;
47
import com.luck.picture.lib.config.PictureMimeType;
56
import com.luck.picture.lib.config.PictureMimeType;
57
import com.luck.picture.lib.config.SelectMimeType;
58
import com.luck.picture.lib.config.SelectModeConfig;
48
import com.luck.picture.lib.entity.LocalMedia;
59
import com.luck.picture.lib.entity.LocalMedia;
49
import com.umeng.analytics.MobclickAgent;
60
import com.umeng.analytics.MobclickAgent;
50
61
73
import top.zibin.luban.OnCompressListener;
84
import top.zibin.luban.OnCompressListener;
74
85
75
import static com.electric.chargingpile.activity.EditAnswerActivity.dpToPx;
86
import static com.electric.chargingpile.activity.EditAnswerActivity.dpToPx;
76
77
public class EditQuestionTwoActivity extends AppCompatActivity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
87
import static com.hjq.permissions.Permission.CAMERA;
88
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
89
@Deprecated
90
public class EditQuestionTwoActivity extends AppCompatActivity implements View.OnClickListener {
78
    private static final String TAG = "EditQuestionTwoActivity";
91
    private static final String TAG = "EditQuestionTwoActivity";
79
    private TextView tv_submit, tv_back, tv_point;
92
    private TextView tv_submit, tv_back, tv_point;
80
    private RichTextEditor et_new_content;
93
    private RichTextEditor et_new_content;
358
371
359
                try {
372
                try {
360
                    et_new_content.measure(0, 0);
373
                    et_new_content.measure(0, 0);
361
                    List<LocalMedia> selectionData= PictureSelector.obtainMultipleResult(data);
374
                    List<LocalMedia> selectionData= PictureSelector.obtainSelectorList(data);
362
                    if (selectionData!=null && selectionData.size()>0) {
375
                    if (selectionData!=null && selectionData.size()>0) {
363
                        LocalMedia media = selectionData.get(0);
376
                        LocalMedia media = selectionData.get(0);
364
                        /*List<Uri> uriList = Matisse.obtainResult(data);
377
                        /*List<Uri> uriList = Matisse.obtainResult(data);
369
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
382
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
370
                        bitmap = imageZoom(bitmap);
383
                        bitmap = imageZoom(bitmap);
371
                        insertBitmap = bitmap;*/
384
                        insertBitmap = bitmap;*/
372
                        String path="";
373
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
374
                            path= media.getAndroidQToPath();
375
                        }else{
376
                            path=media.getPath();
377
                        }
385
                        String path = Util.getCompressAbsolutePath(media);
378
                        insertBitmap = imageZoom(BitmapFactory.decodeFile(path));
386
                        insertBitmap = imageZoom(BitmapFactory.decodeFile(path));
379
387
380
                        u_path = path;
388
                        u_path = path;
433
            }
441
            }
434
442
435
            @Override
443
            @Override
436
            public void onSuccess(File file) {
444
            public void onSuccess(int index, File compressFile) {
437
                Log.e(TAG, "onSuccess: path= " + file.getPath());
445
                Log.e(TAG, "onSuccess: path= " + file.getPath());
438
                Log.e(TAG, "onSuccess: length= " + file.length() / 1024 + "kb");
446
                Log.e(TAG, "onSuccess: length= " + file.length() / 1024 + "kb");
439
                uploadPic(file.getPath(), u_path);
447
                uploadPic(file.getPath(), u_path);
440
            }
448
            }
441
449
442
            @Override
450
            @Override
443
            public void onError(Throwable e) {
451
            public void onError(int index, Throwable e) {
444
                Log.e(TAG, "onError: " + e.getMessage());
452
                Log.e(TAG, "onError: " + e.getMessage());
445
            }
453
            }
446
        }).launch();
454
        }).launch();
550
     * 调用图库选择
558
     * 调用图库选择
551
     */
559
     */
552
    private void callGallery() {
560
    private void callGallery() {
553
//        Matisse.from(EditQuestionTwoActivity.this)
554
//                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
555
//                .showSingleMediaType(true)
556
//                .countable(true)
557
//                .maxSelectable(1)
558
//                .capture(true)
559
//                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
560
//                .imageEngine(new GlideEngine())
561
//                .forResult(REQUEST_CODE_CHOOSE);
562
563
        PictureSelector.create(this)
561
        PictureSelector.create(this)
564
                .openGallery(PictureMimeType.ofImage())
565
                .maxSelectNum(1)
566
                .selectionMode(PictureConfig.SINGLE)
567
                .isSingleDirectReturn(true)
568
                .isCompress(true)//是否压缩
569
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
570
                .isGif(true)//是否显示gif
571
                .isAndroidQTransform(true)
572
                .imageEngine(GlideEngine.createGlideEngine())
573
                .isWeChatStyle(false)// 是否开启微信图片选择风格
574
                .isUseCustomCamera(false)// 是否使用自定义相机
575
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
576
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
577
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
578
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
579
                .imageSpanCount(4)// 每行显示个数
580
                .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
581
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
562
                .openGallery(SelectMimeType.ofImage())
563
                .setSelectorUIStyle(PictureUtlis.getStyle())
564
                .setImageEngine(GlideEngine.createGlideEngine())
565
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
566
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
567
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
568
                .setSelectionMode(SelectModeConfig.SINGLE)
569
                .setMaxSelectNum(1)
570
                .isEmptyResultReturn(true) //支持未选择返回
571
                .setImageSpanCount(4)
572
                .isPageStrategy(true)   // 是否开启分页模式
573
                .isDisplayCamera(true) //是否显示相机入口
574
                .isPreviewFullScreenMode(true)//预览点击全屏效果
575
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
576
                .isEmptyResultReturn(true)//支持未选择返回
577
                .isWithSelectVideoImage(false)//是否支持视频图片同选
578
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
579
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
580
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
581
                .isGif(false)// 是否显示gif文件
582
                .isWebp(true)// 是否显示webp文件
583
                .isBmp(true)//是否显示bmp文件
584
                .setFilterMinFileSize(1) //过滤最小文件
585
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
586
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
587
                .isFastSlidingSelect(true) //快速滑动选择
588
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
589
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
590
                .isPreviewImage(true)//是否预览图片
582
                .forResult(REQUEST_CODE_CHOOSE);
591
                .forResult(REQUEST_CODE_CHOOSE);
583
584
    }
592
    }
585
593
586
    @Override
594
    @Override
728
        MobclickAgent.onResume(this);
736
        MobclickAgent.onResume(this);
729
    }
737
    }
730
738
731
    @Override
732
    public void onPermissionsGranted(int requestCode, List<String> perms) {
733
734
    }
735
736
    @Override
737
    public void onPermissionsDenied(int requestCode, List<String> perms) {
738
739
    }
740
739
741
    @AfterPermissionGranted(RC_ALBUM_PERM)
740
    @AfterPermissionGranted(RC_ALBUM_PERM)
742
    public void permissionTask() {
741
    public void permissionTask() {
743
        if (isPermissionOK()) {
744
            callGallery();
745
        } else {
746
            EasyPermissions.requestPermissions(
747
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
748
                    RC_ALBUM_PERM,
749
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
750
                    Manifest.permission.READ_EXTERNAL_STORAGE,
751
                    Manifest.permission.CAMERA
752
            );
753
        }
754
    }
755
756
    private boolean isPermissionOK() {
757
        return EasyPermissions.hasPermissions(this,
758
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
759
                Manifest.permission.READ_EXTERNAL_STORAGE,
760
                Manifest.permission.CAMERA
761
        );
742
        String[] callPhone  =
743
                new String[]{READ_MEDIA_IMAGES, CAMERA};
744
        XXPermissions.with(this)
745
                // 申请单个权限
746
                .permission(callPhone)
747
                .request(new OnPermissionCallback() {
748
                    @Override
749
                    public void onGranted(List<String> permissions, boolean all) {
750
                        if (all) {
751
                            callGallery();
752
                        }else{
753
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
754
                        }
755
                    }
756
                    @Override
757
                    public void onDenied(List<String> permissions, boolean never) {
758
                        if (never) {
759
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
760
                            XXPermissions.startPermissionActivity(EditQuestionTwoActivity.this, permissions);
761
                        } else {
762
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
763
                        }
764
                    }
765
                });
762
    }
766
    }
763
}
767
}

+ 70 - 69
app/src/main/java/com/electric/chargingpile/activity/FeedbackActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2

2

3
import static com.hjq.permissions.Permission.CAMERA;
4
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
5

3
import android.Manifest;
6
import android.Manifest;
4
import android.app.Activity;
7
import android.app.Activity;
5
import android.app.ProgressDialog;
8
import android.app.ProgressDialog;
21
import android.os.Handler;
24
import android.os.Handler;
22
import android.os.Message;
25
import android.os.Message;
23

26

27
import android.provider.MediaStore;
24
import android.text.Editable;
28
import android.text.Editable;
25
import android.text.TextWatcher;
29
import android.text.TextWatcher;
26
import android.util.Base64;
30
import android.util.Base64;
50
import com.electric.chargingpile.util.BarColorUtil;
54
import com.electric.chargingpile.util.BarColorUtil;
51
import com.electric.chargingpile.util.Bimp;
55
import com.electric.chargingpile.util.Bimp;
52
import com.electric.chargingpile.util.FileUtils;
56
import com.electric.chargingpile.util.FileUtils;
57
import com.electric.chargingpile.util.ImageFileCompressEngine;
53
import com.electric.chargingpile.util.ImageItem;
58
import com.electric.chargingpile.util.ImageItem;
54
import com.electric.chargingpile.util.JsonUtils;
59
import com.electric.chargingpile.util.JsonUtils;
55
import com.electric.chargingpile.util.LoadingDialog;
60
import com.electric.chargingpile.util.LoadingDialog;
61
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
62
import com.electric.chargingpile.util.MeSandboxFileEngine;
63
import com.electric.chargingpile.util.PictureUtlis;
56
import com.electric.chargingpile.util.PublicWay;
64
import com.electric.chargingpile.util.PublicWay;
57
import com.electric.chargingpile.util.Res;
65
import com.electric.chargingpile.util.Res;
58
import com.electric.chargingpile.util.ToastUtil;
66
import com.electric.chargingpile.util.ToastUtil;
59
import com.electric.chargingpile.util.UploadUtil;
67
import com.electric.chargingpile.util.UploadUtil;
60
import com.electric.chargingpile.util.Util;
68
import com.electric.chargingpile.util.Util;
61
import com.luck.picture.lib.PictureSelector;
69

70
import com.hjq.permissions.OnPermissionCallback;
71
import com.hjq.permissions.XXPermissions;
62
import com.luck.picture.lib.animators.AnimationType;
72
import com.luck.picture.lib.animators.AnimationType;
73
import com.luck.picture.lib.basic.PictureSelector;
63
import com.luck.picture.lib.config.PictureConfig;
74
import com.luck.picture.lib.config.PictureConfig;
64
import com.luck.picture.lib.config.PictureMimeType;
75
import com.luck.picture.lib.config.PictureMimeType;
76
import com.luck.picture.lib.config.SelectMimeType;
77
import com.luck.picture.lib.config.SelectModeConfig;
65
import com.luck.picture.lib.entity.LocalMedia;
78
import com.luck.picture.lib.entity.LocalMedia;
66
import com.umeng.analytics.MobclickAgent;
79
import com.umeng.analytics.MobclickAgent;
67

80

88
import pub.devrel.easypermissions.AfterPermissionGranted;
101
import pub.devrel.easypermissions.AfterPermissionGranted;
89
import pub.devrel.easypermissions.EasyPermissions;
102
import pub.devrel.easypermissions.EasyPermissions;
90

103

91
public class FeedbackActivity extends Activity implements OnClickListener, EasyPermissions.PermissionCallbacks {
104
public class FeedbackActivity extends Activity implements OnClickListener{
92
    private static final String TAG = "FeedbackActivity";
105
    private static final String TAG = "FeedbackActivity";
93
    private static final int PIC_NUM = 3;
106
    private static final int PIC_NUM = 3;
94
    private ImageView ivBack;
107
    private ImageView ivBack;
299
     * 调用图库选择
312
     * 调用图库选择
300
     */
313
     */
301
    private void callGallery() {
314
    private void callGallery() {
302
/*
303
        Matisse.from(FeedbackActivity.this)
304
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
305
                .showSingleMediaType(true)
306
                .countable(true)
307
                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
308
                .capture(true)
309
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
310
                .imageEngine(new GlideEngine())
311
                .forResult(REQUEST_CODE_CHOOSE);
312
*/
313

314
        PictureSelector.create(this)
315
        PictureSelector.create(this)
315
                .openGallery(PictureMimeType.ofImage())
316
                .maxSelectNum(PIC_NUM)
317
                .selectionMode(PictureConfig.MULTIPLE)
318
                .selectionData(mSelectionData)//是否传入已选图片
319
                .isCompress(true)//是否压缩
320
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
321
                .isGif(true)//是否显示gif
322
                .isAndroidQTransform(true)
323
                .imageEngine(GlideEngine.createGlideEngine())
324
                .isWeChatStyle(false)// 是否开启微信图片选择风格
325
                .isUseCustomCamera(false)// 是否使用自定义相机
326
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
327
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
328
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
329
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
330
                .imageSpanCount(4)// 每行显示个数
331
                .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
332
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
316
                .openGallery(SelectMimeType.ofImage())
317
                .setSelectorUIStyle(PictureUtlis.getStyle())
318
                .setImageEngine(GlideEngine.createGlideEngine())
319
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
320
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
321
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
322
                .setSelectionMode(SelectModeConfig.SINGLE)
323
                .setMaxSelectNum(1)
324
                .isEmptyResultReturn(true) //支持未选择返回
325
                .setImageSpanCount(4)
326
                .isPageStrategy(true)   // 是否开启分页模式
327
                .isDisplayCamera(true) //是否显示相机入口
328
                .isPreviewFullScreenMode(true)//预览点击全屏效果
329
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
330
                .isEmptyResultReturn(true)//支持未选择返回
331
                .isWithSelectVideoImage(false)//是否支持视频图片同选
332
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
333
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
334
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
335
                .isGif(false)// 是否显示gif文件
336
                .isWebp(true)// 是否显示webp文件
337
                .isBmp(true)//是否显示bmp文件
338
                .setFilterMinFileSize(1) //过滤最小文件
339
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
340
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
341
                .isFastSlidingSelect(true) //快速滑动选择
342
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
343
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
344
                .isPreviewImage(true)//是否预览图片
333
                .forResult(REQUEST_CODE_CHOOSE);
345
                .forResult(REQUEST_CODE_CHOOSE);
334

335

336
    }
346
    }
337

347

338
    @Override
348
    @Override
363

373

364
                try {
374
                try {
365
//                    List<Uri> uriList = Matisse.obtainResult(data);
375
//                    List<Uri> uriList = Matisse.obtainResult(data);
366
                    mSelectionData = PictureSelector.obtainMultipleResult(data);
376
                    mSelectionData = PictureSelector.obtainSelectorList(data);
367
                    for (LocalMedia media: mSelectionData) {
377
                    for (LocalMedia media: mSelectionData) {
368
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
378
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
369
//                        File file = FileUtils.from(FeedbackActivity.this, uri);
379
//                        File file = FileUtils.from(FeedbackActivity.this, uri);
370
//
380
//
371
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
381
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
372
//                        bitmap = imageZoom(bitmap);
382
//                        bitmap = imageZoom(bitmap);
373
                        String path="";
374
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
375
                            path= media.getAndroidQToPath();
376
                        }else{
377
                            path=media.getPath();
378
                        }
383
                        String path = Util.getCompressAbsolutePath(media);
379
                        ImageItem takePhoto = new ImageItem();
384
                        ImageItem takePhoto = new ImageItem();
380
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
385
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
381
                        Bimp.tempSelectBitmap.add(takePhoto);
386
                        Bimp.tempSelectBitmap.add(takePhoto);
726
                && (codePoint <= 0x10FFFF));
731
                && (codePoint <= 0x10FFFF));
727
    }
732
    }
728

733

729
    @Override
730
    public void onPermissionsGranted(int requestCode, List<String> perms) {
731

732
    }
733

734

734
    @Override
735
    public void onPermissionsDenied(int requestCode, List<String> perms) {
736

737
    }
738

735

739
    @AfterPermissionGranted(RC_ALBUM_PERM)
740
    public void permissionTask() {
736
    public void permissionTask() {
741
        if (isPermissionOK()) {
742
            callGallery();
743
        } else {
744
            EasyPermissions.requestPermissions(
745
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
746
                    RC_ALBUM_PERM,
747
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
748
                    Manifest.permission.READ_EXTERNAL_STORAGE,
749
                    Manifest.permission.CAMERA);
750
        }
751
    }
752

753
    private boolean isPermissionOK() {
754
        return EasyPermissions.hasPermissions(this,
755
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
756
                Manifest.permission.READ_EXTERNAL_STORAGE,
757
                Manifest.permission.CAMERA
758
        );
737
        String[] callPhone  =
738
                new String[]{READ_MEDIA_IMAGES, CAMERA};
739
        XXPermissions.with(this)
740
                // 申请单个权限
741
                .permission(callPhone)
742
                .request(new OnPermissionCallback() {
743
                    @Override
744
                    public void onGranted(List<String> permissions, boolean all) {
745
                        if (all) {
746
                            callGallery();
747
                        }else{
748
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
749
                        }
750
                    }
751
                    @Override
752
                    public void onDenied(List<String> permissions, boolean never) {
753
                        if (never) {
754
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
755
                            XXPermissions.startPermissionActivity(FeedbackActivity.this, permissions);
756
                        } else {
757
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
758
                        }
759
                    }
760
                });
759
    }
761
    }
760

761
}
762
}

+ 2 - 2
app/src/main/java/com/electric/chargingpile/activity/GalleryActivityFeedback.java

27
import java.io.ByteArrayOutputStream;
27
import java.io.ByteArrayOutputStream;
28
import java.util.ArrayList;
28
import java.util.ArrayList;
29
import java.util.List;
29
import java.util.List;
30
30
@Deprecated
31
public class GalleryActivityFeedback extends Activity {
31
public class GalleryActivityFeedback extends Activity {
32
    private Intent intent;
32
    private Intent intent;
33
    // 返回按钮
33
    // 返回按钮
161
            MobclickAgent.onEvent(getApplicationContext(), "1028");
161
            MobclickAgent.onEvent(getApplicationContext(), "1028");
162
            finish();
162
            finish();
163
            if (!TextUtils.isEmpty(type) && "1".equals(type)) {
163
            if (!TextUtils.isEmpty(type) && "1".equals(type)) {
164
                intent.setClass(GalleryActivityFeedback.this, PublishPicTopicActivity.class);
164
//                intent.setClass(GalleryActivityFeedback.this, PublishPicTopicActivity.class);
165
            } else {
165
            } else {
166
                intent.setClass(GalleryActivityFeedback.this, FeedbackActivity.class);
166
                intent.setClass(GalleryActivityFeedback.this, FeedbackActivity.class);
167
            }
167
            }

+ 2 - 1
app/src/main/java/com/electric/chargingpile/activity/ImageDisplayActivity.java

22
import com.electric.chargingpile.util.PublicWayFour;
22
import com.electric.chargingpile.util.PublicWayFour;
23
import com.electric.chargingpile.util.PublicWayONE;
23
import com.electric.chargingpile.util.PublicWayONE;
24
import com.electric.chargingpile.util.Res;
24
import com.electric.chargingpile.util.Res;
25
import com.electric.chargingpile.util.Util;
25
import com.electric.chargingpile.widge.photoview.PhotoView;
26
import com.electric.chargingpile.widge.photoview.PhotoView;
26
import com.electric.chargingpile.widge.photoview.ZoomingViewpager;
27
import com.electric.chargingpile.widge.photoview.ZoomingViewpager;
27
import com.luck.picture.lib.entity.LocalMedia;
28
import com.luck.picture.lib.entity.LocalMedia;
117
        for (LocalMedia media:list){
118
        for (LocalMedia media:list){
118
            PhotoView img = new PhotoView(this);
119
            PhotoView img = new PhotoView(this);
119
            img.setBackgroundColor(0xffffffff);
120
            img.setBackgroundColor(0xffffffff);
120
            String path = TextUtils.isEmpty(media.getAndroidQToPath()) ? media.getPath() : media.getAndroidQToPath();
121
            String path = Util.getCompressAbsolutePath(media);
121
            Glide.with(this)
122
            Glide.with(this)
122
                    .load(path)
123
                    .load(path)
123
                    .into(img);
124
                    .into(img);

+ 71 - 77
app/src/main/java/com/electric/chargingpile/activity/PrivateZhuangInfoActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import static com.hjq.permissions.Permission.CAMERA;
4
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
5
3
import android.Manifest;
6
import android.Manifest;
4
import android.app.Activity;
7
import android.app.Activity;
5
import android.app.ProgressDialog;
8
import android.app.ProgressDialog;
15
import android.os.Bundle;
18
import android.os.Bundle;
16
import android.os.Handler;
19
import android.os.Handler;
17
import android.os.Message;
20
import android.os.Message;
21
import android.provider.MediaStore;
18
import android.util.Base64;
22
import android.util.Base64;
19
import android.util.Log;
23
import android.util.Log;
20
import android.view.Gravity;
24
import android.view.Gravity;
57
import com.electric.chargingpile.util.Bimp;
61
import com.electric.chargingpile.util.Bimp;
58
import com.electric.chargingpile.util.CheckMobileNum;
62
import com.electric.chargingpile.util.CheckMobileNum;
59
import com.electric.chargingpile.util.DensityUtil;
63
import com.electric.chargingpile.util.DensityUtil;
64
import com.electric.chargingpile.util.ImageFileCompressEngine;
60
import com.electric.chargingpile.util.ImageItem;
65
import com.electric.chargingpile.util.ImageItem;
61
import com.electric.chargingpile.util.JsonUtils;
66
import com.electric.chargingpile.util.JsonUtils;
67
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
68
import com.electric.chargingpile.util.MeSandboxFileEngine;
62
import com.electric.chargingpile.util.OkHttpUtil;
69
import com.electric.chargingpile.util.OkHttpUtil;
70
import com.electric.chargingpile.util.PictureUtlis;
63
import com.electric.chargingpile.util.PublicWay;
71
import com.electric.chargingpile.util.PublicWay;
64
import com.electric.chargingpile.util.Res;
72
import com.electric.chargingpile.util.Res;
65
import com.electric.chargingpile.util.ToastUtil;
73
import com.electric.chargingpile.util.ToastUtil;
66
import com.electric.chargingpile.util.UploadUtil;
74
import com.electric.chargingpile.util.UploadUtil;
67
import com.electric.chargingpile.util.Util;
75
import com.electric.chargingpile.util.Util;
68
import com.electric.chargingpile.view.CustomProgressDialog;
76
import com.electric.chargingpile.view.CustomProgressDialog;
69
import com.luck.picture.lib.PictureSelector;
77
78
import com.hjq.permissions.OnPermissionCallback;
79
import com.hjq.permissions.XXPermissions;
70
import com.luck.picture.lib.animators.AnimationType;
80
import com.luck.picture.lib.animators.AnimationType;
81
import com.luck.picture.lib.basic.PictureSelector;
71
import com.luck.picture.lib.config.PictureConfig;
82
import com.luck.picture.lib.config.PictureConfig;
72
import com.luck.picture.lib.config.PictureMimeType;
83
import com.luck.picture.lib.config.PictureMimeType;
84
import com.luck.picture.lib.config.SelectMimeType;
85
import com.luck.picture.lib.config.SelectModeConfig;
73
import com.luck.picture.lib.entity.LocalMedia;
86
import com.luck.picture.lib.entity.LocalMedia;
74
import com.squareup.okhttp.Request;
87
import com.squareup.okhttp.Request;
75
import com.squareup.okhttp.Response;
88
import com.squareup.okhttp.Response;
104
import pub.devrel.easypermissions.EasyPermissions;
117
import pub.devrel.easypermissions.EasyPermissions;
105
118
106
119
107
public class PrivateZhuangInfoActivity extends Activity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
120
public class PrivateZhuangInfoActivity extends Activity implements View.OnClickListener{
108
    private static final String TAG = "PrivateZhuangInfoActivi";
121
    private static final String TAG = "PrivateZhuangInfoActivi";
109
    private static final int PIC_NUM = 3;
122
    private static final int PIC_NUM = 3;
110
    private ImageView ivBack, ivType;
123
    private ImageView ivBack, ivType;
323
     * 调用图库选择
336
     * 调用图库选择
324
     */
337
     */
325
    private void callGallery() {
338
    private void callGallery() {
326
/*
327
        Matisse.from(PrivateZhuangInfoActivity.this)
328
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
329
                .showSingleMediaType(true)
330
                .countable(true)
331
                .maxSelectable(1)
332
                .capture(true)
333
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
334
                .imageEngine(new GlideEngine())
335
                .forResult(REQUEST_CODE_CHOOSE);
336
*/
337
        PictureSelector.create(this)
339
        PictureSelector.create(this)
338
                .openGallery(PictureMimeType.ofImage())
339
                .selectionMode(PictureConfig.SINGLE)
340
                .isSingleDirectReturn(true)
341
                .isCompress(true)//是否压缩
342
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
343
                .isGif(true)//是否显示gif
344
                .isAndroidQTransform(true)
345
                .imageEngine(GlideEngine.createGlideEngine())
346
                .isWeChatStyle(false)// 是否开启微信图片选择风格
347
                .isUseCustomCamera(false)// 是否使用自定义相机
348
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
349
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
350
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
351
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
352
                .imageSpanCount(4)// 每行显示个数
353
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
354
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
340
                .openGallery(SelectMimeType.ofImage())
341
                .setSelectorUIStyle(PictureUtlis.getStyle())
342
                .setImageEngine(GlideEngine.createGlideEngine())
343
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
344
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
345
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
346
                .setSelectionMode(SelectModeConfig.SINGLE)
347
                .setMaxSelectNum(1)
348
                .isEmptyResultReturn(true) //支持未选择返回
349
                .setImageSpanCount(4)
350
                .isPageStrategy(true)   // 是否开启分页模式
351
                .isDisplayCamera(true) //是否显示相机入口
352
                .isPreviewFullScreenMode(true)//预览点击全屏效果
353
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
354
                .setFilterMinFileSize(1) //过滤最小文件
355
                .isEmptyResultReturn(true)//支持未选择返回
356
                .isWithSelectVideoImage(false)//是否支持视频图片同选
357
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
358
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
359
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
360
                .isGif(false)// 是否显示gif文件
361
                .isWebp(true)// 是否显示webp文件
362
                .isBmp(true)//是否显示bmp文件
363
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
364
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
365
                .isFastSlidingSelect(true) //快速滑动选择
366
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
367
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
368
                .isPreviewImage(true)//是否预览图片
355
                .forResult(REQUEST_CODE_CHOOSE);
369
                .forResult(REQUEST_CODE_CHOOSE);
356
370
357
    }
371
    }
389
            @Override
403
            @Override
390
            public void subscribe(ObservableEmitter<String> subscriber) {
404
            public void subscribe(ObservableEmitter<String> subscriber) {
391
                try {
405
                try {
392
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
406
                    List<LocalMedia> mediaList = PictureSelector.obtainSelectorList(data);
393
                    if (mediaList!=null && mediaList.size()>0){
407
                    if (mediaList!=null && mediaList.size()>0){
394
                     /*   List<Uri> uriList = Matisse.obtainResult(data);
395
                        Uri uri = uriList.get(0);
396
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
397
                        File file = FileUtils.from(PrivateZhuangInfoActivity.this, uri);
398
399
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
400
                        bitmap = imageZoom(bitmap);*/
401
408
402
                        String path="";
403
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
404
                            path= mediaList.get(0).getAndroidQToPath();
405
                        }else{
406
                            path=mediaList.get(0).getPath();
407
                        }
409
                        String path = Util.getCompressAbsolutePath(mediaList.get(0));
408
                        ImageItem takePhoto = new ImageItem();
410
                        ImageItem takePhoto = new ImageItem();
409
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
411
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
410
                        selectBitmap[selectIndex] = takePhoto;
412
                        selectBitmap[selectIndex] = takePhoto;
1014
        }
1016
        }
1015
    }
1017
    }
1016
1018
1017
    @Override
1018
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
1019
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
1020
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
1021
    }
1022
1023
    @Override
1024
    public void onPermissionsGranted(int requestCode, List<String> perms) {
1025
1026
    }
1019
    public void permissionTask() {
1027
1020
1028
    @Override
1029
    public void onPermissionsDenied(int requestCode, List<String> perms) {
1021
        String[] callPhone  =
1022
                new String[]{READ_MEDIA_IMAGES, CAMERA};
1023
        XXPermissions.with(this)
1024
                // 申请单个权限
1025
                .permission(callPhone)
1026
                .request(new OnPermissionCallback() {
1027
                    @Override
1028
                    public void onGranted(List<String> permissions, boolean all) {
1029
                        if (all) {
1030
                            callGallery();
1031
                        }else{
1032
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
1033
                        }
1034
                    }
1035
                    @Override
1036
                    public void onDenied(List<String> permissions, boolean never) {
1037
                        if (never) {
1038
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
1039
                            XXPermissions.startPermissionActivity(PrivateZhuangInfoActivity.this, permissions);
1040
                        } else {
1041
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
1042
                        }
1043
                    }
1044
                });
1030
1045
1031
    }
1046
    }
1032
1047
1033
    @AfterPermissionGranted(RC_ALBUM_PERM)
1034
    public void permissionTask() {
1035
        if (isPermissionOK()) {
1036
            callGallery();
1037
        } else {
1038
            EasyPermissions.requestPermissions(
1039
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
1040
                    RC_ALBUM_PERM,
1041
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
1042
                    Manifest.permission.READ_EXTERNAL_STORAGE,
1043
                    Manifest.permission.CAMERA
1044
            );
1045
        }
1046
    }
1047
1048
1048
    private boolean isPermissionOK() {
1049
        return EasyPermissions.hasPermissions(this,
1050
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
1051
                Manifest.permission.READ_EXTERNAL_STORAGE,
1052
                Manifest.permission.CAMERA
1053
        );
1054
    }
1055
1049
1056
    public String getString(String s) {
1050
    public String getString(String s) {
1057
        String path = null;
1051
        String path = null;

+ 0 - 185
app/src/main/java/com/electric/chargingpile/activity/PublishItemsActivity.java

1
package com.electric.chargingpile.activity;
2
3
import android.app.AlertDialog;
4
import android.content.DialogInterface;
5
import android.content.Intent;
6
import android.os.Bundle;
7
import androidx.appcompat.app.AppCompatActivity;
8
import android.text.TextUtils;
9
import android.view.View;
10
import android.widget.ImageView;
11
import android.widget.LinearLayout;
12
import android.widget.RelativeLayout;
13
import android.widget.TextView;
14
15
import com.electric.chargingpile.R;
16
import com.electric.chargingpile.application.MainApplication;
17
import com.electric.chargingpile.data.PublishItemSerializable;
18
import com.electric.chargingpile.manager.ProfileManager;
19
import com.electric.chargingpile.util.BarColorUtil;
20
import com.umeng.analytics.MobclickAgent;
21
22
/**
23
 * @author dxh
24
 * 发布类型选择页
25
 * 已废弃,不在维护。
26
 */
27
@Deprecated
28
public class PublishItemsActivity extends AppCompatActivity implements View.OnClickListener {
29
    private static final String TAG = "PublishItemsActivity";
30
31
    public static final String FROM_CHAT_HOME = "from_chat_home";
32
    public static final String FROM_TOPIC_DETAIL = "from_topic_detail";
33
34
    private RelativeLayout mBottomView;
35
    private TextView mRulePublish;
36
    private ImageView mSharePublishClose;
37
    private LinearLayout mPublishPicture;
38
    private LinearLayout mPublishVideo;
39
    private LinearLayout mPublishQa;
40
    private ImageView mShareScanIcon;
41
    private ImageView publish_radio;
42
    private boolean publishRadioSelected = false;
43
    private PublishItemSerializable intentData;
44
45
    @Override
46
    protected void onCreate(Bundle savedInstanceState) {
47
        super.onCreate(savedInstanceState);
48
        setContentView(R.layout.activity_publish_items);
49
        BarColorUtil.initStatusBarColor(PublishItemsActivity.this);
50
        initView();
51
    }
52
53
    private void initView() {
54
        intentData = (PublishItemSerializable) getIntent().getSerializableExtra("intent_data");
55
56
        mBottomView = (RelativeLayout) findViewById(R.id.bottom_view);
57
        mRulePublish = (TextView) findViewById(R.id.rule_publish);
58
        mSharePublishClose = (ImageView) findViewById(R.id.share_publish_close);
59
        mPublishPicture = (LinearLayout) findViewById(R.id.publish_picture);
60
        mPublishVideo = (LinearLayout) findViewById(R.id.publish_video);
61
        mPublishQa = (LinearLayout) findViewById(R.id.publish_qa);
62
63
        if (intentData.getFrom().equals(FROM_TOPIC_DETAIL)) {
64
            mPublishQa.setVisibility(View.GONE);
65
        }
66
67
        mShareScanIcon = (ImageView) findViewById(R.id.share_scan_icon);
68
        publish_radio = findViewById(R.id.publish_radio);
69
70
        mSharePublishClose.setOnClickListener(this);
71
        mPublishPicture.setOnClickListener(this);
72
        mRulePublish.setOnClickListener(this);
73
        mPublishVideo.setOnClickListener(this);
74
        mPublishQa.setOnClickListener(this);
75
        publish_radio.setOnClickListener(this);
76
        findViewById(R.id.iv_back).setOnClickListener(this);
77
78
        String isFirstClick = ProfileManager.getInstance().getClickedUserPublishRole(getApplicationContext());
79
        if (TextUtils.isEmpty(isFirstClick)) {
80
            publish_radio.setImageDrawable(getResources().getDrawable(R.drawable.radio_unselected));
81
            publishRadioSelected = false;
82
        } else {
83
            publish_radio.setImageDrawable(getResources().getDrawable(R.drawable.radio_selected));
84
            publishRadioSelected = true;
85
        }
86
    }
87
88
    @Override
89
    public void onClick(View v) {
90
        Intent intent = new Intent();
91
        switch (v.getId()) {
92
            case R.id.publish_qa: // 提问
93
                if (checkPublishRadio()) {
94
                    MobclickAgent.onEvent(this.getApplicationContext(), "1039");
95
                    intent.setClass(this, EditQuestionOneActivity.class);
96
                    startActivity(intent);
97
                }
98
                break;
99
            case R.id.publish_picture: // 图文
100
                if (checkPublishRadio()) {
101
                    if (FROM_TOPIC_DETAIL.equals(intentData.getFrom())) {
102
                        MobclickAgent.onEvent(getApplicationContext(), "1043");
103
                    } else {
104
                        MobclickAgent.onEvent(getApplicationContext(), "1038");
105
                    }
106
                    intent.setClass(this, PublishPicTopicActivity.class);
107
                    intent.putExtra("intent_data", intentData);
108
                    startActivity(intent);
109
                }
110
                break;
111
            case R.id.publish_video: // 视频
112
                if (checkPublishRadio()) {
113
                    if (FROM_TOPIC_DETAIL.equals(intentData.getFrom())) {
114
                        MobclickAgent.onEvent(getApplicationContext(), "1042");
115
                    } else {
116
                        MobclickAgent.onEvent(getApplicationContext(), "1005");
117
                    }
118
                    intent.setClass(this, PublishVideoTopicActivity.class);
119
                    intent.putExtra("intent_data", intentData);
120
                    startActivity(intent);
121
                }
122
                break;
123
            case R.id.rule_publish: // 用户发布内容规则
124
                intent.setClass(this, MyWebViewActivity.class).putExtra("url", MainApplication.urlNew + "/topic/rule.do");
125
                startActivity(intent);
126
                break;
127
            case R.id.share_publish_close:
128
                backOperate();
129
                break;
130
            case R.id.iv_back:
131
                backOperate();
132
                break;
133
            case R.id.publish_radio: // 用户发布内容规则radio
134
                publishRadioClick();
135
                break;
136
            default:
137
                break;
138
        }
139
    }
140
141
    private boolean checkPublishRadio() {
142
        if (!publishRadioSelected) {
143
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
144
            builder.setMessage("请先阅读《用户发布内容规则》,再分享内容,勾选后,默认同意该规则。");
145
            builder.setCancelable(false);
146
            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
147
                @Override
148
                public void onClick(DialogInterface dialogInterface, int i) {
149
                }
150
            });
151
            builder.show();
152
            return false;
153
        }
154
155
        return true;
156
    }
157
158
    private void publishRadioClick() {
159
        publishRadioSelected = !publishRadioSelected;
160
        if (publishRadioSelected) {
161
            publish_radio.setImageDrawable(getResources().getDrawable(R.drawable.radio_selected));
162
            String isFirstClick = ProfileManager.getInstance().getClickedUserPublishRole(getApplicationContext());
163
            if (TextUtils.isEmpty(isFirstClick)) {
164
                ProfileManager.getInstance().setClickedUserPublishRole(getApplicationContext(), "click");
165
            }
166
        } else {
167
            publish_radio.setImageDrawable(getResources().getDrawable(R.drawable.radio_unselected));
168
        }
169
    }
170
171
    @Override
172
    public void onBackPressed() {
173
        backOperate();
174
    }
175
176
    private void backOperate() {
177
        if (FROM_TOPIC_DETAIL.equals(intentData.getFrom())) {
178
            MobclickAgent.onEvent(this.getApplicationContext(), "1044");
179
        } else {
180
            MobclickAgent.onEvent(this.getApplicationContext(), "1040");
181
        }
182
183
        PublishItemsActivity.this.finish();
184
    }
185
}

+ 0 - 942
app/src/main/java/com/electric/chargingpile/activity/PublishPicTopicActivity.java

1
package com.electric.chargingpile.activity;
2
3
import android.Manifest;
4
import android.annotation.SuppressLint;
5
import android.app.Activity;
6
import android.app.ProgressDialog;
7
import android.content.Context;
8
import android.content.DialogInterface;
9
import android.content.Intent;
10
import android.graphics.Bitmap;
11
import android.graphics.BitmapFactory;
12
import android.graphics.Color;
13
import android.graphics.Matrix;
14
import android.graphics.drawable.BitmapDrawable;
15
import android.graphics.drawable.ColorDrawable;
16
import android.net.Uri;
17
import android.os.Build;
18
import android.os.Bundle;
19
20
import android.os.Handler;
21
import android.os.Message;
22
import android.provider.MediaStore;
23
24
import androidx.appcompat.app.AlertDialog;
25
26
import android.text.Editable;
27
import android.text.Html;
28
import android.text.TextUtils;
29
import android.text.TextWatcher;
30
import android.util.Log;
31
import android.view.KeyEvent;
32
import android.view.LayoutInflater;
33
import android.view.View;
34
import android.view.View.OnClickListener;
35
import android.view.ViewGroup;
36
import android.view.animation.AnimationUtils;
37
import android.view.inputmethod.InputMethodManager;
38
import android.widget.AdapterView;
39
import android.widget.BaseAdapter;
40
import android.widget.Button;
41
import android.widget.EditText;
42
import android.widget.GridView;
43
import android.widget.ImageView;
44
import android.widget.LinearLayout;
45
import android.widget.PopupWindow;
46
import android.widget.RelativeLayout;
47
import android.widget.TextView;
48
import android.widget.Toast;
49
50
import com.electric.chargingpile.R;
51
import com.electric.chargingpile.application.MainApplication;
52
import com.electric.chargingpile.data.AuthSignBean;
53
import com.electric.chargingpile.data.ChatRecommendBean;
54
import com.electric.chargingpile.data.PhotoUploadResult;
55
import com.electric.chargingpile.data.PublishItemSerializable;
56
import com.electric.chargingpile.data.UploadPic;
57
import com.electric.chargingpile.engine.GlideEngine;
58
import com.electric.chargingpile.util.BarColorUtil;
59
import com.electric.chargingpile.util.Base64;
60
import com.electric.chargingpile.util.Bimp;
61
import com.electric.chargingpile.util.CommonParams;
62
import com.electric.chargingpile.util.DateUtils;
63
import com.electric.chargingpile.util.DensityUtil;
64
import com.electric.chargingpile.util.FileUtils;
65
import com.electric.chargingpile.util.ImageItem;
66
import com.electric.chargingpile.util.JsonUtils;
67
import com.electric.chargingpile.util.LoadingDialog;
68
import com.electric.chargingpile.util.PublicWay;
69
import com.electric.chargingpile.util.Res;
70
import com.electric.chargingpile.util.ToastUtil;
71
import com.electric.chargingpile.util.Util;
72
import com.luck.picture.lib.PictureSelector;
73
import com.luck.picture.lib.animators.AnimationType;
74
import com.luck.picture.lib.config.PictureConfig;
75
import com.luck.picture.lib.config.PictureMimeType;
76
import com.luck.picture.lib.entity.LocalMedia;
77
import com.luck.picture.lib.tools.ScreenUtils;
78
import com.umeng.analytics.MobclickAgent;
79
import com.upyun.library.common.ParallelUploader;
80
import com.upyun.library.common.UploadEngine;
81
import com.upyun.library.listener.UpCompleteListener;
82
import com.upyun.library.listener.UpProgressListener;
83
84
import com.zhy.http.okhttp.OkHttpUtils;
85
import com.zhy.http.okhttp.callback.StringCallback;
86
87
import java.io.ByteArrayOutputStream;
88
import java.io.File;
89
import java.io.IOException;
90
import java.util.ArrayList;
91
import java.util.HashMap;
92
import java.util.List;
93
import java.util.Map;
94
95
import cn.jpush.android.api.JPushInterface;
96
import io.reactivex.Observable;
97
import io.reactivex.ObservableEmitter;
98
import io.reactivex.ObservableOnSubscribe;
99
import io.reactivex.Observer;
100
import io.reactivex.android.schedulers.AndroidSchedulers;
101
import io.reactivex.disposables.Disposable;
102
import io.reactivex.schedulers.Schedulers;
103
import okhttp3.Call;
104
import pub.devrel.easypermissions.AfterPermissionGranted;
105
import pub.devrel.easypermissions.EasyPermissions;
106
107
/**
108
 * @desc : 发布话题
109
 */
110
@Deprecated
111
public class PublishPicTopicActivity extends Activity implements OnClickListener, EasyPermissions.PermissionCallbacks {
112
    private static final String TAG = "PublishPicTopicActivity";
113
    private static final int PIC_NUM = 9;
114
    private ImageView ivBack;
115
    private TextView tv_right;
116
    private GridView noScrollgridview;
117
118
119
    Bitmap bm = null;
120
    private static final int PHOTO_REQUEST_CAMERA = 1;
121
    private static final int PHOTO_REQUEST_GALLERY = 2;
122
    private static final int PHOTO_REQUEST_CUT = 3;
123
    private GridAdapter adapter;
124
    private EditText et_context;
125
    private TextView tvSubmit;
126
    private ImageView point;
127
    private ImageView mPublishTopicDe;
128
    private TextView tv_point;
129
    private RelativeLayout rl_point;
130
    private android.view.animation.Animation animation;
131
    InputMethodManager imm;
132
    private String userContact;
133
    private LinearLayout ll_contact;
134
    List<UploadPic> list;
135
    String json;
136
    LoadingDialog dialog;
137
    private ProgressDialog insertDialog;
138
    private static final int RC_ALBUM_PERM = 123;
139
    private int screenWidth;
140
    private int itemWidth;
141
142
143
    private TextView publishtopic_choose_topic, mPublishtopicChooseTopic, publishtopic_word_num;
144
145
    private String topicId = "";
146
    //空间名
147
    public static String SPACE = "d1evcom01-fs";
148
    private String policy = "";
149
    private String OPERATER = "d1evvideo01";
150
    @SuppressLint("SdCardPath")
151
    private ParallelUploader parallelUploader;
152
    private ProgressDialog uploadDialog;
153
    private PublishItemSerializable intentData;
154
155
    public static final int REQUEST_CODE_CHOOSE = 342;
156
157
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
158
    @Override
159
    protected void onCreate(Bundle savedInstanceState) {
160
        super.onCreate(savedInstanceState);
161
        setContentView(R.layout.activity_publish_picture_content);
162
        BarColorUtil.initStatusBarColor(PublishPicTopicActivity.this);
163
164
        initView();
165
        Res.init(this);
166
        PublicWay.activityList.add(this);
167
        dialog = new LoadingDialog(this);
168
        dialog.setCanceledOnTouchOutside(false);
169
        Init();
170
171
        initYouPaiYun();
172
173
    }
174
175
    /**
176
     * 初始化 又拍云
177
     */
178
    private void initYouPaiYun() {
179
180
        //初始化断点续传 (服务端签名可用)
181
        if (parallelUploader == null) {
182
            parallelUploader = new ParallelUploader();
183
        }
184
    }
185
186
    private void initView() {
187
        intentData = (PublishItemSerializable) getIntent().getSerializableExtra("intent_data");
188
        screenWidth = ScreenUtils.getScreenWidth(this);
189
        itemWidth = (int) ((screenWidth - DensityUtil.dip2px(this, 15 * 2 + 10 * 2)) / 3f);
190
        uploadDialog = new ProgressDialog(this);
191
        uploadDialog.setMessage("图片上传中...");
192
        uploadDialog.setCanceledOnTouchOutside(false);
193
        mPublishTopicDe = (ImageView) findViewById(R.id.publishtopic_choose_topic_de);
194
        mPublishTopicDe.setOnClickListener(this);
195
        mPublishtopicChooseTopic = (TextView) findViewById(R.id.publishtopic_choose_topic);
196
        publishtopic_choose_topic = (TextView) findViewById(R.id.publishtopic_choose_topic);
197
        publishtopic_word_num = (TextView) findViewById(R.id.publishtopic_word_num);
198
        publishtopic_choose_topic.setOnClickListener(this);
199
        insertDialog = new ProgressDialog(this);
200
        insertDialog.setMessage("正在插入图片...");
201
        insertDialog.setCanceledOnTouchOutside(false);
202
        tv_right = (TextView) findViewById(R.id.tv_right);
203
        tv_right.setOnClickListener(new OnClickListener() {
204
            @Override
205
            public void onClick(View view) {
206
                if (imm.isActive()) {
207
                    view = getWindow().peekDecorView();
208
                    if (view != null) {
209
                        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
210
                    }
211
                }
212
213
                MobclickAgent.onEvent(getApplicationContext(), "1035");
214
                uploadDialog.show();
215
                //获取又拍云数据
216
                getYouPaiData();
217
            }
218
        });
219
        rl_point = (RelativeLayout) findViewById(R.id.rl_point);
220
        tv_point = (TextView) findViewById(R.id.tv_point);
221
        animation = AnimationUtils.loadAnimation(PublishPicTopicActivity.this, R.anim.nn);
222
        point = (ImageView) findViewById(R.id.tv_one);
223
        ivBack = (ImageView) findViewById(R.id.iv_back);
224
        ivBack.setOnClickListener(this);
225
        et_context = (EditText) findViewById(R.id.et_context);
226
        et_context.setOnFocusChangeListener(new View.OnFocusChangeListener() {
227
            @Override
228
            public void onFocusChange(View view, boolean b) {
229
                if (b) {
230
                    MobclickAgent.onEvent(getApplicationContext(), "1023");
231
                }
232
            }
233
        });
234
235
236
        et_context.addTextChangedListener(new TextWatcher() {
237
            @Override
238
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
239
240
            }
241
242
            @Override
243
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
244
245
            }
246
247
            @Override
248
            public void afterTextChanged(Editable editable) {
249
                String s = et_context.getText().toString().trim();
250
                if (s.length() > 500) {
251
                    et_context.setText(s.subSequence(0, 500));
252
                    et_context.setSelection(500);
253
                }
254
255
                if (TextUtils.isEmpty(s))
256
                    publishtopic_word_num.setText("0");
257
                else
258
                    publishtopic_word_num.setText(s.length() + "");
259
            }
260
        });
261
        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
262
263
        if (intentData.getFrom().equals(PublishItemsActivity.FROM_TOPIC_DETAIL)) {
264
            chatRecommendBean = new ChatRecommendBean();
265
            chatRecommendBean.topicId = Long.parseLong(intentData.getTopicId());
266
            mPublishtopicChooseTopic.setText(intentData.getName());
267
            mPublishTopicDe.setVisibility(View.VISIBLE);
268
        }
269
    }
270
271
    private void getYouPaiData() {
272
273
        if (null == Bimp.tempSelectBitmap)
274
            return;
275
        String fileNames = "";
276
        for (int i = 0; i < Bimp.tempSelectBitmap.size(); i++) {
277
278
            ImageItem imageItem = Bimp.tempSelectBitmap.get(i);
279
            if (TextUtils.isEmpty(fileNames)) {
280
                fileNames = imageItem.fName;
281
            } else {
282
                fileNames += "," + imageItem.fName;
283
            }
284
        }
285
286
        String url = MainApplication.urlNew + "/topic/sign.do";
287
        Map<String, String> map = new HashMap<>();
288
        map.put("fileNames", fileNames);
289
        map.put("targetType", ChatRecommendBean.TARGET_TYPE_IMAGE_TEXT + "");
290
        CommonParams.addCommonParams(map);
291
        OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
292
            @Override
293
            public void onError(Call call, Exception e) {
294
                MobclickAgent.onEvent(getApplicationContext(), "1037");
295
                uploadDialog.dismiss();
296
                ToastUtil.showToast(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT);
297
            }
298
299
            @Override
300
            public void onResponse(String response) {
301
                String code = JsonUtils.getKeyResult(response, "code");
302
                String desc = JsonUtils.getKeyResult(response, "desc");
303
                if ("1000".equals(code)) {
304
                    String data = JsonUtils.getKeyResult(response, "data");
305
                    ArrayList<AuthSignBean> signBeans = (ArrayList<AuthSignBean>) JsonUtils.parseToObjectList(data, AuthSignBean.class);
306
                    if (null != signBeans && signBeans.size() > 0) {
307
                        publishCount = signBeans.size();
308
                        for (int i = 0; i < publishCount; i++) {
309
                            String sign = signBeans.get(i).sign;
310
                            String policy = signBeans.get(i).policy;
311
                            formUpload(Bimp.tempSelectBitmap.get(i).getFile(), sign, policy);
312
                        }
313
                    }
314
                } else if ("8010".equals(code)) {
315
                    MobclickAgent.onEvent(getApplicationContext(), "1037");
316
                    uploadDialog.dismiss();
317
                    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
318
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
319
                } else {
320
                    MobclickAgent.onEvent(getApplicationContext(), "1037");
321
                    uploadDialog.dismiss();
322
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
323
                }
324
            }
325
        });
326
327
    }
328
329
    private ArrayList<String> publishArray = new ArrayList<>();
330
    private int publishCount = 0;
331
    final int reqTopic = 100;
332
333
    @Override
334
    public void onClick(View v) {
335
        switch (v.getId()) {
336
            case R.id.publishtopic_choose_topic_de: // 取消选择的话题
337
                MobclickAgent.onEvent(getApplicationContext(), "1034");
338
                mPublishtopicChooseTopic.setText("# 选择话题");
339
                mPublishTopicDe.setVisibility(View.GONE);
340
                chatRecommendBean = null;
341
                break;
342
            case R.id.publishtopic_choose_topic: // 选择话题
343
                MobclickAgent.onEvent(getApplicationContext(), "1031");
344
                et_context.clearFocus();
345
                startActivityForResult(new Intent(this, TopicActivity.class), reqTopic);
346
                break;
347
            case R.id.iv_back:
348
                if (imm.isActive()) {
349
                    View view = getWindow().peekDecorView();
350
                    if (view != null) {
351
                        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
352
                    }
353
                }
354
                showDialogToExit();
355
                break;
356
        }
357
    }
358
359
    ChatRecommendBean chatRecommendBean = null;
360
361
    @Override
362
    protected void onPause() {
363
        super.onPause();
364
//		requestManager.removeOnRequestFinishedListener(this);
365
        MobclickAgent.onPause(this);
366
    }
367
368
    @Override
369
    protected void onResume() {
370
        super.onResume();
371
//		requestManager.addOnRequestFinishedListener(this);
372
        MobclickAgent.onResume(this);
373
    }
374
375
    private File getFile(String path) {
376
        File f = new File(path);
377
        if (!f.exists()) {
378
            try {
379
                f.createNewFile();
380
            } catch (IOException e) {
381
                e.printStackTrace();
382
            }
383
        }
384
        return f;
385
    }
386
387
388
    public void Init() {
389
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
390
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
391
        adapter = new GridAdapter(this);
392
        adapter.update();
393
        noScrollgridview.setAdapter(adapter);
394
        noScrollgridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
395
396
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
397
                                    long arg3) {
398
                imm.hideSoftInputFromWindow(arg1.getWindowToken(), 0);
399
                if (arg2 == Bimp.tempSelectBitmap.size()) {
400
                    permissionTask();
401
                } else {
402
                    MobclickAgent.onEvent(getApplicationContext(), "1027");
403
                    Intent intent = new Intent(PublishPicTopicActivity.this,
404
                            GalleryActivityFeedback.class);
405
                    intent.putExtra("position", "1");
406
                    intent.putExtra("type", "1");
407
                    intent.putExtra("ID", arg2);
408
                    startActivity(intent);
409
                }
410
            }
411
        });
412
    }
413
414
    /**
415
     * 调用图库选择
416
     */
417
    private void callGallery() {
418
        MobclickAgent.onEvent(getApplicationContext(), "1024");
419
//        Matisse.from(PublishPicTopicActivity.this)
420
//                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
421
//                .showSingleMediaType(true)
422
//                .countable(true)
423
//                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
424
//                .capture(true)
425
//                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
426
//                .imageEngine(new GlideEngine())
427
//                .forResult(REQUEST_CODE_CHOOSE);
428
        PictureSelector.create(this)
429
                .openGallery(PictureMimeType.ofImage())
430
                .maxSelectNum(PIC_NUM)
431
                .selectionData(mSelectionData)//是否传入已选图片
432
                .selectionMode(PictureConfig.MULTIPLE)
433
                .isCompress(true)//是否压缩
434
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
435
                .isGif(true)//是否显示gif
436
                .isAndroidQTransform(true)
437
                .imageEngine(GlideEngine.createGlideEngine())
438
                .isWeChatStyle(false)// 是否开启微信图片选择风格
439
                .isUseCustomCamera(false)// 是否使用自定义相机
440
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
441
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
442
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
443
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
444
                .imageSpanCount(4)// 每行显示个数
445
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
446
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
447
                .forResult(REQUEST_CODE_CHOOSE);
448
449
    }
450
451
    @Override
452
    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
453
        super.onActivityResult(requestCode, resultCode, data);
454
        if (requestCode == reqTopic && resultCode == -100) { // 选择话题完成
455
            chatRecommendBean = (ChatRecommendBean) data.getSerializableExtra("topic");
456
            if (chatRecommendBean != null) {
457
                mPublishtopicChooseTopic.setText(Html.fromHtml(chatRecommendBean.name));
458
                mPublishTopicDe.setVisibility(View.VISIBLE);
459
            }
460
        }
461
462
        if (resultCode == RESULT_OK) {
463
            if (data != null) {
464
                if (requestCode == 1) {
465
                    //处理调用系统图库
466
                } else if (requestCode == REQUEST_CODE_CHOOSE) {
467
                    MobclickAgent.onEvent(getApplicationContext(), "1026");
468
                    //异步方式插入图片
469
                    insertImagesSync(data);
470
                }
471
            }
472
        }
473
    }
474
475
    /**
476
     * 异步方式插入图片
477
     *
478
     * @param data
479
     */
480
    private void insertImagesSync(final Intent data) {
481
        insertDialog.show();
482
        Observable.create(new ObservableOnSubscribe<String>() {
483
            @Override
484
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
485
                try {
486
//                    List<Uri> uriList = Matisse.obtainResult(data);
487
                    mSelectionData= PictureSelector.obtainMultipleResult(data);
488
489
                    int i = 0;
490
                    for (LocalMedia localMedia : mSelectionData) {
491
                        i++;
492
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
493
//                        File file = FileUtils.from(PublishPicTopicActivity.this, uri);
494
//
495
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
496
//                        bitmap = imageZoom(bitmap);
497
                        ImageItem takePhoto = new ImageItem();
498
//                        String deviceId = JPushInterface.getUdid(MainApplication.context);
499
//                        takePhoto.fName = DateUtils.getSimpleCurrentDate();
500
//                        if (TextUtils.isEmpty(deviceId)) {
501
//                            takePhoto.fName += "_" + Util.getRandom(15);
502
//                        } else {
503
//                            takePhoto.fName += "_" + deviceId;
504
//                        }
505
//                        takePhoto.fName += "_00" + i;
506
//
507
//                        String filePath = file.getAbsolutePath();
508
//                        String suffix = filePath.substring(filePath.lastIndexOf(".") + 1);
509
//                        takePhoto.fName += "." + suffix;
510
                        String path="";
511
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
512
                            path= localMedia.getAndroidQToPath();
513
                        }else{
514
                            path=localMedia.getPath();
515
                        }
516
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
517
                        takePhoto.setFile(new File(path));
518
                        Bimp.tempSelectBitmap.add(takePhoto);
519
                        subscriber.onNext("");
520
                    }
521
                    subscriber.onComplete();
522
                } catch (Exception e) {
523
                    e.printStackTrace();
524
                    subscriber.onError(e);
525
                }
526
            }
527
        })
528
                .subscribeOn(Schedulers.io())//生产事件在io
529
                .observeOn(AndroidSchedulers.mainThread())//消费事件在UI线程
530
                .subscribe(new Observer<String>() {
531
                    @Override
532
                    public void onComplete() {
533
                        Log.e(TAG, "onCompleted: -------------");
534
                        insertDialog.dismiss();
535
                        adapter.update();
536
537
                    }
538
539
                    @Override
540
                    public void onError(Throwable e) {
541
                        insertDialog.dismiss();
542
                        Log.e(TAG, "onError: " + "图片插入失败:" + e.getMessage());
543
                        ToastUtil.showToast(getApplicationContext(), "图片插入失败", Toast.LENGTH_SHORT);
544
                    }
545
546
                    @Override
547
                    public void onSubscribe(Disposable d) {
548
549
                    }
550
551
                    @Override
552
                    public void onNext(String imagePath) {
553
554
                    }
555
                });
556
    }
557
558
    public class GridAdapter extends BaseAdapter {
559
        private LayoutInflater inflater;
560
        private int selectedPosition = -1;
561
        private boolean shape;
562
563
        public boolean isShape() {
564
            return shape;
565
        }
566
567
        public void setShape(boolean shape) {
568
            this.shape = shape;
569
        }
570
571
        public GridAdapter(Context context) {
572
            inflater = LayoutInflater.from(context);
573
        }
574
575
        public void update() {
576
            loading();
577
        }
578
579
        public int getCount() {
580
            if (Bimp.tempSelectBitmap.size() == 9) {
581
                return 9;
582
            }
583
            return (Bimp.tempSelectBitmap.size() + 1);
584
        }
585
586
        public Object getItem(int arg0) {
587
            return null;
588
        }
589
590
        public long getItemId(int arg0) {
591
            return 0;
592
        }
593
594
        public void setSelectedPosition(int position) {
595
            selectedPosition = position;
596
        }
597
598
        public int getSelectedPosition() {
599
            return selectedPosition;
600
        }
601
602
        public View getView(final int position, View convertView, ViewGroup parent) {
603
            GridAdapter.ViewHolder holder = null;
604
            if (convertView == null) {
605
                convertView = inflater.inflate(R.layout.item_publish_picture,
606
                        parent, false);
607
                holder = new GridAdapter.ViewHolder();
608
                holder.image = (ImageView) convertView
609
                        .findViewById(R.id.item_publish_image);
610
                holder.imageDelete = convertView.findViewById(R.id.item_publish_image_delete);
611
                convertView.setTag(holder);
612
            } else {
613
                holder = (GridAdapter.ViewHolder) convertView.getTag();
614
            }
615
616
617
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.image.getLayoutParams();
618
            params.width = itemWidth;
619
            params.height = itemWidth;
620
            if (position % 3 != 0) {
621
                params.leftMargin = DensityUtil.dip2px(getApplicationContext(), 10);
622
            }
623
            holder.image.setLayoutParams(params);
624
625
            if (position == Bimp.tempSelectBitmap.size()) {
626
                holder.imageDelete.setVisibility(View.GONE);
627
                holder.image.setImageResource(R.drawable.add_picture);
628
                holder.image.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
629
                holder.image.setBackgroundColor(Color.parseColor("#f5f5f5"));
630
                if (position == 9) {
631
                    holder.image.setVisibility(View.GONE);
632
                }
633
            } else {
634
                holder.imageDelete.setVisibility(View.VISIBLE);
635
                holder.image.setImageBitmap(Bimp.tempSelectBitmap.get(position).getBitmap());
636
                holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP);
637
                holder.image.setBackgroundColor(Color.WHITE);
638
            }
639
640
            holder.imageDelete.setOnClickListener(new OnClickListener() {
641
                @Override
642
                public void onClick(View view) {
643
                    MobclickAgent.onEvent(getApplicationContext(), "1030");
644
                    Bimp.tempSelectBitmap.remove(position);
645
                    Bimp.max--;
646
                    Message message = new Message();
647
                    message.what = 1;
648
                    handler.sendMessage(message);
649
                }
650
            });
651
652
            return convertView;
653
        }
654
655
        public class ViewHolder {
656
            public ImageView image;
657
            public ImageView imageDelete;
658
        }
659
660
        Handler handler = new Handler() {
661
            public void handleMessage(Message msg) {
662
                switch (msg.what) {
663
                    case 1:
664
                        if (null != Bimp.tempSelectBitmap && Bimp.tempSelectBitmap.size() > 0) {
665
                            tv_right.setEnabled(true);
666
                            tv_right.setBackgroundColor(Color.parseColor("#02b637"));
667
                        } else {
668
                            tv_right.setEnabled(false);
669
                            tv_right.setBackgroundColor(Color.parseColor("#9ed3ae"));
670
                        }
671
                        adapter.notifyDataSetChanged();
672
                        break;
673
                }
674
                super.handleMessage(msg);
675
            }
676
        };
677
678
        public void loading() {
679
            new Thread(new Runnable() {
680
                public void run() {
681
                    while (true) {
682
                        if (Bimp.max == Bimp.tempSelectBitmap.size()) {
683
                            Message message = new Message();
684
                            message.what = 1;
685
                            handler.sendMessage(message);
686
                            break;
687
                        } else {
688
                            Bimp.max += 1;
689
                            Message message = new Message();
690
                            message.what = 1;
691
                            handler.sendMessage(message);
692
                        }
693
                    }
694
                }
695
            }).start();
696
        }
697
    }
698
699
700
    @Override
701
    protected void onRestart() {
702
        adapter.update();
703
        super.onRestart();
704
    }
705
706
    @Override
707
    protected void onDestroy() {
708
        super.onDestroy();
709
        Bimp.tempSelectBitmap.clear();
710
        Bimp.max = 0;
711
    }
712
713
    private Bitmap imageZoom(Bitmap bm) {
714
        // 图片允许最大空间 单位:KB
715
        double maxSize = 200.00;
716
        // 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
717
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
718
        bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
719
        byte[] b = baos.toByteArray();
720
        // 将字节换成KB
721
        double mid = b.length / 1024;
722
        // 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
723
        if (mid > maxSize) {
724
            // 获取bitmap大小 是允许最大大小的多少倍
725
            double i = mid / maxSize;
726
            // 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍
727
            // (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小)
728
            bm = zoomImage(bm, bm.getWidth() / Math.sqrt(i), bm.getHeight() / Math.sqrt(i));
729
        }
730
731
        return bm;
732
    }
733
734
    public Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) {
735
        // 获取这个图片的宽和高
736
        float width = bgimage.getWidth();
737
        float height = bgimage.getHeight();
738
        // 创建操作图片用的matrix对象
739
        Matrix matrix = new Matrix();
740
        // 计算宽高缩放率
741
        float scaleWidth = ((float) newWidth) / width;
742
        float scaleHeight = ((float) newHeight) / height;
743
        // 缩放图片动作
744
        matrix.postScale(scaleWidth, scaleHeight);
745
        Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
746
                (int) height, matrix, true);
747
        return bitmap;
748
    }
749
750
751
    /**
752
     * 检测是否有emoji表情
753
     *
754
     * @param source
755
     * @return
756
     */
757
    public static boolean containsEmoji(String source) {
758
        int len = source.length();
759
        for (int i = 0; i < len; i++) {
760
            char codePoint = source.charAt(i);
761
            if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情
762
                return true;
763
            }
764
        }
765
        return false;
766
    }
767
768
    /**
769
     * 判断是否是Emoji
770
     *
771
     * @param codePoint 比较的单个字符
772
     * @return
773
     */
774
    private static boolean isEmojiCharacter(char codePoint) {
775
        return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) ||
776
                (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
777
                ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000)
778
                && (codePoint <= 0x10FFFF));
779
    }
780
781
    @Override
782
    public void onPermissionsGranted(int requestCode, List<String> perms) {
783
784
    }
785
786
    @Override
787
    public void onPermissionsDenied(int requestCode, List<String> perms) {
788
789
    }
790
791
    @AfterPermissionGranted(RC_ALBUM_PERM)
792
    public void permissionTask() {
793
        if (isPermissionOK()) {
794
            callGallery();
795
        } else {
796
            EasyPermissions.requestPermissions(
797
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
798
                    RC_ALBUM_PERM,
799
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
800
                    Manifest.permission.READ_EXTERNAL_STORAGE,
801
                    Manifest.permission.CAMERA
802
            );
803
        }
804
    }
805
806
    private boolean isPermissionOK() {
807
        return EasyPermissions.hasPermissions(this,
808
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
809
                Manifest.permission.READ_EXTERNAL_STORAGE,
810
                Manifest.permission.CAMERA
811
        );
812
    }
813
814
815
    /**
816
     * 表单上传
817
     *
818
     * @param sign
819
     * @param policyServer
820
     */
821
    private void formUpload(File file, String sign, String policyServer) {
822
//        //进度回调,可为空
823
        UpProgressListener progressListener = new UpProgressListener() {
824
            @Override
825
            public void onRequestProgress(long bytesWrite, long contentLength) {
826
//                bp_form.setProgress((int) ((100 * bytesWrite) / contentLength));
827
//                tv_form.setText((100 * bytesWrite) / contentLength + "%");
828
                Log.e(TAG, (100 * bytesWrite) / contentLength + "%");
829
                Log.e(TAG, bytesWrite + "::" + contentLength);
830
                uploadDialog.setProgress((int) (100 * bytesWrite / contentLength));
831
            }
832
        };
833
834
        //结束回调,不可为空
835
        UpCompleteListener completeListener = new UpCompleteListener() {
836
            @Override
837
            public void onComplete(boolean isSuccess, String result) {
838
//                tv_form.setText(isSuccess + ":" + result);
839
                Log.e(TAG, isSuccess + result);
840
                if (isSuccess) {
841
                    PhotoUploadResult photoUploadResult = new PhotoUploadResult(result);
842
                    publishArray.add(photoUploadResult.formatResult());
843
                }
844
845
                if (publishCount == publishArray.size()) {
846
                    String urls = "";
847
                    for (int i = 0; i < publishArray.size(); i++) {
848
                        if (TextUtils.isEmpty(urls))
849
                            urls = publishArray.get(i);
850
                        else
851
                            urls = urls + "," + publishArray.get(i);
852
                    }
853
                    requestPublishServer("[" + urls + "]");
854
                }
855
            }
856
        };
857
858
        //表单上传(服务器签名方式)
859
        UploadEngine.getInstance().formUpload(file, policyServer, OPERATER, sign, completeListener,
860
                progressListener);
861
862
    }
863
864
865
    private void requestPublishServer(String urls) {
866
        String url = MainApplication.urlNew + "/topic/publish.do";
867
        Map<String, String> map = new HashMap<>();
868
        map.put("content", et_context.getText().toString().trim());
869
        map.put("urls", Base64.encode(urls.getBytes()).replaceAll("\\s*", ""));
870
        if (chatRecommendBean != null) {
871
            map.put("topicId", chatRecommendBean.topicId + "");
872
        }
873
        map.put("targetType", ChatRecommendBean.TARGET_TYPE_IMAGE_TEXT + "");
874
        CommonParams.addCommonParams(map);
875
876
        OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
877
            @Override
878
            public void onError(Call call, Exception e) {
879
                MobclickAgent.onEvent(getApplicationContext(), "1037");
880
                uploadDialog.dismiss();
881
                dialog.cancel();
882
                publishArray.clear();
883
                publishCount = 0;
884
                ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT);
885
            }
886
887
            @Override
888
            public void onResponse(String response) {
889
                uploadDialog.dismiss();
890
                dialog.cancel();
891
                publishArray.clear();
892
                publishCount = 0;
893
                String code = JsonUtils.getKeyResult(response, "code");
894
                String desc = JsonUtils.getKeyResult(response, "desc");
895
                if ("1000".equals(code)) { // 图文发布成功
896
                    MobclickAgent.onEvent(getApplicationContext(), "1036");
897
                    ToastUtil.showToast(getApplicationContext(), "发布成功", Toast.LENGTH_SHORT);
898
                    if (intentData.getFrom().equals(PublishItemsActivity.FROM_CHAT_HOME)) {
899
                        startActivity(new Intent(getApplicationContext(), ChatActivity.class));
900
                    } else {
901
                        startActivity(new Intent(getApplicationContext(), TopicDetailActivity.class));
902
                    }
903
904
                } else {
905
                    MobclickAgent.onEvent(getApplicationContext(), "1037");
906
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
907
                }
908
            }
909
        });
910
    }
911
912
    private void showDialogToExit() {
913
        String s = et_context.getText().toString().trim();
914
        if (s.length() > 0 || Bimp.tempSelectBitmap.size() > 0) {
915
            AlertDialog.Builder builder = new AlertDialog.Builder(PublishPicTopicActivity.this);
916
            builder.setTitle("离开发布页");
917
            builder.setMessage("小主您是否要离开发布页呢?");
918
            builder.setCancelable(false);
919
            builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
920
                @Override
921
                public void onClick(DialogInterface dialog, int which) {
922
                    MobclickAgent.onEvent(getApplicationContext(), "1022");
923
                    finish();
924
                }
925
            });
926
            builder.setNegativeButton("继续编辑", null);
927
            builder.create().show();
928
        } else {
929
            MobclickAgent.onEvent(getApplicationContext(), "1022");
930
            finish();
931
        }
932
    }
933
934
    @Override
935
    public boolean onKeyUp(int keyCode, KeyEvent event) {
936
        if (keyCode == KeyEvent.KEYCODE_BACK) {
937
            showDialogToExit();
938
            return true;
939
        }
940
        return false;
941
    }
942
}

+ 0 - 538
app/src/main/java/com/electric/chargingpile/activity/PublishVideoTopicActivity.java

1
package com.electric.chargingpile.activity;
2
3
import android.app.Activity;
4
import android.app.ProgressDialog;
5
import android.content.BroadcastReceiver;
6
import android.content.Context;
7
import android.content.DialogInterface;
8
import android.content.Intent;
9
import android.content.IntentFilter;
10
import android.content.pm.ActivityInfo;
11
import android.graphics.Color;
12
import android.net.Uri;
13
import android.os.Bundle;
14
import android.text.Editable;
15
import android.text.Html;
16
import android.text.TextUtils;
17
import android.text.TextWatcher;
18
import android.util.Log;
19
import android.view.KeyEvent;
20
import android.view.View;
21
import android.view.View.OnClickListener;
22
import android.widget.EditText;
23
import android.widget.ImageView;
24
import android.widget.RelativeLayout;
25
import android.widget.TextView;
26
import android.widget.Toast;
27
28
import androidx.appcompat.app.AlertDialog;
29
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
30
31
import com.blankj.utilcode.util.ToastUtils;
32
import com.bumptech.glide.Glide;
33
import com.bumptech.glide.request.RequestOptions;
34
import com.electric.chargingpile.R;
35
import com.electric.chargingpile.application.MainApplication;
36
import com.electric.chargingpile.data.AuthSignBean;
37
import com.electric.chargingpile.data.ChatRecommendBean;
38
import com.electric.chargingpile.data.PublishItemSerializable;
39
import com.electric.chargingpile.data.VideoUploadResult;
40
import com.electric.chargingpile.util.BarColorUtil;
41
import com.electric.chargingpile.util.Base64;
42
import com.electric.chargingpile.util.CommonParams;
43
import com.electric.chargingpile.util.DateUtils;
44
import com.electric.chargingpile.util.JsonUtils;
45
import com.electric.chargingpile.util.PhotoUtils;
46
import com.electric.chargingpile.util.ToastUtil;
47
import com.electric.chargingpile.util.Util;
48
import com.luck.picture.lib.PictureSelector;
49
import com.luck.picture.lib.animators.AnimationType;
50
import com.luck.picture.lib.config.PictureConfig;
51
import com.luck.picture.lib.config.PictureMimeType;
52
import com.luck.picture.lib.entity.LocalMedia;
53
import com.electric.chargingpile.engine.GlideEngine;
54
import com.umeng.analytics.MobclickAgent;
55
import com.upyun.library.common.UploadEngine;
56
import com.upyun.library.listener.UpCompleteListener;
57
import com.upyun.library.listener.UpProgressListener;
58
import com.zhy.http.okhttp.OkHttpUtils;
59
import com.zhy.http.okhttp.callback.StringCallback;
60
61
import java.io.File;
62
import java.util.ArrayList;
63
import java.util.HashMap;
64
import java.util.List;
65
import java.util.Map;
66
67
import cn.jpush.android.api.JPushInterface;
68
import okhttp3.Call;
69
@Deprecated
70
public class PublishVideoTopicActivity extends Activity implements OnClickListener {
71
    private static final String TAG = "PublishVideoTopicActivity";
72
    Context mContext;
73
    private ImageView mPublishtopicBack;
74
    private TextView mPublishtopicPublish;
75
    private EditText mPublishtopicCon;
76
    private ImageView mPublishtopicGv;
77
    private TextView mPublishtopicChooseTopic;
78
    private TextView mPublishtopicChoosePreview;
79
    private TextView mPublishtopicWordNum;
80
    private ImageView mPublishTopicDe;
81
82
    private RelativeLayout mItemVideoLl;
83
    private ImageView mItemVideo;
84
    private View mItemVideoDelete;
85
    private String fileName;
86
87
88
    public static final String CACHE_DIR = PhotoUtils.CACHE_DIR;
89
90
91
    public static final String IMAGE_CACHE = CACHE_DIR + "/cache/image/";
92
    LocalMedia media;
93
    ProgressDialog uploadDialog;
94
    private PublishItemSerializable intentData;
95
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
96
97
        @Override
98
        public void onReceive(Context context, Intent intent) {
99
            String message = intent.getStringExtra("message");
100
            if ("take_video".equals(message)) {
101
                MobclickAgent.onEvent(context, "1009");
102
            } else if ("preview_video".equals(message)) {
103
                MobclickAgent.onEvent(context, "1011");
104
            } else if ("finish_preview_video".equals(message)) {
105
                MobclickAgent.onEvent(context, "1012");
106
            } else if ("cancel_choosed_video".equals(message)) {
107
                MobclickAgent.onEvent(context, "1013");
108
            }
109
        }
110
    };
111
112
    @Override
113
    protected void onCreate(Bundle savedInstanceState) {
114
        super.onCreate(savedInstanceState);
115
        setContentView(R.layout.activity_publishtopic);
116
        mContext = this;
117
        uploadDialog = new ProgressDialog(this);
118
        uploadDialog.setMessage("视频上传中...");
119
        uploadDialog.setCanceledOnTouchOutside(false);
120
121
        BarColorUtil.initStatusBarColor(PublishVideoTopicActivity.this);
122
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, new IntentFilter("publish-video-topic-activity"));
123
        initView();
124
    }
125
126
127
    private void initView() {
128
        intentData = (PublishItemSerializable) getIntent().getSerializableExtra("intent_data");
129
        mPublishtopicBack = (ImageView) findViewById(R.id.publishtopic_back);
130
        mPublishtopicPublish = (TextView) findViewById(R.id.publishtopic_publish);
131
        mPublishtopicCon = (EditText) findViewById(R.id.publishtopic_con);
132
        mPublishtopicGv = (ImageView) findViewById(R.id.item_choose_video);
133
        mPublishtopicChooseTopic = (TextView) findViewById(R.id.publishtopic_choose_topic);
134
        mPublishtopicChoosePreview = (TextView) findViewById(R.id.publishtopic_choose_preview);
135
        mPublishtopicWordNum = (TextView) findViewById(R.id.publishtopic_word_num);
136
        mPublishTopicDe = (ImageView) findViewById(R.id.publishtopic_choose_topic_de);
137
138
        mItemVideoLl = (RelativeLayout) findViewById(R.id.item_video_ll);
139
        mItemVideo = (ImageView) findViewById(R.id.item_video);
140
        mItemVideoDelete = (View) findViewById(R.id.item_video_delete);
141
142
        if (intentData.getFrom().equals(PublishItemsActivity.FROM_TOPIC_DETAIL)) {
143
            chatRecommendBean = new ChatRecommendBean();
144
            chatRecommendBean.topicId = Long.parseLong(intentData.getTopicId());
145
            mPublishtopicChooseTopic.setText(intentData.getName());
146
            mPublishTopicDe.setVisibility(View.VISIBLE);
147
        }
148
149
        mPublishtopicCon.setOnFocusChangeListener(new View.OnFocusChangeListener() {
150
            @Override
151
            public void onFocusChange(View view, boolean b) {
152
                if (b) { // 获得焦点
153
                    MobclickAgent.onEvent(getApplicationContext(), "1007");
154
                }
155
156
            }
157
        });
158
159
160
        mPublishtopicCon.addTextChangedListener(new TextWatcher() {
161
            @Override
162
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
163
            }
164
165
            @Override
166
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
167
            }
168
169
            @Override
170
            public void afterTextChanged(Editable editable) {
171
                String s = mPublishtopicCon.getText().toString().trim();
172
173
                if (s.length() > 500) {
174
                    mPublishtopicCon.setText(s.subSequence(0, 500));
175
                    mPublishtopicCon.setSelection(500);
176
                }
177
                updatePublishBtn();
178
                if (TextUtils.isEmpty(s)) {
179
                    mPublishtopicWordNum.setText("0/500");
180
                } else {
181
                    mPublishtopicWordNum.setText(s.length() + "/500");
182
                }
183
            }
184
        });
185
186
        mPublishtopicBack.setOnClickListener(this);
187
        mPublishtopicPublish.setOnClickListener(this);
188
        mPublishtopicChoosePreview.setOnClickListener(this);
189
        mPublishtopicChooseTopic.setOnClickListener(this);
190
        mPublishTopicDe.setOnClickListener(this);
191
        mItemVideo.setOnClickListener(this);
192
        mItemVideoDelete.setOnClickListener(this);
193
        mPublishtopicGv.setOnClickListener(this);
194
    }
195
196
    private void updatePublishBtn() {
197
        if (null != media) {
198
            mPublishtopicPublish.setEnabled(true);
199
            mPublishtopicPublish.setBackgroundColor(Color.parseColor("#02b637"));
200
        } else {
201
            mPublishtopicPublish.setEnabled(false);
202
            mPublishtopicPublish.setBackgroundColor(Color.parseColor("#9ed3ae"));
203
        }
204
    }
205
206
207
    @Override
208
    public void onClick(View v) {
209
        switch (v.getId()) {
210
            case R.id.publishtopic_back: // 左上返回按钮事件
211
                showDialogToExit();
212
                break;
213
            case R.id.publishtopic_publish: // 右上发布事件
214
                if (media == null) {
215
                    ToastUtils.showLong("请选择视频!");
216
                    return;
217
                }
218
                MobclickAgent.onEvent(getApplicationContext(), "1035");
219
                uploadDialog.show();
220
                getYouPaiData();
221
                break;
222
            case R.id.publishtopic_choose_topic: // 选择话题事件
223
                MobclickAgent.onEvent(getApplicationContext(), "1031");
224
                mPublishtopicCon.clearFocus();
225
                startActivityForResult(new Intent(this, TopicActivity.class), reqTopic);
226
                break;
227
            case R.id.publishtopic_choose_preview: // 预览事件 暂时隐藏
228
                break;
229
            case R.id.publishtopic_choose_topic_de: // 取消选择话题事件
230
                MobclickAgent.onEvent(getApplicationContext(), "1034");
231
                mPublishtopicChooseTopic.setText("# 选择话题");
232
                mPublishTopicDe.setVisibility(View.GONE);
233
                chatRecommendBean = null;
234
                break;
235
            case R.id.item_choose_video: // 选择视频事件
236
                MobclickAgent.onEvent(getApplicationContext(), "1008");
237
                mPublishtopicCon.clearFocus();
238
239
                PictureSelector.create(PublishVideoTopicActivity.this)
240
                        .openGallery(PictureMimeType.ofVideo())// 全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
241
                        .imageEngine(GlideEngine.createGlideEngine())
242
                        .theme(R.style.picture_white_style)// 主题样式设置 具体参考 values/styles   用法:R.style.picture.white.style v2.3.3后 建议使用setPictureStyle()动态方式
243
                        .isWeChatStyle(false)// 是否开启微信图片选择风格
244
                        .isUseCustomCamera(false)// 是否使用自定义相机
245
                        .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
246
                        .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
247
//                        .setPictureWindowAnimationStyle(mWindowAnimationStyle)// 自定义相册启动退出动画
248
                        .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
249
                        .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
250
//                        .setButtonFeatures(CustomCameraView.BUTTON_STATE_ONLY_RECORDER)// 设置自定义相机按钮状态
251
                        .maxVideoSelectNum(1) // 视频最大选择数量
252
                        .minVideoSelectNum(1)// 视频最小选择数量
253
                        //.closeAndroidQChangeVideoWH(!SdkVersionUtils.checkedAndroid_Q())// 关闭在AndroidQ下获取图片或视频宽高相反自动转换
254
                        .imageSpanCount(4)// 每行显示个数
255
                        .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
256
//                        .closeAndroidQChangeWH(true)//如果图片有旋转角度则对换宽高,默认为true
257
//                        .closeAndroidQChangeVideoWH(!SdkVersionUtils.checkedAndroid_Q())// 如果视频有旋转角度则对换宽高,默认为false
258
                        .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)// 设置相册Activity方向,不设置默认使用系统
259
                        .selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选
260
                        .isPreviewVideo(true)// 是否可预览视频
261
                        .setOutputCameraPath(IMAGE_CACHE)
262
                        .isCamera(true)// 是否显示拍照按钮
263
                        .isZoomAnim(true)// 图片列表点击 缩放效果 默认true
264
                        .isCompress(true)// 是否压缩
265
                        .synOrAsy(true)//同步true或异步false 压缩 默认同步
266
                        .minimumCompressSize(500)// 小于多少kb的图片不压缩
267
                        .videoMaxSecond(120)
268
                        .videoMinSecond(2)
269
                        .recordVideoSecond(15)
270
                        .forResult(PictureConfig.CHOOSE_REQUEST);
271
                break;
272
            case R.id.item_video:
273
                if (media != null) {
274
                    // 预览视频
275
                    PictureSelector.create(PublishVideoTopicActivity.this)
276
                            .themeStyle(R.style.picture_default_style)
277
                            .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
278
                            .externalPictureVideo(TextUtils.isEmpty(media.getAndroidQToPath()) ? media.getPath() : media.getAndroidQToPath());
279
                }
280
                break;
281
            case R.id.item_video_delete: // 删除视频事件
282
                MobclickAgent.onEvent(getApplicationContext(), "1014");
283
                mItemVideoLl.setVisibility(View.GONE);
284
                mPublishtopicGv.setVisibility(View.VISIBLE);
285
                media = null;
286
                updatePublishBtn();
287
                break;
288
            default:
289
                break;
290
        }
291
    }
292
293
    private void getYouPaiData() {
294
        String url = MainApplication.urlNew + "/topic/sign.do";
295
        if (TextUtils.isEmpty(fileName)) {
296
            ToastUtil.showToast(getApplicationContext(), "请重新选择视频", Toast.LENGTH_SHORT);
297
            return;
298
        }
299
        Map<String, String> map = new HashMap<>();
300
        map.put("fileNames", fileName);
301
        map.put("targetType", ChatRecommendBean.TARGET_TYPE_VIDEO + "");
302
        CommonParams.addCommonParams(map);
303
304
        OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
305
            @Override
306
            public void onError(Call call, Exception e) {
307
                ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT);
308
                uploadDialog.dismiss();
309
            }
310
311
            @Override
312
            public void onResponse(String response) {
313
                String code = JsonUtils.getKeyResult(response, "code");
314
                String desc = JsonUtils.getKeyResult(response, "desc");
315
                if ("1000".equals(code)) {
316
                    String data = JsonUtils.getKeyResult(response, "data");
317
                    ArrayList<AuthSignBean> signBeans = (ArrayList<AuthSignBean>) JsonUtils.parseToObjectList(data, AuthSignBean.class);
318
                    if (null != signBeans && signBeans.size() > 0) {
319
                        String sign = signBeans.get(0).sign;
320
                        String policy = signBeans.get(0).policy;
321
                        formUpload(TextUtils.isEmpty(media.getAndroidQToPath()) ? media.getPath() : media.getAndroidQToPath(), sign, policy);
322
                    }
323
                } else {
324
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
325
                    uploadDialog.dismiss();
326
                }
327
            }
328
        });
329
330
    }
331
332
    /**
333
     * 表单上传
334
     *
335
     * @param SAMPLE_PIC_FILE
336
     * @param sign
337
     * @param policyServer
338
     */
339
    private void formUpload(String SAMPLE_PIC_FILE, String sign, String policyServer) {
340
        File temp = new File(SAMPLE_PIC_FILE);
341
//        //进度回调,可为空
342
        UpProgressListener progressListener = new UpProgressListener() {
343
            @Override
344
            public void onRequestProgress(long bytesWrite, long contentLength) {
345
            }
346
        };
347
348
        //结束回调,不可为空
349
        UpCompleteListener completeListener = new UpCompleteListener() {
350
            @Override
351
            public void onComplete(boolean isSuccess, String result) {
352
                if (isSuccess) {
353
                    VideoUploadResult videoUploadResult = new VideoUploadResult(result);
354
                    requestPublishServer("[" + videoUploadResult.formatResult() + "]");
355
                } else {
356
                    ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT);
357
                    uploadDialog.dismiss();
358
                    MobclickAgent.onEvent(getApplicationContext(), "1037");
359
                }
360
            }
361
        };
362
363
        //表单上传(服务器签名方式)
364
        UploadEngine.getInstance().formUpload(temp, policyServer, "d1evvideo01", sign, completeListener,
365
                progressListener);
366
367
    }
368
369
    private void requestPublishServer(String urls) {
370
371
        String url = MainApplication.urlNew + "/topic/publish.do";
372
        Map<String, String> map = new HashMap<>();
373
        map.put("content", mPublishtopicCon.getText().toString().trim());
374
        map.put("urls", Base64.encode(urls.getBytes()).replaceAll("\\s*", ""));
375
        if (chatRecommendBean != null) {
376
            map.put("topicId", chatRecommendBean.topicId + "");
377
        }
378
        map.put("targetType", ChatRecommendBean.TARGET_TYPE_VIDEO + "");
379
        CommonParams.addCommonParams(map);
380
381
        OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
382
            @Override
383
            public void onError(Call call, Exception e) {
384
                ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT);
385
                uploadDialog.dismiss();
386
                MobclickAgent.onEvent(getApplicationContext(), "1037");
387
            }
388
389
            @Override
390
            public void onResponse(String response) {
391
                String code = JsonUtils.getKeyResult(response, "code");
392
                if ("1000".equals(code)) { // 视频发布成功
393
                    ToastUtil.showToast(getApplicationContext(), "发布成功", Toast.LENGTH_SHORT);
394
                    if (intentData.getFrom().equals(PublishItemsActivity.FROM_CHAT_HOME)) {
395
                        startActivity(new Intent(getApplicationContext(), ChatActivity.class));
396
                    } else {
397
                        startActivity(new Intent(getApplicationContext(), TopicDetailActivity.class));
398
                    }
399
                    MobclickAgent.onEvent(getApplicationContext(), "1036");
400
                } else {
401
                    String desc = JsonUtils.getKeyResult(response, "desc");
402
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
403
                    MobclickAgent.onEvent(getApplicationContext(), "1037");
404
                }
405
                uploadDialog.dismiss();
406
            }
407
        });
408
    }
409
410
411
    final int reqTopic = 100;
412
    ChatRecommendBean chatRecommendBean = null;
413
414
    @Override
415
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
416
        super.onActivityResult(requestCode, resultCode, data);
417
        if (requestCode == reqTopic && resultCode == -100) { // 选择话题完成
418
            chatRecommendBean = (ChatRecommendBean) data.getSerializableExtra("topic");
419
            if (chatRecommendBean != null) {
420
                mPublishtopicChooseTopic.setText(Html.fromHtml(chatRecommendBean.name));
421
                mPublishTopicDe.setVisibility(View.VISIBLE);
422
            }
423
        } else if (requestCode == PictureConfig.CHOOSE_REQUEST && resultCode == RESULT_OK) {
424
            List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
425
            if (selectList != null && selectList.size() > 0) {
426
                MobclickAgent.onEvent(getApplicationContext(), "1010");
427
                media = selectList.get(0);
428
429
                String deviceId = JPushInterface.getUdid(MainApplication.context);
430
                fileName = DateUtils.getSimpleCurrentDate();
431
                if (TextUtils.isEmpty(deviceId)) {
432
                    fileName += "_" + Util.getRandom(15);
433
                } else {
434
                    fileName += "_" + deviceId;
435
                }
436
                String videoPath = TextUtils.isEmpty(media.getAndroidQToPath()) ? media.getPath() : media.getAndroidQToPath();
437
                if (TextUtils.isEmpty(videoPath)) {
438
                    fileName = "";
439
                } else {
440
                    String suffix = videoPath.substring(videoPath.lastIndexOf(".") + 1);
441
                    fileName += "." + suffix;
442
                }
443
444
                if (TextUtils.isEmpty(videoPath)) {
445
                    return;
446
                }
447
448
                if (!fileIsExists(videoPath)) {
449
                    Log.e("yopic", "文件可能不存在了~");
450
                    return;
451
                }
452
                if (isDestroyed()) {
453
                    return;
454
                }
455
456
                Glide.with(this)
457
                        .load(videoPath)
458
                        .apply(new RequestOptions().centerCrop())
459
                        .into(mItemVideo);
460
                mItemVideoLl.setVisibility(View.VISIBLE);
461
                mPublishtopicGv.setVisibility(View.GONE);
462
                updatePublishBtn();
463
                Log.e("yopic", "TEST===> video path = " + media.getPath()
464
                        + ",  compressPath = " + media.getCompressPath()
465
                        + ", height = " + media.getHeight()
466
                        + ", width = " + media.getWidth());
467
            }
468
469
        }
470
    }
471
472
    public static boolean fileIsExists(String strFile) {
473
        if (TextUtils.isEmpty(strFile)) {
474
            return false;
475
        }
476
        try {
477
            File f = new File(strFile);
478
            if (!f.exists()) {
479
                return false;
480
            }
481
482
        } catch (Exception e) {
483
            return false;
484
        }
485
486
        return true;
487
    }
488
489
    @Override
490
    protected void onResume() {
491
        super.onResume();
492
        MobclickAgent.onResume(this);
493
    }
494
495
    @Override
496
    protected void onPause() {
497
        super.onPause();
498
        MobclickAgent.onPause(this);
499
    }
500
501
    @Override
502
    protected void onDestroy() {
503
        LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);
504
        super.onDestroy();
505
    }
506
507
    private void showDialogToExit() {
508
509
        String s = mPublishtopicCon.getText().toString().trim();
510
        if (s.length() > 0 || media != null) {
511
            AlertDialog.Builder builder = new AlertDialog.Builder(PublishVideoTopicActivity.this);
512
            builder.setTitle("离开发布页");
513
            builder.setMessage("小主您是否要离开发布页呢?");
514
            builder.setCancelable(false);
515
            builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
516
                @Override
517
                public void onClick(DialogInterface dialog, int which) {
518
                    MobclickAgent.onEvent(getApplicationContext(), "1006");
519
                    finish();
520
                }
521
            });
522
            builder.setNegativeButton("继续编辑", null);
523
            builder.create().show();
524
        } else {
525
            MobclickAgent.onEvent(getApplicationContext(), "1006");
526
            finish();
527
        }
528
    }
529
530
    @Override
531
    public boolean onKeyUp(int keyCode, KeyEvent event) {
532
        if (keyCode == KeyEvent.KEYCODE_BACK) {
533
            showDialogToExit();
534
            return true;
535
        }
536
        return false;
537
    }
538
}

+ 71 - 81
app/src/main/java/com/electric/chargingpile/activity/ShareTwoActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import static com.hjq.permissions.Permission.CAMERA;
4
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
5
3
import android.Manifest;
6
import android.Manifest;
4
import android.annotation.SuppressLint;
7
import android.annotation.SuppressLint;
5
import android.app.Activity;
8
import android.app.Activity;
17
import android.os.Bundle;
20
import android.os.Bundle;
18
import android.os.Handler;
21
import android.os.Handler;
19
import android.os.Message;
22
import android.os.Message;
23
import android.provider.MediaStore;
20
import android.util.Base64;
24
import android.util.Base64;
21
import android.util.Log;
25
import android.util.Log;
22
import android.view.KeyEvent;
26
import android.view.KeyEvent;
54
import com.electric.chargingpile.util.Bimp;
58
import com.electric.chargingpile.util.Bimp;
55
import com.electric.chargingpile.util.DES3;
59
import com.electric.chargingpile.util.DES3;
56
import com.electric.chargingpile.util.DensityUtil;
60
import com.electric.chargingpile.util.DensityUtil;
61
import com.electric.chargingpile.util.ImageFileCompressEngine;
57
import com.electric.chargingpile.util.ImageItem;
62
import com.electric.chargingpile.util.ImageItem;
58
import com.electric.chargingpile.util.JsonUtils;
63
import com.electric.chargingpile.util.JsonUtils;
64
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
65
import com.electric.chargingpile.util.MeSandboxFileEngine;
59
import com.electric.chargingpile.util.OkHttpUtil;
66
import com.electric.chargingpile.util.OkHttpUtil;
67
import com.electric.chargingpile.util.PictureUtlis;
60
import com.electric.chargingpile.util.PublicWayFour;
68
import com.electric.chargingpile.util.PublicWayFour;
61
import com.electric.chargingpile.util.Res;
69
import com.electric.chargingpile.util.Res;
62
import com.electric.chargingpile.util.SharedPreferencesUtil;
70
import com.electric.chargingpile.util.SharedPreferencesUtil;
67
import com.electric.chargingpile.view.ShareDialog;
75
import com.electric.chargingpile.view.ShareDialog;
68
import com.google.gson.Gson;
76
import com.google.gson.Gson;
69
import com.google.gson.reflect.TypeToken;
77
import com.google.gson.reflect.TypeToken;
70
import com.luck.picture.lib.PictureSelector;
78
79
import com.hjq.permissions.OnPermissionCallback;
80
import com.hjq.permissions.XXPermissions;
71
import com.luck.picture.lib.animators.AnimationType;
81
import com.luck.picture.lib.animators.AnimationType;
82
import com.luck.picture.lib.basic.PictureSelector;
72
import com.luck.picture.lib.config.PictureConfig;
83
import com.luck.picture.lib.config.PictureConfig;
73
import com.luck.picture.lib.config.PictureMimeType;
84
import com.luck.picture.lib.config.PictureMimeType;
85
import com.luck.picture.lib.config.SelectMimeType;
86
import com.luck.picture.lib.config.SelectModeConfig;
74
import com.luck.picture.lib.entity.LocalMedia;
87
import com.luck.picture.lib.entity.LocalMedia;
75
import com.squareup.okhttp.Request;
88
import com.squareup.okhttp.Request;
76
import com.squareup.okhttp.Response;
89
import com.squareup.okhttp.Response;
102
import pub.devrel.easypermissions.AfterPermissionGranted;
115
import pub.devrel.easypermissions.AfterPermissionGranted;
103
import pub.devrel.easypermissions.EasyPermissions;
116
import pub.devrel.easypermissions.EasyPermissions;
104
117
105
public class ShareTwoActivity extends Activity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
118
public class ShareTwoActivity extends Activity implements View.OnClickListener {
106
    private static final String TAG = "ShareTwoActivity";
119
    private static final String TAG = "ShareTwoActivity";
107
    private static final int PIC_NUM = 4;
120
    private static final int PIC_NUM = 4;
108
    private ImageView ivBack, ivType;
121
    private ImageView ivBack, ivType;
344
     * 调用图库选择
357
     * 调用图库选择
345
     */
358
     */
346
    private void callGallery() {
359
    private void callGallery() {
347
/*
348
        Matisse.from(ShareTwoActivity.this)
349
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
350
                .showSingleMediaType(true)
351
                .countable(true)
352
                .maxSelectable(1)
353
                .capture(true)
354
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
355
                .imageEngine(new GlideEngine())
356
                .forResult(REQUEST_CODE_CHOOSE);
357
*/
358
        PictureSelector.create(this)
360
        PictureSelector.create(this)
359
                .openGallery(PictureMimeType.ofImage())
360
                .selectionMode(PictureConfig.SINGLE)
361
                .isCompress(true)//是否压缩
362
                .isSingleDirectReturn(true)
363
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
364
                .isGif(true)//是否显示gif
365
                .isAndroidQTransform(true)
366
                .imageEngine(GlideEngine.createGlideEngine())
367
                .isWeChatStyle(false)// 是否开启微信图片选择风格
368
                .isUseCustomCamera(false)// 是否使用自定义相机
369
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
370
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
371
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
372
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
373
                .imageSpanCount(4)// 每行显示个数
374
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
375
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
361
                .openGallery(SelectMimeType.ofImage())
362
                .setSelectorUIStyle(PictureUtlis.getStyle())
363
                .setImageEngine(GlideEngine.createGlideEngine())
364
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
365
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
366
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
367
                .setSelectionMode(SelectModeConfig.SINGLE)
368
                .setMaxSelectNum(1)
369
                .isEmptyResultReturn(true) //支持未选择返回
370
                .setImageSpanCount(4)
371
                .isPageStrategy(true)   // 是否开启分页模式
372
                .isDisplayCamera(true) //是否显示相机入口
373
                .isPreviewFullScreenMode(true)//预览点击全屏效果
374
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
375
                .isEmptyResultReturn(true)//支持未选择返回
376
                .isWithSelectVideoImage(false)//是否支持视频图片同选
377
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
378
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
379
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
380
                .isGif(false)// 是否显示gif文件
381
                .isWebp(true)// 是否显示webp文件
382
                .isBmp(true)//是否显示bmp文件
383
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
384
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
385
                .isFastSlidingSelect(true) //快速滑动选择
386
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
387
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
388
                .isPreviewImage(true)//是否预览图片
389
                .setFilterMinFileSize(1) //过滤最小文件
376
                .forResult(REQUEST_CODE_CHOOSE);
390
                .forResult(REQUEST_CODE_CHOOSE);
377
    }
391
    }
378
392
403
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
417
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
404
418
405
                try {
419
                try {
406
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
420
                    List<LocalMedia> mediaList = PictureSelector.obtainSelectorList(data);
407
                    if (mediaList!=null && mediaList.size()>0){
421
                    if (mediaList!=null && mediaList.size()>0){
408
                       /* List<Uri> uriList = Matisse.obtainResult(data);
409
                        Uri uri = uriList.get(0);
410
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
411
                        File file = FileUtils.from(ShareTwoActivity.this, uri);
412
413
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
414
                        bitmap = imageZoom(bitmap);
415
*/
416
                        String path="";
417
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
418
                            path= mediaList.get(0).getAndroidQToPath();
419
                        }else{
420
                            path=mediaList.get(0).getPath();
421
                        }
422
                        String path = Util.getCompressAbsolutePath(mediaList.get(0));
422
                        ImageItem takePhoto = new ImageItem();
423
                        ImageItem takePhoto = new ImageItem();
423
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
424
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
424
                        selectBitmap[selectIndex] = takePhoto;
425
                        selectBitmap[selectIndex] = takePhoto;
953
        }
954
        }
954
    }
955
    }
955
956
956
    @Override
957
    public void onRequestPermissionsResult(int requestCode,
958
                                           @NonNull String[] permissions,
959
                                           @NonNull int[] grantResults) {
960
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
961
962
        // EasyPermissions handles the request result.
963
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
964
    }
965
966
    @Override
967
    public void onPermissionsGranted(int requestCode, List<String> perms) {
968
957
969
    }
970
958
971
    @Override
972
    public void onPermissionsDenied(int requestCode, List<String> perms) {
973
974
    }
975
959
976
    @AfterPermissionGranted(RC_ALBUM_PERM)
977
    public void permissionTask() {
960
    public void permissionTask() {
978
        if (isPermissionOK()) {
979
            callGallery();
980
        } else {
981
            // Ask for one permission
982
            EasyPermissions.requestPermissions(
983
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
984
                    RC_ALBUM_PERM,
985
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
986
                    Manifest.permission.READ_EXTERNAL_STORAGE,
987
                    Manifest.permission.CAMERA);
988
        }
961
        String[] callPhone  =
962
                new String[]{READ_MEDIA_IMAGES, CAMERA};
963
        XXPermissions.with(this)
964
                // 申请单个权限
965
                .permission(callPhone)
966
                .request(new OnPermissionCallback() {
967
                    @Override
968
                    public void onGranted(List<String> permissions, boolean all) {
969
                        if (all) {
970
                            callGallery();
971
                        }else{
972
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
973
                        }
974
                    }
975
                    @Override
976
                    public void onDenied(List<String> permissions, boolean never) {
977
                        if (never) {
978
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
979
                            XXPermissions.startPermissionActivity(ShareTwoActivity.this, permissions);
980
                        } else {
981
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
982
                        }
983
                    }
984
                });
989
    }
985
    }
990
986
991
    private boolean isPermissionOK() {
992
        return EasyPermissions.hasPermissions(this,
993
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
994
                Manifest.permission.READ_EXTERNAL_STORAGE,
995
                Manifest.permission.CAMERA
996
        );
997
    }
987
998
988
999
    @SuppressLint("HandlerLeak")
989
    @SuppressLint("HandlerLeak")
1000
    public class GridAdapter extends BaseAdapter {
990
    public class GridAdapter extends BaseAdapter {

+ 71 - 73
app/src/main/java/com/electric/chargingpile/activity/ShareTwoEditActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import static com.hjq.permissions.Permission.CAMERA;
4
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
5
3
import android.Manifest;
6
import android.Manifest;
4
import android.app.Activity;
7
import android.app.Activity;
5
import android.app.ProgressDialog;
8
import android.app.ProgressDialog;
50
import com.electric.chargingpile.data.Zhan;
53
import com.electric.chargingpile.data.Zhan;
51
import com.electric.chargingpile.engine.GlideEngine;
54
import com.electric.chargingpile.engine.GlideEngine;
52
import com.electric.chargingpile.util.BarColorUtil;
55
import com.electric.chargingpile.util.BarColorUtil;
56
import com.electric.chargingpile.util.Bimp;
53
import com.electric.chargingpile.util.DES3;
57
import com.electric.chargingpile.util.DES3;
54
import com.electric.chargingpile.util.DensityUtil;
58
import com.electric.chargingpile.util.DensityUtil;
59
import com.electric.chargingpile.util.ImageFileCompressEngine;
55
import com.electric.chargingpile.util.ImageItem;
60
import com.electric.chargingpile.util.ImageItem;
56
import com.electric.chargingpile.util.JsonUtils;
61
import com.electric.chargingpile.util.JsonUtils;
62
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
63
import com.electric.chargingpile.util.MeSandboxFileEngine;
57
import com.electric.chargingpile.util.OkHttpUtil;
64
import com.electric.chargingpile.util.OkHttpUtil;
65
import com.electric.chargingpile.util.PictureUtlis;
58
import com.electric.chargingpile.util.PublicWayFour;
66
import com.electric.chargingpile.util.PublicWayFour;
59
import com.electric.chargingpile.util.Res;
67
import com.electric.chargingpile.util.Res;
60
import com.electric.chargingpile.util.SharedPreferencesUtil;
68
import com.electric.chargingpile.util.SharedPreferencesUtil;
63
import com.electric.chargingpile.util.Util;
71
import com.electric.chargingpile.util.Util;
64
import com.electric.chargingpile.view.CustomProgressDialog;
72
import com.electric.chargingpile.view.CustomProgressDialog;
65
import com.electric.chargingpile.view.ShareDialog;
73
import com.electric.chargingpile.view.ShareDialog;
66
import com.luck.picture.lib.PictureSelector;
74
75
import com.hjq.permissions.OnPermissionCallback;
76
import com.hjq.permissions.XXPermissions;
67
import com.luck.picture.lib.animators.AnimationType;
77
import com.luck.picture.lib.animators.AnimationType;
78
import com.luck.picture.lib.basic.PictureSelector;
68
import com.luck.picture.lib.config.PictureConfig;
79
import com.luck.picture.lib.config.PictureConfig;
69
import com.luck.picture.lib.config.PictureMimeType;
80
import com.luck.picture.lib.config.PictureMimeType;
81
import com.luck.picture.lib.config.SelectMimeType;
82
import com.luck.picture.lib.config.SelectModeConfig;
70
import com.luck.picture.lib.entity.LocalMedia;
83
import com.luck.picture.lib.entity.LocalMedia;
71
import com.squareup.okhttp.Request;
84
import com.squareup.okhttp.Request;
72
import com.squareup.okhttp.Response;
85
import com.squareup.okhttp.Response;
101
import pub.devrel.easypermissions.AfterPermissionGranted;
114
import pub.devrel.easypermissions.AfterPermissionGranted;
102
import pub.devrel.easypermissions.EasyPermissions;
115
import pub.devrel.easypermissions.EasyPermissions;
103
116
104
public class ShareTwoEditActivity extends Activity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
117
public class ShareTwoEditActivity extends Activity implements View.OnClickListener{
105
    private static final String TAG = "ShareTwoActivity";
118
    private static final String TAG = "ShareTwoActivity";
106
    private static final int PIC_NUM = 4;
119
    private static final int PIC_NUM = 4;
107
    private ImageView ivBack, ivType;
120
    private ImageView ivBack, ivType;
299
     * 调用图库选择
312
     * 调用图库选择
300
     */
313
     */
301
    private void callGallery() {
314
    private void callGallery() {
302
/*
303
        Matisse.from(ShareTwoEditActivity.this)
304
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
305
                .showSingleMediaType(true)
306
                .countable(true)
307
                .maxSelectable(1)
308
                .capture(true)
309
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
310
                .imageEngine(new GlideEngine())
311
                .forResult(REQUEST_CODE_CHOOSE);
312
*/
313
        PictureSelector.create(this)
315
        PictureSelector.create(this)
314
                .openGallery(PictureMimeType.ofImage())
315
                .selectionMode(PictureConfig.SINGLE)
316
                .isSingleDirectReturn(true)
317
                .isCompress(true)//是否压缩
318
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
319
                .isGif(true)//是否显示gif
320
                .isAndroidQTransform(true)
321
                .imageEngine(GlideEngine.createGlideEngine())
322
                .isWeChatStyle(false)// 是否开启微信图片选择风格
323
                .isUseCustomCamera(false)// 是否使用自定义相机
324
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
325
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
326
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
327
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
328
                .imageSpanCount(4)// 每行显示个数
329
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
330
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
316
                .openGallery(SelectMimeType.ofImage())
317
                .setSelectorUIStyle(PictureUtlis.getStyle())
318
                .setImageEngine(GlideEngine.createGlideEngine())
319
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
320
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
321
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
322
                .setSelectionMode(SelectModeConfig.SINGLE)
323
                .setMaxSelectNum(1)
324
                .isEmptyResultReturn(true) //支持未选择返回
325
                .setImageSpanCount(4)
326
                .isPageStrategy(true)   // 是否开启分页模式
327
                .isDisplayCamera(true) //是否显示相机入口
328
                .isPreviewFullScreenMode(true)//预览点击全屏效果
329
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
330
                .isEmptyResultReturn(true)//支持未选择返回
331
                .isWithSelectVideoImage(false)//是否支持视频图片同选
332
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
333
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
334
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
335
                .isGif(false)// 是否显示gif文件
336
                .isWebp(true)// 是否显示webp文件
337
                .isBmp(true)//是否显示bmp文件
338
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
339
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
340
                .isFastSlidingSelect(true) //快速滑动选择
341
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
342
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
343
                .isPreviewImage(true)//是否预览图片
344
                .setFilterMinFileSize(1) //过滤最小文件
331
                .forResult(REQUEST_CODE_CHOOSE);
345
                .forResult(REQUEST_CODE_CHOOSE);
332
346
333
    }
347
    }
358
            @Override
372
            @Override
359
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
373
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
360
                try {
374
                try {
361
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
375
                    List<LocalMedia> mediaList = PictureSelector.obtainSelectorList(data);
362
                    if (mediaList!=null && mediaList.size()>0){
376
                    if (mediaList!=null && mediaList.size()>0){
363
                      /*  List<Uri> uriList = Matisse.obtainResult(data);
364
                        Uri uri = uriList.get(0);
365
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
366
                        File file = FileUtils.from(ShareTwoEditActivity.this, uri);
367
368
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
369
                        bitmap = imageZoom(bitmap);
370
*/
371
                        String path="";
372
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
373
                            path= mediaList.get(0).getAndroidQToPath();
374
                        }else{
375
                            path=mediaList.get(0).getPath();
376
                        }
377
                        String path = Util.getCompressAbsolutePath(mediaList.get(0));
377
                        ImageItem takePhoto = new ImageItem();
378
                        ImageItem takePhoto = new ImageItem();
378
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
379
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
379
                        selectBitmap[selectIndex] = takePhoto;
380
                        selectBitmap[selectIndex] = takePhoto;
922
        }
923
        }
923
    }
924
    }
924
925
925
    @Override
926
    public void onRequestPermissionsResult(int requestCode,
927
                                           @NonNull String[] permissions,
928
                                           @NonNull int[] grantResults) {
929
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
930
926
931
        // EasyPermissions handles the request result.
932
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
933
    }
934
927
935
    @Override
936
    public void onPermissionsGranted(int requestCode, List<String> perms) {
937
938
    }
939
928
940
    @Override
941
    public void onPermissionsDenied(int requestCode, List<String> perms) {
929
    public void permissionTask() {
942
930
943
    }
931
        String[] callPhone  =
932
                new String[]{READ_MEDIA_IMAGES, CAMERA};
933
        XXPermissions.with(this)
934
                // 申请单个权限
935
                .permission(callPhone)
936
                .request(new OnPermissionCallback() {
937
                    @Override
938
                    public void onGranted(List<String> permissions, boolean all) {
939
                        if (all) {
940
                            callGallery();
941
                        }else{
942
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
943
                        }
944
                    }
945
                    @Override
946
                    public void onDenied(List<String> permissions, boolean never) {
947
                        if (never) {
948
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
949
                            XXPermissions.startPermissionActivity(ShareTwoEditActivity.this, permissions);
950
                        } else {
951
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
952
                        }
953
                    }
954
                });
944
955
945
    @AfterPermissionGranted(RC_ALBUM_PERM)
946
    public void permissionTask() {
947
        if (isPermissionOK()) {
948
            callGallery();
949
        } else {
950
            // Ask for one permission
951
            EasyPermissions.requestPermissions(
952
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
953
                    RC_ALBUM_PERM,
954
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
955
                    Manifest.permission.READ_EXTERNAL_STORAGE,
956
                    Manifest.permission.CAMERA);
957
        }
958
    }
956
    }
959
957
960
    private boolean isPermissionOK() {
958
    private boolean isPermissionOK() {

+ 102 - 95
app/src/main/java/com/electric/chargingpile/activity/SkipUserInfoActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import static com.hjq.permissions.Permission.CAMERA;
4
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
5
3
import android.Manifest;
6
import android.Manifest;
4
import android.app.Activity;
7
import android.app.Activity;
5
import android.content.Context;
8
import android.content.Context;
54
import com.electric.chargingpile.util.ActivityManagerApplication;
57
import com.electric.chargingpile.util.ActivityManagerApplication;
55
import com.electric.chargingpile.util.BarColorUtil;
58
import com.electric.chargingpile.util.BarColorUtil;
56
import com.electric.chargingpile.util.DES3;
59
import com.electric.chargingpile.util.DES3;
60
import com.electric.chargingpile.util.ImageCropEngine;
61
import com.electric.chargingpile.util.ImageFileCompressEngine;
57
import com.electric.chargingpile.util.ImageTools;
62
import com.electric.chargingpile.util.ImageTools;
58
import com.electric.chargingpile.util.JsonUtils;
63
import com.electric.chargingpile.util.JsonUtils;
59
import com.electric.chargingpile.util.LoadingDialog;
64
import com.electric.chargingpile.util.LoadingDialog;
60
import com.electric.chargingpile.util.LogUtils;
65
import com.electric.chargingpile.util.LogUtils;
66
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
67
import com.electric.chargingpile.util.MeSandboxFileEngine;
61
import com.electric.chargingpile.util.OkHttpUtil;
68
import com.electric.chargingpile.util.OkHttpUtil;
62
import com.electric.chargingpile.util.PhotoUtils;
69
import com.electric.chargingpile.util.PhotoUtils;
70
import com.electric.chargingpile.util.PictureUtlis;
63
import com.electric.chargingpile.util.StatusConstants;
71
import com.electric.chargingpile.util.StatusConstants;
64
import com.electric.chargingpile.util.ToastUtil;
72
import com.electric.chargingpile.util.ToastUtil;
65
import com.electric.chargingpile.util.UploadUtil;
73
import com.electric.chargingpile.util.UploadUtil;
68
import com.electric.chargingpile.view.RoundImageView;
76
import com.electric.chargingpile.view.RoundImageView;
69
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
77
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
70
import com.google.gson.Gson;
78
import com.google.gson.Gson;
71
import com.luck.picture.lib.PictureSelector;
79
80
import com.hjq.permissions.OnPermissionCallback;
81
import com.hjq.permissions.XXPermissions;
72
import com.luck.picture.lib.animators.AnimationType;
82
import com.luck.picture.lib.animators.AnimationType;
83
import com.luck.picture.lib.basic.PictureSelector;
73
import com.luck.picture.lib.config.PictureConfig;
84
import com.luck.picture.lib.config.PictureConfig;
74
import com.luck.picture.lib.config.PictureMimeType;
85
import com.luck.picture.lib.config.PictureMimeType;
86
import com.luck.picture.lib.config.SelectMimeType;
87
import com.luck.picture.lib.config.SelectModeConfig;
75
import com.luck.picture.lib.entity.LocalMedia;
88
import com.luck.picture.lib.entity.LocalMedia;
76
import com.squareup.okhttp.Request;
89
import com.squareup.okhttp.Request;
77
import com.squareup.okhttp.Response;
90
import com.squareup.okhttp.Response;
102
import pub.devrel.easypermissions.EasyPermissions;
115
import pub.devrel.easypermissions.EasyPermissions;
103
116
104
117
105
public class SkipUserInfoActivity extends Activity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
118
public class SkipUserInfoActivity extends Activity implements View.OnClickListener {
106
    private ImageView back;
119
    private ImageView back;
107
    private EditText et_nickName;
120
    private EditText et_nickName;
108
    private EditText et_realName;
121
    private EditText et_realName;
293
        spinnerCity.setOnItemSelectedListener(new CityAdapter());
306
        spinnerCity.setOnItemSelectedListener(new CityAdapter());
294
    }
307
    }
295
308
296
    @Override
297
    public void onPermissionsGranted(int requestCode, List<String> perms) {
298
299
    }
300
301
    @Override
302
    public void onPermissionsDenied(int requestCode, List<String> perms) {
303
304
    }
305
309
306
    private void showWindow() {
310
    private void showWindow() {
307
        LayoutInflater inflater = (LayoutInflater) getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
311
        LayoutInflater inflater = (LayoutInflater) getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
369
        popupWindow.showAtLocation(cancleButton, Gravity.CENTER, 0, 0);
373
        popupWindow.showAtLocation(cancleButton, Gravity.CENTER, 0, 0);
370
    }
374
    }
371
375
372
    @AfterPermissionGranted(RC_CAMERA_PERM)
376
373
    public void cameraTask() {
377
    public void cameraTask() {
374
        if (hasCameraPermission()) {
375
            // Have permission, do the thing!
376
//            Toast.makeText(this, "TODO: Camera things", Toast.LENGTH_LONG).show();
377
            showWindow();
378
        } else {
379
            // Ask for one permission
380
            EasyPermissions.requestPermissions(
381
                    this,
382
                    "充电桩需要获取您相关权限,是否允许?",
383
                    RC_CAMERA_PERM,
384
                    Manifest.permission.CAMERA,
385
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
386
                    Manifest.permission.READ_EXTERNAL_STORAGE);
387
        }
378
        String[] callPhone  =
379
                new String[]{READ_MEDIA_IMAGES, CAMERA};
380
        XXPermissions.with(this)
381
                // 申请单个权限
382
                .permission(callPhone)
383
                .request(new OnPermissionCallback() {
384
                    @Override
385
                    public void onGranted(List<String> permissions, boolean all) {
386
                        if (all) {
387
                            showWindow();
388
                        }else{
389
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
390
                        }
391
                    }
392
                    @Override
393
                    public void onDenied(List<String> permissions, boolean never) {
394
                        if (never) {
395
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
396
                            XXPermissions.startPermissionActivity(SkipUserInfoActivity.this, permissions);
397
                        } else {
398
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
399
                        }
400
                    }
401
                });
388
    }
402
    }
389
403
390
    private boolean hasCameraPermission() {
391
        return EasyPermissions.hasPermissions(this,
392
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
393
                Manifest.permission.READ_EXTERNAL_STORAGE,
394
                Manifest.permission.CAMERA
395
        );
396
    }
404
397
405
398
    class ProvinceAdapter implements AdapterView.OnItemSelectedListener {
406
    class ProvinceAdapter implements AdapterView.OnItemSelectedListener {
399
407
515
     */
523
     */
516
    public void takePhoto(View view) {
524
    public void takePhoto(View view) {
517
        PictureSelector.create(this)
525
        PictureSelector.create(this)
518
                .openCamera(PictureMimeType.ofImage())
519
                .selectionMode(PictureConfig.SINGLE)
520
                .isSingleDirectReturn(true)
521
                .isCompress(true)//是否压缩
522
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
523
                .isGif(false)//是否显示gif
524
                .isAndroidQTransform(true)
525
                .imageEngine(GlideEngine.createGlideEngine())
526
                .isWeChatStyle(false)// 是否开启微信图片选择风格
527
                .isUseCustomCamera(false)// 是否使用自定义相机
528
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
529
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
530
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
531
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
532
                .imageSpanCount(4)// 每行显示个数
533
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
534
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
535
                .isEnableCrop(true)
536
                .rotateEnabled(false)//裁剪是否可旋转图片
537
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
538
                .freeStyleCropEnabled(true)// 裁剪框拖动模式
539
                //.isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
540
                .circleDimmedLayer(true)// 是否开启圆形裁剪
541
                .isDragFrame(true)//是否可拖动裁剪框(固定)
542
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
543
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
526
                .openGallery(SelectMimeType.ofImage())
527
                .setSelectorUIStyle(PictureUtlis.getStyle())
528
                .setImageEngine(GlideEngine.createGlideEngine())
529
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
530
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
531
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
532
                .setSelectionMode(SelectModeConfig.SINGLE)
533
                .setMaxSelectNum(1)
534
                .isEmptyResultReturn(true) //支持未选择返回
535
                .setImageSpanCount(4)
536
                .isPageStrategy(true)   // 是否开启分页模式
537
                .isDisplayCamera(true) //是否显示相机入口
538
                .isPreviewFullScreenMode(true)//预览点击全屏效果
539
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
540
                .isEmptyResultReturn(true)//支持未选择返回
541
                .isWithSelectVideoImage(false)//是否支持视频图片同选
542
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
543
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
544
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
545
                .isGif(false)// 是否显示gif文件
546
                .isWebp(true)// 是否显示webp文件
547
                .isBmp(true)//是否显示bmp文件
548
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
549
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
550
                .isFastSlidingSelect(true) //快速滑动选择
551
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
552
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
553
                .isPreviewImage(true)//是否预览图片
554
                .setCropEngine(new ImageCropEngine(1F,1F,true))
555
                .setFilterMinFileSize(1) //过滤最小文件
544
                .forResult(2);
556
                .forResult(2);
545
546
    }
557
    }
547
    private void openPhotoAlbum() {
558
    private void openPhotoAlbum() {
548
        PictureSelector.create(this)
559
        PictureSelector.create(this)
549
                .openGallery(PictureMimeType.ofImage())
550
                .isCamera(false)//列表是否显示拍照按钮
551
                .selectionMode(PictureConfig.SINGLE)
552
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
553
                .isCompress(true)//是否压缩
554
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
555
                .isGif(false)//是否显示gif
556
                .isAndroidQTransform(true)
557
                .imageEngine(GlideEngine.createGlideEngine())
558
                .isWeChatStyle(false)// 是否开启微信图片选择风格
559
                .isUseCustomCamera(false)// 是否使用自定义相机
560
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
561
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
562
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
563
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
564
                .imageSpanCount(4)// 每行显示个数
565
                .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
566
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
567
                .rotateEnabled(false)//裁剪是否可旋转图片
568
                .isEnableCrop(true)
569
                .rotateEnabled(false)//裁剪是否可旋转图片
570
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
571
                .freeStyleCropEnabled(true)// 裁剪框拖动模式
572
                //.isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
573
                .circleDimmedLayer(true)// 是否开启圆形裁剪
574
                .isDragFrame(true)//是否可拖动裁剪框(固定)
575
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
576
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
560
                .openGallery(SelectMimeType.ofImage())
561
                .setSelectorUIStyle(PictureUtlis.getStyle())
562
                .setImageEngine(GlideEngine.createGlideEngine())
563
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
564
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
565
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
566
                .setSelectionMode(SelectModeConfig.SINGLE)
567
                .setMaxSelectNum(1)
568
                .isEmptyResultReturn(true) //支持未选择返回
569
                .setImageSpanCount(4)
570
                .isPageStrategy(true)   // 是否开启分页模式
571
                .isDisplayCamera(true) //是否显示相机入口
572
                .isPreviewFullScreenMode(true)//预览点击全屏效果
573
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
574
                .isEmptyResultReturn(true)//支持未选择返回
575
                .isWithSelectVideoImage(false)//是否支持视频图片同选
576
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
577
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
578
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
579
                .isGif(false)// 是否显示gif文件
580
                .isWebp(true)// 是否显示webp文件
581
                .isBmp(true)//是否显示bmp文件
582
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
583
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
584
                .isFastSlidingSelect(true) //快速滑动选择
585
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
586
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
587
                .isPreviewImage(true)//是否预览图片
588
                .setCropEngine(new ImageCropEngine(1F,1F,true))
577
                .forResult(1);
589
                .forResult(1);
578
    }
590
    }
579
591
735
        ;
747
        ;
736
    }
748
    }
737
    private void activityResult(Intent data) {
749
    private void activityResult(Intent data) {
738
        List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
750
        List<LocalMedia> medias = PictureSelector.obtainSelectorList(data);
739
        if (medias != null && medias.size() > 0) {
751
        if (medias != null && medias.size() > 0) {
740
            String path = "";
741
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
742
                path = medias.get(0).getAndroidQToPath();
743
            } else {
744
                path = medias.get(0).getPath();
745
            }
752
            String path = Util.getCompressAbsolutePath(medias.get(0));
746
            photo = imageZoom(BitmapFactory.decodeFile(path));
753
            photo = imageZoom(BitmapFactory.decodeFile(path));
747
            if (photo != null) {
754
            if (photo != null) {
748
                iconPic.setImageBitmap(photo);
755
                iconPic.setImageBitmap(photo);

+ 7 - 7
app/src/main/java/com/electric/chargingpile/activity/TopicDetailActivity.java

263
                String code = JsonUtils.getKeyResult(response, "code");
263
                String code = JsonUtils.getKeyResult(response, "code");
264
                String desc = JsonUtils.getKeyResult(response, "desc");
264
                String desc = JsonUtils.getKeyResult(response, "desc");
265
                if ("1000".equals(code)) {
265
                if ("1000".equals(code)) {
266
                    Intent intent = new Intent(getApplicationContext(), PublishItemsActivity.class);
267
                    PublishItemSerializable intentData = new PublishItemSerializable();
268
                    intentData.setFrom(PublishItemsActivity.FROM_TOPIC_DETAIL);
269
                    intentData.setTopicId(homePageBean.topicVo.topicId);
270
                    intentData.setName(homePageBean.topicVo.name);
271
                    intent.putExtra("intent_data", intentData);
272
                    startActivity(intent);
266
//                    Intent intent = new Intent(getApplicationContext(), PublishItemsActivity.class);
267
//                    PublishItemSerializable intentData = new PublishItemSerializable();
268
//                    intentData.setFrom(PublishItemsActivity.FROM_TOPIC_DETAIL);
269
//                    intentData.setTopicId(homePageBean.topicVo.topicId);
270
//                    intentData.setName(homePageBean.topicVo.name);
271
//                    intent.putExtra("intent_data", intentData);
272
//                    startActivity(intent);
273
                } else if ("8010".equals(code)) {
273
                } else if ("8010".equals(code)) {
274
                    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
274
                    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
275
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_LONG);
275
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_LONG);

+ 104 - 74
app/src/main/java/com/electric/chargingpile/activity/UserInfoActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import static com.hjq.permissions.Permission.CAMERA;
4
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
5
3
import android.Manifest;
6
import android.Manifest;
4
import android.app.Activity;
7
import android.app.Activity;
5
import android.content.Context;
8
import android.content.Context;
22
import android.os.Handler;
25
import android.os.Handler;
23
import android.os.Looper;
26
import android.os.Looper;
24
import android.os.Message;
27
import android.os.Message;
28
import android.provider.MediaStore;
25
import android.text.TextUtils;
29
import android.text.TextUtils;
26
import android.util.Log;
30
import android.util.Log;
27
import android.view.Gravity;
31
import android.view.Gravity;
57
import com.electric.chargingpile.manager.ProfileManager;
61
import com.electric.chargingpile.manager.ProfileManager;
58
import com.electric.chargingpile.util.BarColorUtil;
62
import com.electric.chargingpile.util.BarColorUtil;
59
import com.electric.chargingpile.util.DES3;
63
import com.electric.chargingpile.util.DES3;
64
import com.electric.chargingpile.util.ImageCropEngine;
65
import com.electric.chargingpile.util.ImageFileCompressEngine;
60
import com.electric.chargingpile.util.JsonUtils;
66
import com.electric.chargingpile.util.JsonUtils;
61
import com.electric.chargingpile.util.LoadingDialog;
67
import com.electric.chargingpile.util.LoadingDialog;
62
import com.electric.chargingpile.util.LogUtils;
68
import com.electric.chargingpile.util.LogUtils;
69
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
70
import com.electric.chargingpile.util.MeSandboxFileEngine;
63
import com.electric.chargingpile.util.OkHttpUtil;
71
import com.electric.chargingpile.util.OkHttpUtil;
64
import com.electric.chargingpile.util.PhotoUtils;
72
import com.electric.chargingpile.util.PhotoUtils;
73
import com.electric.chargingpile.util.PictureUtlis;
65
import com.electric.chargingpile.util.StatusConstants;
74
import com.electric.chargingpile.util.StatusConstants;
66
import com.electric.chargingpile.util.ToastUtil;
75
import com.electric.chargingpile.util.ToastUtil;
67
import com.electric.chargingpile.util.UploadUtil;
76
import com.electric.chargingpile.util.UploadUtil;
69
import com.electric.chargingpile.view.CustomProgressDialog;
78
import com.electric.chargingpile.view.CustomProgressDialog;
70
import com.electric.chargingpile.view.RoundImageView;
79
import com.electric.chargingpile.view.RoundImageView;
71
import com.google.gson.Gson;
80
import com.google.gson.Gson;
72
import com.luck.picture.lib.PictureSelector;
81
82
import com.hjq.permissions.OnPermissionCallback;
83
import com.hjq.permissions.XXPermissions;
73
import com.luck.picture.lib.animators.AnimationType;
84
import com.luck.picture.lib.animators.AnimationType;
85
import com.luck.picture.lib.basic.PictureSelector;
74
import com.luck.picture.lib.config.PictureConfig;
86
import com.luck.picture.lib.config.PictureConfig;
75
import com.luck.picture.lib.config.PictureMimeType;
87
import com.luck.picture.lib.config.PictureMimeType;
88
import com.luck.picture.lib.config.SelectMimeType;
89
import com.luck.picture.lib.config.SelectModeConfig;
76
import com.luck.picture.lib.entity.LocalMedia;
90
import com.luck.picture.lib.entity.LocalMedia;
77
import com.squareup.okhttp.Request;
91
import com.squareup.okhttp.Request;
78
import com.squareup.okhttp.Response;
92
import com.squareup.okhttp.Response;
104
import pub.devrel.easypermissions.EasyPermissions;
118
import pub.devrel.easypermissions.EasyPermissions;
105
119
106
120
107
public class UserInfoActivity extends Activity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
121
public class UserInfoActivity extends Activity implements View.OnClickListener {
108
    private static final String TAG = "UserInfoActivity";
122
    private static final String TAG = "UserInfoActivity";
109
    private ImageView back;
123
    private ImageView back;
110
    private EditText et_nickName;
124
    private EditText et_nickName;
322
        spinnerCity.setOnItemSelectedListener(new CityAdapter());
336
        spinnerCity.setOnItemSelectedListener(new CityAdapter());
323
    }
337
    }
324
338
325
    @Override
326
    public void onPermissionsGranted(int requestCode, List<String> perms) {
327
328
    }
329
330
    @Override
331
    public void onPermissionsDenied(int requestCode, List<String> perms) {
332
333
    }
334
339
335
    class ProvinceAdapter implements AdapterView.OnItemSelectedListener {
340
    class ProvinceAdapter implements AdapterView.OnItemSelectedListener {
336
341
579
     * @param view
584
     * @param view
580
     */
585
     */
581
    public void takePhoto(View view) {
586
    public void takePhoto(View view) {
582
583
        PictureSelector.create(this)
587
        PictureSelector.create(this)
584
                .openCamera(PictureMimeType.ofImage())
585
                .selectionMode(PictureConfig.SINGLE)
586
                .isSingleDirectReturn(true)
587
                .isCompress(true)//是否压缩
588
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
589
                .isGif(false)//是否显示gif
590
                .isAndroidQTransform(true)
591
                .imageEngine(GlideEngine.createGlideEngine())
592
                .isWeChatStyle(false)// 是否开启微信图片选择风格
593
                .isUseCustomCamera(false)// 是否使用自定义相机
594
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
595
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
596
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
597
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
598
                .imageSpanCount(4)// 每行显示个数
599
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
600
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
601
                .isEnableCrop(true)
602
                .rotateEnabled(false)//裁剪是否可旋转图片
603
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
604
                 .freeStyleCropEnabled(true)// 裁剪框拖动模式
605
                //.isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
606
                .circleDimmedLayer(true)// 是否开启圆形裁剪
607
                .isDragFrame(true)//是否可拖动裁剪框(固定)
608
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
609
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
588
                .openGallery(SelectMimeType.ofImage())
589
                .setSelectorUIStyle(PictureUtlis.getStyle())
590
                .setImageEngine(GlideEngine.createGlideEngine())
591
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
592
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
593
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
594
                .setSelectionMode(SelectModeConfig.SINGLE)
595
                .setMaxSelectNum(1)
596
                .isEmptyResultReturn(true) //支持未选择返回
597
                .setImageSpanCount(4)
598
                .isPageStrategy(true)   // 是否开启分页模式
599
                .isDisplayCamera(true) //是否显示相机入口
600
                .isPreviewFullScreenMode(true)//预览点击全屏效果
601
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
602
                .isEmptyResultReturn(true)//支持未选择返回
603
                .isWithSelectVideoImage(false)//是否支持视频图片同选
604
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
605
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
606
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
607
                .isGif(false)// 是否显示gif文件
608
                .isWebp(true)// 是否显示webp文件
609
                .isBmp(true)//是否显示bmp文件
610
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
611
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
612
                .isFastSlidingSelect(true) //快速滑动选择
613
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
614
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
615
                .isPreviewImage(true)//是否预览图片
616
                .setCropEngine(new ImageCropEngine(1F,1F,true))
617
                .setFilterMinFileSize(1) //过滤最小文件
610
                .forResult(2);
618
                .forResult(2);
611
    }
619
    }
612
    private void openPhotoAlbum() {
620
    private void openPhotoAlbum() {
613
        PictureSelector.create(UserInfoActivity.this)
614
                .openGallery(PictureMimeType.ofImage())
615
                .isCamera(false)//列表是否显示拍照按钮
616
                .selectionMode(PictureConfig.SINGLE)
617
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
618
                .isCompress(true)//是否压缩
619
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
620
                .isGif(false)//是否显示gif
621
                .isAndroidQTransform(true)
622
                .imageEngine(GlideEngine.createGlideEngine())
623
                .isWeChatStyle(false)// 是否开启微信图片选择风格
624
                .isUseCustomCamera(false)// 是否使用自定义相机
625
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
626
                .setPictureStyle(Util.getWhiteStyle(UserInfoActivity.this))// 动态自定义相册主题
627
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
628
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
629
                .imageSpanCount(4)// 每行显示个数
630
                .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
631
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
632
                .rotateEnabled(false)//裁剪是否可旋转图片
633
                .isEnableCrop(true)
634
                .rotateEnabled(false)//裁剪是否可旋转图片
635
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
636
                 .freeStyleCropEnabled(true)// 裁剪框拖动模式
637
                //.isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
638
                .circleDimmedLayer(true)// 是否开启圆形裁剪
639
                .isDragFrame(true)//是否可拖动裁剪框(固定)
640
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
641
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
621
        PictureSelector.create(this)
622
                .openGallery(SelectMimeType.ofImage())
623
                .setSelectorUIStyle(PictureUtlis.getStyle())
624
                .setImageEngine(GlideEngine.createGlideEngine())
625
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
626
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
627
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
628
                .setSelectionMode(SelectModeConfig.SINGLE)
629
                .setMaxSelectNum(1)
630
                .isEmptyResultReturn(true) //支持未选择返回
631
                .setImageSpanCount(4)
632
                .isPageStrategy(true)   // 是否开启分页模式
633
                .isDisplayCamera(true) //是否显示相机入口
634
                .isPreviewFullScreenMode(true)//预览点击全屏效果
635
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
636
                .isEmptyResultReturn(true)//支持未选择返回
637
                .isWithSelectVideoImage(false)//是否支持视频图片同选
638
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
639
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
640
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
641
                .isGif(false)// 是否显示gif文件
642
                .isWebp(true)// 是否显示webp文件
643
                .isBmp(true)//是否显示bmp文件
644
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
645
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
646
                .isFastSlidingSelect(true) //快速滑动选择
647
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
648
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
649
                .isPreviewImage(true)//是否预览图片
650
                .setFilterMinFileSize(1) //过滤最小文件
651
                .setCropEngine(new ImageCropEngine(1F,1F,true))
642
                .forResult(1);
652
                .forResult(1);
643
    }
653
    }
644
654
645
    @AfterPermissionGranted(RC_CAMERA_PERM)
655
    @AfterPermissionGranted(RC_CAMERA_PERM)
646
    public void cameraTask() {
656
    public void cameraTask() {
657
        String[] callPhone  =
658
                new String[]{READ_MEDIA_IMAGES, CAMERA};
659
        XXPermissions.with(this)
660
                // 申请单个权限
661
                .permission(callPhone)
662
                .request(new OnPermissionCallback() {
663
                    @Override
664
                    public void onGranted(List<String> permissions, boolean all) {
665
                        if (all) {
666
                            showWindow();
667
                        }else{
668
                            ToastUtil.showToast(getApplicationContext(), "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT);
669
                        }
670
                    }
671
                    @Override
672
                    public void onDenied(List<String> permissions, boolean never) {
673
                        if (never) {
674
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
675
                            XXPermissions.startPermissionActivity(UserInfoActivity.this, permissions);
676
                        } else {
677
                            ToastUtil.showToast(getApplicationContext(), "获取权限失败", Toast.LENGTH_SHORT);
678
                        }
679
                    }
680
                });
681
647
        if (hasCameraPermission()) {
682
        if (hasCameraPermission()) {
648
            showWindow();
683
            showWindow();
649
        } else {
684
        } else {
769
    }
804
    }
770
805
771
    private void activityResult(Intent data) {
806
    private void activityResult(Intent data) {
772
        List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
807
        List<LocalMedia> medias = PictureSelector.obtainSelectorList(data);
773
        if (medias != null && medias.size() > 0) {
808
        if (medias != null && medias.size() > 0) {
774
            String path = "";
775
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
776
                path = medias.get(0).getAndroidQToPath();
777
            } else {
778
                path = medias.get(0).getPath();
779
            }
809
            String path = Util.getCompressAbsolutePath(medias.get(0));
780
            photo = imageZoom(BitmapFactory.decodeFile(path));
810
            photo = imageZoom(BitmapFactory.decodeFile(path));
781
            if (photo != null) {
811
            if (photo != null) {
782
                iconPic.setImageBitmap(photo);
812
                iconPic.setImageBitmap(photo);

+ 0 - 232
app/src/main/java/com/electric/chargingpile/activity/VideoCompressionActivity.java

1
package com.electric.chargingpile.activity;
2
3
4
import android.view.View;
5
import androidx.appcompat.app.AppCompatActivity;
6
7
8
/*
9
public class VideoCompressionActivity extends AppCompatActivity implements View.OnClickListener {
10
11
    private TextView viewById;
12
    public static final int REQUEST_CODE_CHOOSE = 339;
13
    @Override
14
    protected void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
15
        super.onCreate(savedInstanceState);
16
        setContentView(R.layout.activity_video_compression);
17
        findViewById(R.id.openPhoto).setOnClickListener(this);
18
        findViewById(R.id.videoZip).setOnClickListener(this);
19
        findViewById(R.id.startVideoZip).setOnClickListener(this);
20
        viewById = findViewById(R.id.progress);
21
    }
22
23
    @Override
24
    public void onClick(View v) {
25
        switch (v.getId()){
26
            case R.id.openPhoto:
27
                PictureSelector.create(this)
28
                        .openGallery(PictureMimeType.ofVideo())
29
                        .selectionMode(PictureConfig.SINGLE)
30
                        .isCompress(true)//是否压缩
31
                        .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
32
                        .isGif(true)//是否显示gif
33
                        .isAndroidQTransform(true)
34
                        .imageEngine(GlideEngine.createGlideEngine())
35
                        .isWeChatStyle(false)// 是否开启微信图片选择风格
36
                        .isUseCustomCamera(false)// 是否使用自定义相机
37
                        .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
38
                        .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
39
                        .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
40
                        .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
41
                        .imageSpanCount(4)// 每行显示个数
42
                        .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
43
                        .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
44
                        .forResult(REQUEST_CODE_CHOOSE);
45
46
                break;
47
48
            case R.id.videoZip:
49
                Log.e("TAG", "开始");
50
                runFFmpegRxJava();
51
                break;
52
53
            case R.id.startVideoZip:
54
                PictureSelector.create(this)
55
                        .setPictureStyle(Util.getWhiteStyle(this))
56
                        .externalPictureVideo(mResultPath);
57
58
                break;
59
        }
60
    }
61
    private String mPath="";
62
    @Override
63
    protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) {
64
        super.onActivityResult(requestCode, resultCode, data);
65
        LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
66
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
67
            mPath= media.getAndroidQToPath();
68
        }else{
69
            mPath=media.getPath();
70
        }
71
    }
72
73
    private  MyRxFFmpegSubscriber myRxFFmpegSubscriber=null;
74
    private  static String mResultPath=null;
75
    private void runFFmpegRxJava() {
76
77
        MediaMetadataRetriever retriever =new MediaMetadataRetriever();
78
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
79
            Uri newUri  = FileProvider.getUriForFile(
80
                    this,
81
                    getPackageName() + ".provider",
82
                    new File(mPath)
83
            );
84
            retriever.setDataSource(this, newUri);
85
        } else {
86
            retriever.setDataSource(mPath, new HashMap<String, String>());
87
        }
88
        retriever.setDataSource(mPath);
89
90
91
        String duration_s = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
92
        long duration = Long.parseLong(duration_s);
93
94
//获取视频帧数
95
        String count_s = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_FRAME_COUNT);
96
97
        long bitrate = Long.parseLong(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE));
98
        long count = Long.parseLong(count_s);
99
100
//计算帧率
101
        long dt = duration/count; // 平均每帧的时间间隔,35ms
102
103
104
105
        Log.e("TAG", "runFFmpegRxJava帧率为: "+dt);
106
107
        DecimalFormat df = new DecimalFormat("#.00");
108
        String size="";
109
        if (bitrate < 1024) {
110
            size = df.format((double) bitrate) + "BT";
111
        } else if (bitrate < 1048576) {
112
            size = df.format((double) bitrate / 1024) + "KB";
113
        } else if (bitrate < 1073741824) {
114
            size = df.format((double) bitrate / 1048576) + "MB";
115
        } else {
116
            size = df.format((double) bitrate / 1073741824) +"GB";
117
        }
118
119
        Log.e("TAG", "runFFmpegRxJava比特率为: "+size);
120
121
122
123
124
        mResultPath = PhotoUtils.CACHE_DIR + System.currentTimeMillis() + getFileExtension(mPath);
125
        Log.e("TAG", "runFFmpegRxJava: "+GetFileSize(mPath));
126
        if (bitrate < 21299200){//21299200 bit 即 2600k  如果小于2600K则
127
            return;
128
        }
129
//        String text = "ffmpeg -y -i "+mPath+" -vf boxblur=25:5 -preset superfast "+mResultPath;
130
        String text = "ffmpeg -y -i "+mPath+" -b 2600k -r 25 -vcodec libx264 -preset superfast "+mResultPath;
131
132
        String[] commands = text.split(" ");
133
134
        myRxFFmpegSubscriber = new MyRxFFmpegSubscriber(this);
135
136
        //开始执行FFmpeg命令
137
        RxFFmpegInvoke.getInstance()
138
                .runCommandRxJava(commands)
139
                .subscribe(myRxFFmpegSubscriber);
140
141
    }
142
143
    public static class MyRxFFmpegSubscriber extends RxFFmpegSubscriber {
144
145
        private WeakReference<VideoCompressionActivity> mWeakReference;
146
147
        public MyRxFFmpegSubscriber(VideoCompressionActivity homeFragment) {
148
            mWeakReference = new WeakReference<>(homeFragment);
149
        }
150
151
        @Override
152
        public void onFinish() {
153
            final VideoCompressionActivity mHomeFragment = mWeakReference.get();
154
            if (mHomeFragment != null) {
155
                Log.e("TAG", "处理成功"+GetFileSize(mResultPath));
156
157
            }
158
        }
159
160
        @Override
161
        public void onProgress(int progress, long progressTime) {
162
            final VideoCompressionActivity mHomeFragment = mWeakReference.get();
163
            if (mHomeFragment != null) {
164
                //progressTime 可以在结合视频总时长去计算合适的进度值
165
                Log.e("TAG", "onProgress progress:"+progress+"  progressTime:"+progressTime);
166
            }
167
        }
168
169
        @Override
170
        public void onCancel() {
171
            final VideoCompressionActivity mHomeFragment = mWeakReference.get();
172
            if (mHomeFragment != null) {
173
                Log.e("TAG", "已取消");
174
175
            }
176
        }
177
178
        @Override
179
        public void onError(String message) {
180
            final VideoCompressionActivity mHomeFragment = mWeakReference.get();
181
            if (mHomeFragment != null) {
182
                Log.e("TAG", "出错了 onError:" + message);
183
            }
184
        }
185
    }
186
187
    @Override
188
    public void onDestroy() {
189
        super.onDestroy();
190
        if (myRxFFmpegSubscriber != null) {
191
            myRxFFmpegSubscriber.dispose();
192
        }
193
    }
194
195
    public String getFileExtension(String path) {
196
        String extension = "";
197
        File file = new File(path);
198
        try {
199
            if (file != null && file.exists()) {
200
                String name = file.getName();
201
                extension = name.substring(name.lastIndexOf("."));
202
            }
203
        } catch (Exception e) {
204
            extension = "";
205
        }
206
        return extension;
207
    }
208
209
    public static String GetFileSize(String path){
210
        String size = "";
211
        File file = new File(path);
212
        if(file.exists() && file.isFile()){
213
            long fileS = file.length();
214
            DecimalFormat df = new DecimalFormat("#.00");
215
            if (fileS < 1024) {
216
                size = df.format((double) fileS) + "BT";
217
            } else if (fileS < 1048576) {
218
                size = df.format((double) fileS / 1024) + "KB";
219
            } else if (fileS < 1073741824) {
220
                size = df.format((double) fileS / 1048576) + "MB";
221
            } else {
222
                size = df.format((double) fileS / 1073741824) +"GB";
223
            }
224
        }else if(file.exists() && file.isDirectory()){
225
            size = "";
226
        }else{
227
            size = "0BT";
228
        }
229
        return size;
230
    }
231
}
232
*/

+ 137 - 131
app/src/main/java/com/electric/chargingpile/activity/ZhanCommentActivity.java

13
13
14
import android.os.Handler;
14
import android.os.Handler;
15
import android.os.Message;
15
import android.os.Message;
16
import android.provider.MediaStore;
16
import android.text.Editable;
17
import android.text.Editable;
17
import android.text.Html;
18
import android.text.Html;
18
import android.text.TextUtils;
19
import android.text.TextUtils;
31
32
32
import androidx.annotation.NonNull;
33
import androidx.annotation.NonNull;
33
import androidx.appcompat.app.AppCompatActivity;
34
import androidx.appcompat.app.AppCompatActivity;
35
import androidx.fragment.app.Fragment;
34
import androidx.recyclerview.widget.GridLayoutManager;
36
import androidx.recyclerview.widget.GridLayoutManager;
35
import androidx.recyclerview.widget.RecyclerView;
37
import androidx.recyclerview.widget.RecyclerView;
36
38
52
import com.electric.chargingpile.util.DES3;
54
import com.electric.chargingpile.util.DES3;
53
import com.electric.chargingpile.util.DateUtils;
55
import com.electric.chargingpile.util.DateUtils;
54
import com.electric.chargingpile.util.DensityUtil;
56
import com.electric.chargingpile.util.DensityUtil;
57
import com.electric.chargingpile.util.IjkPlayerEngine;
58
import com.electric.chargingpile.util.ImageFileCompressEngine;
55
import com.electric.chargingpile.util.JsonUtils;
59
import com.electric.chargingpile.util.JsonUtils;
56
import com.electric.chargingpile.util.LoadingDialog;
60
import com.electric.chargingpile.util.LoadingDialog;
57
import com.electric.chargingpile.util.Md5Util;
61
import com.electric.chargingpile.util.Md5Util;
62
import com.electric.chargingpile.util.MeOnCameraInterceptListener;
63
import com.electric.chargingpile.util.MeSandboxFileEngine;
64
import com.electric.chargingpile.util.PictureUtlis;
58
import com.electric.chargingpile.util.PublicWayONE;
65
import com.electric.chargingpile.util.PublicWayONE;
59
import com.electric.chargingpile.util.Res;
66
import com.electric.chargingpile.util.Res;
60
import com.electric.chargingpile.util.ScreenUtils;
67
import com.electric.chargingpile.util.ScreenUtils;
68
75
69
import com.google.gson.Gson;
76
import com.google.gson.Gson;
70
import com.google.gson.reflect.TypeToken;
77
import com.google.gson.reflect.TypeToken;
71
import com.luck.picture.lib.PictureSelector;
78
import com.hjq.permissions.OnPermissionCallback;
79
import com.hjq.permissions.XXPermissions;
80
import com.luck.lib.camerax.CameraImageEngine;
81
import com.luck.lib.camerax.SimpleCameraX;
72
import com.luck.picture.lib.animators.AnimationType;
82
import com.luck.picture.lib.animators.AnimationType;
73
83
74
84
75
import com.luck.picture.lib.camera.CustomCameraView;
85
import com.luck.picture.lib.basic.PictureSelector;
76
import com.luck.picture.lib.config.PictureConfig;
86
import com.luck.picture.lib.config.PictureConfig;
77
import com.luck.picture.lib.config.PictureMimeType;
87
import com.luck.picture.lib.config.PictureMimeType;
88
import com.luck.picture.lib.config.SelectMimeType;
89
import com.luck.picture.lib.config.SelectModeConfig;
78
import com.luck.picture.lib.entity.LocalMedia;
90
import com.luck.picture.lib.entity.LocalMedia;
79
import com.upyun.library.common.SerialUploader;
91
import com.upyun.library.common.SerialUploader;
80
import com.upyun.library.listener.UpCompleteListener;
92
import com.upyun.library.listener.UpCompleteListener;
105
import pub.devrel.easypermissions.EasyPermissions;
117
import pub.devrel.easypermissions.EasyPermissions;
106
118
107
import static android.text.Html.FROM_HTML_MODE_LEGACY;
119
import static android.text.Html.FROM_HTML_MODE_LEGACY;
120
import static com.hjq.permissions.Permission.CAMERA;
121
import static com.hjq.permissions.Permission.READ_MEDIA_IMAGES;
122
import static com.hjq.permissions.Permission.READ_MEDIA_VIDEO;
123
import static com.luck.lib.camerax.CustomCameraConfig.BUTTON_STATE_ONLY_RECORDER;
124
108
/**
125
/**
109
 * 如果更改此页面,则需要同步更改 ChargingCommentActivity,
126
 * 如果更改此页面,则需要同步更改 ChargingCommentActivity,
110
 * ZhanCommentActivity 该页面为从地图充电icon-> 列表 ->去评论
127
 * ZhanCommentActivity 该页面为从地图充电icon-> 列表 ->去评论
111
 * */
128
 * */
112
public class ZhanCommentActivity extends AppCompatActivity implements View.OnClickListener, EasyPermissions.PermissionCallbacks, GridImageAdapter.GridImgListener {
129
public class ZhanCommentActivity extends AppCompatActivity implements View.OnClickListener,  GridImageAdapter.GridImgListener {
113
    private static final String TAG = "ZhanCommentActivity";
130
    private static final String TAG = "ZhanCommentActivity";
114
    private static final int PIC_NUM = 3;
131
    private static final int PIC_NUM = 3;
115
    private ProgressDialog insertDialog;
132
    private ProgressDialog insertDialog;
462
        for (int i = 0; i < Bimp.tempSelectMedia.size(); i++) {
479
        for (int i = 0; i < Bimp.tempSelectMedia.size(); i++) {
463
480
464
            LocalMedia media = Bimp.tempSelectMedia.get(i);
481
            LocalMedia media = Bimp.tempSelectMedia.get(i);
465
            String path = "";
466
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q)
467
                path = media.getAndroidQToPath();
468
            else {
469
                path = media.getPath();
470
            }
482
            String path = Util.getCompressAbsolutePath(media);
483
471
            bm = imageZoom(BitmapFactory.decodeFile(path));
484
            bm = imageZoom(BitmapFactory.decodeFile(path));
472
            String file = bitmapToBase64(bm);
485
            String file = bitmapToBase64(bm);
473
            Map<String, String> par = new HashMap<String, String>();
486
            Map<String, String> par = new HashMap<String, String>();
518
                    setLayoutHintVisible(1);
531
                    setLayoutHintVisible(1);
519
                    //异步方式插入图片
532
                    //异步方式插入图片
520
//                    insertImagesSync(data);
533
//                    insertImagesSync(data);
521
                    Bimp.tempSelectMedia = PictureSelector.obtainMultipleResult(data);
534
                    Bimp.tempSelectMedia = PictureSelector.obtainSelectorList(data);
522
                    mAdapter.setMaxCount(3);
535
                    mAdapter.setMaxCount(3);
523
                    mInsterType = 1;
536
                    mInsterType = 1;
524
537
530
                    setLayoutHintVisible(2);
543
                    setLayoutHintVisible(2);
531
                    mInsterType = 2;
544
                    mInsterType = 2;
532
                    mAdapter.setMaxCount(1);
545
                    mAdapter.setMaxCount(1);
533
                    Bimp.tempSelectMedia = PictureSelector.obtainMultipleResult(data);
546
                    Bimp.tempSelectMedia = PictureSelector.obtainSelectorList(data);
534
                    mAdapter.setDatas(Bimp.tempSelectMedia);
547
                    mAdapter.setDatas(Bimp.tempSelectMedia);
535
                }
548
                }
536
            }
549
            }
591
                return tv;
604
                return tv;
592
            }
605
            }
593
        });
606
        });
594
        mFlowLayout.setOnTagClickListener(new TagFlowLayout.OnTagClickListener() {
595
            @Override
596
            public boolean onTagClick(View view, int position, FlowLayout parent) {
597
                if (select_s.contains(stringArr[position])) {
598
                    String s = stringArr[position] + ",";
599
                    select_s = select_s.replaceAll(s, "");
600
                } else {
601
                    select_s += stringArr[position] + ",";
602
                }
603
                Log.e("select===", select_s);
604
605
                return true;
607
        mFlowLayout.setOnTagClickListener((view, position, parent) -> {
608
            if (select_s.contains(stringArr[position])) {
609
                String s = stringArr[position] + ",";
610
                select_s = select_s.replaceAll(s, "");
611
            } else {
612
                select_s += stringArr[position] + ",";
606
            }
613
            }
614
            Log.e("select===", select_s);
615
616
            return true;
607
        });
617
        });
608
    }
618
    }
609
619
769
                        } else if (Bimp.tempSelectMedia.size() > 0 && mInsterType == 2) {
779
                        } else if (Bimp.tempSelectMedia.size() > 0 && mInsterType == 2) {
770
                            //进行视频验证
780
                            //进行视频验证
771
                            LocalMedia media = Bimp.tempSelectMedia.get(0);
781
                            LocalMedia media = Bimp.tempSelectMedia.get(0);
772
                            String path = "";
773
                            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q)
774
                                path = media.getAndroidQToPath();
775
                            else {
776
                                path = media.getPath();
777
                            }
778
779
782
                            String path = Util.getCompressAbsolutePath(media);
780
                            getYouPaiData(path);
783
                            getYouPaiData(path);
781
                        } else {
784
                        } else {
782
                            if (containsEmoji(et_pinglun.getText().toString())) {
785
                            if (containsEmoji(et_pinglun.getText().toString())) {
915
        String saveKey = jsonObject.optString("save-key");
918
        String saveKey = jsonObject.optString("save-key");
916
919
917
        serialUploader.upload(
920
        serialUploader.upload(
918
                temp, uri, date, "UPYUN " + operator + ":" + sign, null, new UpCompleteListener() {
919
                    @Override
920
                    public void onComplete(boolean isSuccess, String result) {
921
                        if (isSuccess) {
922
                            try {
923
                                ArrayList<String> list = new ArrayList<>();
924
                                list.add(saveKey);
925
                                addComment(list, saveKey);
926
                            } catch (Exception e) {
927
                                e.printStackTrace();
928
                            }
929
                        } else {
930
                            ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT);
931
                            dialog.dismiss();
921
                temp, uri, date, "UPYUN " + operator + ":" + sign, null, (isSuccess, result) -> {
922
                    if (isSuccess) {
923
                        try {
924
                            ArrayList<String> list = new ArrayList<>();
925
                            list.add(saveKey);
926
                            addComment(list, saveKey);
927
                        } catch (Exception e) {
928
                            e.printStackTrace();
932
                        }
929
                        }
933
930
                    } else {
931
                        ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT);
932
                        dialog.dismiss();
934
                    }
933
                    }
934
935
                });
935
                });
936
    }
936
    }
937
937
938
    private void addImg() {
938
    private void addImg() {
939
        PictureSelector.create(this)
939
        PictureSelector.create(this)
940
                .openGallery(PictureMimeType.ofImage())
941
                .maxSelectNum(PIC_NUM)
942
                .selectionMode(PictureConfig.MULTIPLE)
943
                .selectionData(Bimp.tempSelectMedia)//是否传入已选图片
944
                .isCompress(true)//是否压缩
945
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
946
                .isGif(true)//是否显示gif
947
                .isAndroidQTransform(true)
948
                .imageEngine(GlideEngine.createGlideEngine())
949
                .isWeChatStyle(false)// 是否开启微信图片选择风格
950
                .isUseCustomCamera(false)// 是否使用自定义相机
951
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
952
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
953
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
954
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
955
                .imageSpanCount(4)// 每行显示个数
956
                .isReturnEmpty(false)// 选择数据时点击按钮是否可以返回
957
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
940
                .openGallery(SelectMimeType.ofImage())
941
                .setSelectorUIStyle(PictureUtlis.getStyle())
942
                .setImageEngine(GlideEngine.createGlideEngine())
943
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
944
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
945
                .setCameraInterceptListener(new MeOnCameraInterceptListener())
946
                .setSelectionMode(SelectModeConfig.MULTIPLE)
947
                .setMaxSelectNum(PIC_NUM)
948
                .isEmptyResultReturn(true) //支持未选择返回
949
                .setImageSpanCount(4)
950
                .isPageStrategy(true)   // 是否开启分页模式
951
                .isDisplayCamera(true) //是否显示相机入口
952
                .isPreviewFullScreenMode(true)//预览点击全屏效果
953
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
954
                .isEmptyResultReturn(true)//支持未选择返回
955
                .isWithSelectVideoImage(false)//是否支持视频图片同选
956
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
957
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
958
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
959
                .isGif(true)// 是否显示gif文件
960
                .isWebp(true)// 是否显示webp文件
961
                .isBmp(true)//是否显示bmp文件
962
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
963
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
964
                .isFastSlidingSelect(true) //快速滑动选择
965
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
966
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
967
                .isPreviewImage(true)//是否预览图片
968
                .setFilterMinFileSize(1) //过滤最小文件
958
                .forResult(REQUEST_CODE_CHOOSE);
969
                .forResult(REQUEST_CODE_CHOOSE);
959
    }
970
    }
960
971
961
    private void addVideo() {
972
    private void addVideo() {
962
        PictureSelector.create(this)
973
        PictureSelector.create(this)
963
                .openGallery(PictureMimeType.ofVideo())
964
               // .selectionMode(PictureConfig.SINGLE)
965
                .isCompress(true)//是否压缩
966
                .maxSelectNum(1)
967
                .isPreviewEggs(true)//图片时是否增强左右滑动图片体验
968
                .isAndroidQTransform(true)
969
                .imageEngine(GlideEngine.createGlideEngine())
970
                .isWeChatStyle(false)// 是否开启微信图片选择风格
971
                .isUseCustomCamera(false)// 是否使用自定义相机
972
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
973
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
974
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
975
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
976
                .imageSpanCount(4)// 每行显示个数
977
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
978
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
979
                .videoMaxSecond(16)   // 查询多少秒以内的视频
980
                .videoMinSecond(2)   // 查询多少秒以内的视频
981
                .recordVideoSecond(16)//录制视频秒数 默认60s
982
                .isPreviewVideo(true)//是否预览视频
983
                .setButtonFeatures(CustomCameraView.BUTTON_STATE_ONLY_RECORDER) //自定义按钮样式
984
                .isUseCustomCamera(true)// 开启自定义相机
985
               // .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
986
                .filterMaxFileSize( 100 * 1024 )//查询指定大小内的图片、视频、音频大小,单位 KB
974
                .openGallery(SelectMimeType.ofVideo())
975
                .setSelectorUIStyle(PictureUtlis.getStyle())
976
                .setImageEngine(GlideEngine.createGlideEngine())
977
                .setCompressEngine(new ImageFileCompressEngine()) //设置压缩
978
                .setSandboxFileEngine(new MeSandboxFileEngine()) //设置相册沙盒目录拷贝引擎
979
                .setSelectionMode(SelectModeConfig.SINGLE) //设置单选
980
                .isEmptyResultReturn(true) //支持未选择返回
981
                .setImageSpanCount(3)
982
                .isPageStrategy(true)   // 是否开启分页模式
983
                .isDisplayCamera(true) //是否显示相机入口
984
                .isPreviewFullScreenMode(true)//预览点击全屏效果
985
                .isEmptyResultReturn(true)//支持未选择返回
986
                .isWithSelectVideoImage(false)//是否支持视频图片同选
987
                .isSelectZoomAnim(true)// 选择缩略图缩放效果
988
                .isCameraAroundState(false)// 是否开启前置摄像头;系统相机 只支持部分机型
989
                .isCameraRotateImage(true) //拍照是否纠正旋转图片
990
                .isGif(true)// 是否显示gif文件
991
                .isWebp(true)// 是否显示webp文件
992
                .isBmp(true)//是否显示bmp文件
993
                .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
994
                .isAutomaticTitleRecyclerTop(true) //点击相册标题是否快速回到第一项
995
                .isFastSlidingSelect(true) //快速滑动选择
996
                .isDirectReturnSingle(true)//PictureConfig.SINGLE模式下是否直接返回
997
                .setQuerySortOrder(MediaStore.MediaColumns.DATE_MODIFIED + " DESC")//由远-近 MediaStore.MediaColumns.DATE_MODIFIED + " ASC"
998
                .isPreviewImage(true)//是否预览图片
999
                .setMaxSelectNum(1)//最大选择数量,默认9张
1000
                .setMinSelectNum(1)// 最小选择数量
1001
                .setRecordVideoMaxSecond(16) //视频录制最大时长
1002
                .setRecordVideoMinSecond(2) //视频录制最小时长
1003
                .setFilterVideoMaxSecond(16) //过滤视频最大时长
1004
                .setFilterVideoMinSecond(2) //过滤视频最小时长
1005
                .setFilterMinFileSize(1) //过滤最小文件
1006
                .setVideoQuality(1)
1007
                .setCameraInterceptListener(new MeOnCameraInterceptListener(){
1008
                    @Override
1009
                    public void openCamera(Fragment fragment, int cameraMode, int requestCode) {
1010
                        SimpleCameraX camera = SimpleCameraX.of();
1011
                        camera.isAutoRotation(true);
1012
                        camera.setCameraMode(BUTTON_STATE_ONLY_RECORDER);
1013
                        camera.setVideoFrameRate(25);
1014
                        camera.setVideoBitRate(3 * 1024 * 1024);
1015
                        camera.isDisplayRecordChangeTime(true);
1016
                        camera.isManualFocusCameraPreview(true);
1017
                        camera.isZoomCameraPreview(true);
1018
                        camera.setImageEngine((context, url, imageView) -> Glide.with(context).load(url).into(imageView));
1019
                        camera.start(fragment.requireActivity(), fragment, requestCode);
1020
                    }
1021
                })
1022
                .isVideoPauseResumePlay(true) //视频支持暂停与播放
987
                .forResult(REQUEST_VIDEO_CODE_CHOOSE);
1023
                .forResult(REQUEST_VIDEO_CODE_CHOOSE);
988
    }
1024
    }
989
1025
990
    @Override
1026
    @Override
991
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
992
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
993
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
994
    }
995
996
    @Override
997
    public void onPermissionsGranted(int requestCode, List<String> perms) {
998
999
    }
1000
1001
    @Override
1002
    public void onPermissionsDenied(int requestCode, List<String> perms) {
1003
1004
    }
1005
1006
    @AfterPermissionGranted(RC_ALBUM_PERM)
1007
    public void permissionTask() {
1008
        if (isPermissionOK()) {
1009
            addImg();
1010
        } else {
1011
            // Ask for one permission
1012
            EasyPermissions.requestPermissions(
1013
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
1014
                    RC_ALBUM_PERM,
1015
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
1016
                    Manifest.permission.READ_EXTERNAL_STORAGE,
1017
                    Manifest.permission.CAMERA);
1018
        }
1019
    }
1020
1021
    private boolean isPermissionOK() {
1022
        return EasyPermissions.hasPermissions(this,
1023
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
1024
                Manifest.permission.READ_EXTERNAL_STORAGE,
1025
                Manifest.permission.CAMERA
1026
        );
1027
    }
1028
1029
    @Override
1030
    public void add() {
1027
    public void add() {
1031
        if (mInsterType == 1) {
1028
        if (mInsterType == 1) {
1032
            addImg();
1029
            addImg();
1049
        if (mInsterType == 1) {
1046
        if (mInsterType == 1) {
1050
            ImageDisplayActivity.actionStart(this, position);
1047
            ImageDisplayActivity.actionStart(this, position);
1051
        } else if (mInsterType == 2) {
1048
        } else if (mInsterType == 2) {
1052
            PictureSelector.create(ZhanCommentActivity.this)
1053
                    .themeStyle(com.luck.picture.lib.R.style.picture_default_style)
1054
                    .setPictureStyle(Util.getWhiteStyle(ZhanCommentActivity.this))// 动态自定义相册主题
1055
                    .externalPictureVideo(TextUtils.isEmpty(mLocalMedia.getAndroidQToPath()) ? mLocalMedia.getPath() : mLocalMedia.getAndroidQToPath());
1049
1050
            ArrayList<LocalMedia> list = new ArrayList<>();
1051
            list.add(mLocalMedia);
1052
            PictureSelector.create(this)
1053
                    .openPreview()
1054
                    .setImageEngine(GlideEngine.createGlideEngine())
1055
                    .setVideoPlayerEngine(new IjkPlayerEngine())
1056
                    .setSelectorUIStyle(PictureUtlis.getStyle())
1057
                    .isPreviewFullScreenMode(false)
1058
                    .isVideoPauseResumePlay(true)
1059
                    .isAutoVideoPlay(true)
1060
                    .isLoopAutoVideoPlay(true)
1061
                    .startActivityPreview(0,false, list);
1056
        }
1062
        }
1057
    }
1063
    }
1058
1064

+ 3 - 7
app/src/main/java/com/electric/chargingpile/adapter/GridImageAdapter.java

12
12
13
import com.bumptech.glide.Glide;
13
import com.bumptech.glide.Glide;
14
import com.electric.chargingpile.R;
14
import com.electric.chargingpile.R;
15
import com.electric.chargingpile.util.Util;
15
import com.luck.picture.lib.entity.LocalMedia;
16
import com.luck.picture.lib.entity.LocalMedia;
16
import com.luck.picture.lib.entity.MediaData;
17
import com.luck.picture.lib.entity.MediaData;
17
18
90
//            holder.imageView.setImageResource(R.drawable.addpic65);
91
//            holder.imageView.setImageResource(R.drawable.addpic65);
91
            holder.remove.setVisibility( View.GONE);
92
            holder.remove.setVisibility( View.GONE);
92
        } else {
93
        } else {
93
94
            String path="";
95
            LocalMedia data = mDatas.get(position);
94
            LocalMedia data = mDatas.get(position);
96
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q)
97
                path= data.getAndroidQToPath();
98
            else {
99
                path= data.getPath();
100
            }
95
96
            String path = Util.getCompressAbsolutePath(data);
101
97
102
98
103
            Glide.with(context)
99
            Glide.with(context)

+ 6 - 6
app/src/main/java/com/electric/chargingpile/application/MainApplication.java

103
    public static String firstPoint = "";
103
    public static String firstPoint = "";
104
    public static Boolean firstSsyd;
104
    public static Boolean firstSsyd;
105
    public static String password = "";
105
    public static String password = "";
106
//    public static String url = "http://59.110.68.162";// 充电桩测试环境
107
//    public static String pic_url = "http://59.110.68.162/zhannew/uploadfile/";
108
    public static String url = "http://cdz.evcharge.cc";// 充电桩正式环境
109
    public static String pic_url = "http://cdz.evcharge.cc/zhannew/uploadfile/";
106
    public static String url = "http://59.110.68.162";// 充电桩测试环境
107
    public static String pic_url = "http://59.110.68.162/zhannew/uploadfile/";
108
//    public static String url = "http://cdz.evcharge.cc";// 充电桩正式环境
109
//    public static String pic_url = "http://cdz.evcharge.cc/zhannew/uploadfile/";
110

110

111
//        public static String urlNew = "http://123.56.67.7:83/api/0300";// 一电测试环境
112
    public static String urlNew = "https://api.touchev.com:83/api/0300";// 一电正式环境
111
        public static String urlNew = "http://123.56.67.7:83/api/0300";// 一电测试环境
112
//    public static String urlNew = "https://api.touchev.com:83/api/0300";// 一电正式环境
113

113

114
    public static String d1evUrl = "https://d1ev-new.yiduyongche.com";// 评论上传视频
114
    public static String d1evUrl = "https://d1ev-new.yiduyongche.com";// 评论上传视频
115
    public static String CDN = "https://cdn-fs.d1ev.com";
115
    public static String CDN = "https://cdn-fs.d1ev.com";

+ 49 - 169
app/src/main/java/com/electric/chargingpile/engine/GlideEngine.java

1
package com.electric.chargingpile.engine;
1
package com.electric.chargingpile.engine;
2
2
3
import android.content.Context;
3
import android.content.Context;
4
import android.graphics.Bitmap;
5
import android.graphics.PointF;
6
import android.graphics.drawable.Drawable;
7
import android.view.View;
8
import android.widget.ImageView;
4
import android.widget.ImageView;
9
5
10
import androidx.annotation.NonNull;
11
import androidx.annotation.Nullable;
12
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
13
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
14
15
import com.bumptech.glide.Glide;
6
import com.bumptech.glide.Glide;
16
import com.bumptech.glide.request.RequestOptions;
17
import com.bumptech.glide.request.target.BitmapImageViewTarget;
18
import com.bumptech.glide.request.target.ImageViewTarget;
7
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
8
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
19
import com.electric.chargingpile.R;
9
import com.electric.chargingpile.R;
20
import com.luck.picture.lib.engine.ImageEngine;
10
import com.luck.picture.lib.engine.ImageEngine;
21
import com.luck.picture.lib.listener.OnImageCompleteCallback;
22
import com.luck.picture.lib.tools.MediaUtils;
23
import com.luck.picture.lib.widget.longimage.ImageSource;
24
import com.luck.picture.lib.widget.longimage.ImageViewState;
25
import com.luck.picture.lib.widget.longimage.SubsamplingScaleImageView;
11
import com.luck.picture.lib.utils.ActivityCompatHelper;
26
12
27
/**
28
 * @author:luck
29
 * @date:2019-11-13 17:02
30
 * @describe:Glide加载引擎
31
 */
32
public class GlideEngine implements ImageEngine {
13
public class GlideEngine implements ImageEngine {
33
14
15
    public static GlideEngine createGlideEngine() {
16
        return InstanceHolder.instance;
17
    }
18
34
    /**
19
    /**
35
     * 加载图片
20
     * 加载图片
36
     *
21
     *
37
     * @param context
38
     * @param url
39
     * @param imageView
22
     * @param context   上下文
23
     * @param url       资源url
24
     * @param imageView 图片承载控件
40
     */
25
     */
41
    @Override
26
    @Override
42
    public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
27
    public void loadImage(Context context, String url, ImageView imageView) {
28
        if (!ActivityCompatHelper.assertValidRequest(context)) {
29
            return;
30
        }
43
        Glide.with(context)
31
        Glide.with(context)
44
                .load(url)
32
                .load(url)
45
                .into(imageView);
33
                .into(imageView);
46
    }
34
    }
47
35
48
    /**
49
     * 加载网络图片适配长图方案
50
     * # 注意:此方法只有加载网络图片才会回调
51
     *
52
     * @param context
53
     * @param url
54
     * @param imageView
55
     * @param longImageView
56
     * @param callback      网络图片加载回调监听 {link after version 2.5.1 Please use the #OnImageCompleteCallback#}
57
     */
58
    @Override
36
    @Override
59
    public void loadImage(@NonNull Context context, @NonNull String url,
60
                          @NonNull ImageView imageView,
61
                          SubsamplingScaleImageView longImageView, OnImageCompleteCallback callback) {
62
        Glide.with(context)
63
                .asBitmap()
64
                .load(url)
65
                .into(new ImageViewTarget<Bitmap>(imageView) {
66
                    @Override
67
                    public void onLoadStarted(@Nullable Drawable placeholder) {
68
                        super.onLoadStarted(placeholder);
69
                        if (callback != null) {
70
                            callback.onShowLoading();
71
                        }
72
                    }
73
74
                    @Override
75
                    public void onLoadFailed(@Nullable Drawable errorDrawable) {
76
                        super.onLoadFailed(errorDrawable);
77
                        if (callback != null) {
78
                            callback.onHideLoading();
79
                        }
80
                    }
81
82
                    @Override
83
                    protected void setResource(@Nullable Bitmap resource) {
84
                        if (callback != null) {
85
                            callback.onHideLoading();
86
                        }
87
                        if (resource != null) {
88
                            boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(),
89
                                    resource.getHeight());
90
                            longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE);
91
                            imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE);
92
                            if (eqLongImage) {
93
                                // 加载长图
94
                                longImageView.setQuickScaleEnabled(true);
95
                                longImageView.setZoomEnabled(true);
96
                                longImageView.setPanEnabled(true);
97
                                longImageView.setDoubleTapZoomDuration(100);
98
                                longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
99
                                longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
100
                                longImageView.setImage(ImageSource.bitmap(resource),
101
                                        new ImageViewState(0, new PointF(0, 0), 0));
102
                            } else {
103
                                // 普通图片
104
                                imageView.setImageBitmap(resource);
105
                            }
106
                        }
107
                    }
108
                });
109
    }
110
111
    /**
112
     * 加载网络图片适配长图方案
113
     * # 注意:此方法只有加载网络图片才会回调
114
     *
115
     * @param context
116
     * @param url
117
     * @param imageView
118
     * @param longImageView
119
     * @ 已废弃
120
     */
121
    public void loadImage(@NonNull Context context, @NonNull String url,
122
                          @NonNull ImageView imageView,
123
                          SubsamplingScaleImageView longImageView) {
37
    public void loadImage(Context context, ImageView imageView, String url, int maxWidth, int maxHeight) {
38
        if (!ActivityCompatHelper.assertValidRequest(context)) {
39
            return;
40
        }
124
        Glide.with(context)
41
        Glide.with(context)
125
                .asBitmap()
126
                .load(url)
42
                .load(url)
127
                .into(new ImageViewTarget<Bitmap>(imageView) {
128
                    @Override
129
                    protected void setResource(@Nullable Bitmap resource) {
130
                        if (resource != null) {
131
                            boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(),
132
                                    resource.getHeight());
133
                            longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE);
134
                            imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE);
135
                            if (eqLongImage) {
136
                                // 加载长图
137
                                longImageView.setQuickScaleEnabled(true);
138
                                longImageView.setZoomEnabled(true);
139
                                longImageView.setPanEnabled(true);
140
                                longImageView.setDoubleTapZoomDuration(100);
141
                                longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
142
                                longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
143
                                longImageView.setImage(ImageSource.bitmap(resource),
144
                                        new ImageViewState(0, new PointF(0, 0), 0));
145
                            } else {
146
                                // 普通图片
147
                                imageView.setImageBitmap(resource);
148
                            }
149
                        }
150
                    }
151
                });
43
                .override(maxWidth, maxHeight)
44
                .into(imageView);
152
    }
45
    }
153
46
154
    /**
47
    /**
155
     * 加载相册目录
48
     * 加载相册目录封面
156
     *
49
     *
157
     * @param context   上下文
50
     * @param context   上下文
158
     * @param url       图片路径
51
     * @param url       图片路径
159
     * @param imageView 承载图片ImageView
52
     * @param imageView 承载图片ImageView
160
     */
53
     */
161
    @Override
54
    @Override
162
    public void loadFolderImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
55
    public void loadAlbumCover(Context context, String url, ImageView imageView) {
56
        if (!ActivityCompatHelper.assertValidRequest(context)) {
57
            return;
58
        }
163
        Glide.with(context)
59
        Glide.with(context)
164
                .asBitmap()
60
                .asBitmap()
165
                .load(url)
61
                .load(url)
166
                .override(180, 180)
62
                .override(180, 180)
167
                .centerCrop()
168
                .sizeMultiplier(0.5f)
63
                .sizeMultiplier(0.5f)
169
                .apply(new RequestOptions().placeholder(R.drawable.picture_image_placeholder))
170
                .into(new BitmapImageViewTarget(imageView) {
171
                    @Override
172
                    protected void setResource(Bitmap resource) {
173
                        RoundedBitmapDrawable circularBitmapDrawable =
174
                                RoundedBitmapDrawableFactory.
175
                                        create(context.getResources(), resource);
176
                        circularBitmapDrawable.setCornerRadius(8);
177
                        imageView.setImageDrawable(circularBitmapDrawable);
178
                    }
179
                });
180
    }
181
182
183
    /**
184
     * 加载gif
185
     *
186
     * @param context   上下文
187
     * @param url       图片路径
188
     * @param imageView 承载图片ImageView
189
     */
190
    public void loadAsGifImage(@NonNull Context context, @NonNull String url,
191
                               @NonNull ImageView imageView) {
192
        Glide.with(context)
193
                .asGif()
194
                .load(url)
64
                .transform(new CenterCrop(), new RoundedCorners(8))
65
                .placeholder(R.drawable.ps_image_placeholder)
195
                .into(imageView);
66
                .into(imageView);
196
    }
67
    }
197
68
203
     * @param imageView 承载图片ImageView
74
     * @param imageView 承载图片ImageView
204
     */
75
     */
205
    @Override
76
    @Override
206
    public void loadGridImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
77
    public void loadGridImage(Context context, String url, ImageView imageView) {
78
        if (!ActivityCompatHelper.assertValidRequest(context)) {
79
            return;
80
        }
207
        Glide.with(context)
81
        Glide.with(context)
208
                .load(url)
82
                .load(url)
209
                .override(200, 200)
83
                .override(200, 200)
210
                .centerCrop()
84
                .centerCrop()
211
                .apply(new RequestOptions().placeholder(R.drawable.picture_image_placeholder))
85
                .placeholder(R.drawable.ps_image_placeholder)
212
                .into(imageView);
86
                .into(imageView);
213
    }
87
    }
214
88
89
    @Override
90
    public void pauseRequests(Context context) {
91
        if (!ActivityCompatHelper.assertValidRequest(context)) {
92
            return;
93
        }
94
        Glide.with(context).pauseRequests();
95
    }
215
96
216
    private GlideEngine() {
97
    private GlideEngine() {
217
    }
98
    }
218
99
219
    private static GlideEngine instance;
220
221
    public static GlideEngine createGlideEngine() {
222
        if (null == instance) {
223
            synchronized (GlideEngine.class) {
224
                if (null == instance) {
225
                    instance = new GlideEngine();
226
                }
227
            }
100
    @Override
101
    public void resumeRequests(Context context) {
102
        if (!ActivityCompatHelper.assertValidRequest(context)) {
103
            return;
228
        }
104
        }
229
        return instance;
105
        Glide.with(context).resumeRequests();
106
    }
107
108
    private static final class InstanceHolder {
109
        static final GlideEngine instance = new GlideEngine();
230
    }
110
    }
231
}
111
}

+ 7 - 8
app/src/main/java/com/electric/chargingpile/fragment/ChatRecommendFragment.java

19
import com.electric.chargingpile.R;
19
import com.electric.chargingpile.R;
20
import com.electric.chargingpile.activity.ChatContentListActivity;
20
import com.electric.chargingpile.activity.ChatContentListActivity;
21
import com.electric.chargingpile.activity.LoginActivity;
21
import com.electric.chargingpile.activity.LoginActivity;
22
import com.electric.chargingpile.activity.PublishItemsActivity;
23
import com.electric.chargingpile.adapter.ChatRecommendAdapter;
22
import com.electric.chargingpile.adapter.ChatRecommendAdapter;
24
import com.electric.chargingpile.adapter.TopicDetailAdapter;
23
import com.electric.chargingpile.adapter.TopicDetailAdapter;
25
import com.electric.chargingpile.application.MainApplication;
24
import com.electric.chargingpile.application.MainApplication;
42
import java.util.Map;
41
import java.util.Map;
43
42
44
import okhttp3.Call;
43
import okhttp3.Call;
45
44
@Deprecated
46
public class ChatRecommendFragment extends Fragment implements View.OnClickListener {
45
public class ChatRecommendFragment extends Fragment implements View.OnClickListener {
47
    private static final String TAG = "ChatRecommendFragment";
46
    private static final String TAG = "ChatRecommendFragment";
48
    private View view;
47
    private View view;
228
                String code = JsonUtils.getKeyResult(response, "code");
227
                String code = JsonUtils.getKeyResult(response, "code");
229
                String desc = JsonUtils.getKeyResult(response, "desc");
228
                String desc = JsonUtils.getKeyResult(response, "desc");
230
                if ("1000".equals(code)) {
229
                if ("1000".equals(code)) {
231
                    MobclickAgent.onEvent(getContext(), "1004");
232
                    Intent intent = new Intent(getActivity(), PublishItemsActivity.class);
233
                    PublishItemSerializable intentData = new PublishItemSerializable();
234
                    intentData.setFrom(PublishItemsActivity.FROM_CHAT_HOME);
235
                    intent.putExtra("intent_data", intentData);
236
                    startActivity(intent);
230
//                    MobclickAgent.onEvent(getContext(), "1004");
231
//                    Intent intent = new Intent(getActivity(), PublishItemsActivity.class);
232
//                    PublishItemSerializable intentData = new PublishItemSerializable();
233
//                    intentData.setFrom(PublishItemsActivity.FROM_CHAT_HOME);
234
//                    intent.putExtra("intent_data", intentData);
235
//                    startActivity(intent);
237
                } else if ("8010".equals(code)) {
236
                } else if ("8010".equals(code)) {
238
                    startActivity(new Intent(getContext(), LoginActivity.class));
237
                    startActivity(new Intent(getContext(), LoginActivity.class));
239
                    ToastUtil.showToast(getContext(), desc, Toast.LENGTH_LONG);
238
                    ToastUtil.showToast(getContext(), desc, Toast.LENGTH_LONG);

+ 2 - 3
app/src/main/java/com/electric/chargingpile/fragment/TalkRecommendFragment.java

19
import com.andview.refreshview.XRefreshView.SimpleXRefreshListener;
19
import com.andview.refreshview.XRefreshView.SimpleXRefreshListener;
20
import com.electric.chargingpile.R;
20
import com.electric.chargingpile.R;
21
import com.electric.chargingpile.activity.PersonalPageActivity;
21
import com.electric.chargingpile.activity.PersonalPageActivity;
22
import com.electric.chargingpile.activity.PublishItemsActivity;
23
import com.electric.chargingpile.activity.TopicDetailActivity;
22
import com.electric.chargingpile.activity.TopicDetailActivity;
24
import com.electric.chargingpile.activity.VideoDetaislActivity;
23
import com.electric.chargingpile.activity.VideoDetaislActivity;
25
import com.electric.chargingpile.adapter.LayoutAdapter;
24
import com.electric.chargingpile.adapter.LayoutAdapter;
47
import io.reactivex.functions.Predicate;
46
import io.reactivex.functions.Predicate;
48
import io.reactivex.schedulers.Schedulers;
47
import io.reactivex.schedulers.Schedulers;
49
import okhttp3.Call;
48
import okhttp3.Call;
50
49
@Deprecated
51
public class TalkRecommendFragment extends Fragment implements View.OnClickListener {
50
public class TalkRecommendFragment extends Fragment implements View.OnClickListener {
52
    RecyclerView recyclerView;
51
    RecyclerView recyclerView;
53
    LayoutAdapter layoutAdapter;
52
    LayoutAdapter layoutAdapter;
249
    public void onClick(View v) {
248
    public void onClick(View v) {
250
        switch (v.getId()) {
249
        switch (v.getId()) {
251
            case R.id.iv_ask:
250
            case R.id.iv_ask:
252
                startActivity(new Intent(getActivity(), PublishItemsActivity.class));
251
//                startActivity(new Intent(getActivity(), PublishItemsActivity.class));
253
//                Toast.makeText(getActivity(), "分享", Toast.LENGTH_SHORT).show();
252
//                Toast.makeText(getActivity(), "分享", Toast.LENGTH_SHORT).show();
254
                break;
253
                break;
255
        }
254
        }

+ 114 - 0
app/src/main/java/com/electric/chargingpile/util/IjkPlayerEngine.java

1
package com.electric.chargingpile.util;
2
3
import android.content.Context;
4
import android.view.View;
5
6
import com.electric.chargingpile.view.IjkPlayerView;
7
8
import com.luck.picture.lib.config.SelectorConfig;
9
import com.luck.picture.lib.config.SelectorProviders;
10
import com.luck.picture.lib.engine.VideoPlayerEngine;
11
import com.luck.picture.lib.entity.LocalMedia;
12
import com.luck.picture.lib.interfaces.OnPlayerListener;
13
14
import java.util.concurrent.CopyOnWriteArrayList;
15
16
17
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
18
19
public class IjkPlayerEngine implements VideoPlayerEngine<IjkPlayerView> {
20
    /**
21
     * 播放状态监听器集
22
     */
23
    private final CopyOnWriteArrayList<OnPlayerListener> listeners = new CopyOnWriteArrayList<>();
24
25
26
    @Override
27
    public View onCreateVideoPlayer(Context context) {
28
        return new IjkPlayerView(context);
29
    }
30
31
    @Override
32
    public void onStarPlayer(IjkPlayerView player, LocalMedia media) {
33
        IjkMediaPlayer mediaPlayer = player.getMediaPlayer();
34
        SelectorConfig config = SelectorProviders.getInstance().getSelectorConfig();
35
        mediaPlayer.setLooping(config.isLoopAutoPlay);
36
        player.start(media.getAvailablePath());
37
    }
38
39
    @Override
40
    public void onResume(IjkPlayerView player) {
41
        IjkMediaPlayer mediaPlayer = player.getMediaPlayer();
42
        if (mediaPlayer != null) {
43
            mediaPlayer.start();
44
        }
45
    }
46
47
    @Override
48
    public void onPause(IjkPlayerView player) {
49
        IjkMediaPlayer mediaPlayer = player.getMediaPlayer();
50
        if (mediaPlayer != null) {
51
            mediaPlayer.pause();
52
        }
53
    }
54
55
    @Override
56
    public boolean isPlaying(IjkPlayerView player) {
57
        IjkMediaPlayer mediaPlayer = player.getMediaPlayer();
58
        return mediaPlayer != null && mediaPlayer.isPlaying();
59
    }
60
61
    @Override
62
    public void addPlayListener(OnPlayerListener playerListener) {
63
        if (!listeners.contains(playerListener)) {
64
            listeners.add(playerListener);
65
        }
66
    }
67
68
    @Override
69
    public void removePlayListener(OnPlayerListener playerListener) {
70
        if (playerListener != null) {
71
            listeners.remove(playerListener);
72
        } else {
73
            listeners.clear();
74
        }
75
    }
76
77
    @Override
78
    public void onPlayerAttachedToWindow(IjkPlayerView player) {
79
        IjkMediaPlayer mediaPlayer = player.initMediaPlayer();
80
        mediaPlayer.setOnPreparedListener(it -> {
81
            it.start();
82
            for (int i = 0; i < listeners.size(); i++) {
83
                OnPlayerListener playerListener = listeners.get(i);
84
                playerListener.onPlayerReady();
85
            }
86
        });
87
        mediaPlayer.setOnCompletionListener(it -> {
88
            it.reset();
89
            for (int i = 0; i < listeners.size(); i++) {
90
                OnPlayerListener playerListener = listeners.get(i);
91
                playerListener.onPlayerEnd();
92
            }
93
            player.clearCanvas();
94
        });
95
96
        mediaPlayer.setOnErrorListener((it, what, extra) -> {
97
            for (int i = 0; i < listeners.size(); i++) {
98
                OnPlayerListener playerListener = listeners.get(i);
99
                playerListener.onPlayerError();
100
            }
101
            return false;
102
        });
103
    }
104
105
    @Override
106
    public void onPlayerDetachedFromWindow(IjkPlayerView player) {
107
        player.release();
108
    }
109
110
    @Override
111
    public void destroy(IjkPlayerView player) {
112
        player.release();
113
    }
114
}

+ 111 - 0
app/src/main/java/com/electric/chargingpile/util/ImageCropEngine.java

1
package com.electric.chargingpile.util;
2
3
import static com.electric.chargingpile.util.PhotoUtils.CACHE_DIR;
4
5
import android.content.Context;
6
import android.graphics.Bitmap;
7
import android.net.Uri;
8
import android.widget.ImageView;
9
10
import androidx.fragment.app.Fragment;
11
12
import com.bumptech.glide.Glide;
13
import com.luck.picture.lib.config.PictureMimeType;
14
import com.luck.picture.lib.engine.CropEngine;
15
import com.luck.picture.lib.entity.LocalMedia;
16
import com.yalantis.ucrop.UCrop;
17
import com.yalantis.ucrop.UCropImageEngine;
18
import com.luck.picture.lib.utils.DateUtils;
19
import java.io.File;
20
import java.util.ArrayList;
21
22
public class ImageCropEngine implements CropEngine {
23
    //长宽比
24
    private float x = 0F;
25
    //长宽比
26
    private float y = 0F;
27
    //是否为圆
28
    private boolean isCirCle = false;
29
30
    public ImageCropEngine(float x, float y, boolean isCirCle) {
31
        this.x = x;
32
        this.y = y;
33
        this.isCirCle = isCirCle;
34
    }
35
36
    @Override
37
    public void onStartCrop(Fragment fragment, LocalMedia currentLocalMedia, ArrayList<LocalMedia> dataSource, int requestCode) {
38
        String currentCropPath = currentLocalMedia.getAvailablePath();
39
        Uri inputUri ;
40
        if (PictureMimeType.isContent(currentCropPath) || PictureMimeType.isHasHttp(currentCropPath)) {
41
            inputUri= Uri.parse(currentCropPath);
42
        } else {
43
            inputUri = Uri.fromFile(new File(currentCropPath));
44
        }
45
        String fileName = DateUtils.getCreateFileName("CROP_") + ".jpg";
46
        Uri destinationUri = Uri.fromFile(new File(PhotoUtils.CACHE_DIR, fileName));
47
        UCrop.Options options;
48
         if (isCirCle){
49
             options = buildCircleOptions();
50
        }else{
51
             options = buildRatioOptions();
52
        }
53
        ArrayList<String> dataCropSource =new ArrayList<String>();
54
55
        for (LocalMedia media : dataSource) {
56
            dataCropSource.add(media.getAvailablePath());
57
        }
58
59
        UCrop uCrop = UCrop.of(inputUri, destinationUri, dataCropSource);
60
        uCrop.withOptions(options);
61
        uCrop.setImageEngine(new UCropImageEngine(){
62
63
            @Override
64
            public void loadImage(Context context, String url, ImageView imageView) {
65
                Glide.with(context).load(url).into(imageView);
66
67
            }
68
69
            @Override
70
            public void loadImage(Context context, Uri url, int maxWidth, int maxHeight, OnCallbackListener<Bitmap> call) {
71
72
            }
73
        });
74
        uCrop.start(fragment.requireActivity(), fragment, requestCode);
75
    }
76
77
    private UCrop.Options buildRatioOptions()  {
78
        UCrop.Options options = new UCrop.Options();
79
        // 长宽比
80
        options.withAspectRatio(x, y);
81
        //是否为圆
82
        options.setCircleDimmedLayer(false);
83
84
        // 是否让用户调整范围(默认false),如果开启,可能会造成剪切的图片的长宽比不是设定的
85
        // 如果不开启,用户不能拖动选框,只能缩放图片
86
        options.setFreeStyleCropEnabled(true);
87
88
        options.isCropDragSmoothToCenter(false);
89
        options.setSkipCropMimeType(PictureMimeType.ofGIF(), PictureMimeType.ofWEBP());
90
        options.isForbidCropGifWebp(false);
91
        options.isForbidSkipMultipleCrop(true);
92
        options.setMaxScaleMultiplier(100f);
93
        return options;
94
    }
95
    private UCrop.Options buildCircleOptions() {
96
        UCrop.Options options = new UCrop.Options();
97
        // 长宽比
98
        options.withAspectRatio(x, y);
99
        //是否为圆
100
        options.setCircleDimmedLayer(true);
101
        // 是否让用户调整范围(默认false),如果开启,可能会造成剪切的图片的长宽比不是设定的
102
        // 如果不开启,用户不能拖动选框,只能缩放图片
103
        options.setFreeStyleCropEnabled(true);
104
        options.isCropDragSmoothToCenter(false);
105
        options.setSkipCropMimeType(PictureMimeType.ofGIF(), PictureMimeType.ofWEBP());
106
        options.isForbidCropGifWebp(false);
107
        options.isForbidSkipMultipleCrop(true);
108
        options.setMaxScaleMultiplier(100f);
109
        return options;
110
    }
111
}

+ 56 - 0
app/src/main/java/com/electric/chargingpile/util/ImageFileCompressEngine.java

1
package com.electric.chargingpile.util;
2
3
import android.content.Context;
4
import android.net.Uri;
5
6
import com.luck.picture.lib.config.PictureMimeType;
7
import com.luck.picture.lib.engine.CompressFileEngine;
8
import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener;
9
import com.luck.picture.lib.utils.DateUtils;
10
11
import java.io.File;
12
import java.util.ArrayList;
13
14
import top.zibin.luban.Luban;
15
import top.zibin.luban.OnCompressListener;
16
import top.zibin.luban.OnNewCompressListener;
17
18
19
/**
20
 * 自定义压缩
21
 */
22
public class ImageFileCompressEngine implements CompressFileEngine {
23
24
    @Override
25
    public void onStartCompress(Context context, ArrayList<Uri> source, OnKeyValueResultCallbackListener call) {
26
        Luban.with(context).load(source).ignoreBy(0).setRenameListener(filePath -> {
27
            int indexOf = filePath.lastIndexOf(".");
28
            String postfix = indexOf != -1 ? filePath.substring(indexOf) : ".jpg";
29
            return DateUtils.getCreateFileName("CMP_") + postfix;
30
        }).filter(path -> {
31
            if (PictureMimeType.isUrlHasImage(path) && !PictureMimeType.isHasHttp(path)) {
32
                return true;
33
            }
34
            return !PictureMimeType.isUrlHasGif(path);
35
        }).setCompressListener(new OnNewCompressListener() {
36
            @Override
37
            public void onStart() {
38
39
            }
40
41
            @Override
42
            public void onSuccess(String source, File compressFile) {
43
                if (call != null) {
44
                    call.onCallback(source, compressFile.getAbsolutePath());
45
                }
46
            }
47
48
            @Override
49
            public void onError(String source, Throwable e) {
50
                if (call != null) {
51
                    call.onCallback(source, null);
52
                }
53
            }
54
        }).launch();
55
    }
56
}

+ 35 - 0
app/src/main/java/com/electric/chargingpile/util/MeOnCameraInterceptListener.java

1
package com.electric.chargingpile.util;
2
3
import android.content.Context;
4
import android.widget.ImageView;
5
6
import androidx.fragment.app.Fragment;
7
8
import com.bumptech.glide.Glide;
9
import com.luck.lib.camerax.CameraImageEngine;
10
import com.luck.lib.camerax.SimpleCameraX;
11
import com.luck.picture.lib.interfaces.OnCameraInterceptListener;
12
13
public class MeOnCameraInterceptListener implements OnCameraInterceptListener {
14
    @Override
15
    public void openCamera(Fragment fragment, int cameraMode, int requestCode) {
16
        SimpleCameraX camera = SimpleCameraX.of();
17
        camera.isAutoRotation(true);
18
        camera.setCameraMode(cameraMode);
19
        camera.setVideoFrameRate(25);
20
        camera.setVideoBitRate(3 * 1024 * 1024);
21
        camera.isDisplayRecordChangeTime(true);
22
        camera.isManualFocusCameraPreview(true);
23
        camera.isZoomCameraPreview(true);
24
//        camera.setOutputPathDir(getSandboxCameraOutputPath())
25
//        camera.setPermissionDeniedListener(getSimpleXPermissionDeniedListener())
26
//        camera.setPermissionDescriptionListener(getSimpleXPermissionDescriptionListener())
27
        camera.setImageEngine(new CameraImageEngine() {
28
            @Override
29
            public void loadImage(Context context, String url, ImageView imageView) {
30
                Glide.with(context).load(url).into(imageView);
31
            }
32
        });
33
        camera.start(fragment.requireActivity(),fragment, requestCode);
34
    }
35
}

+ 16 - 0
app/src/main/java/com/electric/chargingpile/util/MeSandboxFileEngine.java

1
package com.electric.chargingpile.util;
2
3
import android.content.Context;
4
5
import com.luck.picture.lib.engine.UriToFileTransformEngine;
6
import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener;
7
import com.luck.picture.lib.utils.SandboxTransformUtils;
8
9
public class MeSandboxFileEngine implements UriToFileTransformEngine {
10
    @Override
11
    public void onUriToFileAsyncTransform(Context context, String srcPath, String mineType, OnKeyValueResultCallbackListener call) {
12
        if (call != null) {
13
            call.onCallback(srcPath, SandboxTransformUtils.copyPathToSandbox(context, srcPath, mineType));
14
        }
15
    }
16
}

+ 116 - 0
app/src/main/java/com/electric/chargingpile/util/PictureUtlis.java

1
package com.electric.chargingpile.util;
2
3
import androidx.core.content.ContextCompat;
4
5
import com.electric.chargingpile.R;
6
import com.electric.chargingpile.application.MainApplication;
7
import com.luck.picture.lib.style.BottomNavBarStyle;
8
import com.luck.picture.lib.style.PictureSelectorStyle;
9
import com.luck.picture.lib.style.SelectMainStyle;
10
import com.luck.picture.lib.style.TitleBarStyle;
11
12
public class PictureUtlis {
13
14
    public static PictureSelectorStyle getStyle(){
15
        TitleBarStyle blueTitleBarStyle = new TitleBarStyle();
16
17
18
        //标题栏左边关闭样式
19
        blueTitleBarStyle.setTitleLeftBackResource(R.drawable.ps_ic_black_back);
20
        //预览标题栏左边关闭样式
21
        blueTitleBarStyle.setPreviewTitleLeftBackResource(R.drawable.ps_ic_black_back);
22
        //标题栏字体色值
23
        blueTitleBarStyle.setTitleTextColor(ContextCompat.getColor(MainApplication.context, R.color.color_black));
24
        //标题栏右边文本字体色值
25
        blueTitleBarStyle.setTitleCancelTextColor(ContextCompat.getColor(MainApplication.context, R.color.color_black));
26
        blueTitleBarStyle.setTitleBackgroundColor(ContextCompat.getColor(MainApplication.context, R.color.color_white));
27
        //预览标题栏背景
28
        blueTitleBarStyle.setPreviewTitleBackgroundColor(ContextCompat.getColor(MainApplication.context, R.color.color_white));
29
        //标题栏高度
30
        blueTitleBarStyle.setTitleBarHeight(DensityUtil.dip2px(MainApplication.context,48));
31
        // 标题栏右边向上图标
32
        blueTitleBarStyle.setTitleDrawableRightResource(R.drawable.ic_orange_arrow_up);
33
        // 是否隐藏取消按钮
34
        blueTitleBarStyle.setHideCancelButton(false);
35
36
37
        BottomNavBarStyle numberBlueBottomNavBarStyle = new BottomNavBarStyle();
38
        //预览颜色
39
        numberBlueBottomNavBarStyle.setBottomPreviewNormalTextColor(ContextCompat.getColor(MainApplication.context, R.color.ps_color_9b));
40
        //预览颜色选中
41
        numberBlueBottomNavBarStyle.setBottomPreviewSelectTextColor(ContextCompat.getColor(MainApplication.context, R.color.color_accent));
42
43
        //底部导航栏背景色
44
        numberBlueBottomNavBarStyle.setBottomNarBarBackgroundColor(ContextCompat.getColor(MainApplication.context, R.color.color_white));
45
        //已选数量背景样式
46
        numberBlueBottomNavBarStyle.setBottomSelectNumResources( R.drawable.pic_select);
47
        //底部编辑文字色值
48
        numberBlueBottomNavBarStyle.setBottomEditorTextColor(ContextCompat.getColor(MainApplication.context, R.color.color_accent));
49
50
        //底部原图文字色值
51
        numberBlueBottomNavBarStyle.setBottomOriginalTextColor( ContextCompat.getColor(MainApplication.context, R.color.color_accent));
52
53
54
55
        SelectMainStyle numberBlueSelectMainStyle =new  SelectMainStyle();
56
        //状态栏背景色
57
        numberBlueSelectMainStyle.setStatusBarColor(ContextCompat.getColor(MainApplication.context, R.color.color_white));
58
59
        //导航栏背景色
60
        numberBlueSelectMainStyle.setNavigationBarColor(ContextCompat.getColor(MainApplication.context, R.color.color_white));
61
62
        //状态栏字体颜色,非黑即白
63
        numberBlueSelectMainStyle.setDarkStatusBarBlack(true);
64
        //完成按钮从底部放在右上角
65
        numberBlueSelectMainStyle.setCompleteSelectRelativeTop(false);
66
        //预览页选择按钮从顶部放在右下角
67
        numberBlueSelectMainStyle.setPreviewSelectRelativeBottom(false);
68
        //预览页是否显示选择画廊
69
        numberBlueSelectMainStyle.setPreviewDisplaySelectGallery(true);
70
        //预览页选择按钮MarginRight
71
//        numberBlueSelectMainStyle.previewSelectMarginRight = true
72
        //预览背景色
73
        numberBlueSelectMainStyle.setPreviewBackgroundColor( ContextCompat.getColor(MainApplication.context, R.color.color_white));
74
        //预览页选择按钮字体颜色
75
        numberBlueSelectMainStyle.setPreviewSelectTextColor(ContextCompat.getColor(MainApplication.context, R.color.color_black));
76
        //预览页选择按钮文本
77
        numberBlueSelectMainStyle.setPreviewSelectText("");
78
        //预览页勾选样式是否使用数量类型
79
        numberBlueSelectMainStyle.setPreviewSelectNumberStyle(true);
80
        //预览页勾选样式
81
        numberBlueSelectMainStyle.setPreviewSelectBackground(R.drawable.pic_select);
82
83
        //画廊大小
84
        numberBlueSelectMainStyle.setAdapterPreviewGalleryItemSize(DensityUtil.dip2px(MainApplication.context,60));
85
        //勾选样式
86
        numberBlueSelectMainStyle.setSelectBackground(R.drawable.app_preview_select);
87
88
        //勾选样式是否使用数量类型
89
        numberBlueSelectMainStyle.setSelectNumberStyle(true);
90
91
        //列表背景色
92
        numberBlueSelectMainStyle.setMainListBackgroundColor( ContextCompat.getColor(MainApplication.context, R.color.color_white));
93
        //选择按钮默认文本字体色值
94
//        numberBlueSelectMainStyle.selectNormalTextColor = true
95
        //选择按钮默认背景
96
//        numberBlueSelectMainStyle.selectNormalBackgroundResources = R.drawable.app_preview_select
97
98
        // 列表背景色
99
        numberBlueSelectMainStyle.setMainListBackgroundColor(ContextCompat.getColor(MainApplication.context, R.color.ps_color_white));
100
101
        //选择按钮默认文本字体色值
102
        numberBlueSelectMainStyle.setSelectNormalTextColor(ContextCompat.getColor(MainApplication.context, R.color.ps_color_9b));
103
104
        //选择按钮文本字体色值
105
        numberBlueSelectMainStyle.setSelectTextColor(ContextCompat.getColor(MainApplication.context, R.color.color_accent));
106
107
        numberBlueSelectMainStyle.setSelectText(R.string.ps_completed);
108
109
110
        PictureSelectorStyle selectorStyle = new PictureSelectorStyle();
111
        selectorStyle.setTitleBarStyle(blueTitleBarStyle);
112
        selectorStyle.setBottomBarStyle(numberBlueBottomNavBarStyle);
113
        selectorStyle.setSelectMainStyle(numberBlueSelectMainStyle);
114
        return selectorStyle;
115
    }
116
}

+ 30 - 75
app/src/main/java/com/electric/chargingpile/util/Util.java

21
import com.electric.chargingpile.data.Zhan;
21
import com.electric.chargingpile.data.Zhan;
22
import com.electric.chargingpile.data.Zhuang;
22
import com.electric.chargingpile.data.Zhuang;
23
import com.electric.chargingpile.manager.ProfileManager;
23
import com.electric.chargingpile.manager.ProfileManager;
24
import com.luck.picture.lib.style.PictureParameterStyle;
24

25
import com.luck.picture.lib.entity.LocalMedia;
25
import com.tencent.mm.opensdk.openapi.IWXAPI;
26
import com.tencent.mm.opensdk.openapi.IWXAPI;
26
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
27
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
27

28

492
//    }
493
//    }
493
//
494
//
494

495

495
    public static PictureParameterStyle getWhiteStyle(Context context) {
496
        // 相册主题
497
        PictureParameterStyle style = new PictureParameterStyle();
498
        // 是否改变状态栏字体颜色(黑白切换)
499
        style.isChangeStatusBarFontColor = true;
500
        // 是否开启右下角已完成(0/9)风格
501
        style.isOpenCompletedNumStyle = false;
502
        // 是否开启类似QQ相册带数字选择风格
503
        style.isOpenCheckNumStyle = false;
504
        // 相册状态栏背景色
505
        style.pictureStatusBarColor = Color.parseColor("#FFFFFF");
506
        // 相册列表标题栏背景色
507
        style.pictureTitleBarBackgroundColor = Color.parseColor("#FFFFFF");
508
        // 相册列表标题栏右侧上拉箭头
509
        style.pictureTitleUpResId = R.drawable.ic_orange_arrow_up;
510
        // 相册列表标题栏右侧下拉箭头
511
        style.pictureTitleDownResId = R.drawable.ic_orange_arrow_down;
512
        // 相册文件夹列表选中圆点
513
        style.pictureFolderCheckedDotStyle = com.luck.picture.lib.R.drawable.picture_orange_oval;
514
        // 相册返回箭头
515
        style.pictureLeftBackIcon = R.drawable.ic_back_orange;
516
        // 标题栏字体颜色
517
        style.pictureTitleTextColor = ContextCompat.getColor(context, R.color.app_color_black);
518
        // 相册右侧取消按钮字体颜色  废弃 改用.pictureRightDefaultTextColor和.pictureRightDefaultTextColor
519
        style.pictureCancelTextColor = ContextCompat.getColor(context, R.color.app_color_black);
520
        // 选择相册目录背景样式
521
        style.pictureAlbumStyle = R.drawable.picture_new_item_select_bg;
522
        // 相册列表勾选图片样式
523
        style.pictureCheckedStyle = com.luck.picture.lib.R.drawable.picture_checkbox_selector;
524
        // 相册列表底部背景色
525
        style.pictureBottomBgColor = ContextCompat.getColor(context, com.luck.picture.lib.R.color.picture_color_fa);
526
        // 已选数量圆点背景样式
527
        style.pictureCheckNumBgStyle = com.luck.picture.lib.R.drawable.picture_num_oval;
528
        // 相册列表底下预览文字色值(预览按钮可点击时的色值)
529
        style.picturePreviewTextColor = ContextCompat.getColor(context, com.luck.picture.lib.R.color.picture_color_fa632d);
530
        // 相册列表底下不可预览文字色值(预览按钮不可点击时的色值)
531
        style.pictureUnPreviewTextColor = ContextCompat.getColor(context, com.luck.picture.lib.R.color.picture_color_9b);
532
        // 相册列表已完成色值(已完成 可点击色值)
533
        style.pictureCompleteTextColor = ContextCompat.getColor(context, com.luck.picture.lib.R.color.picture_color_fa632d);
534
        // 相册列表未完成色值(请选择 不可点击色值)
535
        style.pictureUnCompleteTextColor = ContextCompat.getColor(context, com.luck.picture.lib.R.color.picture_color_9b);
536
        // 预览界面底部背景色
537
        style.picturePreviewBottomBgColor = ContextCompat.getColor(context, com.luck.picture.lib.R.color.picture_color_white);
538
        // 原图按钮勾选样式  需设置.isOriginalImageControl(true); 才有效
539
        style.pictureOriginalControlStyle = com.luck.picture.lib.R.drawable.picture_original_checkbox;
540
        // 原图文字颜色 需设置.isOriginalImageControl(true); 才有效
541
        style.pictureOriginalFontColor = ContextCompat.getColor(context, R.color.app_color_53575e);
542
        // 外部预览界面删除按钮样式
543
        style.pictureExternalPreviewDeleteStyle = com.luck.picture.lib.R.drawable.picture_icon_black_delete;
544
        // 外部预览界面是否显示删除按钮
545
        style.pictureExternalPreviewGonePreviewDelete = true;
546
//        // 自定义相册右侧文本内容设置
547
//        mPictureParameterStyle.pictureRightDefaultText = "";
548
//        // 自定义相册未完成文本内容
549
//        mPictureParameterStyle.pictureUnCompleteText = "";
550
//        // 自定义相册完成文本内容
551
//        mPictureParameterStyle.pictureCompleteText = "";
552
//        // 自定义相册列表不可预览文字
553
//        mPictureParameterStyle.pictureUnPreviewText = "";
554
//        // 自定义相册列表预览文字
555
//        mPictureParameterStyle.picturePreviewText = "";
556

557
//        // 自定义相册标题字体大小
558
//        mPictureParameterStyle.pictureTitleTextSize = 18;
559
//        // 自定义相册右侧文字大小
560
//        mPictureParameterStyle.pictureRightTextSize = 14;
561
//        // 自定义相册预览文字大小
562
//        mPictureParameterStyle.picturePreviewTextSize = 14;
563
//        // 自定义相册完成文字大小
564
//        mPictureParameterStyle.pictureCompleteTextSize = 14;
565
//        // 自定义原图文字大小
566
//        mPictureParameterStyle.pictureOriginalTextSize = 14;
567
        return style;
568
    }
569

496

570
    /**
497
    /**
571
     * 判断手机是否安装微信
498
     * 判断手机是否安装微信
660
        }
587
        }
661
        return builder.toString();
588
        return builder.toString();
662
    }
589
    }
590

591
    public static String getCompressAbsolutePath(LocalMedia localMedia){
592
        String path = "";
593
         if (localMedia.isCompressed()){
594
            String compressPath = localMedia.getCompressPath();
595
            if (compressPath == null || compressPath .equals("") ){
596
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
597
                    path = localMedia.getSandboxPath();
598
                } else {
599
                    path = localMedia.getRealPath();
600
                }
601
            }else{
602
                path = compressPath;
603
            }
604
        }else{
605
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
606
                path = localMedia.getSandboxPath();
607
            } else {
608
                path =  localMedia.getRealPath();
609
            }
610
        }
611
        if (path == null || path.equals("")){
612
            path = localMedia.getAvailablePath();
613
        }
614
        return path;
615

616
    }
617

663
}
618
}

+ 220 - 0
app/src/main/java/com/electric/chargingpile/view/IjkPlayerView.java

1
package com.electric.chargingpile.view;
2
3
import android.content.Context;
4
import android.graphics.SurfaceTexture;
5
import android.net.Uri;
6
import android.util.AttributeSet;
7
import android.view.Gravity;
8
import android.view.Surface;
9
import android.view.TextureView;
10
import android.widget.FrameLayout;
11
12
import androidx.annotation.NonNull;
13
14
import com.luck.picture.lib.config.PictureMimeType;
15
16
import java.io.IOException;
17
18
import tv.danmaku.ijk.media.player.IMediaPlayer;
19
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
20
21
public class IjkPlayerView extends FrameLayout implements TextureView.SurfaceTextureListener {
22
    private IjkVideoTextureView textureView;
23
    private IjkMediaPlayer mediaPlayer;
24
    private int mVideoRotation;
25
26
    public IjkPlayerView(@NonNull Context context) {
27
        super(context);
28
        init();
29
    }
30
31
    public IjkPlayerView(@NonNull Context context, AttributeSet attrs) {
32
        super(context, attrs);
33
        init();
34
    }
35
36
    public IjkPlayerView(@NonNull Context context, AttributeSet attrs, int defStyleAttr) {
37
        super(context, attrs, defStyleAttr);
38
        init();
39
    }
40
41
    public static int[] scaleSize(int textureWidth, int textureHeight, int realWidth, int realHeight) {
42
        float deviceRate = (float) textureWidth / (float) textureHeight;
43
        float rate = (float) realWidth / (float) realHeight;
44
        int width;
45
        int height;
46
        if (rate < deviceRate) {
47
            height = textureHeight;
48
            width = (int) (textureHeight * rate);
49
        } else {
50
            width = textureWidth;
51
            height = (int) (textureWidth / rate);
52
        }
53
        return new int[]{width, height};
54
    }
55
56
    private void init() {
57
        textureView = new IjkVideoTextureView(getContext());
58
        textureView.setSurfaceTextureListener(this);
59
        LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
60
        layoutParams.gravity = Gravity.CENTER;
61
        textureView.setLayoutParams(layoutParams);
62
        addView(textureView);
63
    }
64
65
    public IjkMediaPlayer initMediaPlayer() {
66
        if (mediaPlayer == null) {
67
            mediaPlayer = new IjkMediaPlayer();
68
        }
69
        mediaPlayer.setOnVideoSizeChangedListener(new IMediaPlayer.OnVideoSizeChangedListener() {
70
            @Override
71
            public void onVideoSizeChanged(IMediaPlayer mediaPlayer, int width, int height, int sar_num, int sar_den) {
72
                textureView.adjustVideoSize(width, height, mVideoRotation);
73
            }
74
        });
75
        mediaPlayer.setOnInfoListener(new IMediaPlayer.OnInfoListener() {
76
            @Override
77
            public boolean onInfo(IMediaPlayer mp, int what, int extra) {
78
                if (what == 10001) {
79
                    mVideoRotation = extra;
80
                }
81
                return false;
82
            }
83
        });
84
        mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
85
        return mediaPlayer;
86
    }
87
88
    public IjkMediaPlayer getMediaPlayer() {
89
        return mediaPlayer;
90
    }
91
92
    public void start(String path) {
93
        try {
94
            if (PictureMimeType.isContent(path)) {
95
                mediaPlayer.setDataSource(getContext(), Uri.parse(path));
96
            } else {
97
                mediaPlayer.setDataSource(path);
98
            }
99
            SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
100
            if (surfaceTexture != null) {
101
                mediaPlayer.setSurface(new Surface(surfaceTexture));
102
            }
103
            mediaPlayer.prepareAsync();
104
        } catch (IOException e) {
105
            e.printStackTrace();
106
        }
107
    }
108
109
    @Override
110
    public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surface, int width, int height) {
111
        mediaPlayer.setSurface(new Surface(surface));
112
    }
113
114
    @Override
115
    public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surface, int width, int height) {
116
    }
117
118
    @Override
119
    public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surface) {
120
        return false;
121
    }
122
123
    @Override
124
    public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surface) {
125
126
    }
127
128
    public void release() {
129
        if (mediaPlayer != null) {
130
            mediaPlayer.release();
131
            mediaPlayer.setOnPreparedListener(null);
132
            mediaPlayer.setOnCompletionListener(null);
133
            mediaPlayer.setOnErrorListener(null);
134
            mediaPlayer.setOnInfoListener(null);
135
            mediaPlayer = null;
136
        }
137
    }
138
139
    public void clearCanvas() {
140
    }
141
142
    public static class IjkVideoTextureView extends TextureView {
143
        /**
144
         * 视频宽度
145
         */
146
        private int mVideoWidth;
147
        /**
148
         * 视频高度
149
         */
150
        private int mVideoHeight;
151
152
        /**
153
         * 视频旋转角度
154
         */
155
        private int mVideoRotation;
156
157
        public IjkVideoTextureView(@NonNull Context context) {
158
            super(context);
159
        }
160
161
        public void adjustVideoSize(int videoWidth, int videoHeight, int videoRotation) {
162
            this.mVideoWidth = videoWidth;
163
            this.mVideoHeight = videoHeight;
164
            this.mVideoRotation = videoRotation;
165
            this.setRotation(mVideoRotation);
166
            this.requestLayout();
167
        }
168
169
        @Override
170
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
171
            int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
172
            int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
173
            int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
174
            int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
175
            int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
176
            int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
177
            if (mVideoWidth > 0 && mVideoHeight > 0) {
178
                if (widthSpecMode == MeasureSpec.EXACTLY && heightSpecMode == MeasureSpec.EXACTLY) {
179
                    width = widthSpecSize;
180
                    height = heightSpecSize;
181
182
                    if (mVideoWidth * height < width * mVideoHeight) {
183
                        width = height * mVideoWidth / mVideoHeight;
184
                    } else if (mVideoWidth * height > width * mVideoHeight) {
185
                        height = width * mVideoHeight / mVideoWidth;
186
                    }
187
                } else if (widthSpecMode == MeasureSpec.EXACTLY) {
188
                    width = widthSpecSize;
189
                    height = width * mVideoHeight / mVideoWidth;
190
                    if (heightSpecMode == MeasureSpec.AT_MOST && height > heightSpecSize) {
191
                        height = heightSpecSize;
192
                    }
193
                } else if (heightSpecMode == MeasureSpec.EXACTLY) {
194
                    height = heightSpecSize;
195
                    width = height * mVideoWidth / mVideoHeight;
196
                    if (widthSpecMode == MeasureSpec.AT_MOST && width > widthSpecSize) {
197
                        width = widthSpecSize;
198
                    }
199
                } else {
200
                    width = mVideoWidth;
201
                    height = mVideoHeight;
202
                    if (heightSpecMode == MeasureSpec.AT_MOST && height > heightSpecSize) {
203
                        height = heightSpecSize;
204
                        width = height * mVideoWidth / mVideoHeight;
205
                    }
206
                    if (widthSpecMode == MeasureSpec.AT_MOST && width > widthSpecSize) {
207
                        width = widthSpecSize;
208
                        height = width * mVideoHeight / mVideoWidth;
209
                    }
210
                }
211
            }
212
            setMeasuredDimension(width, height);
213
            if ((mVideoRotation + 180) % 180 != 0) {
214
                int[] size = scaleSize(widthSpecSize, heightSpecSize, height, width);
215
                setScaleX(size[0] / ((float) height));
216
                setScaleY(size[1] / ((float) width));
217
            }
218
        }
219
    }
220
}

BIN
app/src/main/res/drawable-xxhdpi/app_back_black.png


+ 11 - 0
app/src/main/res/drawable/app_preview_select.xml

1
<?xml version="1.0" encoding="utf-8"?>
2
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3
    android:shape="oval"
4
    android:useLevel="false">
5
6
    <solid android:color="@color/color_transparent" />
7
    <size
8
        android:width="18dp"
9
        android:height="18dp" />
10
    <stroke android:width="1dp" android:color="@color/color_accent"/>
11
</shape>

BIN
app/src/main/res/drawable/img.png


BIN
app/src/main/res/drawable/img_1.png


+ 11 - 0
app/src/main/res/drawable/pic_select.xml

1
<?xml version="1.0" encoding="utf-8"?>
2
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3
    android:shape="oval"
4
    android:useLevel="false">
5
6
    <solid android:color="@color/color_accent" />
7
    <size
8
        android:width="18dp"
9
        android:height="18dp" />
10
    <stroke android:width="1dp" android:color="@color/color_accent"/>
11
</shape>

+ 2 - 1
app/src/main/res/values/color.xml

18
    <color name="bkg_button_green">#39c663</color>
18
    <color name="bkg_button_green">#39c663</color>
19
    <color name="ui_green">#39C663</color>
19
    <color name="ui_green">#39C663</color>
20
    <color name="title_background">#FCFCFC</color>
20
    <color name="title_background">#FCFCFC</color>
21

21
    <color name="color_accent">#ff6600</color>
22
    <color name="color_transparent">#00FFFFFF</color>
22
    <!-- PictureSelector -->
23
    <!-- PictureSelector -->
23
    <color name="app_color_grey">#393a3e</color>
24
    <color name="app_color_grey">#393a3e</color>
24
    <color name="app_color_black">#000000</color>
25
    <color name="app_color_black">#000000</color>

+ 0 - 52
app/src/main/res/values/styles.xml

303

303

304
    <style name="BaseNoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar" />
304
    <style name="BaseNoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar" />
305
    <!--白色主题样式,,注意每一项都不能少-->
305
    <!--白色主题样式,,注意每一项都不能少-->
306
    <style name="picture.white.style" parent="BaseNoActionBarTheme">
307
        <!-- Customize your theme here. -->
308
        <!--标题栏背景色-->
309
        <item name="colorPrimary">@color/app_color_white</item>
310
        <!--状态栏背景色-->
311
        <item name="colorPrimaryDark">@color/app_color_white</item>
312
        <!--是否改变图片列表界面状态栏字体颜色为黑色-->
313
        <item name="picture.statusFontColor">true</item>
314
        <!--返回键图标-->
315
        <item name="picture.leftBack.icon">@drawable/ic_back_arrow</item>
316
        <!--标题下拉箭头-->
317
        <item name="picture.arrow_down.icon">@drawable/ic_orange_arrow_down</item>
318
        <!--标题上拉箭头-->
319
        <item name="picture.arrow_up.icon">@drawable/ic_orange_arrow_up</item>
320
        <!--标题文字颜色-->
321
        <item name="picture.title.textColor">@color/app_color_black</item>
322
        <!--标题栏右边文字-->
323
        <item name="picture.right.textColor">@color/app_color_black</item>
324
        <!--图片列表勾选样式-->
325
        <item name="picture.checked.style">@drawable/picture_checkbox_selector</item>
326
        <!--开启图片列表勾选数字模式,开启的话勾选样式要换-->
327
        <item name="picture.style.checkNumMode">false</item>
328
        <!--选择图片样式0/9-->
329
        <item name="picture.style.numComplete">true</item>
330
        <!--图片列表底部背景色-->
331
        <item name="picture.bottom.bg">@color/app_color_fa</item>
332
        <!--图片列表预览文字颜色-->
333
        <item name="picture.preview.textColor">@color/picture_list_sina_text_color</item>
334
        <!--图片列表已完成文字颜色-->
335
        <item name="picture.complete.textColor">@color/picture_list_sina_text_color</item>
336
        <!--图片已选数量圆点背景色-->
337
        <item name="picture.num.style">@drawable/picture_num_oval</item>
338
        <!--预览界面标题栏背景色-->
339
        <item name="picture.ac_preview.title.bg">@color/app_color_white</item>
340
        <!--预览界面标题文字颜色-->
341
        <item name="picture.ac_preview.title.textColor">@color/app_color_black</item>
342
        <!--预览界面已完成文字颜色-->
343
        <item name="picture.ac_preview.complete.textColor">@color/picture_list_sina_text_color
344
        </item>
345
        <!--预览界面底部背景色-->
346
        <item name="picture.ac_preview.bottom.bg">@color/picture_color_fa</item>
347
        <!--预览界面返回箭头-->
348
        <item name="picture.preview.leftBack.icon">@drawable/ic_back_arrow</item>
349
        <!--裁剪页面标题背景色-->
350
        <item name="picture.crop.toolbar.bg">@color/app_color_white</item>
351
        <!--裁剪页面状态栏颜色-->
352
        <item name="picture.crop.status.color">@color/app_color_white</item>
353
        <!--裁剪页面标题文字颜色-->
354
        <item name="picture.crop.title.color">@color/app_color_black</item>
355
        <!--相册文件夹列表选中图标-->
356
        <item name="picture.folder_checked_dot">@drawable/picture_orange_oval</item>
357
    </style>
358

306

359
    <declare-styleable name="TextImageView">
307
    <declare-styleable name="TextImageView">
360
        <attr name="drawableLeftWidth" format="dimension" />
308
        <attr name="drawableLeftWidth" format="dimension" />

+ 2 - 2
config.gradle

1
ext{
1
ext{
2
    android = [
2
    android = [
3
            compileSdkVersion: 31,
3
            compileSdkVersion: 33,
4
            applicationId    : "com.electric.chargingpile",
4
            applicationId    : "com.electric.chargingpile",
5
            minSdkVersion    : 24,
5
            minSdkVersion    : 24,
6
            targetSdkVersion : 31,
6
            targetSdkVersion : 33,
7
    ]
7
    ]
8
8
9
    manifestPlaceholders= [
9
    manifestPlaceholders= [

Merge remote-tracking branch 'origin/master' · 172aba128a - Gogs: Go Git Service
浏览代码

Merge remote-tracking branch 'origin/master'

dxh 5 年之前
父节点
当前提交
172aba128a

+ 38 - 25
app/src/main/java/com/electric/chargingpile/fragment/SvVideoShowView.java

@ -5,7 +5,6 @@ import android.content.Intent;
5 5
import android.support.v4.view.PagerAdapter;
6 6
import android.support.v4.view.ViewPager;
7 7
import android.text.TextUtils;
8
import android.util.Log;
9 8
import android.view.LayoutInflater;
10 9
import android.view.MotionEvent;
11 10
import android.view.View;
@ -86,21 +85,23 @@ public class SvVideoShowView implements View.OnClickListener {
86 85
    }
87 86
88 87
    public void setInfo(TalkRecommendBean talkRecommendBean) {
89
        this.talkRecommendBean = talkRecommendBean;
90
        int targetType = talkRecommendBean.targetType;
91
        if (view == null) {
92
            if (targetType == 23) {
93
                view = LayoutInflater.from(activity).inflate(R.layout.view_show_view, null);
94
                initPlayer(view);
95
96
            } else if (targetType == 24) {
97
                view = LayoutInflater.from(activity).inflate(R.layout.view_show_zoom, null);
98
                initZoomPhoto(view);
99
            }
100
            initBottom(view);
101
            viewGroup.addView(view);
88
        if (viewGroup != null) {
89
            this.talkRecommendBean = talkRecommendBean;
90
            int targetType = talkRecommendBean.targetType;
91
            if (view == null) {
92
                if (targetType == 23) {
93
                    view = LayoutInflater.from(activity).inflate(R.layout.view_show_view, null);
94
                    initPlayer(view);
95
96
                } else if (targetType == 24) {
97
                    view = LayoutInflater.from(activity).inflate(R.layout.view_show_zoom, null);
98
                    initZoomPhoto(view);
99
                }
100
                initBottom(view);
101
                viewGroup.addView(view);
102 102
103
            setData();
103
                setData();
104
            }
104 105
        }
105 106
    }
106 107
@ -163,8 +164,6 @@ public class SvVideoShowView implements View.OnClickListener {
163 164
    private void setData() {
164 165
        sv_show_comment_count_tv.setText(num4(talkRecommendBean.commentNums));
165 166
        sv_show_like_tv.setText(num4(talkRecommendBean.likeNums));
166
        sv_show_tvcon.setText(talkRecommendBean.content);
167
        sv_show_tvcon.setText(talkRecommendBean.title);
168 167
        sv_show_user_name.setText(talkRecommendBean.nickName);
169 168
        String time = "" + talkRecommendBean.addTime;
170 169
        sv_show_user_time.setText(time);
@ -198,13 +197,6 @@ public class SvVideoShowView implements View.OnClickListener {
198 197
        } else {
199 198
            // sv_show_like_img  not like
200 199
        }
201
        int length = sv_show_tvcon.length();
202
        Log.e("length", "setData: length: " + length);
203
        if (sv_show_tvcon.getLineCount() >= 3 && sv_show_tvcon.getText().length() > 100) {
204
            sv_show_tvcon_more.setVisibility(View.VISIBLE);
205
        } else {
206
            sv_show_tvcon_more.setVisibility(View.GONE);
207
        }
208 200
    }
209 201
210 202
@ -391,7 +383,25 @@ public class SvVideoShowView implements View.OnClickListener {
391 383
    }
392 384
393 385
    public void updateView() {
394
//        ToastUtil.showToast(activity, "updateView", Toast.LENGTH_LONG);
386
        String title = talkRecommendBean.title;
387
        if (TextUtils.isEmpty(title)) {
388
            sv_show_tvcon_more.setVisibility(View.GONE);
389
        } else {
390
            int length = title.length();
391
            if (length > 100) {
392
                sv_show_tvcon.setMaxLines(3);
393
                sv_show_tvcon.setEllipsize(TextUtils.TruncateAt.END);
394
                sv_show_tvcon_more.setVisibility(View.VISIBLE);
395
                sv_show_tvcon.setText(talkRecommendBean.title);
396
397
            } else {
398
                sv_show_tvcon_more.setVisibility(View.GONE);
399
400
                sv_show_tvcon.setMaxLines(100);
401
            }
402
403
        }
404
395 405
    }
396 406
397 407
    public void initAndPlay() {
@ -512,7 +522,10 @@ public class SvVideoShowView implements View.OnClickListener {
512 522
                                chargingShareBean.setIcon(talkRecommendBean.coverImgUrl);
513 523
                                chargingShareBean.setTitle(talkRecommendBean.title);
514 524
                                chargingShareBean.setUrl(shareUrl);
525
                                showSimpleBottomSheetGrid(chargingShareBean);
515 526
                            }
527
                        } else {
528
                            ToastUtil.showToast(activity, "获取分享信息失败,请重试", Toast.LENGTH_SHORT);
516 529
                        }
517 530
                    }
518 531
                });

+ 0 - 2
app/src/main/res/layout/view_show_bottom.xml

@ -123,8 +123,6 @@
123 123
        android:layout_marginRight="39dp"
124 124
        android:layout_marginBottom="23dp"
125 125
        android:textColor="#E2E2E2"
126
        android:ellipsize="end"
127
        android:maxLines="3"
128 126
        android:textSize="14sp" />
129 127
130 128
    <ImageView