diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenter.java b/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenter.java
index acf2d6d..548a125 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenter.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenter.java
@@ -14,7 +14,8 @@ public interface MarkdownPresenter {
void loadFromUri(Context context, Uri fileUri);
void loadMarkdown(String fileName, InputStream in, OnTempFileLoadedListener listener);
- void newFile(String path);
+
+ void newFile(String newName);
void setEditView(MarkdownEditView editView);
void setPreviewView(MarkdownPreviewView previewView);
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenterImpl.java b/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenterImpl.java
index 20aa5cd..59d753b 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenterImpl.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenterImpl.java
@@ -9,7 +9,6 @@ import android.provider.OpenableColumns;
import com.commonsware.cwac.anddown.AndDown;
import com.wbrawner.simplemarkdown.model.MarkdownFile;
import com.wbrawner.simplemarkdown.utility.ErrorHandler;
-import com.wbrawner.simplemarkdown.utility.Utils;
import com.wbrawner.simplemarkdown.view.MarkdownEditView;
import com.wbrawner.simplemarkdown.view.MarkdownPreviewView;
@@ -197,7 +196,7 @@ public class MarkdownPresenterImpl implements MarkdownPresenter {
fileName = fileUri.getLastPathSegment();
}
if (fileName == null) {
- fileName = Utils.getDefaultFileName(context);
+ fileName = "Untitled.md";
}
loadMarkdown(fileName, in);
} catch (Exception e) {
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/utility/Constants.java b/app/src/main/java/com/wbrawner/simplemarkdown/utility/Constants.java
index 14b4b5b..446543b 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/utility/Constants.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/utility/Constants.java
@@ -2,24 +2,12 @@ package com.wbrawner.simplemarkdown.utility;
@SuppressWarnings("WeakerAccess")
public class Constants {
-
// Request codes
public static final int REQUEST_OPEN_FILE = 1;
public static final int REQUEST_SAVE_FILE = 2;
- public static final int REQUEST_DARK_MODE = 3;
-
- // Extras
- public static final String EXTRA_FILE = "EXTRA_FILE";
- public static final String EXTRA_FILE_PATH = "EXTRA_FILE_PATH";
- public static final String EXTRA_REQUEST_CODE = "EXTRA_REQUEST_CODE";
- public static final String EXTRA_EXPLORER = "EXTRA_EXPLORER";
+ public static final int REQUEST_NEW_FILE = 3;
+ public static final int REQUEST_DARK_MODE = 4;
// Settings keys
public static final String KEY_AUTOSAVE = "autosave";
- public static final String KEY_DOCS_PATH = "defaultRootDir";
-
- // Settings values
- public static final String VALUE_EDIT_VIEW = "0";
- public static final String VALUE_FILE_VIEW = "1";
-
}
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/utility/Utils.java b/app/src/main/java/com/wbrawner/simplemarkdown/utility/Utils.java
index 89315d5..e17d01b 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/utility/Utils.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/utility/Utils.java
@@ -4,7 +4,6 @@ import android.Manifest;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
-import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.preference.PreferenceManager;
@@ -12,66 +11,10 @@ import android.preference.PreferenceManager;
import androidx.core.content.ContextCompat;
import java.io.Closeable;
-import java.io.File;
import java.io.IOException;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
public class Utils {
- public static String getDocsPath(Context context) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- return prefs.getString(
- Constants.KEY_DOCS_PATH,
- Environment.getExternalStorageDirectory() + "/" +
- Environment.DIRECTORY_DOCUMENTS + "/"
- );
- }
-
- public static String getDefaultFileName(Context context) {
- File docsDir = new File(Utils.getDocsPath(context));
- Pattern defaultFilePattern = Pattern.compile("Untitled(-([0-9]+))*.md");
- File[] files = docsDir.listFiles();
- String defaultFileName = "Untitled.md";
- if (files != null && files.length > 0) {
- int count = 0;
- for (File file : files) {
- if (!file.isFile()) {
- continue;
- }
-
- Matcher fileMatcher = defaultFilePattern.matcher(file.getName());
- if (!fileMatcher.find()) {
- continue;
- }
-
- if (file.getName().equals("Untitled.md")) {
- if (count == 0) {
- count = 1;
- }
- continue;
- }
-
- String defaultFileCount = fileMatcher.group(2);
- int fileCount = Integer.parseInt(defaultFileCount);
- if (fileCount >= count) {
- count = fileCount + 1;
- }
- }
-
- if (count > 0) {
- defaultFileName = String.format(
- Locale.ENGLISH,
- "Untitled-%d.md",
- count
- );
- }
- }
-
- return defaultFileName;
- }
-
public static boolean isAutosaveEnabled(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
return prefs.getBoolean(
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MainActivity.kt b/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MainActivity.kt
index 9ad9fd6..1aa8597 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MainActivity.kt
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MainActivity.kt
@@ -13,13 +13,13 @@ import android.view.MenuItem
import android.view.View
import android.webkit.MimeTypeMap
import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.wbrawner.simplemarkdown.MarkdownApplication
import com.wbrawner.simplemarkdown.R
import com.wbrawner.simplemarkdown.presentation.MarkdownPresenter
-import com.wbrawner.simplemarkdown.utility.Constants
-import com.wbrawner.simplemarkdown.utility.Constants.REQUEST_DARK_MODE
+import com.wbrawner.simplemarkdown.utility.Constants.*
import com.wbrawner.simplemarkdown.utility.ErrorHandler
import com.wbrawner.simplemarkdown.utility.Utils
import com.wbrawner.simplemarkdown.view.adapter.EditPagerAdapter
@@ -56,7 +56,6 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
tabLayout!!.visibility = View.GONE
}
- newFileHandler = NewFileHandler()
}
override fun onUserLeaveHint() {
@@ -81,7 +80,7 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
- R.id.action_save -> requestFileOp(Constants.REQUEST_SAVE_FILE)
+ R.id.action_save -> requestFileOp(REQUEST_SAVE_FILE)
R.id.action_share -> {
val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.putExtra(Intent.EXTRA_TEXT, presenter.markdown)
@@ -91,8 +90,8 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
getString(R.string.share_file)
))
}
- R.id.action_load -> requestFileOp(Constants.REQUEST_OPEN_FILE)
-// R.id.action_new -> presenter.saveMarkdown(newFileHandler, null)
+ R.id.action_load -> requestFileOp(REQUEST_OPEN_FILE)
+ R.id.action_new -> promptSaveOrDiscardChanges()
R.id.action_lock_swipe -> {
item.isChecked = !item.isChecked
pager!!.setSwipeLocked(item.isChecked)
@@ -157,7 +156,7 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
grantResults: IntArray
) {
when (requestCode) {
- Constants.REQUEST_SAVE_FILE, Constants.REQUEST_OPEN_FILE -> {
+ REQUEST_SAVE_FILE, REQUEST_OPEN_FILE -> {
// If request is cancelled, the result arrays are empty.
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted, open file save dialog
@@ -180,7 +179,7 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
- Constants.REQUEST_OPEN_FILE -> {
+ REQUEST_OPEN_FILE -> {
if (resultCode != Activity.RESULT_OK || data?.data == null) {
return
}
@@ -197,7 +196,7 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
presenter.loadMarkdown(fileName, fileInput)
}
}
- Constants.REQUEST_SAVE_FILE -> {
+ REQUEST_SAVE_FILE -> {
if (resultCode != Activity.RESULT_OK
|| data?.data == null) {
return
@@ -211,7 +210,7 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
} ?: "Untitled.md"
presenter.saveMarkdown(
- null,
+ newFileHandler,
fileName,
contentResolver.openOutputStream(data.data!!)
)
@@ -221,6 +220,21 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
super.onActivityResult(requestCode, resultCode, data)
}
+ private fun promptSaveOrDiscardChanges() {
+ AlertDialog.Builder(this)
+ .setTitle(R.string.save_changes)
+ .setMessage(R.string.prompt_save_changes)
+ .setNegativeButton(R.string.action_discard) { d, _ ->
+ presenter.newFile("Untitled.md")
+ }
+ .setPositiveButton(R.string.action_save) { d, _ ->
+ newFileHandler = NewFileHandler()
+ requestFileOp(REQUEST_SAVE_FILE)
+ }
+ .create()
+ .show()
+ }
+
private fun requestFileOp(requestType: Int) {
if (!Utils.canAccessFiles(this@MainActivity)) {
if (Build.VERSION.SDK_INT < 23) return
@@ -233,13 +247,13 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
// If the user is going to save the file, we don't want to auto-save it for them
shouldAutoSave = false
val intent = when (requestType) {
- Constants.REQUEST_SAVE_FILE -> {
+ REQUEST_SAVE_FILE -> {
Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
type = "text/markdown"
putExtra(Intent.EXTRA_TITLE, presenter.fileName)
}
}
- Constants.REQUEST_OPEN_FILE -> {
+ REQUEST_OPEN_FILE -> {
Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
type = "*/*"
if (MimeTypeMap.getSingleton().hasMimeType("md")) {
@@ -258,6 +272,7 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
)
}
+
override fun onResume() {
super.onResume()
title = presenter.fileName
@@ -267,8 +282,7 @@ class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsRes
private inner class NewFileHandler : MarkdownPresenter.MarkdownSavedListener {
override fun saveComplete(success: Boolean) {
if (success) {
- val newFile = Utils.getDefaultFileName(this@MainActivity)
- presenter.newFile(newFile)
+ presenter.newFile("Untitled.md")
} else {
Toast.makeText(
this@MainActivity,
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/SplashActivity.java b/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/SplashActivity.java
index 3d8824c..ad07715 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/SplashActivity.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/SplashActivity.java
@@ -14,7 +14,6 @@ import com.wbrawner.simplemarkdown.MarkdownApplication;
import com.wbrawner.simplemarkdown.R;
import com.wbrawner.simplemarkdown.presentation.MarkdownPresenter;
import com.wbrawner.simplemarkdown.utility.ErrorHandler;
-import com.wbrawner.simplemarkdown.utility.Utils;
import javax.inject.Inject;
@@ -56,13 +55,11 @@ public class SplashActivity extends AppCompatActivity {
}
AppCompatDelegate.setDefaultNightMode(darkMode);
- String defaultName = Utils.getDefaultFileName(this);
-
Intent intent = getIntent();
if (intent != null && intent.getData() != null) {
presenter.loadFromUri(getApplicationContext(), intent.getData());
} else {
- presenter.setFileName(defaultName);
+ presenter.setFileName("Untitled.md");
}
Intent startIntent = new Intent(this, MainActivity.class);
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/EditFragment.kt b/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/EditFragment.kt
index a608e60..3cf90b5 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/EditFragment.kt
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/EditFragment.kt
@@ -17,7 +17,6 @@ import com.wbrawner.simplemarkdown.MarkdownApplication
import com.wbrawner.simplemarkdown.R
import com.wbrawner.simplemarkdown.presentation.MarkdownPresenter
import com.wbrawner.simplemarkdown.utility.MarkdownObserver
-import com.wbrawner.simplemarkdown.utility.Utils
import com.wbrawner.simplemarkdown.view.MarkdownEditView
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
@@ -101,10 +100,8 @@ class EditFragment : Fragment(), MarkdownEditView {
}
override fun onFileSaved(success: Boolean) {
- val location = Utils.getDocsPath(activity) + presenter.fileName
- val message: String
- message = if (success) {
- getString(R.string.file_saved, location)
+ val message: String = if (success) {
+ getString(R.string.file_saved, presenter.fileName)
} else {
getString(R.string.file_save_error)
}
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/PreviewFragment.kt b/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/PreviewFragment.kt
index d18d67b..e5bffe4 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/PreviewFragment.kt
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/PreviewFragment.kt
@@ -44,14 +44,7 @@ class PreviewFragment : Fragment(), MarkdownPreviewView {
}
override fun updatePreview(html: String) {
- if (markdownPreview == null) {
- return
- }
- markdownPreview!!.post {
- if (markdownPreview == null) {
- return@post
- }
-
+ markdownPreview?.post {
val isNightMode = AppCompatDelegate.getDefaultNightMode() ==
AppCompatDelegate.MODE_NIGHT_YES
|| context!!.resources.configuration.uiMode and UI_MODE_NIGHT_MASK == UI_MODE_NIGHT_YES
@@ -60,6 +53,7 @@ class PreviewFragment : Fragment(), MarkdownPreviewView {
} else {
R.string.pref_custom_css_default
}
+ @Suppress("ConstantConditionIf")
val css: String? = if (!BuildConfig.ENABLE_CUSTOM_CSS) {
getString(defaultCssId)
} else {
@@ -71,7 +65,7 @@ class PreviewFragment : Fragment(), MarkdownPreviewView {
val style = String.format(FORMAT_CSS, css)
- markdownPreview!!.loadDataWithBaseURL(null,
+ markdownPreview?.loadDataWithBaseURL(null,
style + html,
"text/html",
"UTF-8", null
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1b15902..2cdca66 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -16,7 +16,7 @@
Unable to share file - no capable apps installed
Share file to…
Unable to save file without permissions
- File saved to %1$s
+ Successfully saved %1$s
Load
Select a file to open
No file browser apps found
@@ -56,6 +56,9 @@
light
dark
auto
+ Save Changes
+ Would you like to save your changes?
+ Discard
- @string/pref_value_light
- @string/pref_value_dark