Skip to content

Commit 8d10607

Browse files
committed
fixes #485 - add an option to maintain aspect ratio/stretch image (#488)
1 parent 3882de9 commit 8d10607

23 files changed

+198
-230
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ android {
1010
minSdkVersion 21
1111
multiDexEnabled true
1212
targetSdkVersion 27
13-
versionCode 63
14-
versionName "8.3.6"
13+
versionCode 65
14+
versionName "8.3.8"
1515
}
1616
buildTypes {
1717
release {

app/src/main/java/swati4star/createpdf/activity/MainActivity.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package swati4star.createpdf.activity;
22

3+
import android.Manifest;
34
import android.content.Intent;
45
import android.content.SharedPreferences;
6+
import android.content.pm.PackageManager;
57
import android.net.Uri;
8+
import android.os.Build;
69
import android.os.Bundle;
710
import android.preference.PreferenceManager;
811
import android.support.annotation.NonNull;
912
import android.support.design.widget.NavigationView;
1013
import android.support.v4.app.Fragment;
1114
import android.support.v4.app.FragmentManager;
15+
import android.support.v4.content.ContextCompat;
1216
import android.support.v4.view.GravityCompat;
1317
import android.support.v4.widget.DrawerLayout;
1418
import android.support.v7.app.ActionBarDrawerToggle;
@@ -84,13 +88,13 @@ protected void onCreate(Bundle savedInstanceState) {
8488
// Check if images are received
8589
handleReceivedImagesIntent(fragment);
8690

87-
88-
8991
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
9092
int count = mSharedPreferences.getInt(LAUNCH_COUNT, 0);
9193
if (count > 0 && count % 15 == 0)
9294
mFeedbackUtils.rateUs();
9395
mSharedPreferences.edit().putInt(LAUNCH_COUNT, count + 1).apply();
96+
97+
getRuntimePermissions();
9498
}
9599

96100
/**
@@ -324,4 +328,23 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
324328
public void setNavigationViewSelection(int index) {
325329
mNavigationView.getMenu().getItem(index).setChecked(true);
326330
}
331+
332+
private boolean getRuntimePermissions() {
333+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
334+
if ((ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
335+
!= PackageManager.PERMISSION_GRANTED) ||
336+
(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
337+
!= PackageManager.PERMISSION_GRANTED) ||
338+
(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
339+
!= PackageManager.PERMISSION_GRANTED)) {
340+
requestPermissions(new String[]{
341+
Manifest.permission.WRITE_EXTERNAL_STORAGE,
342+
Manifest.permission.READ_EXTERNAL_STORAGE,
343+
Manifest.permission.CAMERA},
344+
0);
345+
return false;
346+
}
347+
}
348+
return true;
349+
}
327350
}

app/src/main/java/swati4star/createpdf/fragment/ImageToPdfFragment.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,11 @@
7070
import static swati4star.createpdf.util.Constants.DEFAULT_BORDER_WIDTH;
7171
import static swati4star.createpdf.util.Constants.DEFAULT_COMPRESSION;
7272
import static swati4star.createpdf.util.Constants.DEFAULT_IMAGE_BORDER_TEXT;
73+
import static swati4star.createpdf.util.Constants.DEFAULT_IMAGE_SCALETYPE_TEXT;
7374
import static swati4star.createpdf.util.Constants.DEFAULT_PAGE_SIZE;
7475
import static swati4star.createpdf.util.Constants.DEFAULT_PAGE_SIZE_TEXT;
7576
import static swati4star.createpdf.util.Constants.DEFAULT_QUALITY_VALUE;
77+
import static swati4star.createpdf.util.Constants.IMAGE_SCALE_TYPE_ASPECT_RATIO;
7678
import static swati4star.createpdf.util.Constants.OPEN_SELECT_IMAGES;
7779
import static swati4star.createpdf.util.Constants.RESULT;
7880
import static swati4star.createpdf.util.Constants.STORAGE_LOCATION;
@@ -81,6 +83,8 @@
8183
import static swati4star.createpdf.util.DialogUtils.createCustomDialogWithoutContent;
8284
import static swati4star.createpdf.util.DialogUtils.createOverwriteDialog;
8385
import static swati4star.createpdf.util.ImageEnhancementOptionsUtils.getEnhancementOptions;
86+
import static swati4star.createpdf.util.ImageUtils.mImageScaleType;
87+
import static swati4star.createpdf.util.ImageUtils.showImageScaleTypeDialog;
8488
import static swati4star.createpdf.util.StringUtils.getDefaultStorageLocation;
8589
import static swati4star.createpdf.util.StringUtils.getSnackbarwithAction;
8690
import static swati4star.createpdf.util.StringUtils.showSnackbar;
@@ -218,6 +222,7 @@ void startAddingImages() {
218222
void createPdf() {
219223
mPdfOptions.setImagesUri(mImagesUri);
220224
mPdfOptions.setPageSize(PageSizeUtils.mPageSize);
225+
mPdfOptions.setImageScaleType(mImageScaleType);
221226
MaterialDialog.Builder builder = createCustomDialog(mActivity,
222227
R.string.creating_pdf, R.string.enter_file_name);
223228
builder.input(getString(R.string.example), null, (dialog, input) -> {
@@ -367,24 +372,27 @@ public void onItemClick(int position) {
367372
INTENT_REQUEST_APPLY_FILTER);
368373
break;
369374
case 4:
370-
mPageSizeUtils.showPageSizeDialog(R.layout.set_page_size_dialog, false);
375+
mPageSizeUtils.showPageSizeDialog(false);
371376
break;
372377
case 5:
378+
showImageScaleTypeDialog(mActivity, false);
379+
break;
380+
case 6:
373381
startActivityForResult(PreviewActivity.getStartIntent(mActivity, mImagesUri),
374382
INTENT_REQUEST_PREVIEW_IMAGE);
375383
break;
376-
case 6:
384+
case 7:
377385
addBorder();
378386
break;
379-
case 7:
387+
case 8:
380388
startActivityForResult(RearrangeImages.getStartIntent(mActivity, mImagesUri),
381389
INTENT_REQUEST_REARRANGE_IMAGE);
382390
break;
383-
case 8:
391+
case 9:
384392
saveCurrentImage();
385393
createPdf();
386394
break;
387-
case 9:
395+
case 10:
388396
addMargins();
389397
break;
390398
}
@@ -602,6 +610,9 @@ private void resetValues() {
602610
mImageCounter = 0;
603611
showEnhancementOptions();
604612
mNoOfImages.setVisibility(View.GONE);
613+
mImageScaleType = mSharedPreferences.getString(DEFAULT_IMAGE_SCALETYPE_TEXT,
614+
IMAGE_SCALE_TYPE_ASPECT_RATIO);
615+
mPdfOptions.setMargins(0, 0, 0, 0);
605616
}
606617

607618
/**
@@ -667,15 +678,6 @@ void addMargins() {
667678
mMarginLeft = Integer.parseInt(left.getText().toString());
668679
mPdfOptions.setMargins(mMarginTop, mMarginBottom, mMarginRight, mMarginLeft);
669680
})).build();
670-
View view = materialDialog.getCustomView();
671-
EditText top = view.findViewById(R.id.topMarginEditText);
672-
EditText bottom = view.findViewById(R.id.bottomMarginEditText);
673-
EditText right = view.findViewById(R.id.rightMarginEditText);
674-
EditText left = view.findViewById(R.id.leftMarginEditText);
675-
top.setText(Integer.toString(mMarginTop));
676-
bottom.setText(Integer.toString(mMarginBottom));
677-
right.setText(Integer.toString(mMarginRight));
678-
left.setText(Integer.toString(mMarginLeft));
679681
materialDialog.show();
680682
}
681683
}

app/src/main/java/swati4star/createpdf/fragment/SettingsFragment.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import static swati4star.createpdf.util.Constants.DEFAULT_COMPRESSION;
3939
import static swati4star.createpdf.util.Constants.STORAGE_LOCATION;
4040
import static swati4star.createpdf.util.DialogUtils.createCustomDialogWithoutContent;
41+
import static swati4star.createpdf.util.ImageUtils.showImageScaleTypeDialog;
4142
import static swati4star.createpdf.util.SettingsOptions.ImageEnhancementOptionsUtils.getEnhancementOptions;
4243
import static swati4star.createpdf.util.StringUtils.getDefaultStorageLocation;
4344
import static swati4star.createpdf.util.StringUtils.showSnackbar;
@@ -95,8 +96,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
9596
showSnackbar(mActivity, R.string.storage_location_modified);
9697
storageLocation.setText(mSharedPreferences.getString(STORAGE_LOCATION,
9798
getDefaultStorageLocation()));
98-
} else {
99-
showSnackbar(mActivity, R.string.error_occurred);
10099
}
101100
break;
102101
}
@@ -130,6 +129,9 @@ public void onItemClick(int position) {
130129
case 4:
131130
setTheme();
132131
break;
132+
case 5:
133+
showImageScaleTypeDialog(mActivity, true);
134+
break;
133135
}
134136
}
135137

@@ -138,8 +140,8 @@ public void onItemClick(int position) {
138140
*/
139141
private void changeCompressImage() {
140142

141-
createCustomDialogWithoutContent(mActivity, R.string.compression_image_edit)
142-
.customView(R.layout.compress_image_default, true)
143+
MaterialDialog dialog = createCustomDialogWithoutContent(mActivity, R.string.compression_image_edit)
144+
.customView(R.layout.compress_image_dialog, true)
143145
.onPositive((dialog1, which) -> {
144146
final EditText qualityInput = dialog1.getCustomView().findViewById(R.id.quality);
145147
int check;
@@ -156,7 +158,10 @@ private void changeCompressImage() {
156158
} catch (NumberFormatException e) {
157159
showSnackbar(mActivity, R.string.invalid_entry);
158160
}
159-
}).show();
161+
}).build();
162+
View customView = dialog.getCustomView();
163+
customView.findViewById(R.id.cbSetDefault).setVisibility(View.GONE);
164+
dialog.show();
160165
}
161166

