Browse Source

PDFTools(Android) - 1.文件图片编辑添加图片、替换图片优化存储适配

liuxiaolong 1 year ago
parent
commit
5ab566d5a6

+ 2 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/activity/CBasicActivity.java

@@ -69,7 +69,8 @@ public class CBasicActivity extends AppCompatActivity {
             return true;
         }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
-            return Environment.isExternalStorageManager();
+//            return Environment.isExternalStorageManager();
+            return true;
         }
         for (String perm : perms) {
             if (ContextCompat.checkSelfPermission(this, perm)

+ 0 - 6
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/contextmenu/impl/CEditTextContextMenuView.java

@@ -98,12 +98,6 @@ public class CEditTextContextMenuView implements ContextMenuEditTextProvider {
         }
         if (type == CPDFEditType.EDIT_IMAGE) {
             menuView.addItem(R.string.tools_context_menu_add_image, 0, v -> {
-                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
-                && !Environment.isExternalStorageManager()) {
-                    ((FragmentActivity) helper.getReaderView().getContext())
-                            .startActivity(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION));
-                    return;
-                }
                 helper.getReaderView().setAddImagePoint(point);
                 helper.getReaderView().setAddImagePage(pageView.getPageNum());
                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

+ 16 - 108
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/utils/CUriUtil.java

@@ -1,106 +1,14 @@
 package com.compdfkit.tools.common.utils;
 
-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;
+import android.text.TextUtils;
 
-public class CUriUtil {
-
-//     public String getRealPathFromURI(Uri contentUri) {
-//          String res = null;
-//          String[] proj = { MediaStore.Images.Media.DATA };
-//          Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
-//          if(null!=cursor&&cursor.moveToFirst()){;
-//              int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
-//              res = cursor.getString(column_index);
-//              cursor.close();
-//          }
-//          return res;
-//      }
-
-    public 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.valueOf(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;
-    }
-
-
-    public String getDataColumn(Context context, Uri uri, String selection,
-                                String[] selectionArgs) {
-
-        Cursor cursor = null;
-        final String column = "_data";
-        final String[] projection = {column};
+import java.io.File;
 
-        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;
-    }
+public class CUriUtil {
 
     public static String getUriFileName(Context context, Uri uri) {
 
@@ -125,18 +33,18 @@ public class CUriUtil {
         return "";
     }
 
-
-    public boolean isExternalStorageDocument(Uri uri) {
-        return "com.android.externalstorage.documents".equals(uri.getAuthority());
-    }
-
-
-    public boolean isDownloadsDocument(Uri uri) {
-        return "com.android.providers.downloads.documents".equals(uri.getAuthority());
-    }
-
-
-    public boolean isMediaDocument(Uri uri) {
-        return "com.android.providers.media.documents".equals(uri.getAuthority());
+    public static String copyUriToInternalCache(Context context, Uri uri){
+        try{
+            File file = new File(context.getFilesDir(), CFileUtils.CACHE_FOLDER);
+            String fileName = CUriUtil.getUriFileName(context, uri);
+            if (TextUtils.isEmpty(fileName)){
+                fileName = "pic_"+System.currentTimeMillis()+".png";
+            }
+            String image = CFileUtils.copyImageToInternalDirectory(
+                    context, uri, file.getAbsolutePath(), fileName);
+            return image;
+        }catch (Exception e){
+            return "";
+        }
     }
 }

+ 4 - 4
ContentEditor/src/main/java/com/compdfkit/contenteditor/PDFEditSampleActivity.java

@@ -315,8 +315,8 @@ public class PDFEditSampleActivity extends CBasicActivity {
                         continue;
                     }
                     if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getPageNum()) {
-                        CUriUtil util = new CUriUtil();
-                        boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, util.getPath(this, data.getData()));
+                        String imagePath = CUriUtil.copyUriToInternalCache(this, data.getData());
+                        boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, imagePath);
                         if (ret == false) {
                             Toast.makeText(getApplicationContext(), "replace fail", Toast.LENGTH_LONG).show();
                         }
@@ -338,8 +338,8 @@ public class PDFEditSampleActivity extends CBasicActivity {
                         continue;
                     }
                     if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getAddImagePage()) {
-                        CUriUtil util = new CUriUtil();
-                        boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), util.getPath(this, data.getData()));
+                        String imagePath = CUriUtil.copyUriToInternalCache(this, data.getData());
+                        boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), imagePath);
                         if (ret == false) {
                             Toast.makeText(getApplicationContext(), "add fail", Toast.LENGTH_LONG).show();
                         }

+ 5 - 4
PDFViewer/src/main/java/com/compdfkit/pdfviewer/MainActivity.java

@@ -58,6 +58,7 @@ import com.compdfkit.ui.proxy.form.CPDFPushbuttonWidgetImpl;
 import com.compdfkit.ui.reader.CPDFPageView;
 import com.compdfkit.ui.reader.CPDFReaderView;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 
@@ -445,8 +446,8 @@ public class MainActivity extends CBasicActivity {
                     return;
                 }
                 if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getPageNum()) {
-                    CUriUtil util = new CUriUtil();
-                    boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, util.getPath(this, data.getData()));
+                    String imagePath = CUriUtil.copyUriToInternalCache(this, data.getData());
+                    boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, imagePath);
                     if (ret == false) {
                         Toast.makeText(getApplicationContext(), "replace fail", Toast.LENGTH_LONG).show();
                     }
@@ -466,8 +467,8 @@ public class MainActivity extends CBasicActivity {
                     continue;
                 }
                 if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getAddImagePage()) {
-                    CUriUtil util = new CUriUtil();
-                    boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), util.getPath(this, data.getData()));
+                    String imagePath = CUriUtil.copyUriToInternalCache(this, data.getData());
+                    boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), imagePath);
                     if (ret == false) {
                         Toast.makeText(getApplicationContext(), "add fail", Toast.LENGTH_LONG).show();
                     }