introduced boolean form field wrapper
This commit is contained in:
		
							parent
							
								
									39fdf4a333
								
							
						
					
					
						commit
						0569a1e769
					
				| @ -0,0 +1,43 @@ | ||||
| package eu.siacs.conversations.ui.forms; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.widget.CheckBox; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| 
 | ||||
| import eu.siacs.conversations.R; | ||||
| import eu.siacs.conversations.xmpp.forms.Field; | ||||
| 
 | ||||
| public class FormBooleanFieldWrapper extends FormFieldWrapper { | ||||
| 
 | ||||
| 	protected CheckBox checkBox; | ||||
| 
 | ||||
| 	protected FormBooleanFieldWrapper(Context context, Field field) { | ||||
| 		super(context, field); | ||||
| 		checkBox = (CheckBox) view.findViewById(R.id.field); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	protected void setLabel(String label, boolean required) { | ||||
| 		CheckBox checkBox = (CheckBox) view.findViewById(R.id.field); | ||||
| 		checkBox.setText(createSpannableLabelString(label, required)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public List<String> getValues() { | ||||
| 		List<String> values = new ArrayList<>(); | ||||
| 		values.add(Boolean.toString(checkBox.isChecked())); | ||||
| 		return values; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean validates() { | ||||
| 		return checkBox.isChecked() || !field.isRequired(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	protected int getLayoutResource() { | ||||
| 		return R.layout.form_boolean; | ||||
| 	} | ||||
| } | ||||
| @ -17,6 +17,7 @@ public class FormFieldFactory { | ||||
| 		typeTable.put("text-multi", FormTextFieldWrapper.class); | ||||
| 		typeTable.put("text-private", FormTextFieldWrapper.class); | ||||
| 		typeTable.put("jid-single", FormJidSingleFieldWrapper.class); | ||||
| 		typeTable.put("boolean", FormBooleanFieldWrapper.class); | ||||
| 	} | ||||
| 
 | ||||
| 	public static FormFieldWrapper createFromField(Context context, Field field) { | ||||
|  | ||||
| @ -1,11 +1,15 @@ | ||||
| package eu.siacs.conversations.ui.forms; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.text.SpannableString; | ||||
| import android.text.style.ForegroundColorSpan; | ||||
| import android.text.style.StyleSpan; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import eu.siacs.conversations.R; | ||||
| import eu.siacs.conversations.xmpp.forms.Field; | ||||
| 
 | ||||
| public abstract class FormFieldWrapper { | ||||
| @ -26,11 +30,11 @@ public abstract class FormFieldWrapper { | ||||
| 		setLabel(label, field.isRequired()); | ||||
| 	} | ||||
| 
 | ||||
| 	public void submit() { | ||||
| 	public final void submit() { | ||||
| 		this.field.setValues(getValues()); | ||||
| 	} | ||||
| 
 | ||||
| 	public View getView() { | ||||
| 	public final View getView() { | ||||
| 		return view; | ||||
| 	} | ||||
| 
 | ||||
| @ -42,6 +46,17 @@ public abstract class FormFieldWrapper { | ||||
| 
 | ||||
| 	abstract protected int getLayoutResource(); | ||||
| 
 | ||||
| 	protected SpannableString createSpannableLabelString(String label, boolean required) { | ||||
| 		SpannableString spannableString = new SpannableString(label + (required ? " *" : "")); | ||||
| 		if (required) { | ||||
| 			int start = label.length(); | ||||
| 			int end = label.length() + 2; | ||||
| 			spannableString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), start, end, 0); | ||||
| 			spannableString.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.accent)), start, end, 0); | ||||
| 		} | ||||
| 		return spannableString; | ||||
| 	} | ||||
| 
 | ||||
| 	protected static <F extends FormFieldWrapper> FormFieldWrapper createFromField(Class<F> c, Context context, Field field) { | ||||
| 		try { | ||||
| 			return c.getDeclaredConstructor(Context.class, Field.class).newInstance(context,field); | ||||
|  | ||||
| @ -2,9 +2,6 @@ package eu.siacs.conversations.ui.forms; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.text.InputType; | ||||
| import android.text.SpannableString; | ||||
| import android.text.style.ForegroundColorSpan; | ||||
| import android.text.style.StyleSpan; | ||||
| import android.widget.EditText; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| @ -30,14 +27,7 @@ public class FormTextFieldWrapper extends FormFieldWrapper { | ||||
| 	@Override | ||||
| 	protected void setLabel(String label, boolean required) { | ||||
| 		TextView textView = (TextView) view.findViewById(R.id.label); | ||||
| 		SpannableString spannableString = new SpannableString(label + (required ? " *" : "")); | ||||
| 		if (required) { | ||||
| 			int start = label.length(); | ||||
| 			int end = label.length() + 2; | ||||
| 			spannableString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), start, end, 0); | ||||
| 			spannableString.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.accent)), start, end, 0); | ||||
| 		} | ||||
| 		textView.setText(spannableString); | ||||
| 		textView.setText(createSpannableLabelString(label, required)); | ||||
| 	} | ||||
| 
 | ||||
| 	protected String getValue() { | ||||
|  | ||||
							
								
								
									
										13
									
								
								src/main/res/layout/form_boolean.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/main/res/layout/form_boolean.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|               android:layout_width="match_parent" | ||||
|               android:layout_height="match_parent" | ||||
|               android:paddingTop="8dp" | ||||
|               android:orientation="vertical"> | ||||
|     <CheckBox | ||||
|         android:id="@+id/field" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:textColor="@color/black87" | ||||
|         android:textSize="?attr/TextSizeBody"/> | ||||
| </LinearLayout> | ||||
| @ -2,12 +2,12 @@ | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|               android:layout_width="match_parent" | ||||
|               android:layout_height="match_parent" | ||||
|               android:paddingTop="8dp" | ||||
|               android:orientation="vertical"> | ||||
|     <TextView | ||||
|         android:id="@+id/label" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginTop="8dp" | ||||
|         android:textColor="@color/black87" | ||||
|         android:textSize="?attr/TextSizeBody"/> | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch