Skip to content

Commit

Permalink
Merge 57a2c65 into 87cd472
Browse files Browse the repository at this point in the history
  • Loading branch information
bennsimon committed Oct 27, 2020
2 parents 87cd472 + 57a2c65 commit 919645e
Show file tree
Hide file tree
Showing 2 changed files with 165 additions and 110 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.FileProvider;
Expand Down Expand Up @@ -92,8 +94,8 @@
public class JsonFormFragmentPresenter extends
MvpBasePresenter<JsonFormFragmentView<JsonFormFragmentViewState>> {

private static final String TAG = "FormFragmentPresenter";
protected static final int RESULT_LOAD_IMG = 1;
private static final String TAG = "FormFragmentPresenter";
private final JsonFormFragment formFragment;
protected JSONObject mStepDetails;
protected String key;
Expand Down Expand Up @@ -121,6 +123,109 @@ public JsonFormFragmentPresenter(JsonFormFragment formFragment) {
incorrectlyFormattedFields = new Stack<>();
}

public static ValidationStatus validate(JsonFormFragmentView formFragmentView, View childAt,
boolean requestFocus) {
if (childAt instanceof RadioGroup) {
RadioGroup radioGroup = (RadioGroup) childAt;
ValidationStatus validationStatus = NativeRadioButtonFactory
.validate(formFragmentView, radioGroup);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
} else if (childAt instanceof NativeEditText) {
NativeEditText editText = (NativeEditText) childAt;
ValidationStatus validationStatus = NativeEditTextFactory
.validate(formFragmentView, editText);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
} else if (childAt instanceof MaterialEditText) {
MaterialEditText editText = (MaterialEditText) childAt;
ValidationStatus validationStatus = EditTextFactory.validate(formFragmentView, editText);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
} else if (childAt instanceof ImageView) {
ValidationStatus validationStatus = ImagePickerFactory
.validate(formFragmentView, (ImageView) childAt);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
} else if (childAt instanceof Button) {
String type = (String) childAt.getTag(R.id.type);
if (!TextUtils.isEmpty(type) && type.equals(JsonFormConstants.GPS)) {
ValidationStatus validationStatus = GpsFactory.validate(formFragmentView, (Button) childAt);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
}
} else if (childAt instanceof MaterialSpinner) {
final MaterialSpinner spinner = (MaterialSpinner) childAt;
final ValidationStatus validationStatus = SpinnerFactory.validate(formFragmentView, spinner);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
((JsonFormActivity) formFragmentView.getContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
setSpinnerError(spinner, validationStatus.getErrorMessage());
}
});
return validationStatus;
}
} else if (childAt instanceof ViewGroup
&& childAt.getTag(R.id.is_checkbox_linear_layout) != null &&
Boolean.TRUE.equals(childAt.getTag(R.id.is_checkbox_linear_layout))) {
LinearLayout checkboxLinearLayout = (LinearLayout) childAt;
ValidationStatus validationStatus = CheckBoxFactory
.validate(formFragmentView, checkboxLinearLayout);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}

} else if (childAt instanceof ViewGroup
&& childAt.getTag(R.id.is_number_selector_linear_layout) != null &&
Boolean.TRUE.equals(childAt.getTag(R.id.is_number_selector_linear_layout))) {
ValidationStatus validationStatus = NumberSelectorFactory
.validate(formFragmentView, (ViewGroup) childAt);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
}

return new ValidationStatus(true, null, null, null);
}

private static void setSpinnerError(MaterialSpinner spinner, String spinnerError) {
try {
spinner.setError(spinnerError);
} catch (IllegalArgumentException e) {
Log.e(TAG, e.getMessage(), e);
}
}

public JsonFormFragment getFormFragment() {
return formFragment;
}
Expand Down Expand Up @@ -411,109 +516,6 @@ public Map<String, ValidationStatus> getInvalidFields() {
return invalidFields;
}

public static ValidationStatus validate(JsonFormFragmentView formFragmentView, View childAt,
boolean requestFocus) {
if (childAt instanceof RadioGroup) {
RadioGroup radioGroup = (RadioGroup) childAt;
ValidationStatus validationStatus = NativeRadioButtonFactory
.validate(formFragmentView, radioGroup);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
} else if (childAt instanceof NativeEditText) {
NativeEditText editText = (NativeEditText) childAt;
ValidationStatus validationStatus = NativeEditTextFactory
.validate(formFragmentView, editText);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
} else if (childAt instanceof MaterialEditText) {
MaterialEditText editText = (MaterialEditText) childAt;
ValidationStatus validationStatus = EditTextFactory.validate(formFragmentView, editText);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
} else if (childAt instanceof ImageView) {
ValidationStatus validationStatus = ImagePickerFactory
.validate(formFragmentView, (ImageView) childAt);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
} else if (childAt instanceof Button) {
String type = (String) childAt.getTag(R.id.type);
if (!TextUtils.isEmpty(type) && type.equals(JsonFormConstants.GPS)) {
ValidationStatus validationStatus = GpsFactory.validate(formFragmentView, (Button) childAt);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
}
} else if (childAt instanceof MaterialSpinner) {
final MaterialSpinner spinner = (MaterialSpinner) childAt;
final ValidationStatus validationStatus = SpinnerFactory.validate(formFragmentView, spinner);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
((JsonFormActivity) formFragmentView.getContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
setSpinnerError(spinner, validationStatus.getErrorMessage());
}
});
return validationStatus;
}
} else if (childAt instanceof ViewGroup
&& childAt.getTag(R.id.is_checkbox_linear_layout) != null &&
Boolean.TRUE.equals(childAt.getTag(R.id.is_checkbox_linear_layout))) {
LinearLayout checkboxLinearLayout = (LinearLayout) childAt;
ValidationStatus validationStatus = CheckBoxFactory
.validate(formFragmentView, checkboxLinearLayout);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}

} else if (childAt instanceof ViewGroup
&& childAt.getTag(R.id.is_number_selector_linear_layout) != null &&
Boolean.TRUE.equals(childAt.getTag(R.id.is_number_selector_linear_layout))) {
ValidationStatus validationStatus = NumberSelectorFactory
.validate(formFragmentView, (ViewGroup) childAt);
if (!validationStatus.isValid()) {
if (requestFocus) {
validationStatus.requestAttention();
}
return validationStatus;
}
}

