Skip to content

Commit

Permalink
Attachment improvements / bugfix v4 (PR #2148)
Browse files Browse the repository at this point in the history
  • Loading branch information
harshad1 authored Dec 3, 2023
1 parent a46c343 commit c41e4d0
Show file tree
Hide file tree
Showing 9 changed files with 117 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import net.gsantner.markor.model.AppSettings;
import net.gsantner.markor.model.Document;
import net.gsantner.markor.util.MarkorContextUtils;
import net.gsantner.opoc.format.GsTextUtils;
import net.gsantner.opoc.frontend.base.GsFragmentBase;
import net.gsantner.opoc.util.GsContextUtils;
import net.gsantner.opoc.util.GsFileUtils;
Expand Down Expand Up @@ -217,7 +218,7 @@ private void handleLaunchingIntent(final Intent intent) {
} else if (intentData != null) {
final String line = intentData.getQueryParameter("line");
if (line != null) {
startLine = TextViewUtils.tryParseInt(line, -1);
startLine = GsTextUtils.tryParseInt(line, -1);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,6 @@ private void setDate() {
};

new DateFragment()
.setActivity(getActivity())
.setListener(listener)
.setCalendar(initDate)
.show(((FragmentActivity) getActivity()).getSupportFragmentManager(), "date");
Expand Down Expand Up @@ -372,7 +371,6 @@ private void setDueDate(final int offset) {
};

new DateFragment()
.setActivity(getActivity())
.setListener(listener)
.setCalendar(initDate)
.setMessage(getContext().getString(R.string.due_date))
Expand All @@ -391,7 +389,6 @@ public static class DateFragment extends DialogFragment {
private DatePickerDialog.OnClickListener _extraListener;
private String _extraLabel;

private Activity _activity;
private int _year;
private int _month;
private int _day;
Expand All @@ -417,11 +414,6 @@ public DateFragment setExtraLabel(String label) {
return this;
}

public DateFragment setActivity(Activity activity) {
_activity = activity;
return this;
}

public DateFragment setYear(int year) {
_year = year;
return this;
Expand Down Expand Up @@ -451,10 +443,10 @@ public DateFragment setCalendar(Calendar calendar) {

@NonNull
@Override
public DatePickerDialog onCreateDialog(Bundle savedInstanceState) {
public DatePickerDialog onCreateDialog(final Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);

DatePickerDialog dialog = new DatePickerDialog(_activity, _listener, _year, _month, _day);
final DatePickerDialog dialog = new DatePickerDialog(getContext(), _listener, _year, _month, _day);

if (_message != null && !_message.isEmpty()) {
dialog.setMessage(_message);
Expand All @@ -466,5 +458,14 @@ public DatePickerDialog onCreateDialog(Bundle savedInstanceState) {

return dialog;
}

@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Do not auto-recreate
if (savedInstanceState != null) {
dismiss();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
package net.gsantner.markor.frontend;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.text.Editable;
Expand All @@ -22,7 +21,6 @@
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;

import net.gsantner.markor.ApplicationObject;
import net.gsantner.markor.R;
Expand All @@ -32,6 +30,7 @@
import net.gsantner.markor.frontend.textview.TextViewUtils;
import net.gsantner.markor.model.AppSettings;
import net.gsantner.markor.util.MarkorContextUtils;
import net.gsantner.opoc.format.GsTextUtils;
import net.gsantner.opoc.frontend.GsAudioRecordOmDialog;
import net.gsantner.opoc.frontend.filebrowser.GsFileBrowserOptions;
import net.gsantner.opoc.util.GsFileUtils;
Expand Down Expand Up @@ -231,7 +230,7 @@ private static void insertItem(

// Title, path to be written when the user hits accept
final GsCallback.a2<String, String> insertLink = (title, path) -> {
if (TextViewUtils.isNullOrEmpty(path)) {
if (GsTextUtils.isNullOrEmpty(path)) {
return;
}

Expand Down Expand Up @@ -259,46 +258,56 @@ private static void insertItem(
}
};

final GsCallback.a1<File> insertFileLink = (file) -> {
// Pull dialog elements
final EditText nameEdit, pathEdit;
if (dialog != null) {
nameEdit = dialog.findViewById(R.id.ui__select_path_dialog__name);
pathEdit = dialog.findViewById(R.id.ui__select_path_dialog__url);
} else {
nameEdit = pathEdit = null;
}

// Defensive checks to make sure file has not changed
// Can happen if the callback is triggered after a long delay
final long hash = GsFileUtils.crc32(text);

final GsCallback.a1<String> insertFileLink = (path) -> {
if (GsFileUtils.crc32(text) != hash) {
return;
}

// If path is not under notebook, copy it to the res folder
File file = new File(path);
if (!GsFileUtils.isChild(_appSettings.getNotebookDirectory(), file)) {
final File local = GsFileUtils.findNonConflictingDest(attachmentDir, file.getName());
attachmentDir.mkdirs();
GsFileUtils.copyFile(file, local);
file = local;
}
final String title = GsFileUtils.getFilenameWithoutExtension(file);
final String path = GsFileUtils.relativePath(currentFile, file);
insertLink.callback(title, path);
};

final MarkorContextUtils shu = new MarkorContextUtils(activity);
final BroadcastReceiver br = shu.receiveResultFromLocalBroadcast(
activity,
(intent, _br) -> insertFileLink.callback(new File(intent.getStringExtra(MarkorContextUtils.EXTRA_FILEPATH))),
true,
"" + MarkorContextUtils.REQUEST_CAMERA_PICTURE,
"" + MarkorContextUtils.REQUEST_PICK_PICTURE,
"" + MarkorContextUtils.REQUEST_RECORD_AUDIO
);
// Pull the appropriate title
String title = "";
if (nameEdit != null) {
title = nameEdit.getText().toString();
}

final EditText nameEdit, pathEdit;
if (dialog != null) {
nameEdit = dialog.findViewById(R.id.ui__select_path_dialog__name);
pathEdit = dialog.findViewById(R.id.ui__select_path_dialog__url);
dialog.setOnDismissListener(d -> LocalBroadcastManager.getInstance(activity).unregisterReceiver(br));
} else {
nameEdit = pathEdit = null;
}
if (GsTextUtils.isNullOrEmpty(title)) {
title = GsFileUtils.getFilenameWithoutExtension(file);
}

insertLink.callback(title, GsFileUtils.relativePath(currentFile, file));
};

final MarkorContextUtils cu = new MarkorContextUtils(activity);

// Do each thing as necessary
switch (action) {
case IMAGE_CAMERA: {
shu.requestCameraPicture(activity);
cu.requestCameraPicture(activity, insertFileLink);
break;
}
case IMAGE_GALLERY: {
shu.requestGalleryPicture(activity);
cu.requestGalleryPicture(activity, insertFileLink);
break;
}
case IMAGE_EDIT: {
Expand All @@ -307,19 +316,19 @@ private static void insertItem(

final File abs = new File(path).getAbsoluteFile();
if (abs.isFile()) {
shu.requestFileEdit(activity, abs);
cu.requestFileEdit(activity, abs);
break;
}

final File rel = new File(currentFile.getParentFile(), path).getAbsoluteFile();
if (rel.isFile()) {
shu.requestFileEdit(activity, rel);
cu.requestFileEdit(activity, rel);
}
}
break;
}
case AUDIO_RECORDING: {
if (!shu.requestAudioRecording(activity)) {
if (!cu.requestAudioRecording(activity, insertFileLink)) {
GsAudioRecordOmDialog.showAudioRecordDialog(activity, R.string.record_audio, insertFileLink);
}
break;
Expand All @@ -333,7 +342,7 @@ private static void insertItem(
public void onFsViewerSelected(final String request, final File file, final Integer lineNumber) {
pathEdit.setText(GsFileUtils.relativePath(currentFile, file));

if (TextViewUtils.isNullOrEmpty(nameEdit.getText())) {
if (GsTextUtils.isNullOrEmpty(nameEdit.getText())) {
nameEdit.setText(GsFileUtils.getFilenameWithoutExtension(file));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

import net.gsantner.markor.R;
import net.gsantner.markor.frontend.textview.TextViewUtils;
import net.gsantner.opoc.format.GsTextUtils;
import net.gsantner.opoc.model.GsSharedPreferencesPropertyBackend;

import org.json.JSONArray;
Expand Down Expand Up @@ -244,7 +245,7 @@ private Pattern makePattern() {
}

private String getReplacePattern() {
return TextViewUtils.unescapeString(replaceText.getText().toString());
return GsTextUtils.unescapeString(replaceText.getText().toString());
}

private void updateUI() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import android.text.Selection;
import android.text.Spanned;

import net.gsantner.opoc.format.GsTextUtils;

import java.util.EmptyStackException;
import java.util.Stack;
import java.util.regex.Matcher;
Expand Down Expand Up @@ -365,7 +367,7 @@ private static String getNextOrderedValue(final String currentValue, final boole
final Pattern capitalLetterPattern = Pattern.compile("[A-z]");

if (numberPattern.matcher(currentValue).find()) {
final int intValue = TextViewUtils.tryParseInt(currentValue, 0);
final int intValue = GsTextUtils.tryParseInt(currentValue, 0);
return restart ? "1" : Integer.toString(intValue + 1);
} else {
final char charValue = currentValue.charAt(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
import java.util.UUID;

@SuppressWarnings({"CharsetObjectCanBeUsed", "WeakerAccess", "unused"})
public final class TextViewUtils extends GsTextUtils {
public final class TextViewUtils {

// Suppress default constructor for noninstantiability
private TextViewUtils() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -942,6 +942,6 @@ File getAttachmentFolder(final File file) {
return getNotebookDirectory();
}
final String child = getString(R.string.pref_key__attachment_folder_name, "_res").trim();
return TextViewUtils.isNullOrEmpty(child) ? parent : new File(parent, child);
return GsTextUtils.isNullOrEmpty(child) ? parent : new File(parent, child);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
//
@SuppressWarnings({"ResultOfMethodCallIgnored", "unused"})
public class GsAudioRecordOmDialog {
public static void showAudioRecordDialog(final Activity activity, @StringRes final int titleResId, final GsCallback.a1<File> recordFinishedCallbackWithPathToTemporaryFile) {
public static void showAudioRecordDialog(final Activity activity, @StringRes final int titleResId, final GsCallback.a1<String> recordFinishedCallbackWithPathToTemporaryFile) {
////////////////////////////////////
// Request permission in case not granted. Do not show dialog UI in this case
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
Expand Down Expand Up @@ -181,7 +181,7 @@ public static void showAudioRecordDialog(final Activity activity, @StringRes fin
TMP_FILE_RECORDING.delete();
}
} else if (recordFinishedCallbackWithPathToTemporaryFile != null) {
recordFinishedCallbackWithPathToTemporaryFile.callback(TMP_FILE_RECORDING);
recordFinishedCallbackWithPathToTemporaryFile.callback(TMP_FILE_RECORDING.getAbsolutePath());
}
}
dialogInterface.dismiss();
Expand Down
Loading

0 comments on commit c41e4d0

Please sign in to comment.