Ver Fonte

PDFTool(Android) - 新增UI配置远程API配置功能

liuxiaolong há 1 ano atrás
pai
commit
0e507b45eb

+ 3 - 3
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/pdf/CPDFApplyConfigUtil.java

@@ -26,13 +26,13 @@ import com.compdfkit.tools.common.pdf.config.ReaderViewConfig;
 import com.compdfkit.tools.common.pdf.config.annot.AnnotFreetextAttr;
 import com.compdfkit.tools.common.pdf.config.annot.AnnotShapeAttr;
 import com.compdfkit.tools.common.pdf.config.annot.AnnotationsAttributes;
+import com.compdfkit.tools.common.pdf.config.forms.FormsAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsAttributes;
 import com.compdfkit.tools.common.pdf.config.forms.FormsCheckBoxAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsComboBoxAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsListBoxAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsPushButtonAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsRadioButtonAttr;
-import com.compdfkit.tools.common.pdf.config.forms.FormsSignFieldAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsTextFieldAttr;
 import com.compdfkit.tools.common.views.pdfproperties.CAnnotationType;
 import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CAnnotStyle;
@@ -259,12 +259,12 @@ class CPDFApplyConfigUtil {
         pushButtonStyle.setFontItalic(pushButtonAttr.isItalic());
         builder.setAnnotStyle(pushButtonStyle);
 
-        FormsSignFieldAttr signFieldAttr = initAttribute.signatureFields;
+        FormsAttr signFieldAttr = initAttribute.signatureFields;
         CAnnotStyle signatureFieldsStyle = new CAnnotStyle(CStyleType.FORM_SIGNATURE_FIELDS);
         signatureFieldsStyle.setFillColor(signFieldAttr.getFillColor());
         signatureFieldsStyle.setBorderColor(signFieldAttr.getBorderColor());
         signatureFieldsStyle.setBorderWidth(signFieldAttr.getBorderWidth());
-        signatureFieldsStyle.setSignFieldsBorderStyle(signFieldAttr.borderStyle);
+        signatureFieldsStyle.setSignFieldsBorderStyle(CPDFWidget.BorderStyle.BS_Solid);
         builder.setAnnotStyle(signatureFieldsStyle);
 
         builder.init(fragment.pdfView, true);

+ 2 - 23
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/pdf/CPDFConfigurationUtils.java

@@ -35,7 +35,6 @@ import com.compdfkit.tools.common.pdf.config.forms.FormsComboBoxAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsListBoxAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsPushButtonAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsRadioButtonAttr;
-import com.compdfkit.tools.common.pdf.config.forms.FormsSignFieldAttr;
 import com.compdfkit.tools.common.pdf.config.forms.FormsTextFieldAttr;
 import com.compdfkit.tools.common.utils.CFileUtils;
 import com.compdfkit.tools.common.views.pdfproperties.CAnnotationType;
@@ -473,7 +472,7 @@ public class CPDFConfigurationUtils {
                         formsConfig.initAttribute.pushButton = (FormsPushButtonAttr) formsAttr;
                         break;
                     case Widget_SignatureFields:
-                        formsConfig.initAttribute.signatureFields = (FormsSignFieldAttr) formsAttr;
+                        formsConfig.initAttribute.signatureFields = formsAttr;
                         break;
                     default:
                         break;
@@ -579,30 +578,10 @@ public class CPDFConfigurationUtils {
                 formsAttr = pushButtonAttr;
                 break;
             case Widget_SignatureFields:
-                FormsSignFieldAttr signFieldAttr = new FormsSignFieldAttr();
+                FormsAttr signFieldAttr = new FormsAttr();
                 signFieldAttr.setFillColor(jsonObject.optString("fillColor", "#000000"));
                 signFieldAttr.setBorderColor(jsonObject.optString("borderColor", "#FFFFFF"));
                 signFieldAttr.setBorderWidth((float) jsonObject.optDouble("borderWidth", 5));
-                switch (jsonObject.optString("borderStyle", "solid").toLowerCase()){
-                    case "solid":
-                        signFieldAttr.borderStyle = CPDFWidget.BorderStyle.BS_Solid;
-                        break;
-                    case "dashed":
-                        signFieldAttr.borderStyle = CPDFWidget.BorderStyle.BS_Dashded;
-                        break;
-                    case "beveled":
-                        signFieldAttr.borderStyle = CPDFWidget.BorderStyle.BS_Beveled;
-                        break;
-                    case "inset":
-                        signFieldAttr.borderStyle = CPDFWidget.BorderStyle.BS_Inset;
-                        break;
-                    case "underline":
-                        signFieldAttr.borderStyle = CPDFWidget.BorderStyle.BS_Underline;
-                        break;
-                    default:
-                        signFieldAttr.borderStyle = CPDFWidget.BorderStyle.BS_Solid;
-                        break;
-                }
                 formsAttr = signFieldAttr;
                 break;
             default:

+ 1 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/pdf/config/forms/FormsAttributes.java

@@ -26,6 +26,6 @@ public class FormsAttributes implements Serializable {
 
     public FormsPushButtonAttr pushButton = new FormsPushButtonAttr();
 
-    public FormsSignFieldAttr signatureFields = new FormsSignFieldAttr();
+    public FormsAttr signatureFields = new FormsAttr();
 
 }

+ 0 - 19
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/pdf/config/forms/FormsSignFieldAttr.java

@@ -1,19 +0,0 @@
-/**
- * Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
- *
- * THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
- * AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
- * UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
- * This notice may not be removed from this file.
- */
-package com.compdfkit.tools.common.pdf.config.forms;
-
-
-import com.compdfkit.core.annotation.form.CPDFWidget;
-
-public class FormsSignFieldAttr extends FormsAttr {
-
-    public CPDFWidget.BorderStyle borderStyle = CPDFWidget.BorderStyle.BS_Solid;
-
-
-}

+ 15 - 0
PDFViewer/build.gradle

@@ -13,6 +13,15 @@ android {
         targetSdk rootProject.ext.android.TARGETSDK
         versionCode rootProject.ext.android.VERSIONCODE as int
         versionName rootProject.ext.sdk.CONVERSION_SDK_VERSION
+
+        javaCompileOptions {
+            annotationProcessorOptions {
+                arguments = [
+                        rxhttp_rxjava: '3.1.6',
+                        rxhttp_package: 'rxhttp.xxx'
+                ]
+            }
+        }
     }
 
     buildTypes {
@@ -52,4 +61,10 @@ dependencies {
     implementation 'com.google.android.material:material:1.8.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
     api project(path: ':ComPDFKit_Tools')
+
+    implementation 'com.google.code.gson:gson:2.8.9'
+    /*retrofit*/
+    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
+    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
+    implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
 }

+ 1 - 1
PDFViewer/proguard-rules.pro

@@ -21,4 +21,4 @@
 #-renamesourcefileattribute SourceFile
 -keep class com.compdfkit.ui.** {*;}
 -keep class com.compdfkit.core.** {*;}
--keep class com.compdfkit.tools.** {*;}
+-keep class com.compdfkit.tools.** {*;}

+ 5 - 0
PDFViewer/src/main/AndroidManifest.xml

@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <!-- 访问网络状态 -->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
@@ -11,6 +15,7 @@
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
         android:requestLegacyExternalStorage="true"
+        android:usesCleartextTraffic="true"
         android:supportsRtl="true"
         android:theme="@style/Basic_Theme">
         <activity

+ 12 - 11
PDFViewer/src/main/java/com/compdfkit/pdfviewer/home/HomeFunFragment.java

@@ -19,20 +19,17 @@ import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.LinearLayoutManager;
 
-import com.compdfkit.core.utils.TFileUtils;
 import com.compdfkit.pdfviewer.R;
 import com.compdfkit.pdfviewer.databinding.FragmentHomeBinding;
 import com.compdfkit.pdfviewer.home.datas.FunDatas;
+import com.compdfkit.pdfviewer.home.net.Data;
 import com.compdfkit.tools.common.pdf.CPDFConfigurationUtils;
 import com.compdfkit.tools.common.pdf.CPDFDocumentActivity;
 import com.compdfkit.tools.common.pdf.config.CPDFConfiguration;
 import com.compdfkit.tools.common.utils.CFileUtils;
-import com.compdfkit.tools.common.utils.CLog;
+import com.compdfkit.tools.common.utils.CToastUtil;
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.ui.utils.CPDFCommomUtils;
-import com.compdfkit.ui.utils.CPDFDocumentUtils;
-
-import org.json.JSONObject;
 
 import java.io.File;
 
@@ -43,7 +40,6 @@ public class HomeFunFragment extends Fragment {
 
     private FragmentHomeBinding binding;
 
-
     @Nullable
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -55,6 +51,7 @@ public class HomeFunFragment extends Fragment {
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         initFunList();
+        Data.updateConfig(getContext(), (success, time) -> {});
     }
 
     private void initFunList() {
@@ -69,11 +66,16 @@ public class HomeFunFragment extends Fragment {
             }
             switch (homeFunBean.getType()) {
                 case SamplePDF:
-                    CPDFConfiguration configuration1 = CPDFConfigurationUtils.normalConfig(getContext(), "tools_default_configuration.json");
+                    File configFile = new File(getContext().getCacheDir(),
+                            CFileUtils.CACHE_FOLDER + File.separator + "remote_configuration.json");
+                    String configJson = CFileUtils.readFile2String(configFile, "utf-8");
+                    CPDFConfiguration configuration = CPDFConfigurationUtils.fromJson(configJson);
+                    if (configuration == null){
+                        CToastUtil.showLongToast(getContext(), "获取远程配置内容失败, 读取默认值");
+                        configuration = CPDFConfigurationUtils.normalConfig(getContext(), "tools_default_configuration.json");
+                    }
                     CPDFDocumentActivity.startActivity(getContext(), homeFunBean.getFilePath(),
-                            "", configuration1);
-//                    CPDFDocumentActivity.startActivity(getContext(), homeFunBean.getFilePath(),
-//                            "", FunDatas.getConfiguration(getContext(), CPreviewMode.Viewer));
+                            "", configuration);
                     break;
                 case Viewer:
                 case Annotations:
@@ -115,5 +117,4 @@ public class HomeFunFragment extends Fragment {
                 .replace(R.id.fragment_content, DocumentListFragment.newInstance(funType), funType.name() + "_DocumentListFragment")
                 .commit();
     }
-
 }

+ 7 - 0
PDFViewer/src/main/java/com/compdfkit/pdfviewer/home/SettingActivity.java

@@ -19,10 +19,12 @@ import com.compdfkit.core.document.CPDFSdk;
 import com.compdfkit.pdfviewer.R;
 import com.compdfkit.pdfviewer.databinding.ActivitySettingBinding;
 import com.compdfkit.pdfviewer.home.datas.SettingDatas;
+import com.compdfkit.pdfviewer.home.net.Data;
 import com.compdfkit.tools.common.utils.CUriUtil;
 import com.compdfkit.ui.utils.CPDFCommomUtils;
 
 
+
 public class SettingActivity extends AppCompatActivity implements View.OnClickListener {
 
     private ActivitySettingBinding binding;
@@ -52,6 +54,9 @@ public class SettingActivity extends AppCompatActivity implements View.OnClickLi
         binding.swHighlightLink.setListener((buttonView, isChecked) -> {
             SettingDatas.setHighlightLink(this, isChecked);
         });
+        binding.btnUpdate.setOnClickListener(v -> Data.updateConfig(this, (success, time) -> {
+            binding.tvTime.setText("更新时间:" + time);
+        }));
     }
 
     @Override
@@ -75,3 +80,5 @@ public class SettingActivity extends AppCompatActivity implements View.OnClickLi
         }
     }
 }
+
+

+ 5 - 23
PDFViewer/src/main/java/com/compdfkit/pdfviewer/home/datas/FunDatas.java

@@ -14,6 +14,7 @@ import android.content.Context;
 
 import com.compdfkit.pdfviewer.R;
 import com.compdfkit.pdfviewer.home.HomeFunBean;
+import com.compdfkit.tools.common.pdf.CPDFConfigurationUtils;
 import com.compdfkit.tools.common.pdf.config.CPDFConfiguration;
 import com.compdfkit.tools.common.pdf.config.ModeConfig;
 import com.compdfkit.tools.common.pdf.config.ReaderViewConfig;
@@ -90,30 +91,11 @@ public class FunDatas {
      * @return
      */
     public static CPDFConfiguration getConfiguration(Context context, CPreviewMode cPreviewMode) {
-        CPDFConfiguration.Builder builder = new CPDFConfiguration.Builder()
-                .setModeConfig(new ModeConfig(cPreviewMode));
-
-        ReaderViewConfig readerViewConfig = new ReaderViewConfig();
+        CPDFConfiguration configuration = CPDFConfigurationUtils.
+                normalConfig(context, "tools_default_configuration.json");
+        ReaderViewConfig readerViewConfig = configuration.readerViewConfig;
         readerViewConfig.linkHighlight = SettingDatas.isHighlightLink(context);
         readerViewConfig.formFieldHighlight = SettingDatas.isHighlightForm(context);
-        builder.setReaderViewConfig(readerViewConfig);
-
-        ToolbarConfig toolbarConfig = new ToolbarConfig();
-        toolbarConfig.androidAvailableActions = Arrays.asList(
-                ToolbarConfig.ToolbarAction.Thumbnail,
-                ToolbarConfig.ToolbarAction.Search,
-                ToolbarConfig.ToolbarAction.Bota,
-                ToolbarConfig.ToolbarAction.Menu
-        );
-        toolbarConfig.availableMenus = Arrays.asList(
-                ToolbarConfig.MenuAction.ViewSettings,
-                ToolbarConfig.MenuAction.DocumentEditor,
-                ToolbarConfig.MenuAction.DocumentInfo,
-                ToolbarConfig.MenuAction.Save,
-                ToolbarConfig.MenuAction.Share,
-                ToolbarConfig.MenuAction.OpenDocument
-        );
-        builder.setToolbarConfig(toolbarConfig);
-        return builder.create();
+        return configuration;
     }
 }

+ 47 - 0
PDFViewer/src/main/java/com/compdfkit/pdfviewer/home/net/Api.java

@@ -0,0 +1,47 @@
+package com.compdfkit.pdfviewer.home.net;
+
+import okhttp3.OkHttpClient;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/12/14
+ * description:
+ */
+public class Api {
+
+    private static Api instance;
+
+    public static Api getInstance() {
+        if (instance == null) {
+            instance = new Api();
+        }
+        return instance;
+    }
+
+    public static final String BASE_URL = "http://test-store.kdan.cn:3019";
+
+    private Retrofit retrofit;
+
+    public IApi getApi() {
+        if (retrofit == null) {
+            retrofit = new Retrofit.Builder()
+                    .baseUrl(BASE_URL)
+                    .addConverterFactory(GsonConverterFactory.create())
+                    .client(getOkHttpClient())
+                    .build();
+        }
+        return retrofit.create(IApi.class);
+    }
+
+    private OkHttpClient getOkHttpClient(){
+        OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
+        HttpLoggingInterceptor loggingInterceptor =new HttpLoggingInterceptor();
+        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+        builder.addInterceptor(loggingInterceptor);
+        return builder.build();
+    }
+}

+ 87 - 0
PDFViewer/src/main/java/com/compdfkit/pdfviewer/home/net/Data.java

@@ -0,0 +1,87 @@
+package com.compdfkit.pdfviewer.home.net;
+
+import android.content.Context;
+
+import com.compdfkit.tools.common.pdf.CPDFConfigurationUtils;
+import com.compdfkit.tools.common.pdf.config.CPDFConfiguration;
+import com.compdfkit.tools.common.utils.CFileUtils;
+import com.compdfkit.tools.common.utils.CToastUtil;
+
+import java.io.File;
+import java.util.List;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/12/14
+ * description:
+ */
+public class Data {
+
+    public int code;
+
+    public String message;
+
+    public List<ListBean> list;
+
+    public static class ListBean{
+
+        public int id;
+
+        public String detail;
+
+        public String updated_at;
+
+    }
+
+
+    public  static void updateConfig(Context context, OnRequestListener listener){
+        Api.getInstance().getApi()
+                .getConfig("ComPDFKitDemoAndroid")
+                .enqueue(new Callback<Data>() {
+                    @Override
+                    public void onResponse(Call<Data> call, Response<Data> response) {
+                        try {
+                            if (response.code() == 200) {
+                                Data data = response.body();
+                                if (data == null || data.list == null || data.list.size() == 0){
+                                    return;
+                                }
+                                String json = data.list.get(0).detail;
+                                CPDFConfiguration configuration = CPDFConfigurationUtils.fromJson(json);
+                                if (configuration != null) {
+                                    CToastUtil.showLongToast(context, "更新config成功");
+                                    File configFile = new File(context.getCacheDir(),
+                                            CFileUtils.CACHE_FOLDER + File.separator + "remote_configuration.json");
+                                    configFile.getParentFile().mkdirs();
+                                    if (configFile.exists()){
+                                        configFile.delete();
+                                    }
+                                    CFileUtils.writeFileFromString(configFile, json, false);
+                                    listener.request(true, data.list.get(0).updated_at);
+                                } else {
+                                    listener.request(false, "");
+                                }
+                            }
+                        }catch (Exception e){
+                    listener.request(false, "");
+                        }
+
+                    }
+
+                    @Override
+                    public void onFailure(Call<Data> call, Throwable t) {
+                        listener.request(false, "");
+                        CToastUtil.showLongToast(context, "更新失败");
+                    }
+                });
+    }
+
+    public interface OnRequestListener{
+        void request(boolean success, String time);
+    }
+}

+ 22 - 0
PDFViewer/src/main/java/com/compdfkit/pdfviewer/home/net/IApi.java

@@ -0,0 +1,22 @@
+package com.compdfkit.pdfviewer.home.net;
+
+import com.compdfkit.tools.common.pdf.config.CPDFConfiguration;
+
+import okhttp3.RequestBody;
+import retrofit2.Call;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/12/14
+ * description:
+ */
+public interface IApi {
+
+    @GET("/api/advertise-new")
+    Call<Data> getConfig(@Query("app_name") String appName);
+
+
+}

+ 40 - 0
PDFViewer/src/main/res/layout/activity_setting.xml

@@ -47,6 +47,46 @@
                     android:textColor="@color/tools_text_color_primary"
                     android:textSize="12sp" />
 
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="48dp">
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="更新远程配置"
+                        android:textColor="@color/tools_text_color_primary"
+                        app:layout_constraintTop_toTopOf="parent"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        android:layout_marginStart="16dp"
+                        />
+
+                    <androidx.appcompat.widget.AppCompatButton
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        android:background="@drawable/tools_common_btn_corner_ripple"
+                        app:layout_constraintTop_toTopOf="parent"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        android:text="更新配置"
+                        android:textSize="12sp"
+                        android:id="@+id/btn_update"
+                        />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        app:layout_constraintEnd_toStartOf="@id/btn_update"
+                        app:layout_constraintTop_toTopOf="parent"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        tools:text="更新时间:2023-12-14 05:12:07"
+                        android:textSize="11sp"
+                        android:id="@+id/tv_time"
+                        />
+
+                </androidx.constraintlayout.widget.ConstraintLayout>
+
                 <com.compdfkit.tools.common.views.pdfproperties.CPropertiesSwitchView
                     android:id="@+id/sw_highlight_link"
                     android:layout_width="match_parent"

+ 1 - 0
settings.gradle

@@ -3,6 +3,7 @@ pluginManagement {
         google()
         mavenCentral()
         gradlePluginPortal()
+
     }
 }
 dependencyResolutionManagement {