return new ValidationStatus(true, null, null, null);
}

private static void setSpinnerError(MaterialSpinner spinner, String spinnerError) {
try {
spinner.setError(spinnerError);
} catch (IllegalArgumentException e) {
Log.e(TAG, e.getMessage(), e);
}
}

public void onSaveClick(LinearLayout mainView) {
validateAndWriteValues();
checkAndStopCountdownAlarm();
Expand Down Expand Up @@ -792,18 +794,21 @@ private void setViewGroupEditable(View childElement) {
}

protected void showInformationDialog(View view) {

if (view.getTag(R.id.label_dialog_image_src) != null) {
showCustomDialog(view);
} else {
showAlertDialog(view);
}
}

@VisibleForTesting
protected AlertDialog.Builder getAlertDialogBuilder() {
return new AlertDialog.Builder(getView().getContext(),
R.style.AppThemeAlertDialog);
}

private void showAlertDialog(View view) {
AlertDialog.Builder builderSingle = new AlertDialog.Builder(getView().getContext(),
R.style.AppThemeAlertDialog);
AlertDialog.Builder builderSingle = getAlertDialogBuilder();
builderSingle.setTitle((String) view.getTag(R.id.label_dialog_title));
builderSingle.setMessage((String) view.getTag(R.id.label_dialog_info));
builderSingle.setIcon(R.drawable.dialog_info_filled);
Expand All @@ -819,8 +824,13 @@ public void onClick(DialogInterface dialog, int which) {
builderSingle.show();
}

private void showCustomDialog(View view) {
final Dialog dialog = new Dialog(view.getContext());
@VisibleForTesting
protected Dialog getCustomDialog(View view) {
return new Dialog(view.getContext());
}

private void showCustomDialog(@NonNull View view) {
final Dialog dialog = getCustomDialog(view);
dialog.setContentView(R.layout.native_form_custom_dialog);
if (dialog.getWindow() != null) {
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
Expand Down Expand Up @@ -855,7 +865,7 @@ private void showCustomDialog(View view) {
try {
dialogImage.setImageDrawable(FormUtils.readImageFromAsset(view.getContext(), imagePath));
} catch (IOException e) {
Log.e(TAG, "Encountered an error reading image from assets" + e);
Timber.e(e);
}
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.vijay.jsonwizard.presenters;

import android.Manifest.permission;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
Expand Down Expand Up @@ -536,4 +538,47 @@ public void testOnItemSelectedShouldWriteSelectedValueToForm() throws JSONExcept
nullable(String.class), nullable(String.class), nullable(String.class), eq(false));
}


@Test
public void testShowInformationDialogShouldShowCustomDialog() {
View view = new View(RuntimeEnvironment.application);
view.setTag(R.id.label_dialog_image_src, "label");
view.setTag(R.id.label_dialog_title, "title");
view.setTag(R.id.label_dialog_info, "info");

JsonFormFragmentPresenter spyPresenter = spy(presenter);
Dialog dialogSpy = spy(new Dialog(view.getContext()));
doReturn(dialogSpy).when(spyPresenter).getCustomDialog(view);
spyPresenter.showInformationDialog(view);

verify(dialogSpy, times(1)).show();

assertTrue(dialogSpy.findViewById(R.id.dialogText).isShown());

assertTrue(dialogSpy.findViewById(R.id.dialogTitle).isShown());

assertTrue(dialogSpy.findViewById(R.id.dialogImage).isShown());

dialogSpy.findViewById(R.id.dialogButton).performClick();

verify(dialogSpy, times(1)).dismiss();
}

@Test
public void testShowInformationDialogShouldShowAlertDialog() {
View view = new View(RuntimeEnvironment.application);
view.setTag(R.id.label_dialog_title, "title");
view.setTag(R.id.label_dialog_info, "info");

JsonFormFragmentPresenter spyPresenter = spy(presenter);

AlertDialog.Builder spyBuilder = spy(new AlertDialog.Builder(view.getContext(),
R.style.AppThemeAlertDialog));

doReturn(spyBuilder).when(spyPresenter).getAlertDialogBuilder();

spyPresenter.showInformationDialog(view);

verify(spyBuilder, times(1)).show();
}
}

0 comments on commit 919645e

Please sign in to comment.