diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/MarkdownApplication.java b/app/src/main/java/com/wbrawner/simplemarkdown/MarkdownApplication.java
index 64ec829..0f80dd5 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/MarkdownApplication.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/MarkdownApplication.java
@@ -4,10 +4,6 @@ import android.app.Application;
import com.crashlytics.android.Crashlytics;
import io.fabric.sdk.android.Fabric;
-/**
- * Created by billy on 8/22/17.
- */
-
public class MarkdownApplication extends Application {
private AppComponent component;
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/Utils.java b/app/src/main/java/com/wbrawner/simplemarkdown/Utils.java
index 5db9e67..c464501 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/Utils.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/Utils.java
@@ -7,8 +7,10 @@ import android.preference.PreferenceManager;
import com.wbrawner.simplemarkdown.view.activity.SettingsActivity;
+import java.io.Closeable;
import java.io.File;
import java.io.FilenameFilter;
+import java.io.IOException;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -75,4 +77,13 @@ public class Utils {
);
}
+ public static void closeQuietly(Closeable closeable) {
+ if (closeable != null) {
+ try {
+ closeable.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/model/MarkdownFile.java b/app/src/main/java/com/wbrawner/simplemarkdown/model/MarkdownFile.java
index 8c17d4a..1d42e61 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/model/MarkdownFile.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/model/MarkdownFile.java
@@ -1,39 +1,23 @@
package com.wbrawner.simplemarkdown.model;
-import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
-import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
-import java.util.Locale;
import java.util.Scanner;
-import static android.content.ContentValues.TAG;
-
/**
* This class serves as a wrapper to manage the manage the file input and output operations, as well
* as to keep track of the data itself in memory.
*/
public class MarkdownFile {
- public static final int SUCCESS = 0;
- public static final int FILE_EXISTS = 1;
- public static final int FILE_NOT_EXISTS = 2;
- public static final int READ_ERROR = 3;
- public static final int WRITE_ERROR = 4;
- public static final int PARAMETERS_MISSING = 5;
-
- public static void setDefaultRootDir(String defaultRootDir) {
- MarkdownFile.defaultRootDir = defaultRootDir;
- }
-
private static String defaultRootDir = "";
private String name;
private String path;
private String content;
-
public MarkdownFile(String name, String path, String content) {
this.name = name;
if (path == null || path.isEmpty()) {
@@ -44,8 +28,7 @@ public class MarkdownFile {
}
public MarkdownFile(String path) {
- int code = load(path);
- if (code != SUCCESS) {
+ if (load(path)) {
this.name = path.substring(
path.lastIndexOf("/") + 1
);
@@ -63,6 +46,10 @@ public class MarkdownFile {
this.content = "";
}
+ public static void setDefaultRootDir(String defaultRootDir) {
+ MarkdownFile.defaultRootDir = defaultRootDir;
+ }
+
public String getName() {
return name;
}
@@ -75,6 +62,10 @@ public class MarkdownFile {
return path;
}
+ public void setPath(String path) {
+ this.path = path;
+ }
+
public String getFullPath() {
String fullPath;
@@ -95,10 +86,6 @@ public class MarkdownFile {
return fullPath + this.name;
}
- public void setPath(String path) {
- this.path = path;
- }
-
public String getContent() {
return content;
}
@@ -107,61 +94,46 @@ public class MarkdownFile {
this.content = content;
}
- public int load(InputStream in) {
+ public boolean load(InputStream in) {
StringBuilder sb = new StringBuilder();
Scanner s = new java.util.Scanner(in).useDelimiter("\\n");
+ if (s == null) {
+ return false;
+ }
while (s.hasNext()) {
- sb.append(s.next() + "\n");
+ sb.append(s.next()).append("\n");
}
this.content = sb.toString();
- return SUCCESS;
+ try {
+ in.close();
+ } catch (Exception ignored) {
+ }
+ return true;
}
- public int load(String path) {
+ private boolean load(String path) {
return load(new File(path));
}
- public int load(File markdownFile) {
- int code;
- if (markdownFile.exists() && markdownFile.canRead()) {
- BufferedReader reader = null;
- try {
- this.name = markdownFile.getName();
- this.path = markdownFile.getParentFile().getAbsolutePath();
-
- StringBuilder sb = new StringBuilder();
- String line;
- reader = new BufferedReader(new FileReader(markdownFile));
- while ((line = reader.readLine()) != null)
- sb.append(line + "\n");
- this.content = sb.toString();
- code = SUCCESS;
- } catch (FileNotFoundException e) {
- code = FILE_NOT_EXISTS;
- } catch (IOException e) {
- code = READ_ERROR;
- }
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException e) {
- // closing the reader failed
- }
- }
- } else {
- code = READ_ERROR;
+ private boolean load(File markdownFile) {
+ if (!markdownFile.exists() || !markdownFile.canRead()) {
+ return false;
+ }
+
+ try {
+ this.name = markdownFile.getName();
+ this.path = markdownFile.getParentFile().getAbsolutePath();
+ return load(new FileInputStream(markdownFile));
+ } catch (FileNotFoundException e) {
+ return false;
}
- return code;
}
- public int load() {
- if (this.name.isEmpty())
- return PARAMETERS_MISSING;
- return load(getFullPath());
+ public boolean load() {
+ return !this.name.isEmpty() && load(getFullPath());
}
- public int save(String path) {
- int code;
+ public boolean save(String path) {
if (path == null) {
path = this.getFullPath();
}
@@ -169,23 +141,28 @@ public class MarkdownFile {
File markdownFile = new File(path);
if (!markdownFile.exists()) {
try {
- markdownFile.createNewFile();
+ if (!markdownFile.createNewFile()) {
+ return false;
+ }
} catch (IOException e) {
e.printStackTrace();
- return WRITE_ERROR;
+ return false;
}
}
- if (markdownFile.canWrite()) {
- OutputStreamWriter writer = null;
- try {
- writer = new OutputStreamWriter(
- new FileOutputStream(markdownFile)
- );
- writer.write(this.content);
- code = SUCCESS;
- } catch (IOException e) {
- code = WRITE_ERROR;
- }
+
+ if (!markdownFile.canWrite()) {
+ return false;
+ }
+
+ OutputStreamWriter writer = null;
+ try {
+ writer = new OutputStreamWriter(
+ new FileOutputStream(markdownFile)
+ );
+ writer.write(this.content);
+ } catch (IOException e) {
+ return false;
+ } finally {
if (writer != null) {
try {
writer.close();
@@ -193,11 +170,10 @@ public class MarkdownFile {
// closing the reader failed
}
}
- } else {
- code = WRITE_ERROR;
}
+
this.name = markdownFile.getName();
this.path = markdownFile.getParentFile().getAbsolutePath();
- return code;
+ return true;
}
}
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 42ece35..a27e671 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenter.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenter.java
@@ -16,7 +16,8 @@ public interface MarkdownPresenter {
void loadMarkdown(InputStream in);
void loadMarkdown(File file);
void loadFromUri(Context context, Uri fileUri);
- void loadTempMarkdown(InputStream in, OnTempFileLoadedListener listener);
+
+ void loadMarkdown(InputStream in, OnTempFileLoadedListener listener);
void newFile(String path);
void setEditView(MarkdownEditView editView);
void setPreviewView(MarkdownPreviewView previewView);
@@ -31,12 +32,13 @@ public interface MarkdownPresenter {
String getMarkdown();
void setMarkdown(String markdown);
- abstract class OnTempFileLoadedListener {
- public abstract void onSuccess(String markdown);
- public abstract void onError(int code);
+ interface OnTempFileLoadedListener {
+ void onSuccess(String markdown);
+
+ void onError();
}
interface MarkdownSavedListener {
- void saveComplete();
+ void saveComplete(boolean success);
}
}
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 c8f6d8a..1729598 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenterImpl.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/presentation/MarkdownPresenterImpl.java
@@ -5,25 +5,22 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.provider.OpenableColumns;
-import android.util.Log;
import com.commonsware.cwac.anddown.AndDown;
+import com.wbrawner.simplemarkdown.Utils;
import com.wbrawner.simplemarkdown.model.MarkdownFile;
import com.wbrawner.simplemarkdown.view.MarkdownEditView;
import com.wbrawner.simplemarkdown.view.MarkdownPreviewView;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.InputStream;
public class MarkdownPresenterImpl implements MarkdownPresenter {
private MarkdownFile file;
private MarkdownEditView editView;
private MarkdownPreviewView previewView;
- private String TAG = MarkdownPresenterImpl.class.getSimpleName();
- private int HOEDOWN_FLAGS =
- AndDown.HOEDOWN_EXT_STRIKETHROUGH | AndDown.HOEDOWN_EXT_TABLES |
- AndDown.HOEDOWN_EXT_UNDERLINE | AndDown.HOEDOWN_EXT_SUPERSCRIPT |
- AndDown.HOEDOWN_EXT_FENCED_CODE;
private Handler fileHandler = new Handler();
public MarkdownPresenterImpl(MarkdownFile file) {
@@ -44,14 +41,12 @@ public class MarkdownPresenterImpl implements MarkdownPresenter {
@Override
public void loadMarkdown() {
Runnable fileLoader = () -> {
- int result = this.file.load();
+ boolean result = this.file.load();
+
if (editView != null) {
- if (result == MarkdownFile.SUCCESS) {
- editView.setMarkdown(getMarkdown());
- onMarkdownEdited();
- } else {
- editView.showFileLoadeddError(result);
- }
+ editView.onFileLoaded(result);
+ editView.setMarkdown(getMarkdown());
+ onMarkdownEdited();
}
};
fileHandler.post(fileLoader);
@@ -59,47 +54,36 @@ public class MarkdownPresenterImpl implements MarkdownPresenter {
@Override
public void loadMarkdown(File file) {
- Runnable fileLoader = () -> {
- int result = this.file.load(file);
- if (editView != null) {
- if (result == MarkdownFile.SUCCESS) {
- editView.setTitle(this.file.getName());
- editView.setMarkdown(getMarkdown());
- onMarkdownEdited();
- } else {
- editView.showFileLoadeddError(result);
- }
- }
- };
- fileHandler.post(fileLoader);
+ InputStream in = null;
+ try {
+ in = new FileInputStream(file);
+ loadMarkdown(in);
+ } catch (FileNotFoundException e) {
+ System.err.println(e.getLocalizedMessage());
+ e.printStackTrace();
+ } finally {
+ Utils.closeQuietly(in);
+ }
}
@Override
public void loadMarkdown(InputStream in) {
- Runnable fileLoader = () -> {
- int result = file.load(in);
- if (result == MarkdownFile.SUCCESS) {
- if (editView != null)
- editView.setMarkdown(getMarkdown());
- onMarkdownEdited();
- } else {
- if (editView != null)
- editView.showFileLoadeddError(result);
- }
- };
- fileHandler.post(fileLoader);
+ this.loadMarkdown(in, null);
}
@Override
- public void loadTempMarkdown(InputStream in, OnTempFileLoadedListener listener) {
+ public void loadMarkdown(final InputStream in, final OnTempFileLoadedListener listener) {
Runnable fileLoader = () -> {
MarkdownFile tmpFile = new MarkdownFile();
- int result = tmpFile.load(in);
- if (result == MarkdownFile.SUCCESS) {
+ if (tmpFile.load(in)) {
String html = generateHTML(tmpFile.getContent());
- listener.onSuccess(html);
+ if (listener != null) {
+ listener.onSuccess(html);
+ }
} else {
- listener.onError(result);
+ if (listener != null) {
+ listener.onError();
+ }
}
};
fileHandler.post(fileLoader);
@@ -128,19 +112,12 @@ public class MarkdownPresenterImpl implements MarkdownPresenter {
@Override
public void saveMarkdown(MarkdownSavedListener listener, String filePath) {
Runnable fileSaver = () -> {
- int code;
- code = file.save(filePath);
-
+ boolean result = file.save(filePath);
if (listener != null) {
- listener.saveComplete();
+ listener.saveComplete(result);
}
-
if (editView != null) {
- if (code == MarkdownFile.SUCCESS) {
- editView.showFileSavedMessage();
- } else {
- editView.showFileSavedError(code);
- }
+ editView.onFileSaved(result);
}
};
fileHandler.post(fileSaver);
@@ -164,6 +141,9 @@ public class MarkdownPresenterImpl implements MarkdownPresenter {
@Override
public String generateHTML(String markdown) {
AndDown andDown = new AndDown();
+ int HOEDOWN_FLAGS = AndDown.HOEDOWN_EXT_STRIKETHROUGH | AndDown.HOEDOWN_EXT_TABLES |
+ AndDown.HOEDOWN_EXT_UNDERLINE | AndDown.HOEDOWN_EXT_SUPERSCRIPT |
+ AndDown.HOEDOWN_EXT_FENCED_CODE;
return andDown.markdownToHtml(markdown, HOEDOWN_FLAGS, 0);
}
@@ -210,14 +190,16 @@ public class MarkdownPresenterImpl implements MarkdownPresenter {
.getColumnIndex(OpenableColumns.DISPLAY_NAME);
retCur.moveToFirst();
setFileName(retCur.getString(nameIndex));
+ retCur.close();
}
} else if (fileUri.getScheme().equals("file")) {
setFileName(fileUri.getLastPathSegment());
}
loadMarkdown(in);
} catch (Exception e) {
- if (editView != null)
- editView.showFileLoadeddError(MarkdownFile.READ_ERROR);
+ if (editView != null) {
+ editView.onFileLoaded(false);
+ }
}
}
}
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/DisableableViewPager.java b/app/src/main/java/com/wbrawner/simplemarkdown/view/DisableableViewPager.java
new file mode 100644
index 0000000..253dea4
--- /dev/null
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/DisableableViewPager.java
@@ -0,0 +1,36 @@
+package com.wbrawner.simplemarkdown.view;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+public class DisableableViewPager extends ViewPager {
+ private boolean isSwipeLocked = false;
+
+ public DisableableViewPager(@NonNull Context context) {
+ super(context);
+ }
+
+ public DisableableViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ return !isSwipeLocked && super.onInterceptTouchEvent(ev);
+ }
+
+ @SuppressLint("ClickableViewAccessibility")
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ return !isSwipeLocked && super.onTouchEvent(ev);
+ }
+
+ public void setSwipeLocked(boolean locked) {
+ this.isSwipeLocked = locked;
+ }
+}
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/MarkdownEditView.java b/app/src/main/java/com/wbrawner/simplemarkdown/view/MarkdownEditView.java
index 00fdfbe..e3732cd 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/MarkdownEditView.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/MarkdownEditView.java
@@ -1,11 +1,13 @@
package com.wbrawner.simplemarkdown.view;
+import java.io.File;
+
public interface MarkdownEditView {
String getMarkdown();
void setMarkdown(String markdown);
void setTitle(String title);
- void showFileSavedMessage();
- void showFileSavedError(int code);
- void showFileLoadedMessage();
- void showFileLoadeddError(int code);
+
+ void onFileSaved(boolean success);
+
+ void onFileLoaded(boolean success);
}
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MainActivity.java b/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MainActivity.java
index 424b3be..1e224a7 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MainActivity.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MainActivity.java
@@ -3,12 +3,13 @@ package com.wbrawner.simplemarkdown.view.activity;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.os.Build;
+import android.support.annotation.NonNull;
import android.support.design.widget.TabLayout;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
-import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
@@ -20,6 +21,7 @@ import com.wbrawner.simplemarkdown.MarkdownApplication;
import com.wbrawner.simplemarkdown.R;
import com.wbrawner.simplemarkdown.Utils;
import com.wbrawner.simplemarkdown.presentation.MarkdownPresenter;
+import com.wbrawner.simplemarkdown.view.DisableableViewPager;
import com.wbrawner.simplemarkdown.view.adapter.EditPagerAdapter;
import java.io.File;
@@ -39,17 +41,15 @@ public class MainActivity extends AppCompatActivity
static final String EXTRA_FILE = "EXTRA_FILE";
static final String EXTRA_FILE_PATH = "EXTRA_FILE_PATH";
static final String EXTRA_REQUEST_CODE = "EXTRA_REQUEST_CODE";
- public static final String AUTHORITY = "com.wbrawner.simplemarkdown.fileprovider";
@Inject
MarkdownPresenter presenter;
@BindView(R.id.pager)
- ViewPager pager;
+ DisableableViewPager pager;
@BindView(R.id.layout_tab)
TabLayout tabLayout;
- private static final String TAG = MainActivity.class.getSimpleName();
private NewFileHandler newFileHandler;
@Override
@@ -140,6 +140,10 @@ public class MainActivity extends AppCompatActivity
case R.id.action_new:
presenter.saveMarkdown(newFileHandler, null);
break;
+ case R.id.action_lock_swipe:
+ item.setChecked(!item.isChecked());
+ pager.setSwipeLocked(item.isChecked());
+ break;
case R.id.action_help:
showInfoActivity(R.id.action_help);
break;
@@ -171,8 +175,11 @@ public class MainActivity extends AppCompatActivity
infoIntent.putExtra("title", title);
InputStream in = null;
try {
- in = getAssets().open(fileName);
- presenter.loadTempMarkdown(in, new MarkdownPresenter.OnTempFileLoadedListener() {
+ AssetManager assetManager = getAssets();
+ if (assetManager != null) {
+ in = assetManager.open(fileName);
+ }
+ presenter.loadMarkdown(in, new MarkdownPresenter.OnTempFileLoadedListener() {
@Override
public void onSuccess(String html) {
infoIntent.putExtra("html", html);
@@ -180,7 +187,7 @@ public class MainActivity extends AppCompatActivity
}
@Override
- public void onError(int code) {
+ public void onError() {
Toast.makeText(MainActivity.this, R.string.file_load_error, Toast.LENGTH_SHORT)
.show();
}
@@ -188,17 +195,14 @@ public class MainActivity extends AppCompatActivity
} catch (Exception e) {
Toast.makeText(MainActivity.this, R.string.file_load_error, Toast.LENGTH_SHORT).show();
}
- if (in != null) {
- try {
- in.close();
- } catch (Exception e) {
- }
- }
}
@Override
- public void onRequestPermissionsResult(int requestCode,
- String permissions[], int[] grantResults) {
+ public void onRequestPermissionsResult(
+ int requestCode,
+ @NonNull String permissions[],
+ @NonNull int[] grantResults
+ ) {
switch (requestCode) {
case WRITE_PERMISSION_REQUEST: {
// If request is cancelled, the result arrays are empty.
@@ -293,9 +297,17 @@ public class MainActivity extends AppCompatActivity
private class NewFileHandler implements MarkdownPresenter.MarkdownSavedListener {
@Override
- public void saveComplete() {
- String newFile = Utils.getDefaultFileName(MainActivity.this);
- presenter.newFile(newFile);
+ public void saveComplete(boolean success) {
+ if (success) {
+ String newFile = Utils.getDefaultFileName(MainActivity.this);
+ presenter.newFile(newFile);
+ } else {
+ Toast.makeText(
+ MainActivity.this,
+ R.string.file_save_error,
+ Toast.LENGTH_SHORT
+ ).show();
+ }
}
}
}
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MarkdownInfoActivity.java b/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MarkdownInfoActivity.java
index 24b09a5..43b96db 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MarkdownInfoActivity.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/activity/MarkdownInfoActivity.java
@@ -1,15 +1,13 @@
package com.wbrawner.simplemarkdown.view.activity;
import android.content.Intent;
-import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
-import android.view.View;
-import android.webkit.WebSettings;
import android.webkit.WebView;
import com.wbrawner.simplemarkdown.R;
+import com.wbrawner.simplemarkdown.view.fragment.PreviewFragment;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -24,15 +22,19 @@ public class MarkdownInfoActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_markdown_info);
ButterKnife.bind(this);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ ActionBar supportActionBar = getSupportActionBar();
+ if (supportActionBar != null) {
+ supportActionBar.setDisplayHomeAsUpEnabled(true);
+ }
Intent intent = getIntent();
- if (intent == null || !intent.hasExtra("title") || !intent.hasExtra("html"))
+ if (intent == null || !intent.hasExtra("title") || !intent.hasExtra("html")) {
finish();
+ return;
+ }
setTitle(intent.getStringExtra("title"));
- String style = "";
infoWebview.loadDataWithBaseURL(
null,
- style + intent.getStringExtra("html"),
+ PreviewFragment.style + intent.getStringExtra("html"),
"text/html",
"UTF-8",
null
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/EditFragment.java b/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/EditFragment.java
index 69bc34f..c2b22f6 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/EditFragment.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/EditFragment.java
@@ -1,7 +1,8 @@
package com.wbrawner.simplemarkdown.view.fragment;
-import android.app.AlertDialog;
+import android.app.Activity;
import android.os.Bundle;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
@@ -14,7 +15,6 @@ import com.jakewharton.rxbinding2.widget.RxTextView;
import com.wbrawner.simplemarkdown.MarkdownApplication;
import com.wbrawner.simplemarkdown.R;
import com.wbrawner.simplemarkdown.Utils;
-import com.wbrawner.simplemarkdown.model.MarkdownFile;
import com.wbrawner.simplemarkdown.presentation.MarkdownPresenter;
import com.wbrawner.simplemarkdown.view.MarkdownEditView;
@@ -30,40 +30,36 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
public class EditFragment extends Fragment implements MarkdownEditView {
- public static final String SAVE_ACTION = "com.wbrawner.simplemarkdown.ACTION_SAVE";
- public static final String LOAD_ACTION = "com.wbrawner.simplemarkdown.ACTION_LOAD";
- private String TAG = EditFragment.class.getSimpleName();
- private Unbinder unbinder;
-
@Inject
MarkdownPresenter presenter;
-
@BindView(R.id.markdown_edit)
EditText markdownEditor;
+ private Unbinder unbinder;
public EditFragment() {
// Required empty public constructor
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_edit, container, false);
unbinder = ButterKnife.bind(this, view);
- ((MarkdownApplication) getActivity().getApplication()).getComponent().inject(this);
+ Activity activity = getActivity();
+ if (activity != null) {
+ ((MarkdownApplication) activity.getApplication()).getComponent().inject(this);
+ }
Observable obs = RxTextView.textChanges(markdownEditor)
.debounce(50, TimeUnit.MILLISECONDS).map(CharSequence::toString);
obs.subscribeOn(Schedulers.io());
obs.observeOn(AndroidSchedulers.mainThread());
- obs.subscribe(markdown -> {
- presenter.onMarkdownEdited(markdown);
- });
+ obs.subscribe(markdown -> presenter.onMarkdownEdited(markdown));
return view;
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
presenter.setEditView(EditFragment.this);
presenter.loadMarkdown();
@@ -87,47 +83,37 @@ public class EditFragment extends Fragment implements MarkdownEditView {
return markdownEditor.getText().toString();
}
+ @Override
+ public void setMarkdown(String markdown) {
+ markdownEditor.setText(markdown);
+ }
+
@Override
public void setTitle(String title) {
- getActivity().setTitle(title);
+ Activity activity = getActivity();
+ if (activity != null) {
+ activity.setTitle(title);
+ }
}
@Override
- public void showFileSavedMessage() {
+ public void onFileSaved(boolean success) {
String location = Utils.getDocsPath(getActivity()) + presenter.getFileName();
- String message = getString(R.string.file_saved, location);
- Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
- }
-
- @Override
- public void showFileSavedError(int code) {
- String message = "";
- switch (code) {
- case MarkdownFile.WRITE_ERROR:
- message = getString(R.string.error_write);
- break;
- default:
- message = getString(R.string.file_save_error);
+ String message;
+ if (success) {
+ message = getString(R.string.file_saved, location);
+ } else {
+ message = getString(R.string.file_save_error);
}
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
}
@Override
- public void showFileLoadedMessage() {
- Toast.makeText(getActivity(), R.string.file_loaded, Toast.LENGTH_SHORT).show();
- }
-
- @Override
- public void showFileLoadeddError(int code) {
- String message = "";
+ public void onFileLoaded(boolean success) {
+ int message = success ? R.string.file_loaded : R.string.file_load_error;
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
}
- @Override
- public void setMarkdown(String markdown) {
- markdownEditor.setText(markdown);
- }
-
@Override
public void onDestroyView() {
super.onDestroyView();
diff --git a/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/PreviewFragment.java b/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/PreviewFragment.java
index d66796f..aee145c 100644
--- a/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/PreviewFragment.java
+++ b/app/src/main/java/com/wbrawner/simplemarkdown/view/fragment/PreviewFragment.java
@@ -1,6 +1,8 @@
package com.wbrawner.simplemarkdown.view.fragment;
+import android.app.Activity;
import android.os.Bundle;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
@@ -22,32 +24,39 @@ import butterknife.Unbinder;
public class PreviewFragment extends Fragment implements MarkdownPreviewView {
private static final String TAG = PreviewFragment.class.getSimpleName();
- private Unbinder unbinder;
-
+ public static String style = "";
@Inject
MarkdownPresenter presenter;
-
@BindView(R.id.markdown_view)
WebView markdownPreview;
+ private Unbinder unbinder;
public PreviewFragment() {
// Required empty public constructor
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(
+ @NonNull LayoutInflater inflater,
+ ViewGroup container,
+ Bundle savedInstanceState
+ ) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_preview, container, false);
unbinder = ButterKnife.bind(this, view);
- ((MarkdownApplication) getActivity().getApplication()).getComponent().inject(this);
+ Activity activity = getActivity();
+ if (activity != null) {
+ ((MarkdownApplication) activity.getApplication()).getComponent().inject(this);
+ }
if (BuildConfig.DEBUG)
WebView.setWebContentsDebuggingEnabled(true);
return view;
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@@ -56,9 +65,13 @@ public class PreviewFragment extends Fragment implements MarkdownPreviewView {
@Override
public void updatePreview(String html) {
if (markdownPreview != null) {
- markdownPreview.post(() -> {
- markdownPreview.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null);
- });
+ markdownPreview.post(() -> markdownPreview.loadDataWithBaseURL(
+ null,
+ style + html,
+ "text/html",
+ "UTF-8",
+ null
+ ));
}
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index d9ec428..eb02df8 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -3,26 +3,27 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
-
+ android:text="@string/action_edit" />
+ android:text="@string/action_preview" />
-
+
diff --git a/app/src/main/res/menu/menu_edit.xml b/app/src/main/res/menu/menu_edit.xml
index 0733ff9..8812d16 100644
--- a/app/src/main/res/menu/menu_edit.xml
+++ b/app/src/main/res/menu/menu_edit.xml
@@ -2,38 +2,38 @@
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6c8d61e..93de6d8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -32,4 +32,5 @@
Settings
Enable autosave
Automatically save files when closing the app
+ Lock Swiping