diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/CodeInputPresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/CodeInputPresenter.java index a6af5c3f31d0a33a438ddb3838cb7f6e6741fb2a..509b92f6add1b9320786e64278c1a83ed847cf2c 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/CodeInputPresenter.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/CodeInputPresenter.java @@ -8,6 +8,8 @@ import com.ninja.mobile.communicator.ui.fragments.signin.InfoFragment; import com.ninja.mobile.communicator.utils.StringUtils; import com.ninja.mobile.communicator.utils.ValidationUtils; +import timber.log.Timber; + /** * Created by dmitro.boiko on 05/07/2017. **/ @@ -44,7 +46,7 @@ public class CodeInputPresenter extends BaseErrorPresenter { } private void errorFlow(Io io) { - showCodeErrorMessage(io.getStatus(), -1); + Timber.e(io.getStatus()); } private void successFlow(Io io) { @@ -70,12 +72,12 @@ public class CodeInputPresenter extends BaseErrorPresenter { mDataManager.confirmSms(StringUtils.deleteSpaces(code)); phoneNumber = phone; } else { - showCodeErrorMessage("Code is too small.", -1); + showCodeTooSmallError(); } } - private void showCodeErrorMessage(String message, int errorCode) { - getViewState().showCodeError(message, errorCode); + private void showCodeTooSmallError() { + getViewState().showCodeTooSmallError(); } private void navigateToInfoFragment() { diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/EditProfilePresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/EditProfilePresenter.java index d47c05250f93d31513d722a39f163c058ab6af9a..c83710dfb4a6fc521cd1c57b4e41b755da338af8 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/EditProfilePresenter.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/EditProfilePresenter.java @@ -13,6 +13,8 @@ import com.ninja.mobile.communicator.utils.ValidationUtils; import java.util.ArrayList; +import timber.log.Timber; + /** * Date: 25.06.17 * Time: 04:10 @@ -37,7 +39,7 @@ public class EditProfilePresenter extends BasePresenter { } else { //// FIXME: 13/07/2017 message with error if (response.data instanceof Io) { - getViewState().onErrorMessage(((Io) response.data).getStatus()); + Timber.e(((Io) response.data).getStatus()); } } } @@ -55,10 +57,6 @@ public class EditProfilePresenter extends BasePresenter { getViewState().navigateBack(mProfile); } - private void showErrorMessage(String errorMessage) { - getViewState().onErrorMessage(errorMessage); - } - public void saveClick(Profile profile, String firstName, String lastName) { if (ValidationUtils.isNameValid(firstName)) { updateProfile(profile, firstName, lastName); @@ -69,13 +67,12 @@ public class EditProfilePresenter extends BasePresenter { private void createErrorMessage(String firstName) { //// FIXME: 30/06/2017 add error messages - String errorMessage; - if (TextUtils.isEmpty(firstName)) { - errorMessage = "FirstName cannot be empty."; + + if (firstName.isEmpty()){ + getViewState().showErrorEmptyFirstName(); } else { - errorMessage = "FirstName length should be at least 2 symbols."; + getViewState().showErrorTooSmallFirstName(); } - showErrorMessage(errorMessage); } private void updateProfile(Profile profile, String firstName, String lastName) { diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/InfoPresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/InfoPresenter.java index 4a44953f1cb2382dcb53f59be1d8f2681b0cf481..5357341ce3a2992b9fb976a24be0e13f075394d8 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/InfoPresenter.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/InfoPresenter.java @@ -17,6 +17,8 @@ import com.ninja.mobile.communicator.utils.ValidationUtils; import java.util.ArrayList; +import timber.log.Timber; + @InjectViewState public class InfoPresenter extends BaseErrorPresenter { @@ -37,7 +39,7 @@ public class InfoPresenter extends BaseErrorPresenter { } else { //// FIXME: 13/07/2017 message with error if (response.data instanceof Io) { - showErrorMessage(((Io) response.data).getStatus(), -1); + Timber.e(((Io) response.data).getStatus()); } } } @@ -54,8 +56,8 @@ public class InfoPresenter extends BaseErrorPresenter { } } - private void showErrorMessage(String message, int messageId) { - getViewState().showCodeError(message, messageId); + public void validateFirstName(String fName){ + getViewState().enableNextButton(ValidationUtils.isNameValid(fName)); } public void onSaveClick(String firstName, String lastName) { @@ -76,13 +78,11 @@ public class InfoPresenter extends BaseErrorPresenter { private void createErrorMessage(String firstName) { //// FIXME: 30/06/2017 add error messages - String errorMessage; - if (TextUtils.isEmpty(firstName)) { - errorMessage = "FirstName cannot be empty."; + if (firstName.isEmpty()){ + getViewState().showErrorEmptyFirstName(); } else { - errorMessage = "FirstName length should be at least 2 symbols."; + getViewState().showErrorTooSmallFirstName(); } - showErrorMessage(errorMessage, -1); } public void getProfile() { diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/LoginPresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/LoginPresenter.java index 1e452bbe496046528908e1efe7677721a7698c73..1395fc06c37775420fe73fb0d8f230aa362b9f1f 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/LoginPresenter.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/LoginPresenter.java @@ -14,6 +14,7 @@ import com.ninja.mobile.communicator.utils.Utils; import io.reactivex.Observable; import io.reactivex.disposables.Disposable; +import timber.log.Timber; /** * Date: 25.06.17 @@ -171,7 +172,7 @@ public class LoginPresenter extends BasePresenter { case Io.Responses.MISMATCH_USER_DATA: case Io.Responses.ERROR: default: - getViewState().showCodeError(io.getStatus(), -2); + Timber.e(io.getStatus()); break; } } @@ -186,7 +187,7 @@ public class LoginPresenter extends BasePresenter { break; default: //ShowError - getViewState().showCodeError(io.getStatus(), -2); + Timber.e(io.getStatus()); break; } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/MainPresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/MainPresenter.java index 1c1dfa278ae5ab0c120aaf7e9de71a8cda48aaa8..847b263347f7f8a9949ab5ea462b385bc8513d6c 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/MainPresenter.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/MainPresenter.java @@ -35,11 +35,11 @@ public class MainPresenter extends BaseErrorPresenter { manageProfile(response); } else { // FIXME: 12.07.2017 show error - getViewState().showCodeError("Model error", -1); + Timber.e("Model error"); } } else { // FIXME: 12.07.2017 show error - getViewState().showCodeError("error", -1); + Timber.e("error"); } } catch (Exception e) { Timber.e(e); @@ -50,7 +50,7 @@ public class MainPresenter extends BaseErrorPresenter { mDataManager.saveProfile((Profile) response.data); Profile profile = (Profile) response.data; if (profile.status.equals(BaseModelMQQT.Types.GET)) { - getViewState().showCodeError("Profile successfully received", -1); + Timber.e("Profile successfully received"); } else { getViewState().navigateToSplash(); mDataManager.clearPreferences(); diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/CodeInputView.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/CodeInputView.java index 496d39170cde3570b13178403b3278735b28c11e..93cd8bf3bb4283c50c2af808b57cb9992f45181d 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/CodeInputView.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/CodeInputView.java @@ -20,4 +20,6 @@ public interface CodeInputView extends ErrorMvpView { void onFinishTimer(); void showSuccessCodeSendMessage(); + + void showCodeTooSmallError(); } diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/EditProfileView.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/EditProfileView.java index f4263be8fda649d4d561a81236dfc9a7befc7c28..766895f7c27d3aebaf58172934c219c756aafdfc 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/EditProfileView.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/EditProfileView.java @@ -9,7 +9,9 @@ import com.ninja.mobile.communicator.data.models.mqtt.Profile; public interface EditProfileView extends MvpView { - void onErrorMessage(String errorMessage); + void showErrorEmptyFirstName(); + + void showErrorTooSmallFirstName(); void navigateBack(Profile userPerson); } diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/ErrorMvpView.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/ErrorMvpView.java index be6da69964a65ed93e684796fed4910f2060d920..9e03bc95d0e379e8672735cf7c7a3118376460c2 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/ErrorMvpView.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/ErrorMvpView.java @@ -13,6 +13,4 @@ public interface ErrorMvpView extends MvpView{ @StateStrategyType(SingleStateStrategy.class) void showInternetError(); - @StateStrategyType(SingleStateStrategy.class) - void showCodeError(String message, int code); } diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/InfoView.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/InfoView.java index 6b11bbd505d3edd998952cdd75b49141bef16130..6e266da02770f8d322f2762f688696e4ccfaf0a9 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/InfoView.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/InfoView.java @@ -8,7 +8,13 @@ import com.ninja.mobile.communicator.data.models.mqtt.Profile; public interface InfoView extends ErrorMvpView { + void showErrorEmptyFirstName(); + + void showErrorTooSmallFirstName(); + void navigateForward(Profile roster); void initPerson(Profile profile); + + void enableNextButton(boolean enable); } diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/activities/MainActivity.java b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/MainActivity.java index 76889db881b15cc7f30acd8fa5d8ebf8388c12bc..128463cef45d84955a4c26a2516906c947537ac4 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/activities/MainActivity.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/MainActivity.java @@ -51,9 +51,6 @@ public class MainActivity extends BaseActivity implements MainView { showAlert(getString(R.string.error_no_internet_connection), null); } - @Override public void showCodeError(String message, int code) { - showAlert(message, null); - } @Override public void navigateToSplash() { startActivity(WelcomeActivity.getLaunchIntent(this)); @@ -64,7 +61,20 @@ public class MainActivity extends BaseActivity implements MainView { startActivity(ProfileActivity.getLaunchIntent(this, ProfileActivity.ProfileTypes.MyProfile)); } + private void showAlert(int msg){ + showAlert(msg, null); + } + + private void showAlert(int msg, DialogInterface.OnClickListener listener){ + showAlert(getString(msg), listener); + + } + private void showAlert(String message, DialogInterface.OnClickListener listener) { + + if (listener == null){ + listener = (dialog, which) -> dialog.dismiss(); + } //// FIXME: 02.07.17 move to dialog utils/factory AlertDialog alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setTitle(getString(R.string.app_name)); diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/base/BaseFragment.java b/app/src/main/java/com/ninja/mobile/communicator/ui/base/BaseFragment.java index 754646a2c9580667f90c8930c4cd9caeb663c9ce..5d11a93b84760280dea63d0dd3540f96b56a73af 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/base/BaseFragment.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/base/BaseFragment.java @@ -44,11 +44,19 @@ public abstract class BaseFragment extends MvpAppCompatFragment { return false; } - protected void showAlert(@StringRes int id, DialogInterface.OnClickListener listener) { + protected void showAlert(@StringRes int id){ + showAlert(id, null); + } + + protected void showAlert(@StringRes int id, @Nullable DialogInterface.OnClickListener listener) { showAlert(getString(id), listener); } - protected void showAlert(String message, DialogInterface.OnClickListener listener) { + protected void showAlert(String message, @Nullable DialogInterface.OnClickListener listener) { + + if (listener == null) { + listener = (dialog, which) -> dialog.dismiss(); + } //// FIXME: 02.07.17 move to dialog utils/factory AlertDialog alertDialog = new AlertDialog.Builder(getContext()).create(); alertDialog.setTitle(getString(R.string.app_name)); diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/EditProfileFragment.java b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/EditProfileFragment.java index 4e68a8bfb846df4dbbde69f39e98b80264595215..124b5c5d06cf1e93dae51caa83a91d7f90c59dba 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/EditProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/EditProfileFragment.java @@ -65,9 +65,12 @@ public class EditProfileFragment extends BaseFragment implements EditProfileView mPresenter.saveClick(mProfile, StringUtils.getText(mFirstName), StringUtils.getText(mLastName)); } - @Override - public void onErrorMessage(String errorMessage) { + @Override public void showErrorEmptyFirstName() { + showAlert(R.string.signin_text_fname_empty); + } + @Override public void showErrorTooSmallFirstName() { + showAlert(R.string.signin_text_too_smal); } @Override diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/CodeInputFragment.java b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/CodeInputFragment.java index 5c6d74933c255832ec41e026fda07c748345b832..6fc40167880a8d3c5951585670b74da4b8dd2682 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/CodeInputFragment.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/CodeInputFragment.java @@ -124,7 +124,7 @@ public class CodeInputFragment extends BaseFragment implements CodeInputView { showAlert(getString(R.string.error_no_internet_connection), null); } - @Override public void showCodeError(String message, int code) { - showAlert(message, null); + @Override public void showCodeTooSmallError() { + showAlert(R.string.signin_text_code_small); } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/InfoFragment.java b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/InfoFragment.java index 93ba7185951cd1d63c20de22c3d9409b7748065f..bcc3d0cfca7b3e9021a1f4c3d82f2d2dad1f205c 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/InfoFragment.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/InfoFragment.java @@ -3,9 +3,13 @@ package com.ninja.mobile.communicator.ui.fragments.signin; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.TextInputEditText; +import android.text.Editable; +import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageButton; import com.arellomobile.mvp.presenter.InjectPresenter; import com.ninja.mobile.communicator.R; @@ -32,6 +36,7 @@ public class InfoFragment extends BaseFragment implements InfoView { TextInputEditText mFirstName; @BindView(R.id.f_iname_edt_last_name) TextInputEditText mLastName; + @BindView(R.id.f_iname_btn_next) ImageButton next; @InjectPresenter InfoPresenter infoPresenter; @@ -53,6 +58,7 @@ public class InfoFragment extends BaseFragment implements InfoView { @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + initFirstNameValidation(); } @Nullable @@ -74,14 +80,35 @@ public class InfoFragment extends BaseFragment implements InfoView { infoPresenter.onSaveClick(StringUtils.getText(mFirstName), StringUtils.getText(mLastName)); } + private void initFirstNameValidation(){ + mFirstName.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override public void afterTextChanged(Editable s) { + infoPresenter.validateFirstName(s.toString()); + } + }); + } + @Override public void showInternetError() { showAlert(R.string.error_no_internet_connection, null); } - @Override - public void showCodeError(String message, int code) { - showAlert(message, null); + + @Override public void showErrorEmptyFirstName() { + showAlert(R.string.signin_text_fname_empty); + } + + @Override public void showErrorTooSmallFirstName() { + showAlert(R.string.signin_text_too_smal); } @Override @@ -93,4 +120,8 @@ public class InfoFragment extends BaseFragment implements InfoView { public void initPerson(Profile profile) { setUserModel(profile); } + + @Override public void enableNextButton(boolean enable) { + next.setEnabled(enable); + } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/LoginFragment.java b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/LoginFragment.java index 1131d5cfe6f1c6620cfde581faecb076efd9822d..7bfc464f9af120679f31e29646cde1cb6a7bc9f0 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/LoginFragment.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/signin/LoginFragment.java @@ -26,6 +26,7 @@ import com.ninja.mobile.communicator.ui.activities.RegistrationActivity; import com.ninja.mobile.communicator.ui.adapters.CountryWheelAdapter; import com.ninja.mobile.communicator.ui.base.BaseFragment; import com.ninja.mobile.communicator.ui.views.HintEditText; +import com.ninja.mobile.communicator.ui.views.HintEditTextAlwaysKeyboard; import com.ninja.mobile.communicator.ui.views.wheel.WheelView; import com.ninja.mobile.communicator.utils.PhoneWatcher; import com.ninja.mobile.communicator.utils.SpannableUtils; @@ -49,7 +50,7 @@ public class LoginFragment extends BaseFragment implements LoginView { @BindView(R.id.f_iphone_tv_country) TextView mCountry; @BindView(R.id.f_iphone_edt_country_code) EditText mCountryCode; - @BindView(R.id.f_iphone_edt_number) HintEditText mPhoneEditText; + @BindView(R.id.f_iphone_edt_number) HintEditTextAlwaysKeyboard mPhoneEditText; @BindView(R.id.f_iphone_tv_description) TextView mTermsOfUse; @BindView(R.id.f_iphone_btn_next) ImageButton nextButton; @@ -170,7 +171,7 @@ public class LoginFragment extends BaseFragment implements LoginView { } private void initSpannableTerms() { - View.OnClickListener onClickListener = v -> Toast.makeText(getActivity(), "It is not working now :-(", Toast.LENGTH_SHORT).show(); + View.OnClickListener onClickListener = v -> Toast.makeText(getActivity(), R.string.not_working_now, Toast.LENGTH_SHORT).show(); SpannableUtils.setSpannable(getActivity(), mTermsOfUse, R.string.signin_text_description, R.string.signin_text_description_highlight, onClickListener); } @@ -178,9 +179,6 @@ public class LoginFragment extends BaseFragment implements LoginView { Toast.makeText(getContext(), R.string.error_no_internet_connection, Toast.LENGTH_SHORT).show(); } - @Override public void showCodeError(String message, int code) { - - } @Override protected boolean shouldRetainInstance() { return true; diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/views/HintEditTextAlwaysKeyboard.java b/app/src/main/java/com/ninja/mobile/communicator/ui/views/HintEditTextAlwaysKeyboard.java new file mode 100644 index 0000000000000000000000000000000000000000..50db6e3738193539d83da3cf2e1f5a16277b2c89 --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/views/HintEditTextAlwaysKeyboard.java @@ -0,0 +1,25 @@ +package com.ninja.mobile.communicator.ui.views; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.KeyEvent; + +public class HintEditTextAlwaysKeyboard extends HintEditText { + public HintEditTextAlwaysKeyboard(Context context) { + super(context); + } + + public HintEditTextAlwaysKeyboard(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public HintEditTextAlwaysKeyboard(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + + @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { +// if (keyCode == KeyEvent.KEYCODE_BACK) + return true; + } +} diff --git a/app/src/main/res/layout/fragment_input_phone.xml b/app/src/main/res/layout/fragment_input_phone.xml index 79b965c8695740575bcdea609ebedacf695e4f06..862988e43030ec0156e47f1803b93ea8d5ed4271 100644 --- a/app/src/main/res/layout/fragment_input_phone.xml +++ b/app/src/main/res/layout/fragment_input_phone.xml @@ -119,7 +119,7 @@ app:layout_constraintVertical_bias="0.5" tools:text="1237"/> - - NYNJA + NYNJA Mobile Communicator Welcome to Get started @@ -18,6 +18,12 @@ First Name\u002A Last Name --- --- + First name is too small + First name can\'t be empty + Code is too small + + + "It is not working now :-(" Camera