|
@@ -3,6 +3,7 @@ package com.compdfkit.tools.signature.pdfproperties.pdfsign;
|
|
|
|
|
|
import android.content.Context;
|
|
import android.content.Context;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.Bitmap;
|
|
|
|
+import android.graphics.BitmapFactory;
|
|
import android.text.TextUtils;
|
|
import android.text.TextUtils;
|
|
import android.util.AttributeSet;
|
|
import android.util.AttributeSet;
|
|
import android.view.Gravity;
|
|
import android.view.Gravity;
|
|
@@ -17,11 +18,16 @@ import androidx.constraintlayout.widget.ConstraintLayout;
|
|
import androidx.constraintlayout.widget.ConstraintSet;
|
|
import androidx.constraintlayout.widget.ConstraintSet;
|
|
import androidx.transition.TransitionManager;
|
|
import androidx.transition.TransitionManager;
|
|
|
|
|
|
|
|
+import com.compdfkit.core.document.CPDFSdk;
|
|
|
|
+import com.compdfkit.core.signature.CPDFDigitalSigConfig;
|
|
import com.compdfkit.tools.R;
|
|
import com.compdfkit.tools.R;
|
|
import com.compdfkit.tools.common.utils.date.CDateUtil;
|
|
import com.compdfkit.tools.common.utils.date.CDateUtil;
|
|
import com.compdfkit.tools.common.utils.glide.GlideApp;
|
|
import com.compdfkit.tools.common.utils.glide.GlideApp;
|
|
import com.compdfkit.tools.common.utils.image.CBitmapUtil;
|
|
import com.compdfkit.tools.common.utils.image.CBitmapUtil;
|
|
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
|
|
|
|
private AppCompatImageView ivSignImage;
|
|
private AppCompatImageView ivSignImage;
|
|
@@ -32,12 +38,22 @@ public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
|
|
|
|
private ConstraintLayout clPreview;
|
|
private ConstraintLayout clPreview;
|
|
|
|
|
|
- private CDigitalSignStyleData previewData;
|
|
|
|
|
|
+ private String location = "";
|
|
|
|
+
|
|
|
|
+ private String reason;
|
|
|
|
+
|
|
|
|
+ private String commonName;
|
|
|
|
|
|
- private ConstraintLayout clRoot;
|
|
|
|
|
|
+ private String distinguishableName;
|
|
|
|
+
|
|
|
|
+ private String date;
|
|
|
|
+
|
|
|
|
+ private CPDFDigitalSigConfig digitalSigConfig = new CPDFDigitalSigConfig();
|
|
|
|
|
|
private ConstraintSet constraintSet = new ConstraintSet();
|
|
private ConstraintSet constraintSet = new ConstraintSet();
|
|
|
|
|
|
|
|
+ private String signImagePath;
|
|
|
|
+
|
|
private boolean showName = false;
|
|
private boolean showName = false;
|
|
|
|
|
|
private boolean showDate = false;
|
|
private boolean showDate = false;
|
|
@@ -50,10 +66,12 @@ public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
|
|
|
|
private boolean showTab;
|
|
private boolean showTab;
|
|
|
|
|
|
- private boolean showPosition;
|
|
|
|
|
|
+ private boolean showLocation;
|
|
|
|
|
|
private boolean showReason;
|
|
private boolean showReason;
|
|
|
|
|
|
|
|
+ private boolean contentAlignLeft = false;
|
|
|
|
+
|
|
public CDigitalSignStylePreviewView(@NonNull Context context) {
|
|
public CDigitalSignStylePreviewView(@NonNull Context context) {
|
|
this(context, null);
|
|
this(context, null);
|
|
}
|
|
}
|
|
@@ -73,17 +91,22 @@ public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
tvSignInfo = findViewById(R.id.tv_sign_info);
|
|
tvSignInfo = findViewById(R.id.tv_sign_info);
|
|
ivLogo = findViewById(R.id.iv_logo);
|
|
ivLogo = findViewById(R.id.iv_logo);
|
|
clPreview = findViewById(R.id.cl_preview);
|
|
clPreview = findViewById(R.id.cl_preview);
|
|
- clRoot = findViewById(R.id.cl_root);
|
|
|
|
|
|
+ ConstraintLayout clRoot = findViewById(R.id.cl_root);
|
|
constraintSet.clone(clPreview);
|
|
constraintSet.clone(clPreview);
|
|
}
|
|
}
|
|
|
|
|
|
- public void setPreviewData(CDigitalSignStyleData data) {
|
|
|
|
- previewData = data;
|
|
|
|
|
|
+ public void setCommonName(String commonName) {
|
|
|
|
+ this.commonName = commonName;
|
|
|
|
+ update();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setDistinguishableName(String distinguishableName) {
|
|
|
|
+ this.distinguishableName = distinguishableName;
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
|
|
|
|
- private void setSignImage(String signImagePath) {
|
|
|
|
- previewData.setSignImagePath(signImagePath);
|
|
|
|
|
|
+ public void setSignImage(String signImagePath) {
|
|
|
|
+ this.signImagePath = signImagePath;
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -103,9 +126,7 @@ public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
}
|
|
}
|
|
|
|
|
|
public void setShowDate(boolean show) {
|
|
public void setShowDate(boolean show) {
|
|
- if (previewData != null) {
|
|
|
|
- previewData.setDate(show ? CDateUtil.getDataTime(CDateUtil.NORMAL_DATE_FORMAT_1) : "");
|
|
|
|
- }
|
|
|
|
|
|
+ this.date = show ? CDateUtil.getDataTime(CDateUtil.NORMAL_DATE_FORMAT_1) : "";
|
|
this.showDate = show;
|
|
this.showDate = show;
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
@@ -120,39 +141,64 @@ public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
|
|
|
|
- public void setShowPosition(boolean show){
|
|
|
|
- this.showPosition = show;
|
|
|
|
|
|
+ public void setShowLocation(boolean show) {
|
|
|
|
+ this.showLocation = show;
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
|
|
|
|
- public void setShowReason(boolean show){
|
|
|
|
|
|
+ public void setShowReason(boolean show) {
|
|
this.showReason = show;
|
|
this.showReason = show;
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
|
|
|
|
- public void setPosition(String position) {
|
|
|
|
- previewData.setLocation(position);
|
|
|
|
|
|
+ public void setLocation(String location) {
|
|
|
|
+ this.location = location;
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
|
|
|
|
public void setReason(String reason) {
|
|
public void setReason(String reason) {
|
|
- previewData.setReason(reason);
|
|
|
|
|
|
+ this.reason = reason;
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
|
|
|
|
- public CDigitalSignStyleData getPreviewData() {
|
|
|
|
- return previewData;
|
|
|
|
|
|
+ public CPDFDigitalSigConfig getConfig() {
|
|
|
|
+ digitalSigConfig.setDrawLogo(showLogo);
|
|
|
|
+ digitalSigConfig.setContentColor(0xFF000000);
|
|
|
|
+ digitalSigConfig.setTextColor(0xFF000000);
|
|
|
|
+ digitalSigConfig.setContentAlginLeft(contentAlignLeft);
|
|
|
|
+ digitalSigConfig.setContent(getContent());
|
|
|
|
+ digitalSigConfig.setDrawOnlyContent(TextUtils.isEmpty(signImagePath));
|
|
|
|
+ if (!TextUtils.isEmpty(signImagePath)) {
|
|
|
|
+ BitmapFactory.Options op = new BitmapFactory.Options();
|
|
|
|
+ op.inJustDecodeBounds = false;
|
|
|
|
+ op.inPreferredConfig = Bitmap.Config.ARGB_8888;
|
|
|
|
+ Bitmap bitmap = BitmapFactory.decodeFile(signImagePath, op);
|
|
|
|
+ digitalSigConfig.setImage(bitmap);
|
|
|
|
+ }
|
|
|
|
+ if (showLogo) {
|
|
|
|
+ digitalSigConfig.setLogo(BitmapFactory.decodeResource(getResources(), R.drawable.tools_logo));
|
|
|
|
+ }
|
|
|
|
+ return digitalSigConfig;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getLocation() {
|
|
|
|
+ return location;
|
|
}
|
|
}
|
|
|
|
|
|
- public void setAlignment(Alignment alignment){
|
|
|
|
- previewData.setAlignment(alignment);
|
|
|
|
|
|
+ public String getReason() {
|
|
|
|
+ return reason;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public void setContentAlignLeft(boolean contentAlignLeft) {
|
|
|
|
+ this.contentAlignLeft = contentAlignLeft;
|
|
update();
|
|
update();
|
|
- if (alignment == Alignment.left){
|
|
|
|
|
|
+ if (!contentAlignLeft) {
|
|
constraintSet.connect(R.id.iv_sign, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START);
|
|
constraintSet.connect(R.id.iv_sign, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START);
|
|
constraintSet.connect(R.id.iv_sign, ConstraintSet.END, R.id.tv_sign_info, ConstraintSet.START);
|
|
constraintSet.connect(R.id.iv_sign, ConstraintSet.END, R.id.tv_sign_info, ConstraintSet.START);
|
|
constraintSet.connect(R.id.tv_sign_info, ConstraintSet.START, R.id.iv_sign, ConstraintSet.END);
|
|
constraintSet.connect(R.id.tv_sign_info, ConstraintSet.START, R.id.iv_sign, ConstraintSet.END);
|
|
constraintSet.connect(R.id.tv_sign_info, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
|
constraintSet.connect(R.id.tv_sign_info, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
|
- }else {
|
|
|
|
|
|
+ } else {
|
|
constraintSet.connect(R.id.iv_sign, ConstraintSet.START, R.id.tv_sign_info, ConstraintSet.END);
|
|
constraintSet.connect(R.id.iv_sign, ConstraintSet.START, R.id.tv_sign_info, ConstraintSet.END);
|
|
constraintSet.connect(R.id.iv_sign, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
|
constraintSet.connect(R.id.iv_sign, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
|
constraintSet.connect(R.id.tv_sign_info, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START);
|
|
constraintSet.connect(R.id.tv_sign_info, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START);
|
|
@@ -163,65 +209,57 @@ public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
}
|
|
}
|
|
|
|
|
|
private void update() {
|
|
private void update() {
|
|
- if (previewData != null) {
|
|
|
|
- if (!TextUtils.isEmpty(previewData.getSignImagePath())) {
|
|
|
|
- GlideApp.with(getContext())
|
|
|
|
- .load(previewData.getSignImagePath())
|
|
|
|
- .into(ivSignImage);
|
|
|
|
- }
|
|
|
|
- ivSignImage.setVisibility(TextUtils.isEmpty(previewData.getSignImagePath()) ? GONE : VISIBLE);
|
|
|
|
- ivLogo.setVisibility(showLogo ? VISIBLE : GONE);
|
|
|
|
- StringBuilder builder = new StringBuilder();
|
|
|
|
- if (showName){
|
|
|
|
- appendData(builder, showTab, R.string.tools_field_name, previewData.getName());
|
|
|
|
- }
|
|
|
|
- if (!TextUtils.isEmpty(builder) && showDistinguishableName && !TextUtils.isEmpty(previewData.getDigtinguishableName())){
|
|
|
|
- builder.append("\n");
|
|
|
|
- }
|
|
|
|
- if (showDistinguishableName){
|
|
|
|
- appendData(builder, showTab, R.string.tools_distinguishable_name, previewData.getDigtinguishableName());
|
|
|
|
- }
|
|
|
|
- if (!TextUtils.isEmpty(builder) && showReason && !TextUtils.isEmpty(previewData.getReason())){
|
|
|
|
- builder.append("\n");
|
|
|
|
- }
|
|
|
|
- if (showReason){
|
|
|
|
- appendData(builder, showTab, R.string.tools_reason, previewData.getReason());
|
|
|
|
- }
|
|
|
|
- if (!TextUtils.isEmpty(builder) && showPosition && !TextUtils.isEmpty(previewData.getLocation())){
|
|
|
|
- builder.append("\n");
|
|
|
|
- }
|
|
|
|
- if (showPosition){
|
|
|
|
- appendData(builder, showTab, R.string.tools_location, previewData.getLocation());
|
|
|
|
- }
|
|
|
|
- if (!TextUtils.isEmpty(builder) && showDate && !TextUtils.isEmpty(previewData.getDate())){
|
|
|
|
- builder.append("\n");
|
|
|
|
- }
|
|
|
|
- if (showDate){
|
|
|
|
- appendData(builder, showTab, R.string.tools_date, previewData.getDate());
|
|
|
|
- }
|
|
|
|
- if (!TextUtils.isEmpty(builder) && showSDKVersion && !TextUtils.isEmpty(previewData.getSdkVersion())){
|
|
|
|
|
|
+ if (!TextUtils.isEmpty(signImagePath)) {
|
|
|
|
+ GlideApp.with(getContext())
|
|
|
|
+ .load(signImagePath)
|
|
|
|
+ .into(ivSignImage);
|
|
|
|
+ }
|
|
|
|
+ ivSignImage.setVisibility(TextUtils.isEmpty(signImagePath) ? GONE : VISIBLE);
|
|
|
|
+ ivLogo.setVisibility(showLogo ? VISIBLE : GONE);
|
|
|
|
+
|
|
|
|
+ tvSignInfo.setText(getContent());
|
|
|
|
+ if (!contentAlignLeft) {
|
|
|
|
+ tvSignInfo.setGravity(Gravity.CENTER_VERTICAL | Gravity.START);
|
|
|
|
+ } else {
|
|
|
|
+ tvSignInfo.setGravity(Gravity.CENTER_VERTICAL | Gravity.END);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private String getContent() {
|
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
|
+ if (showName) {
|
|
|
|
+ appendData(list, R.string.tools_field_name, commonName);
|
|
|
|
+ }
|
|
|
|
+ if (showDistinguishableName) {
|
|
|
|
+ appendData(list, R.string.tools_dn, distinguishableName);
|
|
|
|
+ }
|
|
|
|
+ if (showReason) {
|
|
|
|
+ appendData(list, R.string.tools_reason, reason);
|
|
|
|
+ }
|
|
|
|
+ if (showLocation) {
|
|
|
|
+ appendData(list, R.string.tools_location, location);
|
|
|
|
+ }
|
|
|
|
+ if (showDate) {
|
|
|
|
+ appendData(list, R.string.tools_date, date);
|
|
|
|
+ }
|
|
|
|
+ if (showSDKVersion) {
|
|
|
|
+ appendData(list, R.string.tools_compdfkit_versions, CPDFSdk.getSDKVersion());
|
|
|
|
+ }
|
|
|
|
+ StringBuilder builder = new StringBuilder();
|
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
|
+ builder.append(list.get(i));
|
|
|
|
+ if (i != list.size() - 1) {
|
|
builder.append("\n");
|
|
builder.append("\n");
|
|
}
|
|
}
|
|
- if (showSDKVersion) {
|
|
|
|
- appendData(builder, showTab, R.string.tools_compdfkit_versions, previewData.getSdkVersion());
|
|
|
|
- }
|
|
|
|
- tvSignInfo.setText(builder);
|
|
|
|
- if (previewData.getAlignment() == Alignment.left) {
|
|
|
|
- tvSignInfo.setGravity(Gravity.CENTER_VERTICAL | Gravity.START);
|
|
|
|
- }else {
|
|
|
|
- tvSignInfo.setGravity(Gravity.CENTER_VERTICAL | Gravity.END);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
+ return builder.toString();
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- private void appendData(StringBuilder builder, boolean showTab, @StringRes int tabStringResId, String value) {
|
|
|
|
- if (!TextUtils.isEmpty(value)) {
|
|
|
|
- if (showTab) {
|
|
|
|
- builder.append(getString(tabStringResId)).append(": ");
|
|
|
|
- }
|
|
|
|
- builder.append(value);
|
|
|
|
|
|
+ private void appendData(List<String> list, @StringRes int tabStringResId, String value) {
|
|
|
|
+ if (showTab) {
|
|
|
|
+ list.add(getString(tabStringResId) + ": " + value);
|
|
|
|
+ } else {
|
|
|
|
+ list.add(value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -229,11 +267,10 @@ public class CDigitalSignStylePreviewView extends FrameLayout {
|
|
return getContext().getString(stringResId);
|
|
return getContext().getString(stringResId);
|
|
}
|
|
}
|
|
|
|
|
|
- public Bitmap getBitmap(){
|
|
|
|
|
|
+ public Bitmap getBitmap() {
|
|
buildDrawingCache();
|
|
buildDrawingCache();
|
|
Bitmap bitmap = Bitmap.createBitmap(getDrawingCache());
|
|
Bitmap bitmap = Bitmap.createBitmap(getDrawingCache());
|
|
- Bitmap resultBitmap = CBitmapUtil.cropTransparent(bitmap);
|
|
|
|
- return resultBitmap;
|
|
|
|
|
|
+ return CBitmapUtil.cropTransparent(bitmap);
|
|
}
|
|
}
|
|
|
|
|
|
public enum Alignment {
|
|
public enum Alignment {
|