From f26ee7bc1d5464bf519f3d477bf15c5b88899ad0 Mon Sep 17 00:00:00 2001 From: Olga Miller Date: Sat, 11 Feb 2017 14:56:22 +0100 Subject: [PATCH] Added ModeClassName to Settings, Use beginObject and endObject once while writing to and reading from settings file, Set image uri to null instead of empty in Settings class, if no uri is set --- .../java/om/sstvencoder/MainActivity.java | 19 +++-- .../om/sstvencoder/Modes/ModeFactory.java | 4 + .../main/java/om/sstvencoder/Settings.java | 81 ++++++++++++------- 3 files changed, 69 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/om/sstvencoder/MainActivity.java b/app/src/main/java/om/sstvencoder/MainActivity.java index e9fe545..404f3d0 100644 --- a/app/src/main/java/om/sstvencoder/MainActivity.java +++ b/app/src/main/java/om/sstvencoder/MainActivity.java @@ -74,9 +74,7 @@ public class MainActivity extends AppCompatActivity { mTextOverlayTemplate = new TextOverlayTemplate(); mTextOverlayTemplate.load(mCropView.getLabels(), mSettings.getTextOverlayFile()); - IModeInfo mode = mEncoder.getModeInfo(); - mCropView.setModeSize(mode.getModeSize()); - setTitle(mode.getModeName()); + setMode(mSettings.getModeClassName()); loadImage(getIntent()); } @@ -329,15 +327,20 @@ public class MainActivity extends AppCompatActivity { return true; default: String className = item.getIntent().getStringExtra(CLASS_NAME); - if (mEncoder.setMode(className)) { - IModeInfo modeInfo = mEncoder.getModeInfo(); - mCropView.setModeSize(modeInfo.getModeSize()); - setTitle(modeInfo.getModeName()); - } + setMode(className); return true; } } + private void setMode(String modeClassName) { + if (mEncoder.setMode(modeClassName)) { + IModeInfo modeInfo = mEncoder.getModeInfo(); + mCropView.setModeSize(modeInfo.getModeSize()); + setTitle(modeInfo.getModeName()); + mSettings.setModeClassName(modeClassName); + } + } + private void takePicture() { if (!hasCamera()) { Toast.makeText(this, getString(R.string.message_no_camera), Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/om/sstvencoder/Modes/ModeFactory.java b/app/src/main/java/om/sstvencoder/Modes/ModeFactory.java index 1e0efc3..e7e44b5 100644 --- a/app/src/main/java/om/sstvencoder/Modes/ModeFactory.java +++ b/app/src/main/java/om/sstvencoder/Modes/ModeFactory.java @@ -29,6 +29,10 @@ public final class ModeFactory { return Robot36.class; } + public static String getDefaultModeClassName() { + return (new ModeInfo(getDefaultMode())).getModeClassName(); + } + public static IModeInfo[] getModeInfoList() { return new IModeInfo[]{ new ModeInfo(Martin1.class), new ModeInfo(Martin2.class), diff --git a/app/src/main/java/om/sstvencoder/Settings.java b/app/src/main/java/om/sstvencoder/Settings.java index d5a7488..d6cc557 100644 --- a/app/src/main/java/om/sstvencoder/Settings.java +++ b/app/src/main/java/om/sstvencoder/Settings.java @@ -30,22 +30,26 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; +import om.sstvencoder.Modes.ModeFactory; + class Settings { private final static String IMAGE_URI = "image_uri"; private final static String TEXT_OVERLAY_PATH = "text_overlay_path"; + private final static String MODE_CLASS_NAME = "mode_class_name"; private final String mFileName; private Context mContext; + private String mModeClassName; private String mImageUri; private String mTextOverlayPath; private Settings() { mFileName = "settings.json"; + mModeClassName = ModeFactory.getDefaultModeClassName(); } Settings(Context context) { this(); mContext = context; - mImageUri = ""; } boolean load() { @@ -54,8 +58,7 @@ class Settings { try { InputStream in = new FileInputStream(getFile()); reader = new JsonReader(new InputStreamReader(in, "UTF-8")); - readImageUri(reader); - readTextOverlayPath(reader); + read(reader); loaded = true; } catch (Exception ignore) { } finally { @@ -76,8 +79,7 @@ class Settings { OutputStream out = new FileOutputStream(getFile()); writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8")); writer.setIndent(" "); - writeImageUri(writer); - writeTextOverlayPath(writer); + write(writer); saved = true; } catch (Exception ignore) { } finally { @@ -91,12 +93,20 @@ class Settings { return saved; } + void setModeClassName(String modeClassName) { + mModeClassName = modeClassName; + } + + String getModeClassName() { + return mModeClassName; + } + void setImageUri(Uri uri) { - mImageUri = uri == null ? "" : uri.toString(); + mImageUri = uri == null ? null : uri.toString(); } Uri getImageUri() { - if ("".equals(mImageUri)) + if (mImageUri == null) return null; return Uri.parse(mImageUri); } @@ -111,37 +121,54 @@ class Settings { return new File(mContext.getFilesDir(), mFileName); } - private void writeImageUri(JsonWriter writer) throws IOException { + private void write(JsonWriter writer) throws IOException { writer.beginObject(); - writer.name(IMAGE_URI).value(mImageUri); + { + writeModeClassName(writer); + writeImageUri(writer); + writeTextOverlayPath(writer); + } writer.endObject(); } + private void writeModeClassName(JsonWriter writer) throws IOException { + writer.name(MODE_CLASS_NAME).value(mModeClassName); + } + + private void writeImageUri(JsonWriter writer) throws IOException { + writer.name(IMAGE_URI).value(mImageUri); + } + private void writeTextOverlayPath(JsonWriter writer) throws IOException { - writer.beginObject(); writer.name(TEXT_OVERLAY_PATH).value(mTextOverlayPath); - writer.endObject(); + } + + private void read(JsonReader reader) throws IOException { + reader.beginObject(); + { + readModeClassName(reader); + readImageUri(reader); + readTextOverlayPath(reader); + } + reader.endObject(); + } + + private void readModeClassName(JsonReader reader) throws IOException { + reader.nextName(); + mModeClassName = reader.nextString(); } private void readImageUri(JsonReader reader) throws IOException { - reader.beginObject(); - { - reader.nextName(); - if (reader.peek() == JsonToken.NULL) { - reader.nextNull(); - mImageUri = null; - } else - mImageUri = reader.nextString(); - } - reader.endObject(); + reader.nextName(); + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + mImageUri = null; + } else + mImageUri = reader.nextString(); } private void readTextOverlayPath(JsonReader reader) throws IOException { - reader.beginObject(); - { - reader.nextName(); - mTextOverlayPath = reader.nextString(); - } - reader.endObject(); + reader.nextName(); + mTextOverlayPath = reader.nextString(); } }