Create result Label in EditTextActivity in onStart and update it on any change

pull/3/head
Olga Miller 2017-03-05 14:21:09 +01:00
rodzic 24c5c1804b
commit a2911345c5
3 zmienionych plików z 75 dodań i 47 usunięć

Wyświetl plik

@ -16,10 +16,11 @@ limitations under the License.
package om.sstvencoder; package om.sstvencoder;
import android.content.Intent; import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment; import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@ -44,10 +45,8 @@ public class EditTextActivity extends AppCompatActivity
public static final int REQUEST_CODE = 101; public static final int REQUEST_CODE = 101;
public static final String EXTRA = "EDIT_TEXT_EXTRA"; public static final String EXTRA = "EDIT_TEXT_EXTRA";
private EditText mEditText; private Label mLabel;
private int mColor, mOutlineColor;
private EditColorMode mEditColor; private EditColorMode mEditColor;
private float mTextSize, mOutlineSize;
private FontFamilySet mFontFamilySet; private FontFamilySet mFontFamilySet;
private FontFamilySet.FontFamily mSelectedFontFamily; private FontFamilySet.FontFamily mSelectedFontFamily;
private List<String> mFontFamilyNameList; private List<String> mFontFamilyNameList;
@ -58,7 +57,6 @@ public class EditTextActivity extends AppCompatActivity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_text); setContentView(R.layout.activity_edit_text);
mEditColor = EditColorMode.None; mEditColor = EditColorMode.None;
mEditText = (EditText) findViewById(R.id.edit_text);
mEditBold = (CheckBox) findViewById(R.id.edit_bold); mEditBold = (CheckBox) findViewById(R.id.edit_bold);
mEditItalic = (CheckBox) findViewById(R.id.edit_italic); mEditItalic = (CheckBox) findViewById(R.id.edit_italic);
mEditOutline = (CheckBox) findViewById(R.id.edit_outline); mEditOutline = (CheckBox) findViewById(R.id.edit_outline);
@ -67,21 +65,36 @@ public class EditTextActivity extends AppCompatActivity
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
Label label = (Label) getIntent().getSerializableExtra(EXTRA); mLabel = ((Label) getIntent().getSerializableExtra(EXTRA)).getClone();
mEditText.setText(label.getText()); initText();
initTextSizeSpinner(label.getTextSize()); initTextSizeSpinner(mLabel.getTextSize());
mEditBold.setChecked(label.getBold()); mEditBold.setChecked(mLabel.getBold());
mEditItalic.setChecked(label.getItalic()); mEditItalic.setChecked(mLabel.getItalic());
initFontFamilySpinner(label.getFamilyName()); initFontFamilySpinner(mLabel.getFamilyName());
updateBoldAndItalic(); updateBoldAndItalic();
mEditOutline.setChecked(label.getOutline()); mEditOutline.setChecked(mLabel.getOutline());
initOutlineSizeSpinner(label.getOutlineSize()); initOutlineSizeSpinner(mLabel.getOutlineSize());
findViewById(R.id.edit_color).setBackgroundColor(mLabel.getForeColor());
findViewById(R.id.edit_outline_color).setBackgroundColor(mLabel.getOutlineColor());
}
mColor = label.getForeColor(); private void initText() {
findViewById(R.id.edit_color).setBackgroundColor(mColor); EditText editText = (EditText) findViewById(R.id.edit_text);
editText.setText(mLabel.getText());
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
mOutlineColor = label.getOutlineColor(); @Override
findViewById(R.id.edit_outline_color).setBackgroundColor(mOutlineColor); public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
mLabel.setText(charSequence.toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
} }
private void initFontFamilySpinner(String familyName) { private void initFontFamilySpinner(String familyName) {
@ -96,7 +109,6 @@ public class EditTextActivity extends AppCompatActivity
} }
private void initTextSizeSpinner(float textSize) { private void initTextSizeSpinner(float textSize) {
mTextSize = textSize;
Spinner spinner = (Spinner) findViewById(R.id.edit_text_size); Spinner spinner = (Spinner) findViewById(R.id.edit_text_size);
spinner.setOnItemSelectedListener(this); spinner.setOnItemSelectedListener(this);
String[] sizeList = new String[]{"Small", "Normal", "Large", "Huge"}; String[] sizeList = new String[]{"Small", "Normal", "Large", "Huge"};
@ -106,7 +118,6 @@ public class EditTextActivity extends AppCompatActivity
} }
private void initOutlineSizeSpinner(float outlineSize) { private void initOutlineSizeSpinner(float outlineSize) {
mOutlineSize = outlineSize;
Spinner spinner = (Spinner) findViewById(R.id.edit_outline_size); Spinner spinner = (Spinner) findViewById(R.id.edit_outline_size);
spinner.setOnItemSelectedListener(this); spinner.setOnItemSelectedListener(this);
String[] sizeList = new String[]{"Thin", "Normal", "Thick"}; String[] sizeList = new String[]{"Thin", "Normal", "Thick"};
@ -119,7 +130,7 @@ public class EditTextActivity extends AppCompatActivity
int position = (int) (textSize - 1f); int position = (int) (textSize - 1f);
if (0 <= position && position <= 3) if (0 <= position && position <= 3)
return position; return position;
mTextSize = Label.TEXT_SIZE_NORMAL; mLabel.setTextSize(Label.TEXT_SIZE_NORMAL);
return 1; return 1;
} }
@ -131,7 +142,7 @@ public class EditTextActivity extends AppCompatActivity
int position = (int) (outlineSize * 2f / Label.OUTLINE_SIZE_NORMAL - 1f); int position = (int) (outlineSize * 2f / Label.OUTLINE_SIZE_NORMAL - 1f);
if (0 <= position && position <= 2) if (0 <= position && position <= 2)
return position; return position;
mOutlineSize = Label.OUTLINE_SIZE_NORMAL; mLabel.setOutlineSize(Label.OUTLINE_SIZE_NORMAL);
return 1; return 1;
} }
@ -143,14 +154,15 @@ public class EditTextActivity extends AppCompatActivity
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()) { switch (parent.getId()) {
case R.id.edit_text_size: case R.id.edit_text_size:
mTextSize = positionToTextSize(position); mLabel.setTextSize(positionToTextSize(position));
break; break;
case R.id.edit_outline_size: case R.id.edit_outline_size:
mOutlineSize = positionToOutlineSize(position); mLabel.setOutlineSize(positionToOutlineSize(position));
break; break;
case R.id.edit_font_family: case R.id.edit_font_family:
String displayName = mFontFamilyNameList.get(position); String displayName = mFontFamilyNameList.get(position);
mSelectedFontFamily = mFontFamilySet.getFontFamilyFromDisplayName(displayName); mSelectedFontFamily = mFontFamilySet.getFontFamilyFromDisplayName(displayName);
mLabel.setFamilyName(mSelectedFontFamily.name);
updateBoldAndItalic(); updateBoldAndItalic();
break; break;
default: default:
@ -160,12 +172,16 @@ public class EditTextActivity extends AppCompatActivity
private void updateBoldAndItalic() { private void updateBoldAndItalic() {
mEditBold.setEnabled(mSelectedFontFamily.bold); mEditBold.setEnabled(mSelectedFontFamily.bold);
if (!mEditBold.isEnabled()) if (!mEditBold.isEnabled()) {
mEditBold.setChecked(false); mEditBold.setChecked(false);
mLabel.setBold(false);
}
mEditItalic.setEnabled(mSelectedFontFamily.italic); mEditItalic.setEnabled(mSelectedFontFamily.italic);
if (!mEditItalic.isEnabled()) if (!mEditItalic.isEnabled()) {
mEditItalic.setChecked(false); mEditItalic.setChecked(false);
mLabel.setItalic(false);
}
} }
@Override @Override
@ -188,13 +204,25 @@ public class EditTextActivity extends AppCompatActivity
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
public void onBoldClick(View view) {
mLabel.setBold(mEditBold.isChecked());
}
public void onItalicClick(View view) {
mLabel.setItalic(mEditItalic.isChecked());
}
public void onOutlineClick(View view) {
mLabel.setOutline(mEditOutline.isChecked());
}
public void onColorClick(View view) { public void onColorClick(View view) {
showColorDialog(R.string.color, mColor); showColorDialog(R.string.color, mLabel.getForeColor());
mEditColor = EditColorMode.Text; mEditColor = EditColorMode.Text;
} }
public void onOutlineColorClick(View view) { public void onOutlineColorClick(View view) {
showColorDialog(R.string.outline_color, mOutlineColor); showColorDialog(R.string.outline_color, mLabel.getOutlineColor());
mEditColor = EditColorMode.Outline; mEditColor = EditColorMode.Outline;
} }
@ -210,12 +238,12 @@ public class EditTextActivity extends AppCompatActivity
public void onColorSelected(DialogFragment fragment, int color) { public void onColorSelected(DialogFragment fragment, int color) {
switch (mEditColor) { switch (mEditColor) {
case Text: case Text:
mOutlineColor = color; mLabel.setForeColor(color);
findViewById(R.id.edit_color).setBackgroundColor(mOutlineColor); findViewById(R.id.edit_color).setBackgroundColor(color);
break; break;
case Outline: case Outline:
mOutlineColor = color; mLabel.setOutlineColor(color);
findViewById(R.id.edit_outline_color).setBackgroundColor(mOutlineColor); findViewById(R.id.edit_outline_color).setBackgroundColor(color);
break; break;
} }
mEditColor = EditColorMode.None; mEditColor = EditColorMode.None;
@ -228,23 +256,8 @@ public class EditTextActivity extends AppCompatActivity
private void done() { private void done() {
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra(EXTRA, getLabel()); intent.putExtra(EXTRA, mLabel);
setResult(RESULT_OK, intent); setResult(RESULT_OK, intent);
finish(); finish();
} }
@NonNull
private Label getLabel() {
Label label = new Label();
label.setText(mEditText.getText().toString());
label.setTextSize(mTextSize);
label.setFamilyName(mSelectedFontFamily.name);
label.setItalic(mEditItalic.isChecked());
label.setBold(mEditBold.isChecked());
label.setForeColor(mColor);
label.setOutline(mEditOutline.isChecked());
label.setOutlineSize(mOutlineSize);
label.setOutlineColor(mOutlineColor);
return label;
}
} }

Wyświetl plik

@ -18,6 +18,7 @@ package om.sstvencoder.TextOverlay;
import android.graphics.Color; import android.graphics.Color;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.Field;
public class Label implements Serializable { public class Label implements Serializable {
public static final float TEXT_SIZE_NORMAL = 2f; public static final float TEXT_SIZE_NORMAL = 2f;
@ -122,4 +123,15 @@ public class Label implements Serializable {
public void setOutlineColor(int color) { public void setOutlineColor(int color) {
mOutlineColor = color; mOutlineColor = color;
} }
public Label getClone() {
Label clone = new Label();
try {
for (Field field : getClass().getDeclaredFields()) {
field.set(clone, field.get(this));
}
} catch (Exception ignore) {
}
return clone;
}
} }

Wyświetl plik

@ -47,6 +47,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0.3" android:layout_weight="0.3"
android:onClick="onItalicClick"
android:text="@string/italic"/> android:text="@string/italic"/>
<CheckBox <CheckBox
@ -54,6 +55,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0.3" android:layout_weight="0.3"
android:onClick="onBoldClick"
android:text="@string/bold"/> android:text="@string/bold"/>
<LinearLayout <LinearLayout
@ -95,6 +97,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0.3" android:layout_weight="0.3"
android:onClick="onOutlineClick"
android:text="@string/outline"/> android:text="@string/outline"/>
<Spinner <Spinner