Browse Source

PDFTool(Android) - 调整部分界面显示文案

liuxiaolong 1 year ago
parent
commit
c77cd0ec2b
15 changed files with 321 additions and 178 deletions
  1. BIN
      ComPDFKit_Repo/compdfkit/ComPDFKit.aar
  2. 25 0
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/utils/date/CDateUtil.java
  3. 27 30
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/CertificateDigitalDatas.java
  4. 82 0
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/bean/CPDFSignatureStatusInfo.java
  5. 26 23
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/importcert/create/CreateCertificateDigitalDialog.java
  6. 17 13
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/CertAttrDatas.java
  7. 1 1
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/CertDigitalSignAttributesDialog.java
  8. 9 22
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/CertDigitalSignInfoDialog.java
  9. 8 8
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/signlist/CPDFCertDigitalSignListDialog.java
  10. 21 24
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/signlist/adapter/CertDigitalSignListAdapter.java
  11. 3 3
      ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/verify/view/CVerifySignStatusView.java
  12. 63 28
      ComPDFKit_Tools/src/main/res/layout/tools_sign_cert_digital_sign_list_item.xml
  13. 1 1
      ComPDFKit_Tools/src/main/res/layout/tools_sign_certificate_attributes_fragment.xml
  14. 1 1
      ComPDFKit_Tools/src/main/res/layout/tools_sign_certificate_attributes_list_head_item.xml
  15. 37 24
      ComPDFKit_Tools/src/main/res/values/tools_strings.xml

BIN
ComPDFKit_Repo/compdfkit/ComPDFKit.aar


+ 25 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/utils/date/CDateUtil.java

@@ -1,3 +1,12 @@
+/**
+ * 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.utils.date;
 
 
@@ -6,12 +15,14 @@ import android.text.TextUtils;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Locale;
 import java.util.TimeZone;
 
 public class CDateUtil {
 
     public static final String NORMAL_DATE_FORMAT = "yyyy_MM_dd_HH_mm_ss";
     public static final String NORMAL_DATE_FORMAT_1 = "yyyy.MM.dd HH:mm:ss";
+    public static final String NORMAL_DATE_FORMAT_2 = "dd MMMM yyyy HH:mm:ss";
 
     /**
      * Transform a PDF date string in the format D:20230130060237+00'00' to a human-readable yyyy-MM-dd HH:mm:ss date string.
@@ -36,6 +47,20 @@ public class CDateUtil {
         }
     }
 
+    public static String formatDate(String dateStr, String pattern){
+        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        SimpleDateFormat outputFormat = new SimpleDateFormat(pattern, Locale.ENGLISH);
+        try {
+            Date date = inputFormat.parse(dateStr);
+            String formattedOutput = outputFormat.format(date);
+            System.out.println(formattedOutput);
+            return formattedOutput;
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return dateStr;
+        }
+    }
+
     public static String getDataTime(String format) {
         SimpleDateFormat df = new SimpleDateFormat(format);
         return df.format(new Date());

+ 27 - 30
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/CertificateDigitalDatas.java

@@ -25,6 +25,7 @@ import com.compdfkit.core.document.signature.CPDFX509;
 import com.compdfkit.core.utils.TFileUtils;
 import com.compdfkit.tools.common.utils.CLog;
 import com.compdfkit.tools.common.utils.CUriUtil;
+import com.compdfkit.tools.signature.bean.CPDFSignatureStatusInfo;
 import com.compdfkit.tools.signature.pdfproperties.pdfsign.CDigitalSignStyleData;
 
 import org.jetbrains.annotations.NotNull;
@@ -90,7 +91,7 @@ public class CertificateDigitalDatas {
         return list;
     }
 
-    public static boolean hasDigitalSignature(CPDFDocument document){
+    public static boolean hasDigitalSignature(CPDFDocument document) {
         return getDigitalSignList(document).size() > 0;
     }
 
@@ -144,10 +145,10 @@ public class CertificateDigitalDatas {
      * @param document
      * @return
      */
