Skip to content

Commit

Permalink
Add Merge PDF option in View Files
Browse files Browse the repository at this point in the history
  • Loading branch information
sandraprog committed Oct 11, 2018
1 parent 0079424 commit 3cf9e0e
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.afollestad.materialdialogs.MaterialDialog;

import java.io.File;
import java.util.ArrayList;
import java.util.Objects;
Expand All @@ -42,25 +44,35 @@
import swati4star.createpdf.R;
import swati4star.createpdf.activity.MainActivity;
import swati4star.createpdf.adapter.ViewFilesAdapter;
import swati4star.createpdf.database.DatabaseHelper;
import swati4star.createpdf.interfaces.EmptyStateChangeListener;
import swati4star.createpdf.interfaces.ItemSelectedListener;
import swati4star.createpdf.interfaces.MergeFilesListener;
import swati4star.createpdf.util.DirectoryUtils;
import swati4star.createpdf.util.FileSortUtils;
import swati4star.createpdf.util.FileUtils;
import swati4star.createpdf.util.MergePdf;
import swati4star.createpdf.util.MoveFilesToDirectory;
import swati4star.createpdf.util.PopulateList;
import swati4star.createpdf.util.StringUtils;
import swati4star.createpdf.util.ViewFilesDividerItemDecoration;

import static swati4star.createpdf.util.Constants.BUNDLE_DATA;
import static swati4star.createpdf.util.Constants.SORTING_INDEX;
import static swati4star.createpdf.util.Constants.STORAGE_LOCATION;
import static swati4star.createpdf.util.Constants.appName;
import static swati4star.createpdf.util.DialogUtils.createAnimationDialog;
import static swati4star.createpdf.util.DialogUtils.createOverwriteDialog;
import static swati4star.createpdf.util.DialogUtils.showFilesInfoDialog;
import static swati4star.createpdf.util.FileSortUtils.NAME_INDEX;
import static swati4star.createpdf.util.StringUtils.getDefaultStorageLocation;
import static swati4star.createpdf.util.StringUtils.getSnackbarwithAction;
import static swati4star.createpdf.util.StringUtils.showSnackbar;

public class ViewFilesFragment extends Fragment
implements SwipeRefreshLayout.OnRefreshListener,
EmptyStateChangeListener,
ItemSelectedListener {
ItemSelectedListener, MergeFilesListener {

// Directory operations constants
public static final int NEW_DIR = 1;
Expand Down Expand Up @@ -93,6 +105,14 @@ public class ViewFilesFragment extends Fragment
private boolean mCheckBoxChanged = false;
private AlertDialog.Builder mAlertDialogBuilder;


private FileUtils mFileUtils;
private String mHomePath;
private boolean mPasswordProtected = false;
private String mPassword;
private int mCountFiles;
private MaterialDialog mMaterialDialog;

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

Expand All @@ -112,6 +132,9 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
mViewFilesListRecyclerView.addItemDecoration(new ViewFilesDividerItemDecoration(root.getContext()));
mSwipeView.setOnRefreshListener(this);

mHomePath = PreferenceManager.getDefaultSharedPreferences(mActivity)
.getString(STORAGE_LOCATION,
getDefaultStorageLocation());
int dialogId;
if (getArguments() != null) {
dialogId = getArguments().getInt(BUNDLE_DATA);
Expand Down Expand Up @@ -153,6 +176,8 @@ public boolean onQueryTextChange(String s) {
mSearchView.setIconifiedByDefault(true);
} else {
inflater.inflate(R.menu.activity_view_files_actions_if_selected, menu);
MenuItem item = menu.findItem(R.id.item_merge);
item.setVisible(mCountFiles > 1); // Show Merge icon when two or more files was selected
}
}

Expand Down Expand Up @@ -194,10 +219,64 @@ public boolean onOptionsItemSelected(final MenuItem item) {
showSnackbar(mActivity, R.string.snackbar_no_pdfs_selected);
}
break;
case R.id.item_merge:
if (mViewFilesAdapter.getItemCount() > 1) {
showSnackbar(mActivity, "merged");
mergeFiles();
}
break;
}
return true;
}

