From 731377a420656239a7dd8ca7ac0eb7452c60bd5f Mon Sep 17 00:00:00 2001 From: Billy Brawner Date: Sat, 27 Jan 2018 19:24:54 -0600 Subject: [PATCH] Fix scrolling for code blocks and clean up warnings --- .../simplemarkdown/MarkdownApplication.java | 4 - .../com/wbrawner/simplemarkdown/Utils.java | 11 ++ .../simplemarkdown/model/MarkdownFile.java | 134 +++++++----------- .../presentation/MarkdownPresenter.java | 12 +- .../presentation/MarkdownPresenterImpl.java | 92 +++++------- .../view/DisableableViewPager.java | 36 +++++ .../simplemarkdown/view/MarkdownEditView.java | 10 +- .../view/activity/MainActivity.java | 48 ++++--- .../view/activity/MarkdownInfoActivity.java | 16 ++- .../view/fragment/EditFragment.java | 68 ++++----- .../view/fragment/PreviewFragment.java | 33 +++-- app/src/main/res/layout/activity_main.xml | 15 +- app/src/main/res/menu/menu_edit.xml | 14 +- app/src/main/res/values/strings.xml | 1 + 14 files changed, 257 insertions(+), 237 deletions(-) create mode 100644 app/src/main/java/com/wbrawner/simplemarkdown/view/DisableableViewPager.java 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