From 282a0cc7afe0c46abfbeab2e40b2dcd7e3dce5dc Mon Sep 17 00:00:00 2001 From: wumeng1 <1yw@Mirko> Date: Tue, 17 Aug 2021 19:59:01 +0800 Subject: [PATCH] #update util --- .../main/java/com/mirkowu/mvm/Constant.java | 5 + .../mirkowu/mvm/download/DownloadActivity.kt | 3 +- .../mvm/imagepicker/ImagePickerActivity.kt | 61 +++-- .../java/com/mirkowu/mvm/mvp/MVPActivity.java | 2 + .../mvm/widgetdemo/WidgetDemoActivity.kt | 1 + .../java/com/mirkowu/lib_util/FileUtil.java | 54 ++++- .../com/mirkowu/lib_util/SimCardUtil.java | 8 +- .../com/mirkowu/lib_util/SystemShareUtil.java | 98 ++++++++ .../java/com/mirkowu/lib_util/UriUtil.java | 210 ------------------ .../lib_util/utilcode/util/UriUtils.java | 16 ++ .../callback/DefaultWebViewFileChooser.java | 2 +- .../lib_widget/dialog/BottomListDialog.java | 28 +-- .../lib_widget/dialog/PromptDialog.java | 41 +++- 13 files changed, 269 insertions(+), 260 deletions(-) create mode 100644 app/src/main/java/com/mirkowu/mvm/Constant.java create mode 100644 lib_util/src/main/java/com/mirkowu/lib_util/SystemShareUtil.java delete mode 100644 lib_util/src/main/java/com/mirkowu/lib_util/UriUtil.java diff --git a/app/src/main/java/com/mirkowu/mvm/Constant.java b/app/src/main/java/com/mirkowu/mvm/Constant.java new file mode 100644 index 0000000..d7d6ec5 --- /dev/null +++ b/app/src/main/java/com/mirkowu/mvm/Constant.java @@ -0,0 +1,5 @@ +package com.mirkowu.mvm; + +public class Constant { + public static final String FILE_SAVE_DIR = "Mirko"; +} diff --git a/app/src/main/java/com/mirkowu/mvm/download/DownloadActivity.kt b/app/src/main/java/com/mirkowu/mvm/download/DownloadActivity.kt index 63fdcc1..e289b5e 100644 --- a/app/src/main/java/com/mirkowu/mvm/download/DownloadActivity.kt +++ b/app/src/main/java/com/mirkowu/mvm/download/DownloadActivity.kt @@ -14,6 +14,7 @@ import com.mirkowu.lib_util.PermissionsUtil import com.mirkowu.lib_util.ktxutil.click import com.mirkowu.lib_util.utilcode.util.ConvertUtils import com.mirkowu.lib_util.utilcode.util.ToastUtils +import com.mirkowu.mvm.Constant import com.mirkowu.mvm.base.BaseActivity import com.mirkowu.mvm.databinding.ActivityDownloadBinding import com.mirkowu.mvm.network.FileClient @@ -102,7 +103,7 @@ class DownloadActivity : BaseActivity() { binding.btnDown2.click { //外部存储 filePath = - FileUtil.getDiskExternalPath() + "/" + System.currentTimeMillis() + ".jpg" + FileUtil.getDiskExternalPath(Constant.FILE_SAVE_DIR) + "/" + System.currentTimeMillis() + ".jpg" id2 = Downloader.create(url2) .setUrl(url2) .setFilePath(filePath) diff --git a/app/src/main/java/com/mirkowu/mvm/imagepicker/ImagePickerActivity.kt b/app/src/main/java/com/mirkowu/mvm/imagepicker/ImagePickerActivity.kt index 9720046..1e08a54 100644 --- a/app/src/main/java/com/mirkowu/mvm/imagepicker/ImagePickerActivity.kt +++ b/app/src/main/java/com/mirkowu/mvm/imagepicker/ImagePickerActivity.kt @@ -11,11 +11,14 @@ import com.mirkowu.lib_photo.view.ImagePickerRecyclerView import com.mirkowu.lib_util.FileUtil import com.mirkowu.lib_util.LogUtil import com.mirkowu.lib_util.PermissionsUtil +import com.mirkowu.lib_util.SystemShareUtil import com.mirkowu.lib_util.ktxutil.click import com.mirkowu.lib_util.utilcode.util.BarUtils +import com.mirkowu.mvm.Constant import com.mirkowu.mvm.R import com.mirkowu.mvm.base.BaseActivity import com.mirkowu.mvm.databinding.ActivityImagePickerBinding +import java.io.File class ImagePickerActivity : BaseActivity() { @@ -33,31 +36,54 @@ class ImagePickerActivity : BaseActivity() { toolbar.setBackgroundColor(Color.WHITE) BarUtils.setStatusBarLightMode(this, true) toolbar.setTitle("选取图片") - toolbar.setRightIcon(R.drawable.svg_setting) {} + toolbar.setRightIcon(R.drawable.svg_setting) { + val list = binding.rvPick.data + val files = mutableListOf() + if (list.isNotEmpty()) { + for (path in list) { + val file = File(path) + if (file.exists()) { + files.add(file) + } + } + SystemShareUtil.shareToWxCircle(this, "测试", files.last()) + } + } + val list = mutableListOf( - "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2Fmonth_1011%2F1011250123f7480cd63703c992.jpg&refer=http%3A%2F%2Fattach.bbs.miui.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625652923&t=f88648f6594af41d02c7a30ff67d3284", - "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwx1.sinaimg.cn%2Flarge%2F008fHVgdly4gqfhftvhl5j30u00iv40g.jpg&refer=http%3A%2F%2Fwx1.sinaimg.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625652886&t=a116fe8bd5ca59a461966d2b09b814e4" + "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2Fmonth_1011%2F1011250123f7480cd63703c992.jpg&refer=http%3A%2F%2Fattach.bbs.miui.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625652923&t=f88648f6594af41d02c7a30ff67d3284", + "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwx1.sinaimg.cn%2Flarge%2F008fHVgdly4gqfhftvhl5j30u00iv40g.jpg&refer=http%3A%2F%2Fwx1.sinaimg.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625652886&t=a116fe8bd5ca59a461966d2b09b814e4" ) - binding.rvPick.setOnImagePickEventListener(object : ImagePickerRecyclerView.OnImagePickEventListener { - override fun onItemClick(position: Int, isAddImage: Boolean) { - if (isAddImage) { - ImagePicker.getInstance() - .setPickerConfig(PickerConfig().setShowCamera(true).setShowGif(true).setShowVideo(true) - .setOriginSelectList(ResultModel.pathsToBeans(binding.rvPick.data))) + binding.rvPick.setOnImagePickEventListener( + object : + ImagePickerRecyclerView.OnImagePickEventListener { + override fun onItemClick(position: Int, isAddImage: Boolean) { + if (isAddImage) { + ImagePicker.getInstance() + .setPickerConfig( + PickerConfig().setShowCamera(true).setShowGif(true) + .setShowVideo(true) + .setOriginSelectList(ResultModel.pathsToBeans(binding.rvPick.data)) + ) .setOnPickResultListener { LogUtil.d("ImagePicker: $it") binding.rvPick.setData(ResultModel.getPaths(it)) }.start(context) - } else { - ImagePicker.previewImageWithSave(context, FileUtil.getDiskExternalPath(), binding.rvPick.data, position) + } else { + ImagePicker.previewImageWithSave( + context, + FileUtil.getDiskExternalPath(Constant.FILE_SAVE_DIR), + binding.rvPick.data, + position + ) + } } - } - override fun onItemDeleteClick(position: Int) { - binding.rvPick.remove(position) - } - }) + override fun onItemDeleteClick(position: Int) { + binding.rvPick.remove(position) + } + }) binding.rvPick.setData(list) @@ -68,7 +94,8 @@ class ImagePickerActivity : BaseActivity() { // LogUtil.d("ImagePicker: $it") // binding.rvPick.setData(ResultModel.getPaths(it)) // }.start(this) - PermissionsUtil.getInstance().requestPermissions(this, PermissionsUtil.GROUP_CAMERA, 0, onPermissionsListener) + PermissionsUtil.getInstance() + .requestPermissions(this, PermissionsUtil.GROUP_CAMERA, 0, onPermissionsListener) } } diff --git a/app/src/main/java/com/mirkowu/mvm/mvp/MVPActivity.java b/app/src/main/java/com/mirkowu/mvm/mvp/MVPActivity.java index 5fdfbb2..30695d1 100644 --- a/app/src/main/java/com/mirkowu/mvm/mvp/MVPActivity.java +++ b/app/src/main/java/com/mirkowu/mvm/mvp/MVPActivity.java @@ -4,6 +4,8 @@ import android.content.Intent; import android.view.View; +import com.mirkowu.lib_util.LogUtil; +import com.mirkowu.lib_widget.dialog.PromptDialog; import com.mirkowu.mvm.R; import com.mirkowu.mvm.base.BaseActivity; import com.mirkowu.mvm.databinding.ActivityMVPBinding; diff --git a/app/src/main/java/com/mirkowu/mvm/widgetdemo/WidgetDemoActivity.kt b/app/src/main/java/com/mirkowu/mvm/widgetdemo/WidgetDemoActivity.kt index 02c6e36..ed061f5 100644 --- a/app/src/main/java/com/mirkowu/mvm/widgetdemo/WidgetDemoActivity.kt +++ b/app/src/main/java/com/mirkowu/mvm/widgetdemo/WidgetDemoActivity.kt @@ -38,6 +38,7 @@ class WidgetDemoActivity : BaseActivity(), CustomAdapt { PromptDialog().setTitle("温馨提示") .setContent("确认关闭吗?") .setIcon(R.mipmap.ic_launcher) + .setNegativeButton("取消") .show(supportFragmentManager) // showLoadingDialog("Toast测试") } diff --git a/lib_util/src/main/java/com/mirkowu/lib_util/FileUtil.java b/lib_util/src/main/java/com/mirkowu/lib_util/FileUtil.java index 6ef1b48..8f78ca7 100644 --- a/lib_util/src/main/java/com/mirkowu/lib_util/FileUtil.java +++ b/lib_util/src/main/java/com/mirkowu/lib_util/FileUtil.java @@ -10,6 +10,9 @@ import androidx.core.content.FileProvider; +import com.mirkowu.lib_util.utilcode.util.UriUtils; +import com.mirkowu.lib_util.utilcode.util.Utils; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -25,7 +28,7 @@ */ public class FileUtil { public static final String TAG = FileUtil.class.getName(); - public static final String FILE_NAME = "Mirko"; +// public static final String FILE_NAME = "Mirko"; public static Uri createUri(Context context, File file) { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { @@ -38,12 +41,12 @@ public static Uri createUri(Context context, File file) { /** * 得到图片uri的实际地址 */ - public static String getRealFilePath(Context context, final Uri uri) { + public static String getRealFilePath(final Uri uri) { if (null == uri) { return null; } - return UriUtil.uri2Path(context, uri); + return UriUtils.uri2Path(uri); } /** @@ -75,20 +78,53 @@ public static String getDiskExternalPath(final String path) { } return rootDir.getAbsolutePath(); // /mnt/sdcard/path... } + } else { + if (TextUtils.isEmpty(path)) { + return Utils.getApp().getExternalCacheDir().getAbsolutePath(); + } + + File file = new File(Utils.getApp().getExternalCacheDir().getAbsolutePath(), path); + if (!file.exists()) { + file.mkdirs(); + } + return file.getAbsolutePath(); // /mnt/sdcard/path... } } catch (Throwable e) { e.printStackTrace(); } - if (TextUtils.isEmpty(path)) { - return ""; - } - return path; + return ""; } - public static String getDiskExternalPath() { - return getDiskExternalPath(FILE_NAME); + public static File getDiskExternalFile(final String path) { + try { + //判断是否有SD卡 + if (hasSDCard()) { + if (TextUtils.isEmpty(path)) { + return Environment.getExternalStorageDirectory(); + } else { + File rootDir = new File(Environment.getExternalStorageDirectory(), path); + if (!rootDir.exists()) { + rootDir.mkdirs(); + } + return rootDir; // /mnt/sdcard/path... + } + } else { + if (TextUtils.isEmpty(path)) { + return Utils.getApp().getExternalCacheDir(); + } + File file = new File(Utils.getApp().getExternalCacheDir().getAbsolutePath(), path); + if (!file.exists()) { + file.mkdirs(); + } + return file; + } + } catch (Throwable e) { + e.printStackTrace(); + } + return null; } + /** * 获取缓存路径 会跟随app卸载一起删除 * diff --git a/lib_util/src/main/java/com/mirkowu/lib_util/SimCardUtil.java b/lib_util/src/main/java/com/mirkowu/lib_util/SimCardUtil.java index 380ab9f..5483fd8 100644 --- a/lib_util/src/main/java/com/mirkowu/lib_util/SimCardUtil.java +++ b/lib_util/src/main/java/com/mirkowu/lib_util/SimCardUtil.java @@ -219,7 +219,7 @@ public static String getNetSimCardProvidersName(Context context) { break; } - } catch (Exception e) { + } catch (Throwable e) { e.printStackTrace(); } return str; @@ -263,7 +263,7 @@ public static String getCallSimCardProvidersName(Context context) { break; } - } catch (Exception e) { + } catch (Throwable e) { e.printStackTrace(); } return str; @@ -302,7 +302,7 @@ public static String getIMEI(Context context, int slotId) { Method method = manager.getClass().getMethod("getImei", int.class); String imei = (String) method.invoke(manager, slotId); return imei; - } catch (Exception e) { + } catch (Throwable e) { return ""; } } @@ -321,7 +321,7 @@ public static String getMEID(Context context, int slotId) { Method method = manager.getClass().getMethod("getMeid", int.class); String imei = (String) method.invoke(manager, slotId); return imei; - } catch (Exception e) { + } catch (Throwable e) { return ""; } } diff --git a/lib_util/src/main/java/com/mirkowu/lib_util/SystemShareUtil.java b/lib_util/src/main/java/com/mirkowu/lib_util/SystemShareUtil.java new file mode 100644 index 0000000..c4f41fc --- /dev/null +++ b/lib_util/src/main/java/com/mirkowu/lib_util/SystemShareUtil.java @@ -0,0 +1,98 @@ +package com.mirkowu.lib_util; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; + +import androidx.annotation.NonNull; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * 使用的系统 分享 和自己的账号没关系 + */ +public class SystemShareUtil { + + + /** + * 分享到微信朋友圈 带文字和图片 + * + * @param context + * @param content + * @param file + */ + + public static boolean shareToWxCircle(@NonNull Context context, String content, @NonNull File file) { + try { + Uri uri = FileUtil.createUri(context, file); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_STREAM, uri); + intent.putExtra("Kdescription", content); + intent.setType("image/*"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + context.startActivity(Intent.createChooser(intent, "选择要分享的应用")); + return true; + } catch (Throwable e) { + LogUtil.e("分享失败", e); + } + return false; + } + + public static boolean shareText(@NonNull Context context, @NonNull String text) { + try { + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_TEXT, text); + intent.setType("text/*"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + context.startActivity(Intent.createChooser(intent, "选择要分享的应用")); + return true; + } catch (Throwable e) { + LogUtil.e("分享失败", e); + } + return false; + } + + public static boolean shareImage(@NonNull Context context, @NonNull File file) { + try { + Uri uri = FileUtil.createUri(context, file); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_STREAM, uri); + intent.setType("image/*"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + context.startActivity(Intent.createChooser(intent, "选择要分享的应用")); + return true; + } catch (Throwable e) { + LogUtil.e("分享失败", e); + } + return false; + } + + public static boolean shareImage(@NonNull Context context, @NonNull List files) { + try { + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_SEND_MULTIPLE); + ArrayList imageUris = new ArrayList(); + for (File file : files) { + Uri uri = FileUtil.createUri(context, file); + imageUris.add(uri); + } + intent.setType("image/*"); + intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + context.startActivity(Intent.createChooser(intent, "选择要分享的应用")); + return true; + } catch (Throwable e) { + LogUtil.e("分享失败", e); + } + return false; + } +} diff --git a/lib_util/src/main/java/com/mirkowu/lib_util/UriUtil.java b/lib_util/src/main/java/com/mirkowu/lib_util/UriUtil.java deleted file mode 100644 index d58d34f..0000000 --- a/lib_util/src/main/java/com/mirkowu/lib_util/UriUtil.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.mirkowu.lib_util; - -import android.content.ContentResolver; -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.os.storage.StorageManager; -import android.provider.DocumentsContract; -import android.provider.MediaStore; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.NonNull; - -import java.io.File; -import java.lang.reflect.Array; -import java.lang.reflect.Method; - -/** - * @author: mirko - * @date: 19-9-27 - */ -public class UriUtil { - - public static String uri2Path(Context context, final Uri uri) { - if (null == uri) { - return null; - } - File file = UriUtil.uri2File(context, uri); - if (file == null) return null; - return file.getAbsolutePath(); - } - - /** - * Uri to file. - * - * @param uri The uri. - * @return file - */ - public static File uri2File(Context context, @NonNull final Uri uri) { - Log.d("UriUtils", uri.toString()); - String authority = uri.getAuthority(); - String scheme = uri.getScheme(); - String path = uri.getPath(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N - && path != null && path.startsWith("/external/")) { - File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() - + path.replace("/external", "")); - if (file.exists()) { - Log.d("UriUtils", uri.toString() + " -> /external"); - return file; - } - } - if (ContentResolver.SCHEME_FILE.equals(scheme)) { - if (path != null) return new File(path); - Log.d("UriUtils", uri.toString() + " parse failed. -> 0"); - return null; - }// end 0 - else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT - && DocumentsContract.isDocumentUri(context, uri)) { - if ("com.android.externalstorage.documents".equals(authority)) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - if ("primary".equalsIgnoreCase(type)) { - return new File(Environment.getExternalStorageDirectory() + "/" + split[1]); - } else { - // Below logic is how External Storage provider build URI for documents - // http://stackoverflow.com/questions/28605278/android-5-sd-card-label - StorageManager mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); - try { - Class storageVolumeClazz = Class.forName("android.os.storage.StorageVolume"); - Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList"); - Method getUuid = storageVolumeClazz.getMethod("getUuid"); - Method getState = storageVolumeClazz.getMethod("getState"); - Method getPath = storageVolumeClazz.getMethod("getPath"); - Method isPrimary = storageVolumeClazz.getMethod("isPrimary"); - Method isEmulated = storageVolumeClazz.getMethod("isEmulated"); - - Object result = getVolumeList.invoke(mStorageManager); - - final int length = Array.getLength(result); - for (int i = 0; i < length; i++) { - Object storageVolumeElement = Array.get(result, i); - //String uuid = (String) getUuid.invoke(storageVolumeElement); - - final boolean mounted = Environment.MEDIA_MOUNTED.equals(getState.invoke(storageVolumeElement)) - || Environment.MEDIA_MOUNTED_READ_ONLY.equals(getState.invoke(storageVolumeElement)); - - //if the media is not mounted, we need not get the volume details - if (!mounted) continue; - - //Primary storage is already handled. - if ((Boolean) isPrimary.invoke(storageVolumeElement) - && (Boolean) isEmulated.invoke(storageVolumeElement)) { - continue; - } - - String uuid = (String) getUuid.invoke(storageVolumeElement); - - if (uuid != null && uuid.equals(type)) { - return new File(getPath.invoke(storageVolumeElement) + "/" + split[1]); - } - } - } catch (Exception ex) { - Log.d("UriUtils", uri.toString() + " parse failed. " + ex.toString() + " -> 1_0"); - } - } - Log.d("UriUtils", uri.toString() + " parse failed. -> 1_0"); - return null; - }// end 1_0 - else if ("com.android.providers.downloads.documents".equals(authority)) { - final String id = DocumentsContract.getDocumentId(uri); - if (!TextUtils.isEmpty(id)) { - try { - final Uri contentUri = ContentUris.withAppendedId( - Uri.parse("content://downloads/public_downloads"), - Long.valueOf(id) - ); - return getFileFromUri(context, contentUri, "1_1"); - } catch (NumberFormatException e) { - if (id.startsWith("raw:")) { - return new File(id.substring(4)); - } - } - } - Log.d("UriUtils", uri.toString() + " parse failed. -> 1_1"); - return null; - }// end 1_1 - else if ("com.android.providers.media.documents".equals(authority)) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - Uri contentUri; - 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; - } else { - Log.d("UriUtils", uri.toString() + " parse failed. -> 1_2"); - return null; - } - final String selection = "_id=?"; - final String[] selectionArgs = new String[]{split[1]}; - return getFileFromUri(context, contentUri, selection, selectionArgs, "1_2"); - }// end 1_2 - else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { - return getFileFromUri(context, uri, "1_3"); - }// end 1_3 - else { - Log.d("UriUtils", uri.toString() + " parse failed. -> 1_4"); - return null; - }// end 1_4 - }// end 1 - else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { - return getFileFromUri(context, uri, "2"); - }// end 2 - else { - Log.d("UriUtils", uri.toString() + " parse failed. -> 3"); - //有部分设备返回的Uri直接就是真实路径 eg:/storage/emulated/0/DCIM/Camera/VID_20191101_092219_896.mp4 - File file = new File(uri.toString()); - if (file.exists()) { - return file; - } else { - return null; - } - }// end 3 - } - - private static File getFileFromUri(Context context, final Uri uri, final String code) { - return getFileFromUri(context, uri, null, null, code); - } - - private static File getFileFromUri(Context context, final Uri uri, - final String selection, - final String[] selectionArgs, - final String code) { - final Cursor cursor = context.getContentResolver().query( - uri, new String[]{MediaStore.MediaColumns.DATA}, selection, selectionArgs, null); - if (cursor == null) { - Log.d("UriUtils", uri.toString() + " parse failed(cursor is null). -> " + code); - return null; - } - try { - if (cursor.moveToFirst()) { - final int columnIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DATA); - if (columnIndex > -1) { - return new File(cursor.getString(columnIndex)); - } else { - Log.d("UriUtils", uri.toString() + " parse failed(columnIndex: " + columnIndex + " is wrong). -> " + code); - return null; - } - } else { - Log.d("UriUtils", uri.toString() + " parse failed(moveToFirst return false). -> " + code); - return null; - } - } catch (Exception e) { - Log.d("UriUtils", uri.toString() + " parse failed. -> " + code); - return null; - } finally { - cursor.close(); - } - } -} - diff --git a/lib_util/src/main/java/com/mirkowu/lib_util/utilcode/util/UriUtils.java b/lib_util/src/main/java/com/mirkowu/lib_util/utilcode/util/UriUtils.java index 0b40724..54abf3f 100644 --- a/lib_util/src/main/java/com/mirkowu/lib_util/utilcode/util/UriUtils.java +++ b/lib_util/src/main/java/com/mirkowu/lib_util/utilcode/util/UriUtils.java @@ -64,6 +64,22 @@ public static Uri file2Uri(final File file) { } } + /** + * Uri to file path. + * @param uri + * @return + */ + public static String uri2Path(final Uri uri) { + if (null == uri) { + return null; + } + File file = uri2File(uri); + if (file == null) { + return null; + } + return file.getAbsolutePath(); + } + /** * Uri to file. * diff --git a/lib_webview/src/main/java/com/mirkowu/lib_webview/callback/DefaultWebViewFileChooser.java b/lib_webview/src/main/java/com/mirkowu/lib_webview/callback/DefaultWebViewFileChooser.java index 1b388d4..a66643e 100644 --- a/lib_webview/src/main/java/com/mirkowu/lib_webview/callback/DefaultWebViewFileChooser.java +++ b/lib_webview/src/main/java/com/mirkowu/lib_webview/callback/DefaultWebViewFileChooser.java @@ -62,7 +62,7 @@ public void onActivityResult(CommonWebView webView, int requestCode, int resultC case REQ_FILES: Uri uri = data.getData(); if (uri != null) { - String absolutePath = FileUtil.getRealFilePath(mActivityWeakReference.get(), uri); + String absolutePath = FileUtil.getRealFilePath(uri); if (absolutePath != null) { File file = new File(absolutePath); onReceiveValue(file); diff --git a/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/BottomListDialog.java b/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/BottomListDialog.java index c20fa56..66af641 100644 --- a/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/BottomListDialog.java +++ b/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/BottomListDialog.java @@ -25,10 +25,10 @@ public class BottomListDialog extends BaseDialog { - private boolean showCancelBtn; //是否显示取消按钮 - private boolean useRoundBackground; // 是否使用圆角背景 - private CharSequence title; - private List data; + private CharSequence mTitle; + private boolean mShowCancelBtn; //是否显示取消按钮 + private boolean mUseRoundBackground; // 是否使用圆角背景 + private List mData; public BottomListDialog() { setShowBottom(true); @@ -77,9 +77,9 @@ protected void convertView(ViewHolder viewHolder, BaseDialog baseDialog) { TextView tvCancel = (TextView) viewHolder.getView(R.id.tvCancel); RecyclerView rvList = (RecyclerView) viewHolder.getView(R.id.mRecyclerView); - tvTitle.setText(title); - tvTitle.setVisibility(TextUtils.isEmpty(title) ? View.GONE : View.VISIBLE); - tvCancel.setVisibility(showCancelBtn ? View.VISIBLE : View.GONE); + tvTitle.setText(mTitle); + tvTitle.setVisibility(TextUtils.isEmpty(mTitle) ? View.GONE : View.VISIBLE); + tvCancel.setVisibility(mShowCancelBtn ? View.VISIBLE : View.GONE); tvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -89,14 +89,14 @@ public void onClick(View v) { LinearDecoration decoration = new LinearDecoration(getContext()) .setSpaceColor(ContextCompat.getColor(getContext(), R.color.widget_color_line_e5)) .setSpace(0.5f); - if (!TextUtils.isEmpty(title)) { + if (!TextUtils.isEmpty(mTitle)) { decoration.setTopSpace(0.5f); } rvList.addItemDecoration(decoration); ListAdapter listAdapter = new ListAdapter(); - listAdapter.setData(data); + listAdapter.setData(mData); if (mOnItemClickListener != null) { listAdapter.setOnItemClickListener(new BaseRVAdapter.OnItemClickListener() { @Override @@ -109,7 +109,7 @@ public void onItemClick(View view, Object item, int position) { rvList.setAdapter(listAdapter); - if (useRoundBackground) { + if (mUseRoundBackground) { LinearLayout llRoot = viewHolder.getView(R.id.llRoot); LinearLayout llContent = viewHolder.getView(R.id.llContent); llContent.setBackgroundResource(R.drawable.widget_card_bg_6dp); @@ -122,22 +122,22 @@ public void onItemClick(View view, Object item, int position) { } public BottomListDialog setTitle(CharSequence title) { - this.title = title; + this.mTitle = title; return this; } public BottomListDialog setData(List data) { - this.data = data; + this.mData = data; return this; } public BottomListDialog setShowCancelBtn(boolean showCancelBtn) { - this.showCancelBtn = showCancelBtn; + this.mShowCancelBtn = showCancelBtn; return this; } public BottomListDialog setRoundBackground(boolean useRoundBackground) { - this.useRoundBackground = useRoundBackground; + this.mUseRoundBackground = useRoundBackground; return this; } diff --git a/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/PromptDialog.java b/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/PromptDialog.java index 50e0f67..480e752 100644 --- a/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/PromptDialog.java +++ b/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/PromptDialog.java @@ -28,6 +28,8 @@ public class PromptDialog extends BaseDialog implements View.OnClickListener { private int mPositiveTextColorResId; private int mNegativeTextColorResId; protected OnButtonClickListener mOnButtonClickListener; +// protected OnClickListener mPositiveClickListener; +// protected OnClickListener mNegativeClickListener; public PromptDialog() { setWidth(DEFAULT_WIDTH); @@ -94,14 +96,23 @@ public void onStart() { @Override public void onClick(View v) { - if (mOnButtonClickListener != null) { - int i = v.getId(); - if (i == R.id.tvPositive) { + int i = v.getId(); + if (i == R.id.tvPositive) { +// if (mPositiveClickListener != null) { +// mPositiveClickListener.onClick(this); +// } + if (mOnButtonClickListener != null) { mOnButtonClickListener.onButtonClick(this, true); - } else if (i == R.id.tvNegative) { + } + } else if (i == R.id.tvNegative) { +// if (mPositiveClickListener != null) { +// mPositiveClickListener.onClick(this); +// } + if (mOnButtonClickListener != null) { mOnButtonClickListener.onButtonClick(this, false); } } + dismissAllowingStateLoss(); } @@ -150,6 +161,12 @@ public PromptDialog setNegativeButton(CharSequence negativeText) { return this; } +// public PromptDialog setNegativeButton(CharSequence negativeText, OnClickListener listener) { +// this.mNegativeText = negativeText; +// this.mNegativeClickListener = listener; +// return this; +// } + public PromptDialog setNegativeButton(@StringRes int resId) { return setNegativeButton(StringUtils.getString(resId)); } @@ -175,6 +192,12 @@ public PromptDialog setPositiveButton(CharSequence positiveText) { return this; } +// public PromptDialog setPositiveButton(CharSequence positiveText, OnClickListener listener) { +// this.mPositiveText = positiveText; +// this.mPositiveClickListener = listener; +// return this; +// } + public PromptDialog setPositiveButton(@StringRes int resId) { return setPositiveButton(StringUtils.getString(resId)); } @@ -204,4 +227,14 @@ public interface OnButtonClickListener { */ void onButtonClick(PromptDialog dialog, boolean isPositiveClick); } + +// public interface OnClickListener { +// +// /** +// * 当窗口按钮被点击 +// * +// * @param dialog +// */ +// void onClick(PromptDialog dialog); +// } }