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(); } }