diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5fc65228d..14a9cfa56 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,8 +51,15 @@ tools:node="remove" /> - - + + + + + @@ -72,6 +79,7 @@ + () { it.addListener(object : AnimatorListenerAdapter() { var isCanceled = false - override fun onAnimationCancel(animation: Animator?) { + override fun onAnimationCancel(animation: Animator) { isCanceled = true } - override fun onAnimationEnd(animation: Animator?) { + override fun onAnimationEnd(animation: Animator) { if (!isCanceled) { openRedPackage() } diff --git a/app/src/main/java/com/yizhuan/erban/common/dialog/PhotoDialog.kt b/app/src/main/java/com/yizhuan/erban/common/dialog/PhotoDialog.kt index 9e943d43f..0c215cbdd 100644 --- a/app/src/main/java/com/yizhuan/erban/common/dialog/PhotoDialog.kt +++ b/app/src/main/java/com/yizhuan/erban/common/dialog/PhotoDialog.kt @@ -3,6 +3,7 @@ package com.yizhuan.erban.common.dialog import android.Manifest import android.content.Intent import android.net.Uri +import android.os.Build import android.os.Bundle import android.provider.Settings import android.text.TextUtils @@ -73,16 +74,14 @@ class PhotoDialog : BaseDialogFragment(), EasyPermissions.Pe private fun checkStoragePermission1() { if (!EasyPermissions.hasPermissions( - XChatApplication.gContext, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE + XChatApplication.gContext, if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) ) { EasyPermissions.requestPermissions( this, getString(R.string.permission_storage_rationale), PERMISSION_CODE_STORAGE_1, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE + if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) } else { PhotoProviderNew.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER) @@ -90,7 +89,11 @@ class PhotoDialog : BaseDialogFragment(), EasyPermissions.Pe } private fun checkCameraPermission() { - if (!EasyPermissions.hasPermissions(XChatApplication.gContext, Manifest.permission.CAMERA)) { + if (!EasyPermissions.hasPermissions( + XChatApplication.gContext, + Manifest.permission.CAMERA + ) + ) { EasyPermissions.requestPermissions( this, getString(R.string.permission_camera_rationale), @@ -104,16 +107,15 @@ class PhotoDialog : BaseDialogFragment(), EasyPermissions.Pe private fun checkStoragePermission2() { if (!EasyPermissions.hasPermissions( - XChatApplication.gContext, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE + XChatApplication.gContext, if (Build.VERSION.SDK_INT >= 33) + Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) ) { EasyPermissions.requestPermissions( this, getString(R.string.permission_storage_rationale), PERMISSION_CODE_STORAGE_2, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE + if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) } else { PhotoProviderNew.photoCamera(this, REQUEST_CODE_OPEN_CAMERA_PROVIDER) diff --git a/app/src/main/java/com/yizhuan/erban/main/helper/NoticationsUiHelper.java b/app/src/main/java/com/yizhuan/erban/main/helper/NoticationsUiHelper.java index dc7b90292..7b4d8ae2c 100644 --- a/app/src/main/java/com/yizhuan/erban/main/helper/NoticationsUiHelper.java +++ b/app/src/main/java/com/yizhuan/erban/main/helper/NoticationsUiHelper.java @@ -1,6 +1,12 @@ package com.yizhuan.erban.main.helper; +import static android.Manifest.permission.POST_NOTIFICATIONS; + import android.app.Activity; +import android.content.pm.PackageManager; +import android.os.Build; + +import androidx.core.app.ActivityCompat; import com.yizhuan.erban.R; import com.yizhuan.erban.common.widget.dialog.DialogManager; @@ -35,23 +41,35 @@ public class NoticationsUiHelper { private static final long CACHE_DISTANCE_TIME = 3 * TimeUtils.MILLIS_OF_A_DAY; public static void handle(Activity activity, DialogManager dialogManager) { - if (NotificationsUtils.isNotificationEnabled(activity)) { + if (Build.VERSION.SDK_INT >= 33) { + if (ActivityCompat.checkSelfPermission(activity, POST_NOTIFICATIONS) == PackageManager.PERMISSION_DENIED) { + if (!ActivityCompat.shouldShowRequestPermissionRationale(activity, POST_NOTIFICATIONS)) { + enableNotification(activity, dialogManager); + } else { + ActivityCompat.requestPermissions(activity, new String[]{POST_NOTIFICATIONS}, 100); + } + } + } else if (NotificationsUtils.isNotificationEnabled(activity)) { return; } + enableNotification(activity, dialogManager); + } + + private static void enableNotification(Activity activity, DialogManager dialogManager) { Single.create(new SingleOnSubscribe() { - @Override - public void subscribe(SingleEmitter emitter) throws Exception { - long lastDialogTime = (long) SharedPreferenceUtils - .get(KEY_NOTICATIONS_DIALOG_TIME, 0L); - long currTime = System.currentTimeMillis(); - if (lastDialogTime == 0L || currTime - lastDialogTime >= CACHE_DISTANCE_TIME) { - //超过三天需要重新弹窗 - emitter.onSuccess(""); - return; - } - emitter.onError(new Throwable("no need to show notications dialog")); - } - }) + @Override + public void subscribe(SingleEmitter emitter) throws Exception { + long lastDialogTime = (long) SharedPreferenceUtils + .get(KEY_NOTICATIONS_DIALOG_TIME, 0L); + long currTime = System.currentTimeMillis(); + if (lastDialogTime == 0L || currTime - lastDialogTime >= CACHE_DISTANCE_TIME) { + //超过三天需要重新弹窗 + emitter.onSuccess(""); + return; + } + emitter.onError(new Throwable("no need to show notications dialog")); + } + }) .flatMap(new Function>() { @Override public SingleSource apply(String s) throws Exception { diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt index f7dc56b6b..7bcd2de1d 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt @@ -1,6 +1,7 @@ package com.yizhuan.erban.ui.setting.bean import android.Manifest +import android.os.Build import com.yizhuan.erban.R import com.yizhuan.xchat_android_core.utils.TextUtils import com.yizhuan.xchat_android_library.utils.ResUtil @@ -36,8 +37,7 @@ enum class PermissionEntity( STORAGE( ResUtil.getString(R.string.setting_bean_permissionentity_011), ResUtil.getString(R.string.setting_bean_permissionentity_012), R.drawable.icon_permission_storage, arrayOf( - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE + if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) ); diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserInfoModifyActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserInfoModifyActivity.kt index 595c5ab21..a9a1c6066 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserInfoModifyActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserInfoModifyActivity.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.Color import android.net.Uri +import android.os.Build import android.os.Bundle import android.provider.Settings import android.text.TextUtils @@ -435,16 +436,14 @@ class UserInfoModifyActivity : BaseViewBindingActivity= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) ) { EasyPermissions.requestPermissions( this, getString(R.string.permission_storage_rationale), PERMISSION_CODE_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE + if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) } else { mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg") diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserModifyPhotosActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserModifyPhotosActivity.kt index 4ab14dde4..08f642ab6 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserModifyPhotosActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserModifyPhotosActivity.kt @@ -6,6 +6,7 @@ import android.app.Activity import android.content.Intent import android.graphics.Bitmap import android.net.Uri +import android.os.Build import android.os.Bundle import android.provider.Settings import android.view.View @@ -20,7 +21,6 @@ import com.yalantis.ucrop.UCrop import com.yizhuan.erban.R import com.yizhuan.erban.application.XChatApplication import com.yizhuan.erban.base.TitleBar -import com.yizhuan.xchat_android_library.common.file.FileHelper import com.yizhuan.erban.common.util.BitmapUtil import com.yizhuan.erban.ui.user.adapter.UserModifyPhotosAdapter import com.yizhuan.erban.ui.user.adapter.UserModifyPhotosAdapter.PhotoItemClickListener @@ -30,6 +30,7 @@ import com.yizhuan.xchat_android_core.user.UserModel import com.yizhuan.xchat_android_core.user.bean.UserInfo import com.yizhuan.xchat_android_core.user.bean.UserPhoto import com.yizhuan.xchat_android_core.utils.net.BeanObserver +import com.yizhuan.xchat_android_library.common.file.FileHelper import com.yizhuan.xchat_android_library.common.photo.PhotoProviderNew import com.yizhuan.xchat_android_library.common.util.PhotoCompressCallback import com.yizhuan.xchat_android_library.common.util.PhotoCompressUtil @@ -219,16 +220,14 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener, private fun checkStoragePermission() { if (!EasyPermissions.hasPermissions( this, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE + if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) ) { EasyPermissions.requestPermissions( this, getString(R.string.permission_storage_rationale), - PERMISSION_CODE_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE + PERMISSION_CODE_STORAGE, + if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE ) } else { mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg") diff --git a/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java b/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java index fa1ae2712..b196ae164 100644 --- a/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java +++ b/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java @@ -4,6 +4,7 @@ package com.yizhuan.erban.community.publish.view; import android.Manifest; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; @@ -619,16 +620,14 @@ public class PublishActivity extends BaseMvpActivity= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE ) ) { EasyPermissions.requestPermissions( this, getString(R.string.permission_storage_rationale), PERMISSION_CODE_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE + Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE ); } else { PhotoProvider.photoProvider( diff --git a/app/src/module_music/java/com/yizhuan/tutu/music/activity/MusicListActivity.java b/app/src/module_music/java/com/yizhuan/tutu/music/activity/MusicListActivity.java index 50d32532f..ab4808b1a 100644 --- a/app/src/module_music/java/com/yizhuan/tutu/music/activity/MusicListActivity.java +++ b/app/src/module_music/java/com/yizhuan/tutu/music/activity/MusicListActivity.java @@ -4,6 +4,7 @@ import android.Manifest; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.ImageView; @@ -84,7 +85,7 @@ public class MusicListActivity extends BaseMvpActivity= 33 ? Manifest.permission.READ_MEDIA_AUDIO : Manifest.permission.READ_EXTERNAL_STORAGE) .compose(bindToLifecycle()) .subscribe(aBoolean -> { if (!aBoolean) { diff --git a/gradle.properties b/gradle.properties index d2e3478c8..45282c168 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,9 +25,9 @@ only_arm64=false channel_file=channel.txt CRASHLYTICS_COLLECTION_ENABLED=false -COMPILE_SDK_VERSION=32 +COMPILE_SDK_VERSION=33 MIN_SDK_VERSION=21 -TARGET_SDK_VERSION=32 +TARGET_SDK_VERSION=33 version_name=1.10.4 version_code=1004 diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml index e5b7519f6..eb9e9db67 100644 --- a/library/src/main/AndroidManifest.xml +++ b/library/src/main/AndroidManifest.xml @@ -3,8 +3,13 @@ xmlns:android="http://schemas.android.com/apk/res/android"> - + + + + diff --git a/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/models/album/AlbumModel.java b/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/models/album/AlbumModel.java index 8d003de31..f06c5de91 100644 --- a/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/models/album/AlbumModel.java +++ b/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/models/album/AlbumModel.java @@ -7,6 +7,7 @@ import android.content.Context; import android.database.Cursor; import android.graphics.BitmapFactory; import android.net.Uri; +import android.os.Build; import android.provider.MediaStore; import android.text.TextUtils; @@ -60,7 +61,7 @@ public class AlbumModel { public void query(Context context, final CallBack callBack) { final Context appCxt = context.getApplicationContext(); if (PermissionChecker.checkSelfPermission(context, - Manifest.permission.READ_EXTERNAL_STORAGE) != PermissionChecker.PERMISSION_GRANTED) { + Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE) != PermissionChecker.PERMISSION_GRANTED) { if (null != callBack) callBack.onAlbumWorkedCallBack(); return; } diff --git a/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/ui/EasyPhotosActivity.java b/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/ui/EasyPhotosActivity.java index 3060c81e1..8a6c711cb 100644 --- a/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/ui/EasyPhotosActivity.java +++ b/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/ui/EasyPhotosActivity.java @@ -210,11 +210,9 @@ public class EasyPhotosActivity extends AppCompatActivity implements AlbumItemsA protected String[] getNeedPermissions() { if (Setting.isShowCamera) { return new String[]{Manifest.permission.CAMERA, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE}; + Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE}; } else { - return new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE}; + return new String[]{Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE}; } } @@ -499,6 +497,7 @@ public class EasyPhotosActivity extends AppCompatActivity implements AlbumItemsA shouldShowMenuDone(); } + @SuppressLint("Range") private Photo getPhoto(Uri uri) { Photo p = null; String path; @@ -625,12 +624,17 @@ public class EasyPhotosActivity extends AppCompatActivity implements AlbumItemsA } } - final Photo photo = new Photo(mTempImageFile.getName(), uri, - mTempImageFile.getAbsolutePath(), - mTempImageFile.lastModified() / 1000, width, height, orientation, - mTempImageFile.length(), - DurationUtils.getDuration(mTempImageFile.getAbsolutePath()), - options.outMimeType); + final Photo photo; + try { + photo = new Photo(mTempImageFile.getName(), uri, + mTempImageFile.getAbsolutePath(), + mTempImageFile.lastModified() / 1000, width, height, orientation, + mTempImageFile.length(), + DurationUtils.getDuration(mTempImageFile.getAbsolutePath()), + options.outMimeType); + } catch (IOException e) { + throw new RuntimeException(e); + } runOnUiThread(new Runnable() { @Override diff --git a/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/ui/PuzzleActivity.java b/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/ui/PuzzleActivity.java index 4a14d1033..95657c357 100644 --- a/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/ui/PuzzleActivity.java +++ b/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/ui/PuzzleActivity.java @@ -7,6 +7,7 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.view.View; import android.view.WindowManager; @@ -459,10 +460,15 @@ public class PuzzleActivity extends AppCompatActivity implements View.OnClickLis public void onSuccess(File file) { Intent intent = new Intent(); - Photo photo = new Photo(file.getName(), UriUtils.getUri(PuzzleActivity.this, - file), file.getAbsolutePath(), file.lastModified() / 1000, - puzzleView.getWidth(), puzzleView.getHeight(), 0, file.length(), - DurationUtils.getDuration(file.getAbsolutePath()), "image/png"); + Photo photo = null; + try { + photo = new Photo(file.getName(), UriUtils.getUri(PuzzleActivity.this, + file), file.getAbsolutePath(), file.lastModified() / 1000, + puzzleView.getWidth(), puzzleView.getHeight(), 0, file.length(), + DurationUtils.getDuration(file.getAbsolutePath()), "image/png"); + } catch (IOException e) { + throw new RuntimeException(e); + } intent.putExtra(EasyPhotos.RESULT_PHOTOS, photo); setResult(RESULT_OK, intent); PuzzleActivity.this.finish(); @@ -576,8 +582,7 @@ public class PuzzleActivity extends AppCompatActivity implements View.OnClickLis protected String[] getNeedPermissions() { return new String[]{Manifest.permission.CAMERA, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE}; + Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE}; } @Override diff --git a/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/utils/media/DurationUtils.java b/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/utils/media/DurationUtils.java index a2ec489df..00d4fc8ee 100644 --- a/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/utils/media/DurationUtils.java +++ b/library/src/module_easyphoto/java/com/yizhuan/xchat_android_library/easyphoto/utils/media/DurationUtils.java @@ -3,6 +3,8 @@ package com.yizhuan.xchat_android_library.easyphoto.utils.media; import android.media.MediaMetadataRetriever; import android.text.format.DateUtils; +import java.io.IOException; + /** * DurationUtils * Create By lishilin On 2019/3/25 @@ -15,7 +17,7 @@ public class DurationUtils { * @param path path * @return duration */ - public static long getDuration(String path) { + public static long getDuration(String path) throws IOException { MediaMetadataRetriever mmr = null; try { mmr = new MediaMetadataRetriever();