From 2c45bb1da9edab78de8953ce5a00ea36eebe3040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=8E=89=E4=B9=85?= <1484288157@qq.com> Date: Thu, 31 Dec 2020 18:09:51 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A4=84=E7=90=86=E6=9B=B4=E6=8D=A2=E5=A4=B4?= =?UTF-8?q?=E5=83=8F=E6=8C=82=E4=BB=B6=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98?= =?UTF-8?q?=202.=E6=B7=BB=E5=8A=A0=E6=B8=B8=E6=88=8F=E6=8A=95=E7=A8=BF?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=96=87=E4=BB=B6=E5=A4=B1=E8=B4=A5toast?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/UriUtils.java | 127 ------------------ .../game/upload/GameUploadFragment.kt | 7 +- .../border/AvatarBorderFragment.kt | 8 +- .../matisse/internal/utils/PathUtils.java | 28 +++- 4 files changed, 28 insertions(+), 142 deletions(-) delete mode 100644 app/src/main/java/com/gh/common/util/UriUtils.java diff --git a/app/src/main/java/com/gh/common/util/UriUtils.java b/app/src/main/java/com/gh/common/util/UriUtils.java deleted file mode 100644 index b8966d1c2e..0000000000 --- a/app/src/main/java/com/gh/common/util/UriUtils.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.gh.common.util; - -import android.annotation.SuppressLint; -import android.content.ContentUris; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.os.Build; -import android.os.Environment; -import android.provider.DocumentsContract; -import android.provider.MediaStore; - -public class UriUtils { - - @SuppressLint("NewApi") - public static String getPath(final Context context, final Uri uri) { - - final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; - - // DocumentProvider - if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { - // ExternalStorageProvider - if (isExternalStorageDocument(uri)) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - - if ("primary".equalsIgnoreCase(type)) { - return Environment.getExternalStorageDirectory() + "/" + split[1]; - } - } - // DownloadsProvider - else if (isDownloadsDocument(uri)) { - - final String id = DocumentsContract.getDocumentId(uri); - final Uri contentUri = ContentUris.withAppendedId( - Uri.parse("content://downloads/public_downloads"), Long.parseLong(id)); - - return getDataColumn(context, contentUri, null, null); - } - // MediaProvider - else if (isMediaDocument(uri)) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - - Uri contentUri = null; - if ("image".equals(type)) { - contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; - } else if ("video".equals(type)) { - contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; - } else if ("audio".equals(type)) { - contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; - } - - final String selection = "_id=?"; - final String[] selectionArgs = new String[]{split[1]}; - - return getDataColumn(context, contentUri, selection, selectionArgs); - } - } - // MediaStore (and general) - else if ("content".equalsIgnoreCase(uri.getScheme())) { - return getDataColumn(context, uri, null, null); - } - // File - else if ("file".equalsIgnoreCase(uri.getScheme())) { - return uri.getPath(); - } - return null; - } - - /** - * Get the value of the data column for this Uri. This is useful for - * MediaStore Uris, and other file-based ContentProviders. - * - * @param context The context. - * @param uri The Uri to query. - * @param selection (Optional) Filter used in the query. - * @param selectionArgs (Optional) Selection arguments used in the query. - * @return The value of the _data column, which is typically a file path. - */ - private static String getDataColumn(Context context, Uri uri, String selection, - String[] selectionArgs) { - - Cursor cursor = null; - final String column = "_data"; - final String[] projection = {column}; - - try { - cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, - null); - if (cursor != null && cursor.moveToFirst()) { - final int column_index = cursor.getColumnIndexOrThrow(column); - return cursor.getString(column_index); - } - } finally { - if (cursor != null) - cursor.close(); - } - return null; - } - - /** - * @param uri The Uri to check. - * @return Whether the Uri authority is ExternalStorageProvider. - */ - private static boolean isExternalStorageDocument(Uri uri) { - return "com.android.externalstorage.documents".equals(uri.getAuthority()); - } - - /** - * @param uri The Uri to check. - * @return Whether the Uri authority is DownloadsProvider. - */ - private static boolean isDownloadsDocument(Uri uri) { - return "com.android.providers.downloads.documents".equals(uri.getAuthority()); - } - - /** - * @param uri The Uri to check. - * @return Whether the Uri authority is MediaProvider. - */ - private static boolean isMediaDocument(Uri uri) { - return "com.android.providers.media.documents".equals(uri.getAuthority()); - } -} diff --git a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt index 72e5ad83a0..6f0383c9b4 100644 --- a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt @@ -9,7 +9,6 @@ import android.text.method.LinkMovementMethod import android.text.style.ClickableSpan import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import android.view.Window import android.widget.EditText import android.widget.ProgressBar @@ -21,24 +20,22 @@ import androidx.recyclerview.widget.RecyclerView import com.gh.base.OnListClickListener import com.gh.common.constant.Config import com.gh.common.util.* -import com.gh.gamecenter.CropImageActivity import com.gh.gamecenter.R import com.gh.gamecenter.WebActivity import com.gh.gamecenter.entity.InstallGameEntity import com.gh.gamecenter.normal.NormalFragment import com.gh.gamecenter.suggest.SuggestPicAdapter import com.gh.gamecenter.suggest.SuggestSelectGameAdapter -import com.google.android.flexbox.FlexboxLayout import com.halo.assistant.HaloApp import com.lightgame.utils.Util_System_Keyboard import com.lightgame.utils.Utils +import com.zhihu.matisse.internal.utils.PathUtils import io.reactivex.disposables.Disposable import kotlinx.android.synthetic.main.fragment_game_upload.* import okhttp3.MediaType import okhttp3.RequestBody import java.io.File import java.util.* -import java.util.concurrent.atomic.AtomicBoolean import kotlin.collections.ArrayList import kotlin.collections.HashMap import kotlin.collections.component1 @@ -459,7 +456,7 @@ class GameUploadFragment : NormalFragment() { } } else if (requestCode == MEDIA_APK_STORE_REQUEST) { val uri = data.data ?: return - val apkPath = UriUtils.getPath(requireContext(), uri) + val apkPath = PathUtils.getPath(requireContext(), uri) if (apkPath.isNotEmpty()) { if (!apkPath.endsWith(".apk")) { ToastUtils.showToast("请选择正确的安装包") diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt index 99a5d0d096..d46125f7de 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt @@ -52,15 +52,15 @@ class AvatarBorderFragment : BaseFragment_TabLayout() { super.onCreate(savedInstanceState) mUserViewModel = viewModelProvider(UserViewModel.Factory(HaloApp.getInstance().application)) mUserViewModel.loginObsUserinfo.observeNonNull(this) { - if (it.data.background?.url.isNullOrEmpty()) { + if (it.data?.background?.url.isNullOrEmpty()) { ImageUtils.display(mBinding.forumBackground, R.drawable.bg_avatar_border) } else { - ImageUtils.display(mBinding.forumBackground, it.data.background?.url) + ImageUtils.display(mBinding.forumBackground, it.data?.background?.url) } - mBinding.userAvatar.display(it.data.iconBorder?.url, it.data.icon ?: "") + mBinding.userAvatar.display(it.data?.iconBorder?.url, it.data?.icon ?: "") } mUserViewModel.editObsUserinfo.observe(this, Observer { - mBinding.userAvatar.displayAvatar(it.data.icon ?: "") + mBinding.userAvatar.displayAvatar(it.data?.icon ?: "") }) mUserViewModel.uploadAvatarBorder.observe(this, Observer { mPostDialog?.dismiss() diff --git a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/utils/PathUtils.java b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/utils/PathUtils.java index de64322461..6b093a8e47 100644 --- a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/utils/PathUtils.java +++ b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/utils/PathUtils.java @@ -9,6 +9,9 @@ import android.os.Build; import android.os.Environment; import android.provider.DocumentsContract; import android.provider.MediaStore; +import android.widget.Toast; + +import com.zhihu.matisse.R; /** * http://stackoverflow.com/a/27271131/4739220 @@ -39,13 +42,22 @@ public class PathUtils { } // TODO handle non-primary volumes - } else if (isDownloadsDocument(uri)) { // DownloadsProvider + } else if (isDownloadsDocument(uri)) { // DownloProvider - final String id = DocumentsContract.getDocumentId(uri); - final Uri contentUri = ContentUris.withAppendedId( - Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); - - return getDataColumn(context, contentUri, null, null); + String id = DocumentsContract.getDocumentId(uri); + if (id.startsWith("raw:")) { + id = id.replace("raw:", ""); + return id; + } + try { + final Uri contentUri = ContentUris.withAppendedId( + Uri.parse("content://downloads/public_downloads"), Long.parseLong(id)); + return getDataColumn(context, contentUri, null, null); + } catch (NumberFormatException e) { + Toast.makeText(context, "文件选择失败,请从已安装游戏列表中选择", Toast.LENGTH_SHORT).show(); + e.printStackTrace(); + return null; + } } else if (isMediaDocument(uri)) { // MediaProvider final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); @@ -101,6 +113,10 @@ public class PathUtils { final int columnIndex = cursor.getColumnIndexOrThrow(column); return cursor.getString(columnIndex); } + } catch (IllegalArgumentException e) { + Toast.makeText(context, "文件选择失败,请从已安装游戏列表中选择", Toast.LENGTH_SHORT).show(); + e.printStackTrace(); + return null; } finally { if (cursor != null) cursor.close();