162167

@@ -166,9 +171,9 @@ private void changeCompressImage() {
166171
private void editFontSize() {
167172
MaterialDialog.Builder builder = createCustomDialogWithoutContent(mActivity,
168173
R.string.font_size_edit);
169-
builder.customView(R.layout.dialog_font_size_default, true)
170-
.onPositive((dialog, which) -> {
171-
final EditText fontInput = dialog.getCustomView().findViewById(R.id.fontInput);
174+
MaterialDialog dialog = builder.customView(R.layout.dialog_font_size, true)
175+
.onPositive((dialog1, which) -> {
176+
final EditText fontInput = dialog1.getCustomView().findViewById(R.id.fontInput);
172177
try {
173178
int check = Integer.parseInt(String.valueOf(fontInput.getText()));
174179
if (check > 1000 || check < 0) {
@@ -185,7 +190,10 @@ private void editFontSize() {
185190
showSnackbar(mActivity, R.string.invalid_entry);
186191
}
187192
})
188-
.show();
193+
.build();
194+
View customView = dialog.getCustomView();
195+
customView.findViewById(R.id.cbSetFontDefault).setVisibility(View.GONE);
196+
dialog.show();
189197
}
190198

191199
/**
@@ -197,7 +205,7 @@ private void changeFontFamily() {
197205
int ordinal = Font.FontFamily.valueOf(fontFamily).ordinal();
198206
MaterialDialog.Builder builder = createCustomDialogWithoutContent(mActivity,
199207
R.string.font_family_edit);
200-
MaterialDialog materialDialog = builder.customView(R.layout.dialog_font_family_default, true)
208+
MaterialDialog materialDialog = builder.customView(R.layout.dialog_font_family, true)
201209
.onPositive((dialog, which) -> {
202210
View view = dialog.getCustomView();
203211
RadioGroup radioGroup = view.findViewById(R.id.radio_group_font_family);
@@ -210,9 +218,11 @@ private void changeFontFamily() {
210218
showSettingsOptions();
211219
})
212220
.build();
213-
RadioGroup radioGroup = materialDialog.getCustomView().findViewById(R.id.radio_group_font_family);
221+
View customView = materialDialog.getCustomView();
222+
RadioGroup radioGroup = customView.findViewById(R.id.radio_group_font_family);
214223
RadioButton rb = (RadioButton) radioGroup.getChildAt(ordinal);
215224
rb.setChecked(true);
225+
customView.findViewById(R.id.cbSetDefault).setVisibility(View.GONE);
216226
materialDialog.show();
217227
}
218228

@@ -221,7 +231,7 @@ private void changeFontFamily() {
221231
*/
222232
public void setPageSize() {
223233
PageSizeUtils utils = new PageSizeUtils(mActivity);
224-
MaterialDialog materialDialog = utils.showPageSizeDialog(R.layout.set_page_size_dialog_default, true);
234+
MaterialDialog materialDialog = utils.showPageSizeDialog(true);
225235
materialDialog.setOnDismissListener(dialog -> showSettingsOptions());
226236
}
227237

app/src/main/java/swati4star/createpdf/fragment/SplitFilesFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public void onPopulate(ArrayList<String> paths) {
170170
// Init recycler view
171171
mRecyclerViewFiles.setVisibility(View.VISIBLE);
172172
MergeFilesAdapter mergeFilesAdapter = new MergeFilesAdapter(mActivity,
173-
paths, this::onFileItemClick);
173+
paths, this);
174174
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(mActivity);
175175
mRecyclerViewFiles.setLayoutManager(mLayoutManager);
176176
mRecyclerViewFiles.setAdapter(mergeFilesAdapter);

app/src/main/java/swati4star/createpdf/fragment/TextToPdfFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public void afterTextChanged(Editable input) {
184184

185185
private void setPageSize() {
186186
PageSizeUtils utils = new PageSizeUtils(mActivity);
187-
utils.showPageSizeDialog(R.layout.set_page_size_dialog, false);
187+
utils.showPageSizeDialog(false);
188188
}
189189

190190
/**

app/src/main/java/swati4star/createpdf/model/ImageToPDFOptions.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class ImageToPDFOptions extends PDFOptions {
1010
private int mMarginBottom = 0;
1111
private int mMarginRight = 0;
1212
private int mMarginLeft = 0;
13+
private String mImageScaleType;
1314

1415
public ImageToPDFOptions() {
1516
super();
@@ -63,4 +64,12 @@ public int getMarginRight() {
6364
public int getMarginLeft() {
6465
return mMarginLeft;
6566
}
67+
68+
public String getImageScaleType() {
69+
return mImageScaleType;
70+
}
71+
72+
public void setImageScaleType(String mImageScaleType) {
73+
this.mImageScaleType = mImageScaleType;
74+
}
6675
}

app/src/main/java/swati4star/createpdf/util/Constants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ public class Constants {
2222
public static final int DEFAULT_QUALITY_VALUE = 30;
2323
public static final int DEFAULT_BORDER_WIDTH = 0;
2424
public static final String STORAGE_LOCATION = "storage_location";
25+
public static final String DEFAULT_IMAGE_SCALETYPE_TEXT = "image_scale_type";
26+
public static final String IMAGE_SCALE_TYPE_STRETCH = "stretch_image";
27+
public static final String IMAGE_SCALE_TYPE_ASPECT_RATIO = "maintain_aspect_ratio";
2528

2629
public static final String BUNDLE_DATA = "bundle_data";
2730
public static final String REORDER_PAGES = "reorder_pages";

app/src/main/java/swati4star/createpdf/util/CreatePdf.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import swati4star.createpdf.interfaces.OnPDFCreatedInterface;
1919
import swati4star.createpdf.model.ImageToPDFOptions;
2020

21+
import static swati4star.createpdf.util.Constants.IMAGE_SCALE_TYPE_ASPECT_RATIO;
2122
import static swati4star.createpdf.util.Constants.appName;
2223
import static swati4star.createpdf.util.Constants.pdfExtension;
2324

@@ -41,6 +42,7 @@ public class CreatePdf extends AsyncTask<String, String, String> {
4142
private int mMarginBottom;
4243
private int mMarginRight;
4344
private int mMarginLeft;
45+
private String mImagescaleType;
4446

4547
public CreatePdf(ImageToPDFOptions mImageToPDFOptions, String parentPath,
4648
OnPDFCreatedInterface onPDFCreated) {
@@ -57,6 +59,7 @@ public CreatePdf(ImageToPDFOptions mImageToPDFOptions, String parentPath,
5759
this.mMarginBottom = mImageToPDFOptions.getMarginBottom();
5860
this.mMarginRight = mImageToPDFOptions.getMarginRight();
5961
this.mMarginLeft = mImageToPDFOptions.getMarginLeft();
62+
this.mImagescaleType = mImageToPDFOptions.getImageScaleType();
6063
mPath = parentPath;
6164
}
6265

@@ -126,21 +129,20 @@ protected String doInBackground(String... params) {
126129
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
127130
Bitmap bitmap = BitmapFactory.decodeFile(mImagesUri.get(i), bmOptions);
128131

129-
Rectangle imageSize = ImageUtils.calculateFitSize(bitmap.getWidth() + mBorderWidth,
130-
bitmap.getHeight() + mBorderWidth, documentRect);
131-
image.scaleAbsolute(imageSize);
132-
133132
Log.v("Stage 6", "Image path adding");
134133

135134
float pageWidth = document.getPageSize().getWidth() - (mMarginLeft + mMarginRight);
136135
float pageHeight = document.getPageSize().getHeight() - (mMarginBottom + mMarginTop);
137-
image.scaleToFit(pageWidth, pageHeight);
136+
if (mImagescaleType.equals(IMAGE_SCALE_TYPE_ASPECT_RATIO))
137+
image.scaleToFit(pageWidth, pageHeight);
138+
else
139+
image.scaleAbsolute(pageWidth, pageHeight);
138140

139141
image.setAbsolutePosition(
140142
(documentRect.getWidth() - image.getScaledWidth()) / 2,
141143
(documentRect.getHeight() - image.getScaledHeight()) / 2);
142-
Log.v("Stage 7", "Image Alignments");
143144

145+
Log.v("Stage 7", "Image Alignments");
144146
document.add(image);
145147

146148
document.newPage();

app/src/main/java/swati4star/createpdf/util/ImageEnhancementOptionsUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ public static ArrayList<EnhancementOptionsEntity> getEnhancementOptions(Context
4040
context.getResources().getDrawable(R.drawable.ic_page_size_24dp),
4141
context.getResources().getString(R.string.set_page_size_text)));
4242

43+
options.add(new EnhancementOptionsEntity(
44+
context.getResources().getDrawable(R.drawable.ic_aspect_ratio_black_24dp),
45+
context.getResources().getString(R.string.image_scale_type)));
46+
4347
options.add(new EnhancementOptionsEntity(
4448
context.getResources().getDrawable(R.drawable.ic_play_circle_outline_black_24dp),
4549
context.getResources().getString(R.string.preview_image_to_pdf)));

0 commit comments

Comments
 (0)