-    public static boolean verifySignIsValid(CPDFDocument document,CPDFSignature signature ) {
+    public static boolean verifySignIsValid(CPDFDocument document, CPDFSignature signature) {
         CPDFSigner[] signers = signature.getSignerArr();
         if (!TextUtils.isEmpty(document.getAbsolutePath())) {
-            return signature.veryfyByPath(signers[0], document.getAbsolutePath());
+            return signature.verifyByPath(signers[0], document.getAbsolutePath());
         } else {
             return signature.verifyByFd(signers[0], CUriUtil.getUriFd(document.getContext(), document.getUri()));
         }
@@ -220,19 +221,15 @@ public class CertificateDigitalDatas {
         }
     }
 
-    public static SignatureStatus verifySignatureStatus(CPDFDocument document, CPDFSignature signature){
-        boolean isValid = verifySignIsValid( document, signature);
-        if (isValid) {
-            boolean isExpired = false;
-            CPDFSigner[] signers = signature.getSignerArr();
-            CPDFSigner signers1 = signers[0];
-            if (signers1.getCert().isExpired()) {
-                isExpired = true;
-            }
-            return isExpired ? SignatureStatus.WRONG : SignatureStatus.VALID;
-        }else {
-            return SignatureStatus.FAILURES;
+    public static CPDFSignatureStatusInfo verifySignatureStatus(CPDFDocument document, CPDFSignature signature) {
+        boolean isValid = verifySignIsValid(document, signature);
+        boolean isExpired = false;
+        CPDFSigner[] signers = signature.getSignerArr();
+        CPDFSigner signers1 = signers[0];
+        if (signers1.getCert().isExpired()) {
+            isExpired = true;
         }
+        return new CPDFSignatureStatusInfo(document.getContext(), signature, isValid, isExpired);
     }
 
     public static boolean removeDigitalSign(CPDFDocument document, CPDFSignature signature) {
@@ -246,22 +243,22 @@ public class CertificateDigitalDatas {
         }
     }
 
-    public static List<CPDFX509> getCertDetails(Context context, CPDFSignature signature){
+    public static List<CPDFX509> getCertDetails(Context context, CPDFSignature signature) {
         CPDFSigner[] signers = signature.getSignerArr();
         List<CPDFX509> list = new ArrayList<>();
-        if (signers != null && signers.length > 0){
+        if (signers != null && signers.length > 0) {
             CPDFSigner signer = signers[0];
             CPDFX509 cert = signer.getCert();
             list.add(cert);
-            loopVerifyGetChain(context,list, signature, cert);
+            loopVerifyGetChain(context, list, signature, cert);
         }
         Collections.reverse(list);
         return list;
     }
 
-    private static void loopVerifyGetChain(Context context,List<CPDFX509> list, CPDFSignature signature, CPDFX509 cert){
+    private static void loopVerifyGetChain(Context context, List<CPDFX509> list, CPDFSignature signature, CPDFX509 cert) {
         cert.verifyGetChain(context, signature);
-        CPDFX509[] cpdfx509s = cert.getChanin();
+        CPDFX509[] cpdfx509s = cert.getChain();
         if (cpdfx509s != null && cpdfx509s.length > 0) {
             CPDFX509 a = cpdfx509s[0];
             list.add(a);
@@ -270,25 +267,25 @@ public class CertificateDigitalDatas {
     }
 
 
-    public static String getOwnerContent(CPDFOwnerInfo ownerInfo){
+    public static String getOwnerContent(CPDFOwnerInfo ownerInfo) {
         StringBuilder builder = new StringBuilder();
         List<String> infos = new ArrayList<>();
-        if (!TextUtils.isEmpty(ownerInfo.getCountry())){
-            infos.add("C="+ownerInfo.getCountry());
+        if (!TextUtils.isEmpty(ownerInfo.getCountry())) {
+            infos.add("C=" + ownerInfo.getCountry());
         }
-        if (!TextUtils.isEmpty(ownerInfo.getOrgnize())){
-            infos.add("O="+ownerInfo.getOrgnize());
+        if (!TextUtils.isEmpty(ownerInfo.getOrgnize())) {
+            infos.add("O=" + ownerInfo.getOrgnize());
         }
-        if (!TextUtils.isEmpty(ownerInfo.getOrgnizeUnit())){
-            infos.add("OU="+ownerInfo.getOrgnizeUnit());
+        if (!TextUtils.isEmpty(ownerInfo.getOrgnizeUnit())) {
+            infos.add("OU=" + ownerInfo.getOrgnizeUnit());
         }
-        if (!TextUtils.isEmpty(ownerInfo.getCommonName())){
-            infos.add("CN="+ownerInfo.getCommonName());
+        if (!TextUtils.isEmpty(ownerInfo.getCommonName())) {
+            infos.add("CN=" + ownerInfo.getCommonName());
         }
         for (int i = 0; i < infos.size(); i++) {
             String item = infos.get(i);
             builder.append(item);
-            if (i != infos.size() -1){
+            if (i != infos.size() - 1) {
                 builder.append(",");
             }
         }

+ 82 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/bean/CPDFSignatureStatusInfo.java

@@ -0,0 +1,82 @@
+/**
+ * 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.signature.bean;
+
+import android.content.Context;
+
+import com.compdfkit.core.document.signature.CPDFSignature;
+import com.compdfkit.tools.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CPDFSignatureStatusInfo {
+
+    public CPDFSignatureStatusInfo(){
+
+    }
+
+    public CPDFSignatureStatusInfo(Context context, CPDFSignature signature, boolean isValid, boolean isExpired){
+        this.signature = signature;
+        this.isValid = isValid;
+        this.isExpired = isExpired;
+        List<String> list = new ArrayList<>();
+        if (isValid) {
+            list.add(context.getString(R.string.tools_sign_is_valid_info));
+        }else {
+            list.add(context.getString(R.string.tools_sign_is_in_valid_info));
+        }
+        if (isExpired){
+            list.add(context.getString(R.string.tools_sign_cert_has_expired_info));
+        }
+        this.certAuthorityStatements = list.toArray(new String[list.size()]);
+    }
+
+
+    CPDFSignature signature;
+
+    private boolean isValid;
+
+    private boolean isExpired;
+
+    private String[] certAuthorityStatements;
+
+    public CPDFSignature getSignature() {
+        return signature;
+    }
+
+    public void setSignature(CPDFSignature signature) {
+        this.signature = signature;
+    }
+
+    public boolean isValid() {
+        return isValid;
+    }
+
+    public void setValid(boolean valid) {
+        isValid = valid;
+    }
+
+    public boolean isExpired() {
+        return isExpired;
+    }
+
+    public void setExpired(boolean expired) {
+        isExpired = expired;
+    }
+
+    public String[] getCertAuthorityStatements() {
+        return certAuthorityStatements;
+    }
+
+    public void setCertAuthorityStatements(String[] certAuthorityStatements) {
+        this.certAuthorityStatements = certAuthorityStatements;
+    }
+}

+ 26 - 23
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/importcert/create/CreateCertificateDigitalDialog.java

@@ -39,6 +39,7 @@ import com.compdfkit.core.document.signature.CPDFOwnerInfo;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.basic.fragment.CBasicBottomSheetDialogFragment;
 import com.compdfkit.tools.common.utils.CFileUtils;
+import com.compdfkit.tools.common.utils.CToastUtil;
 import com.compdfkit.tools.common.utils.dialog.CDialogFragmentUtil;
 import com.compdfkit.tools.common.utils.threadpools.CThreadPoolUtils;
 import com.compdfkit.tools.common.utils.view.CEditText;
@@ -58,8 +59,6 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
 
     private AppCompatTextView tvTitle;
 
-    private AppCompatImageView ivClose;
-
     private CEditText etName;
 
     private CEditText etOrganizationUnit;
@@ -84,8 +83,6 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
 
     private CEditText etConfirmPassword;
 
-    private AppCompatButton btnConfirmCreate;
-
     private boolean showSaveStatus = false;
 
     private OnBackPressedCallback callback;
@@ -96,8 +93,6 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
 
     private COnSelectCertFileListener selectCertFileListener;
 
-    private ScrollView scrollView;
-
     private CountryReginSpinnerAdapter countryReginSpinnerAdapter;
 
     private String fileName = "";
@@ -106,7 +101,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
         if (result.getData() != null && result.getData().getData() != null) {
             Uri uri = result.getData().getData();
             CFileUtils.takeUriPermission(getContext(), result.getData().getData());
-            customSavePath = Environment.getExternalStorageDirectory().getAbsolutePath()  + File.separator + uri.getPath().replace("/tree/primary:", "");
+            customSavePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + uri.getPath().replace("/tree/primary:", "");
             tvSaveAddress.setText(getSaveAddress() + File.separator + fileName);
         }
     });
@@ -164,11 +159,11 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
     @Override
     protected void onCreateView(View view) {
         tvTitle = view.findViewById(R.id.tv_tool_bar_title);
-        ivClose = view.findViewById(R.id.iv_tool_bar_close);
+        AppCompatImageView ivClose = view.findViewById(R.id.iv_tool_bar_close);
         etName = view.findViewById(R.id.et_name);
         etOrganizationUnit = view.findViewById(R.id.et_organization_unit);
         etOrganizationName = view.findViewById(R.id.et_organization_name);
-        scrollView = view.findViewById(R.id.scroll_view);
+        ScrollView scrollView = view.findViewById(R.id.scroll_view);
         etEmailAddress = view.findViewById(R.id.et_email_address);
         spinnerCountry = view.findViewById(R.id.spinner_country_regin);
         swSaveToFile = view.findViewById(R.id.sw_save_to_file);
@@ -178,7 +173,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
         llSaveAddress = view.findViewById(R.id.ll_save_address);
         etPassword = view.findViewById(R.id.et_password);
         etConfirmPassword = view.findViewById(R.id.et_confirm_password);
-        btnConfirmCreate = view.findViewById(R.id.btn_save);
+        AppCompatButton btnConfirmCreate = view.findViewById(R.id.btn_save);
         tvPasswordError = view.findViewById(R.id.tv_password_error);
         btnOk.setOnClickListener(this);
         tvSaveAddress.setOnClickListener(this);
@@ -189,7 +184,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
     @Override
     protected void onViewCreate() {
         String uuid = UUID.randomUUID().toString();
-        fileName = "new_cert_"+  uuid.substring(uuid.length()-4, uuid.length())+".p12";
+        fileName = "new_cert_" + uuid.substring(uuid.length() - 4, uuid.length()) + ".p12";
         tvTitle.setText(R.string.tools_create_a_self_signed_digital_id);
         initCountryReginData();
         etName.addTextChangedListener((s, start, before, count) -> {
@@ -222,7 +217,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
             dismiss();
         } else if (v.getId() == R.id.tv_save_address) {
             selectDirLauncher.launch(CFileUtils.selectSystemDir(true));
-        } else if (v.getId() == R.id.btn_save){
+        } else if (v.getId() == R.id.btn_save) {
             String name = etName.getText();
             String grantor = etOrganizationUnit.getText();
             String sectoral = etOrganizationName.getText();
@@ -231,7 +226,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
             String password = etPassword.getText();
             String verifyPassword = etConfirmPassword.getText();
 
-            if (TextUtils.isEmpty(password) || TextUtils.isEmpty(verifyPassword) || !password.equals(verifyPassword)){
+            if (TextUtils.isEmpty(password) || TextUtils.isEmpty(verifyPassword) || !password.equals(verifyPassword)) {
                 etPassword.setError(true);
                 etConfirmPassword.setError(true);
                 tvPasswordError.setVisibility(View.VISIBLE);
@@ -251,22 +246,30 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
             String saveDir = getSaveAddress();
             boolean success = CertificateDigitalDatas.generatePKCS12Cert(ownerInfo, etPassword.getText(),
                     saveDir, fileName);
-            if (success){
+            File certFile = new File(saveDir, fileName);
+            boolean exists = certFile.exists();
+            if (success && certFile.exists()) {
                 if (selectCertFileListener != null) {
-                    selectCertFileListener.certificateFile(new File(saveDir, fileName).getAbsolutePath(), etPassword.getText());
+                    selectCertFileListener.certificateFile(certFile.getAbsolutePath(), etPassword.getText());
                 }
+            } else {
+                CToastUtil.showToast(getContext(), R.string.tools_digital_create_error);
             }
         }
     }
 
-    private void initCountryReginData(){
-        CThreadPoolUtils.getInstance().execute(()->{
+    private void initCountryReginData() {
+        CThreadPoolUtils.getInstance().execute(() -> {
             List<Locale> datas = getLocals();
             if (getActivity() != null) {
-                getActivity().runOnUiThread(()->{
-                    countryReginSpinnerAdapter = new CountryReginSpinnerAdapter(getContext(), datas);
-                    spinnerCountry.setAdapter(countryReginSpinnerAdapter);
-                    spinnerCountry.setSelection(countryReginSpinnerAdapter.getSelectPosition());
+                getActivity().runOnUiThread(() -> {
+                    try {
+                        countryReginSpinnerAdapter = new CountryReginSpinnerAdapter(getContext(), datas);
+                        spinnerCountry.setAdapter(countryReginSpinnerAdapter);
+                        spinnerCountry.setSelection(countryReginSpinnerAdapter.getSelectPosition());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
                 });
             }
         });
@@ -312,7 +315,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
     }
 
     private String getSaveAddress() {
-        if (!TextUtils.isEmpty(customSavePath)){
+        if (!TextUtils.isEmpty(customSavePath)) {
             return customSavePath;
         }
         File file;
@@ -324,7 +327,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
         return file.getAbsolutePath();
     }
 
-    private List<Locale> getLocals(){
+    private List<Locale> getLocals() {
         String[] isos = Locale.getISOCountries();
         List<Locale> list = new ArrayList<>();
         for (String iso : isos) {

+ 17 - 13
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/CertAttrDatas.java

@@ -31,11 +31,13 @@ public class CertAttrDatas {
         List<CPDFCertAttrDataItem> list = new ArrayList<>();
         CPDFCertInfo certInfo = cpdfx509.getCertInfo();
         CPDFExtInfo extInfo = certInfo.getExtInfo();
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_subject), getOwnerContent(certInfo.getSubject())));
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_issued_to), getOwnerContent(certInfo.getSubject())));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_issuer), getOwnerContent(certInfo.getIssuer())));
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_valid_start_date), CDateUtil.formatPDFUTCDate(certInfo.getValidDateBegin())));
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_valid_until_date), CDateUtil.formatPDFUTCDate(certInfo.getValidDateEnd())));
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_expected_usage), ""));
+        String validForm = CDateUtil.formatPDFUTCDate(certInfo.getValidDateBegin());
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_valid_from), CDateUtil.formatDate(validForm, CDateUtil.NORMAL_DATE_FORMAT_2)));
+        String validTo =  CDateUtil.formatPDFUTCDate(certInfo.getValidDateEnd());
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_valid_to), CDateUtil.formatDate(validTo, CDateUtil.NORMAL_DATE_FORMAT_2)));
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_intended_usage), ""));
         return list;
     }
 
@@ -47,18 +49,21 @@ public class CertAttrDatas {
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_version), certInfo.getVersion()));
         CPDFCertInfo.CPDFAlgorithmType algorithmType = certInfo.getAlgorithmType(certInfo.getSignatureAlgOid());
         String signatureAlgorithm = algorithmType.name().replace("PDFSignatureAlgorithmType","");
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_signature_algorithm), signatureAlgorithm + "(" +  certInfo.getSignatureAlgOid() +")"));
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_algorithm), signatureAlgorithm + "(" +  certInfo.getSignatureAlgOid() +")"));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_subject), getOwnerContent(certInfo.getSubject())));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_issuer), getOwnerContent(certInfo.getIssuer())));
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_valid_start_date), CDateUtil.formatPDFUTCDate(certInfo.getValidDateBegin())));
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_valid_until_date), CDateUtil.formatPDFUTCDate(certInfo.getValidDateEnd())));
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_serial_number), certInfo.getSeriaNumber()));
+        String validForm = CDateUtil.formatPDFUTCDate(certInfo.getValidDateBegin());
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_valid_from), CDateUtil.formatDate(validForm, CDateUtil.NORMAL_DATE_FORMAT_2)));
+        String validTo =  CDateUtil.formatPDFUTCDate(certInfo.getValidDateEnd());
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_valid_to), CDateUtil.formatDate(validTo, CDateUtil.NORMAL_DATE_FORMAT_2)));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_certificate_policy), getCertStringArrayInfo(extInfo.getCertificatePolicies())));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_crl_distribution_point), getCertStringArrayInfo(extInfo.getCrlDistribute())));
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_auth_info_access), getAuthInfoAccessContent(extInfo.getAuthorizedInforAccess())));
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_issuer_info_access), getAuthInfoAccessContent(extInfo.getAuthorizedInforAccess())));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_issuing_auth_key_identifier), extInfo.getAuthKeyIdentifier()));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_subject_key_identifier), extInfo.getSubjectKeyIdentifier()));
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_basic_limit), ""));
-        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_key_usage), extInfo.getKeyUsage()));
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_basic_constraints), cpdfx509.getBasicConstraints()));
+        list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_key_usage), extInfo.getConvertKeyUsage()));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_public_key), certInfo.getPublicKey()));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_x_509_data), certInfo.getX509Data()));
         list.add(new CPDFCertAttrDataItem(context.getString(R.string.tools_sha1_digest), certInfo.getSha1Digest()));
@@ -72,9 +77,8 @@ public class CertAttrDatas {
             for (int i = 0; i < cpdfAuinfoacs.length; i++) {
                 CPDFAuinfoac item = cpdfAuinfoacs[i];
                 if (item != null){
-                    builder.append("methodType:").append(item.getMethod_type()).append("\n");
-                    builder.append("nid:").append(item.getNid()).append("\n");
-                    builder.append("URL:").append(item.getUrl());
+                    builder.append("CAIssuers = ").append(item.getMethod_type()).append("\n");
+                    builder.append("URL = ").append(item.getUrl());
                 }
                 if (i != cpdfAuinfoacs.length -1){
                     builder.append("\n\n");

+ 1 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/CertDigitalSignAttributesDialog.java

@@ -101,7 +101,7 @@ public class CertDigitalSignAttributesDialog extends CBasicBottomSheetDialogFrag
     private void initData() {
         if (cpdfx509 != null) {
             List<CPDFCertAttrDataItem> list = new ArrayList<>();
-            list.add(new CPDFCertAttrDataItem(getString(R.string.tools_reader_pdf_info_abstract)));
+            list.add(new CPDFCertAttrDataItem(getString(R.string.tools_summary)));
             list.addAll(CertAttrDatas.getAbstractInfo(getContext(), cpdfx509));
             list.add(new CPDFCertAttrDataItem(getString(R.string.tools_details)));
             list.addAll(CertAttrDatas.getCertAttrDetailInfoList(getContext(), cpdfx509));

+ 9 - 22
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/CertDigitalSignInfoDialog.java

@@ -11,12 +11,8 @@ package com.compdfkit.tools.signature.info;
 
 
 import android.os.Bundle;
-import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.widget.AppCompatButton;
 import androidx.appcompat.widget.AppCompatImageView;
 import androidx.appcompat.widget.AppCompatTextView;
@@ -29,11 +25,9 @@ import com.compdfkit.core.document.signature.CPDFX509;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.basic.fragment.CBasicBottomSheetDialogFragment;
 import com.compdfkit.tools.common.utils.date.CDateUtil;
-import com.compdfkit.tools.common.utils.dialog.CDialogFragmentUtil;
 import com.compdfkit.tools.signature.CertificateDigitalDatas;
 import com.compdfkit.tools.signature.SignatureStatus;
-import com.google.android.material.bottomsheet.BottomSheetBehavior;
-import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
+import com.compdfkit.tools.signature.bean.CPDFSignatureStatusInfo;
 
 public class CertDigitalSignInfoDialog extends CBasicBottomSheetDialogFragment implements View.OnClickListener {
 
@@ -102,7 +96,7 @@ public class CertDigitalSignInfoDialog extends CBasicBottomSheetDialogFragment i
 
     @Override
     protected void onViewCreate() {
-        tvTitle.setText(R.string.tools_view_digital_signature);
+        tvTitle.setText(R.string.tools_digital_signature_detail);
         if (cpdfSignature != null) {
             CPDFSigner[] signers = cpdfSignature.getSignerArr();
             if (signers != null && signers.length > 0) {
@@ -111,21 +105,14 @@ public class CertDigitalSignInfoDialog extends CBasicBottomSheetDialogFragment i
                 String commonName = certInfo.getSubject().getCommonName();
                 tvFounder.setText(commonName);
             }
-            tvDateOfSignature.setText(CDateUtil.transformPDFDate(cpdfSignature.getDate()));
-            SignatureStatus status = CertificateDigitalDatas.verifySignatureStatus(document, cpdfSignature);
-            switch (status) {
-                case VALID:
-                    tvSignStatement.setText(R.string.tools_sign_is_valid_info);
-                    break;
-                case FAILURES:
-                    tvSignStatement.setText(R.string.tools_sign_is_in_valid_info);
-                    break;
-                case WRONG:
-                    tvSignStatement.setText(R.string.tools_sign_cert_has_expired);
-                    break;
-                default:
-                    break;
+            String date = CDateUtil.transformPDFDate(cpdfSignature.getDate());
+            tvDateOfSignature.setText(CDateUtil.formatDate(date, CDateUtil.NORMAL_DATE_FORMAT_2));
+            CPDFSignatureStatusInfo signatureStatusInfo = CertificateDigitalDatas.verifySignatureStatus(document, cpdfSignature);
+            StringBuilder builder = new StringBuilder();
+            for (String certAuthorityStatement : signatureStatusInfo.getCertAuthorityStatements()) {
+                builder.append(certAuthorityStatement).append("\n\n");
             }
+            tvSignStatement.setText(builder);
         }
     }
 

+ 8 - 8
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/signlist/CPDFCertDigitalSignListDialog.java

@@ -26,6 +26,7 @@ import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
 import com.compdfkit.tools.signature.CertificateDigitalDatas;
 import com.compdfkit.tools.signature.SignatureStatus;
 import com.compdfkit.tools.signature.bean.CPDFSignatureItemData;
+import com.compdfkit.tools.signature.bean.CPDFSignatureStatusInfo;
 import com.compdfkit.tools.signature.info.CertDigitalSignInfoDialog;
 import com.compdfkit.tools.signature.info.signlist.adapter.CertDigitalSignListAdapter;
 import com.google.android.material.bottomsheet.BottomSheetBehavior;
@@ -100,14 +101,14 @@ public class CPDFCertDigitalSignListDialog extends CBasicBottomSheetDialogFragme
         recyclerView.setAdapter(signListAdapter);
         initSignatureDatas();
         signListAdapter.setOnItemClickListener((adapter, view1, position) -> {
-            CPDFSignatureItemData signature = adapter.list.get(position);
+            CPDFSignatureStatusInfo signature = adapter.list.get(position);
             CertDigitalSignInfoDialog infoDialog = CertDigitalSignInfoDialog.newInstance();
             infoDialog.setPDFSignature(signature.getSignature());
             infoDialog.setDocument(pdfView.getCPdfReaderView().getPDFDocument());
             infoDialog.show(getChildFragmentManager(), "signInfoDialog");
         });
         signListAdapter.addOnItemChildClickListener(R.id.iv_delete, (adapter, view1, position) -> {
-            CPDFSignatureItemData signature = adapter.list.get(position);
+            CPDFSignatureStatusInfo signature = adapter.list.get(position);
             CAlertDialog alertDialog = CAlertDialog.newInstance(getString(R.string.tools_warning), getString(R.string.tools_are_you_sure_to_delete));
             alertDialog.setCancelClickListener(v -> {
                 alertDialog.dismiss();
@@ -126,22 +127,21 @@ public class CPDFCertDigitalSignListDialog extends CBasicBottomSheetDialogFragme
 
     private void initSignatureDatas() {
         progressBar.setVisibility(View.VISIBLE);
-        SimpleBackgroundTask<List<CPDFSignatureItemData>> task = new SimpleBackgroundTask<List<CPDFSignatureItemData>>(getContext()) {
+        SimpleBackgroundTask<List<CPDFSignatureStatusInfo>> task = new SimpleBackgroundTask<List<CPDFSignatureStatusInfo>>(getContext()) {
 
             @Override
-            protected List<CPDFSignatureItemData> onRun() {
+            protected List<CPDFSignatureStatusInfo> onRun() {
                 CPDFDocument document = pdfView.getCPdfReaderView().getPDFDocument();
-                List<CPDFSignatureItemData> itemDataList = new ArrayList<>();
+                List<CPDFSignatureStatusInfo> itemDataList = new ArrayList<>();
                 List<CPDFSignature> list = CertificateDigitalDatas.getDigitalSignList(document);
                 for (CPDFSignature signature : list) {
-                    SignatureStatus status = CertificateDigitalDatas.verifySignatureStatus(document, signature);
-                    itemDataList.add(new CPDFSignatureItemData(signature, status));
+                    itemDataList.add(CertificateDigitalDatas.verifySignatureStatus(document, signature));
                 }
                 return itemDataList;
             }
 
             @Override
-            protected void onSuccess(List<CPDFSignatureItemData> result) {
+            protected void onSuccess(List<CPDFSignatureStatusInfo> result) {
                 signListAdapter.setList(result);
                 progressBar.setVisibility(View.GONE);
                 recyclerView.setVisibility(View.VISIBLE);

+ 21 - 24
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/info/signlist/adapter/CertDigitalSignListAdapter.java

@@ -1,5 +1,7 @@
 package com.compdfkit.tools.signature.info.signlist.adapter;
 
+import static com.compdfkit.tools.common.utils.date.CDateUtil.NORMAL_DATE_FORMAT_2;
+
 import android.content.Context;
 import android.text.TextUtils;
 import android.view.ViewGroup;
@@ -12,13 +14,14 @@ import com.compdfkit.tools.common.utils.adapter.CBaseQuickAdapter;
 import com.compdfkit.tools.common.utils.adapter.CBaseQuickViewHolder;
 import com.compdfkit.tools.common.utils.date.CDateUtil;
 import com.compdfkit.tools.signature.bean.CPDFSignatureItemData;
+import com.compdfkit.tools.signature.bean.CPDFSignatureStatusInfo;
 
 
-public class CertDigitalSignListAdapter extends CBaseQuickAdapter<CPDFSignatureItemData, CBaseQuickViewHolder> {
+public class CertDigitalSignListAdapter extends CBaseQuickAdapter<CPDFSignatureStatusInfo, CBaseQuickViewHolder> {
 
     private CPDFDocument document;
 
-    public CertDigitalSignListAdapter(CPDFDocument document){
+    public CertDigitalSignListAdapter(CPDFDocument document) {
         this.document = document;
     }
 
@@ -28,34 +31,28 @@ public class CertDigitalSignListAdapter extends CBaseQuickAdapter<CPDFSignatureI
     }
 
     @Override
-    protected void onBindViewHolder(CBaseQuickViewHolder holder, int position, CPDFSignatureItemData item) {
+    protected void onBindViewHolder(CBaseQuickViewHolder holder, int position, CPDFSignatureStatusInfo item) {
         Context context = holder.itemView.getContext();
         CPDFSigner[] signers = item.getSignature().getSignerArr();
         CPDFCertInfo certInfos = signers[0].getCert().getCertInfo();
-        switch (item.getSignatureStatus()){
-            case VALID:
-                holder.setText(R.id.tv_sign_status, R.string.tools_authentication_successful);
-                holder.setImageResource(R.id.iv_icon, R.drawable.tools_ic_digital_sign_is_valid);
-                holder.setText(R.id.tv_sign_desc, context.getString(R.string.tools_valid_signature) + "," +
-                        context.getString(R.string.tools_signed_by) + " " + certInfos.getSubject().getCommonName());
-                break;
-            case FAILURES:
-                holder.setText(R.id.tv_sign_status, R.string.tools_authentication_failures);
-                holder.setImageResource(R.id.iv_icon, R.drawable.tools_ic_digital_sign_is_failures);
-                holder.setText(R.id.tv_sign_desc, context.getString(R.string.tools_valid_in_signature) + "," +
-                        context.getString(R.string.tools_signed_by) + " " + certInfos.getSubject().getCommonName());
-                break;
-            case WRONG:
-                holder.setText(R.id.tv_sign_status, R.string.tools_authentication_wailures);
-                holder.setImageResource(R.id.iv_icon, R.drawable.tools_ic_digital_sign_is_wrong);
-                holder.setText(R.id.tv_sign_desc, context.getString(R.string.tools_valid_in_signature) + "," +
-                        context.getString(R.string.tools_signed_by) + " " + certInfos.getSubject().getCommonName());
-                break;
-        }
+        holder.setText(R.id.tv_sign_common_name, certInfos.getSubject().getCommonName());
         if (TextUtils.isEmpty(item.getSignature().getDate())) {
             holder.setText(R.id.tv_sign_date, "");
         } else {
-            holder.setText(R.id.tv_sign_date, context.getString(R.string.tools_signature_time) + " " + CDateUtil.transformPDFDate(item.getSignature().getDate()));
+            String date1 = CDateUtil.transformPDFDate(item.getSignature().getDate());
+            holder.setText(R.id.tv_sign_date, CDateUtil.formatDate(date1, NORMAL_DATE_FORMAT_2));
+        }
+        if (item.isValid()) {
+            if (item.isExpired()) {
+                holder.setText(R.id.tv_sign_status, item.getCertAuthorityStatements()[0]);
+                holder.setImageResource(R.id.iv_icon, R.drawable.tools_ic_digital_sign_is_wrong);
+            } else {
+                holder.setText(R.id.tv_sign_status, item.getCertAuthorityStatements()[0]);
+                holder.setImageResource(R.id.iv_icon, R.drawable.tools_ic_digital_sign_is_valid);
+            }
+        } else {
+            holder.setText(R.id.tv_sign_status, R.string.tools_sign_cert_has_expired_info);
+            holder.setImageResource(R.id.iv_icon, R.drawable.tools_ic_digital_sign_is_failures);
         }
     }
 }

+ 3 - 3
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/verify/view/CVerifySignStatusView.java

@@ -100,15 +100,15 @@ public class CVerifySignStatusView extends FrameLayout {
         switch (status) {
             case VALID:
                 ivStatus.setImageResource(R.drawable.tools_ic_digital_sign_is_valid);
-                tvStatus.setText(R.string.tools_sign_is_valid_info);
+                tvStatus.setText(R.string.tools_sign_the_sign_is_valid);
                 break;
             case FAILURES:
                 ivStatus.setImageResource(R.drawable.tools_ic_digital_sign_is_failures);
-                tvStatus.setText(R.string.tools_sign_is_in_valid_info);
+                tvStatus.setText(R.string.tools_sign_the_sign_is_in_valid);
                 break;
             case WRONG:
                 ivStatus.setImageResource(R.drawable.tools_ic_digital_sign_is_wrong);
-                tvStatus.setText(R.string.tools_sign_cert_has_expired);
+                tvStatus.setText(R.string.tools_sign_the_sign_has_expired_desc);
                 break;
             default:
                 break;

+ 63 - 28
ComPDFKit_Tools/src/main/res/layout/tools_sign_cert_digital_sign_list_item.xml

@@ -6,8 +6,9 @@
     android:layout_height="wrap_content"
     android:layout_marginHorizontal="16dp"
     android:layout_marginTop="16dp"
-    android:foreground="@drawable/tools_common_btn_rectangle_ripple"
-    android:background="@drawable/tools_style_signature_list_item_bg">
+
+    android:background="@drawable/tools_style_signature_list_item_bg"
+    android:foreground="@drawable/tools_common_btn_rectangle_ripple">
 
     <androidx.appcompat.widget.AppCompatImageView
         android:id="@+id/iv_icon"
@@ -19,69 +20,103 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
+    <androidx.constraintlayout.widget.Barrier
+        android:id="@+id/barrier"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:barrierDirection="end"
+        app:constraint_referenced_ids="tv_sign_common_name_title,tv_sign_date_title,tv_sign_status_title" />
+
+
     <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_sign_name"
+        android:id="@+id/tv_sign_common_name_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="8dp"
-        android:layout_marginEnd="16dp"
-        android:textColor="@color/tools_text_color_primary"
-        android:textSize="15sp"
-        android:textStyle="bold"
+        android:layout_marginTop="4dp"
+        android:lineSpacingMultiplier="1.2"
+        android:text="@string/tools_signed_by"
+        android:textColor="@color/tools_on_primary"
         app:layout_constrainedWidth="true"
-        app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0"
         app:layout_constraintStart_toEndOf="@id/iv_icon"
-        app:layout_constraintTop_toTopOf="@id/iv_icon"
-        tools:text="Digital Signature Name" />
+        app:layout_constraintTop_toTopOf="@id/iv_icon" />
 
     <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_sign_desc"
+        android:id="@+id/tv_sign_common_name"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="4dp"
-        android:layout_marginEnd="16dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginEnd="40dp"
         android:lineSpacingMultiplier="1.2"
         android:textColor="@color/tools_text_color_primary"
         app:layout_constrainedWidth="true"
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_sign_common_name_title"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0"
-        app:layout_constraintStart_toStartOf="@id/tv_sign_name"
-        app:layout_constraintTop_toBottomOf="@id/tv_sign_name"
-        tools:text="Valid signature, Signed by ComPDFKit xxxx@gmail.com " />
+        app:layout_constraintStart_toEndOf="@id/barrier"
+        tools:text="ComPDFKit" />
 
     <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_sign_date"
+        android:id="@+id/tv_sign_date_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="4dp"
-        android:layout_marginEnd="16dp"
+        android:lineSpacingMultiplier="1.2"
+        android:text="@string/tools_date_"
+        android:textColor="@color/tools_on_primary"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toStartOf="@id/tv_sign_common_name_title"
+        app:layout_constraintTop_toBottomOf="@id/tv_sign_common_name" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_sign_date"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginEnd="40dp"
         android:lineSpacingMultiplier="1.2"
         android:textColor="@color/tools_text_color_primary"
         app:layout_constrainedWidth="true"
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_sign_date_title"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0"
-        app:layout_constraintStart_toStartOf="@id/tv_sign_name"
-        app:layout_constraintTop_toBottomOf="@id/tv_sign_desc"
-        tools:text="Signature Time:2023 01 01 10:00:00" />
+        app:layout_constraintStart_toEndOf="@id/barrier"
+        tools:text="2023/08/20 10:00:00" />
+
 
     <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_sign_status"
+        android:id="@+id/tv_sign_status_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="4dp"
-        android:layout_marginEnd="16dp"
+        android:lineSpacingMultiplier="1.2"
+        android:text="@string/tools_status"
+        android:textColor="@color/tools_on_primary"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toStartOf="@id/tv_sign_common_name_title"
+        app:layout_constraintTop_toBottomOf="@id/tv_sign_date" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_sign_status"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginEnd="40dp"
         android:layout_marginBottom="16dp"
         android:lineSpacingMultiplier="1.2"
-        android:textColor="@color/tools_text_color_secondary"
-        android:textSize="12sp"
+        android:textColor="@color/tools_text_color_primary"
         app:layout_constrainedWidth="true"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0"
-        app:layout_constraintStart_toStartOf="@id/tv_sign_name"
-        app:layout_constraintTop_toBottomOf="@id/tv_sign_date"
-        tools:text="Authentication Successful" />
+        app:layout_constraintStart_toEndOf="@id/barrier"
+        app:layout_constraintTop_toTopOf="@id/tv_sign_status_title"
+        app:layout_constraintVertical_bias="0"
+        tools:text="@string/tools_sign_is_valid_info" />
+
 
     <androidx.appcompat.widget.AppCompatImageView
         android:id="@+id/iv_delete"

+ 1 - 1
ComPDFKit_Tools/src/main/res/layout/tools_sign_certificate_attributes_fragment.xml

@@ -11,7 +11,7 @@
         android:layout_width="match_parent"
         android:layout_height="?attr/actionBarSize"
         android:elevation="4dp"
-        android:title="@string/tools_digital_sign_attr"
+        android:title="@string/tools_certificate_viewer"
         app:layout_constraintTop_toTopOf="parent" />
 
     <androidx.recyclerview.widget.RecyclerView

+ 1 - 1
ComPDFKit_Tools/src/main/res/layout/tools_sign_certificate_attributes_list_head_item.xml

@@ -13,7 +13,7 @@
         android:layout_height="wrap_content"
         android:text="@string/tools_version"
         android:textStyle="bold"
-        android:textSize="18sp"
+        android:textSize="16sp"
         android:textColor="@color/tools_text_color_primary"
         app:layout_constraintStart_toStartOf="parent"
         android:layout_marginStart="16dp"

+ 37 - 24
ComPDFKit_Tools/src/main/res/values/tools_strings.xml

@@ -313,7 +313,7 @@
     <string name="tools_continue">Continue</string>
     <string name="tools_certificate_file">Certificate File</string>
     <string name="tools_enter_the_password_of_the_cert_file">Enter the password of the certificate file</string>
-    <string name="tools_customize_the_signature_appearance">Customize the Signature Appearance</string>
+    <string name="tools_customize_the_signature_appearance">Customize the Signature</string>
     <string name="tools_text_properties">Text Properties</string>
     <string name="tools_location">Location</string>
     <string name="tools_reason">Reason</string>
@@ -352,7 +352,10 @@
     <string name="tools_cert_auth_statement">Certification Authority Statement</string>
     <string name="tools_sign_is_valid_info">The signature is valid. The document has not been modified since this signature was applied.</string>
     <string name="tools_sign_is_in_valid_info">The signature is invalid. The document has been altered or corrupted since it was signed by the current user.</string>
-    <string name="tools_sign_cert_has_expired">The file was signed with a certificate that has expired. If you acquired this file recently, it may not be authentic.</string>
+    <string name="tools_sign_cert_has_expired_info">The file was signed with a certificate that has expired. If you acquired this file recently, it may not be authentic.</string>
+    <string name="tools_sign_the_sign_is_valid">The signature is valid.</string>
+    <string name="tools_sign_the_sign_is_in_valid">The signature is invalid.</string>
+    <string name="tools_sign_the_sign_has_expired_desc">The file was signed with a certificate that has expired.</string>
     <string name="tools_view_all_signatures">View All Signatures</string>
     <string name="tools_signature_list">Signature List</string>
     <string name="tools_view_cert">View Certificate</string>
@@ -362,14 +365,44 @@
     <string name="tools_permission_tips_title">Permissions Required</string>
     <string name="tools_permission_tips_msg">This app may not work correctly without the requested permissions. Open the app settings screen to modify app permissions</string>
 
-    <!--    V2.0.0 Digital signature pending confirmation-->
+    <string name="tools_certificate_viewer">Certificate Viewer</string>
+    <string name="tools_summary">Summary</string>
+    <string name="tools_issued_to">Issued to</string>
+    <string name="tools_issuer">Issuer</string>
+    <string name="tools_valid_from">Valid from:</string>
+    <string name="tools_valid_to">Valid to:</string>
+    <string name="tools_intended_usage">Intended Usage:</string>
+    <string name="tools_details">Details</string>
+    <string name="tools_version">Version</string>
+    <string name="tools_algorithm">Algorithm</string>
+    <string name="tools_subject">Subject</string>
+    <string name="tools_serial_number">Serial Number</string>
+    <string name="tools_certificate_policy">Certificate Policy</string>
+    <string name="tools_crl_distribution_point">CRL Distribution Points</string>
+    <string name="tools_issuer_info_access">Issuer Information Access</string>
+    <string name="tools_issuing_auth_key_identifier">Issuer‘s Key Identifier</string>
+    <string name="tools_subject_key_identifier">Subject‘s Key Identifier</string>
+    <string name="tools_basic_constraints">Basic Constraints:</string>
+    <string name="tools_key_usage">Key Usage</string>
+    <string name="tools_public_key">Public Key</string>
+    <string name="tools_x_509_data">X.509 data</string>
+    <string name="tools_sha1_digest">SHA1 Digest</string>
+    <string name="tools_md5_digest">MD5 Digest</string>
     <string name="tools_cert_details">Certificate Details</string>
+    <string name="tools_signed_by">Signed by:</string>
+    <string name="tools_date_">Date:</string>
+    <string name="tools_status">Status:</string>
+    <string name="tools_digital_signature_detail">Digital Signature Details</string>
+    <string name="tools_digital_create_error">Failures</string>
+
+    <!--    V2.0.0 Digital signature pending confirmation-->
     <string name="tools_authentication_successful">Authentication Successful</string>
     <string name="tools_authentication_failures">Authentication Failures</string>
     <string name="tools_authentication_wailures">Authentication Wrong</string>
+
     <string name="tools_valid_signature">Valid signature</string>
     <string name="tools_valid_in_signature">InValid signature</string>
-    <string name="tools_signed_by">Signed by</string>
+
     <string name="tools_view_digital_signature">View Digital Signature</string>
     <string name="tools_signature_message">Signature Message</string>
     <string name="tools_digital_sign_attr">Digital Signature Attributes</string>
@@ -380,25 +413,5 @@
     <string name="tools_digital_sign_success">Signature successful</string>
     <string name="tools_signature_time">Signature Time:</string>
 
-    <string name="tools_version">Version</string>
-    <string name="tools_signature_algorithm">signature algorithm</string>
-
-    <string name="tools_subject">Subject</string>
-    <string name="tools_issuer">Issuer</string>
-    <string name="tools_valid_start_date">Valid start date</string>
-    <string name="tools_valid_until_date">Valid until date</string>
-    <string name="tools_expected_usage">expected usage</string>
-    <string name="tools_certificate_policy">Certificate Policy</string>
-    <string name="tools_crl_distribution_point">CRL distribution point</string>
-    <string name="tools_auth_info_access">Authority Information Access</string>
-    <string name="tools_issuing_auth_key_identifier">Issuing Authority Key Identifier</string>
-    <string name="tools_subject_key_identifier">Subject Key Identifier</string>
-    <string name="tools_basic_limit">Basic limit</string>
-    <string name="tools_key_usage">Key usage</string>
-    <string name="tools_public_key">Public key</string>
-    <string name="tools_x_509_data">X.509 data</string>
-    <string name="tools_sha1_digest">SHA1 Digest</string>
-    <string name="tools_md5_digest">MD5 Digest</string>
-    <string name="tools_details">Details</string>
 
 </resources>