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
This commit is contained in:
Olga Miller 2017-02-11 14:56:22 +01:00
parent dbbfa21d75
commit f26ee7bc1d
3 changed files with 69 additions and 35 deletions

View file

@ -74,9 +74,7 @@ public class MainActivity extends AppCompatActivity {
mTextOverlayTemplate = new TextOverlayTemplate(); mTextOverlayTemplate = new TextOverlayTemplate();
mTextOverlayTemplate.load(mCropView.getLabels(), mSettings.getTextOverlayFile()); mTextOverlayTemplate.load(mCropView.getLabels(), mSettings.getTextOverlayFile());
IModeInfo mode = mEncoder.getModeInfo(); setMode(mSettings.getModeClassName());
mCropView.setModeSize(mode.getModeSize());
setTitle(mode.getModeName());
loadImage(getIntent()); loadImage(getIntent());
} }
@ -329,15 +327,20 @@ public class MainActivity extends AppCompatActivity {
return true; return true;
default: default:
String className = item.getIntent().getStringExtra(CLASS_NAME); String className = item.getIntent().getStringExtra(CLASS_NAME);
if (mEncoder.setMode(className)) { setMode(className);
IModeInfo modeInfo = mEncoder.getModeInfo();
mCropView.setModeSize(modeInfo.getModeSize());
setTitle(modeInfo.getModeName());
}
return true; 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() { private void takePicture() {
if (!hasCamera()) { if (!hasCamera()) {
Toast.makeText(this, getString(R.string.message_no_camera), Toast.LENGTH_LONG).show(); Toast.makeText(this, getString(R.string.message_no_camera), Toast.LENGTH_LONG).show();

View file

@ -29,6 +29,10 @@ public final class ModeFactory {
return Robot36.class; return Robot36.class;
} }
public static String getDefaultModeClassName() {
return (new ModeInfo(getDefaultMode())).getModeClassName();
}
public static IModeInfo[] getModeInfoList() { public static IModeInfo[] getModeInfoList() {
return new IModeInfo[]{ return new IModeInfo[]{
new ModeInfo(Martin1.class), new ModeInfo(Martin2.class), new ModeInfo(Martin1.class), new ModeInfo(Martin2.class),

View file

@ -30,22 +30,26 @@ import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import om.sstvencoder.Modes.ModeFactory;
class Settings { class Settings {
private final static String IMAGE_URI = "image_uri"; private final static String IMAGE_URI = "image_uri";
private final static String TEXT_OVERLAY_PATH = "text_overlay_path"; 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 final String mFileName;
private Context mContext; private Context mContext;
private String mModeClassName;
private String mImageUri; private String mImageUri;
private String mTextOverlayPath; private String mTextOverlayPath;
private Settings() { private Settings() {
mFileName = "settings.json"; mFileName = "settings.json";
mModeClassName = ModeFactory.getDefaultModeClassName();
} }
Settings(Context context) { Settings(Context context) {
this(); this();
mContext = context; mContext = context;
mImageUri = "";
} }
boolean load() { boolean load() {
@ -54,8 +58,7 @@ class Settings {
try { try {
InputStream in = new FileInputStream(getFile()); InputStream in = new FileInputStream(getFile());
reader = new JsonReader(new InputStreamReader(in, "UTF-8")); reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
readImageUri(reader); read(reader);
readTextOverlayPath(reader);
loaded = true; loaded = true;
} catch (Exception ignore) { } catch (Exception ignore) {
} finally { } finally {
@ -76,8 +79,7 @@ class Settings {
OutputStream out = new FileOutputStream(getFile()); OutputStream out = new FileOutputStream(getFile());
writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8")); writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
writer.setIndent(" "); writer.setIndent(" ");
writeImageUri(writer); write(writer);
writeTextOverlayPath(writer);
saved = true; saved = true;
} catch (Exception ignore) { } catch (Exception ignore) {
} finally { } finally {
@ -91,12 +93,20 @@ class Settings {
return saved; return saved;
} }
void setModeClassName(String modeClassName) {
mModeClassName = modeClassName;
}
String getModeClassName() {
return mModeClassName;
}
void setImageUri(Uri uri) { void setImageUri(Uri uri) {
mImageUri = uri == null ? "" : uri.toString(); mImageUri = uri == null ? null : uri.toString();
} }
Uri getImageUri() { Uri getImageUri() {
if ("".equals(mImageUri)) if (mImageUri == null)
return null; return null;
return Uri.parse(mImageUri); return Uri.parse(mImageUri);
} }
@ -111,37 +121,54 @@ class Settings {
return new File(mContext.getFilesDir(), mFileName); return new File(mContext.getFilesDir(), mFileName);
} }
private void writeImageUri(JsonWriter writer) throws IOException { private void write(JsonWriter writer) throws IOException {
writer.beginObject(); writer.beginObject();
writer.name(IMAGE_URI).value(mImageUri); {
writeModeClassName(writer);
writeImageUri(writer);
writeTextOverlayPath(writer);
}
writer.endObject(); 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 { private void writeTextOverlayPath(JsonWriter writer) throws IOException {
writer.beginObject();
writer.name(TEXT_OVERLAY_PATH).value(mTextOverlayPath); 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 { private void readImageUri(JsonReader reader) throws IOException {
reader.beginObject(); reader.nextName();
{ if (reader.peek() == JsonToken.NULL) {
reader.nextName(); reader.nextNull();
if (reader.peek() == JsonToken.NULL) { mImageUri = null;
reader.nextNull(); } else
mImageUri = null; mImageUri = reader.nextString();
} else
mImageUri = reader.nextString();
}
reader.endObject();
} }
private void readTextOverlayPath(JsonReader reader) throws IOException { private void readTextOverlayPath(JsonReader reader) throws IOException {
reader.beginObject(); reader.nextName();
{ mTextOverlayPath = reader.nextString();
reader.nextName();
mTextOverlayPath = reader.nextString();
}
reader.endObject();
} }
} }