/**
* Merge the selected PDFs into a single PDF
* Show a dialog to allow user to enter file name
*/
void mergeFiles() {
String[] pdfpaths = mViewFilesAdapter.getSelectedFilePath().toArray(new String[0]);
new MaterialDialog.Builder(mActivity)
.title(R.string.creating_pdf)
.content(R.string.enter_file_name)
.input(getString(R.string.example), null, (dialog, input) -> {
if (StringUtils.isEmpty(input)) {
showSnackbar(mActivity, R.string.snackbar_name_not_blank);
} else {
if (!mFileUtils.isFileExist(input + getString(R.string.pdf_ext))) {
new MergePdf(input.toString(), mHomePath, mPasswordProtected,
mPassword, this).execute(pdfpaths);
} else {
MaterialDialog.Builder builder = createOverwriteDialog(mActivity);
builder.onPositive((dialog12, which) -> new MergePdf(input.toString(),
mHomePath, mPasswordProtected, mPassword,
this).execute(pdfpaths))
.onNegative((dialog1, which) -> mergeFiles()).show();
}
}
})
.show();
}

@Override
public void resetValues(boolean isPDFMerged, String path) {
mMaterialDialog.dismiss();
if (isPDFMerged) {
getSnackbarwithAction(mActivity, R.string.pdf_merged)
.setAction(R.string.snackbar_viewAction, v -> mFileUtils.openFile(path)).show();
new DatabaseHelper(mActivity).insertRecord(path,
mActivity.getString(R.string.created));
} else
showSnackbar(mActivity, R.string.pdf_merge_error);

mViewFilesAdapter.updateDataset();
}

@Override
public void mergeStarted() {
mMaterialDialog = createAnimationDialog(mActivity);
mMaterialDialog.show();
}

/**
* Moves files from one directory to another
*
Expand Down Expand Up @@ -471,6 +550,7 @@ public void onRequestPermissionsResult(int requestCode,
public void onAttach(Context context) {
super.onAttach(context);
mActivity = (Activity) context;
mFileUtils = new FileUtils(mActivity);
mDirectoryUtils = new DirectoryUtils(mActivity);
}

Expand All @@ -485,7 +565,7 @@ public void isSelected(Boolean isSelected, int countFiles) {
AppCompatActivity activity = ((AppCompatActivity)
Objects.requireNonNull(mActivity));
ActionBar toolbar = activity.getSupportActionBar();

mCountFiles = countFiles;
if (toolbar != null) {
if (countFiles == 0) {
toolbar.setTitle(appName);
Expand All @@ -501,6 +581,9 @@ public void isSelected(Boolean isSelected, int countFiles) {
mIsChecked = true;
activity.invalidateOptionsMenu();
}
if (countFiles == 1 || countFiles == 2)
//When one or two files are selected refresh ActionBar: set Merge option invisible or visible
activity.invalidateOptionsMenu();
}
}
}
Expand All @@ -513,4 +596,6 @@ public void onStop() {
ActionBar toolbar = activity.getSupportActionBar();
toolbar.setTitle(appName);
}


}
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_merge_type_white_24dp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M17,20.41L18.41,19 15,15.59 13.59,17 17,20.41zM7.5,8H11v5.59L5.59,19 7,20.41l6,-6V8h3.5L12,3.5 7.5,8z"/>
</vector>
19 changes: 13 additions & 6 deletions app/src/main/res/menu/activity_view_files_actions_if_selected.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,28 @@
<item
android:id="@+id/select_all"
android:icon="@drawable/ic_check_box_24dp"
android:orderInCategory="1"
android:orderInCategory="2"
android:title="@string/select_all"
app:showAsAction="ifRoom" />
app:showAsAction="always" />

<item
android:id="@+id/item_delete"
android:icon="@drawable/baseline_delete_24"
android:orderInCategory="2"
android:orderInCategory="3"
android:title="@string/delete"
app:showAsAction="ifRoom" />
app:showAsAction="always" />

<item
android:id="@+id/item_share"
android:icon="@drawable/baseline_share_24"
android:orderInCategory="3"
android:orderInCategory="4"
android:title="@string/share"
app:showAsAction="ifRoom" />
app:showAsAction="always" />

<item
android:id="@+id/item_merge"
android:icon="@drawable/ic_merge_type_white_24dp"
android:orderInCategory="1"
android:title="@string/merge_pdf"
app:showAsAction="always" />
</menu>

0 comments on commit 3cf9e0e

Please sign in to comment.