From 6819fc535778a9518403e6666d972c710f817ba6 Mon Sep 17 00:00:00 2001 From: BoykoDmytro Date: Thu, 13 Jul 2017 19:42:46 +0300 Subject: [PATCH 1/3] fixed model fro Friend, fixed qr codes. --- .../communicator/data/models/mqtt/Friend.java | 27 ++++++++++++++++ .../communicator/data/models/mqtt/Roster.java | 4 +++ .../data/models/right_models/Friend.java | 13 -------- .../mvp/presenters/UserProfilePresenter.java | 26 +++++++++++++-- .../mvp/view/UserProfileView.java | 4 +-- .../activities/QRCodeGeneratorActivity.java | 3 +- .../ui/activities/QRCodeReaderActivity.java | 32 +++++++++++-------- .../profile/UserProfileFragment.java | 24 +++++++------- 8 files changed, 87 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Friend.java delete mode 100644 app/src/main/java/com/ninja/mobile/communicator/data/models/right_models/Friend.java diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Friend.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Friend.java new file mode 100644 index 0000000000..2a23b611c1 --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Friend.java @@ -0,0 +1,27 @@ +package com.ninja.mobile.communicator.data.models.mqtt; + +import com.ninja.mobile.communicator.data.models.mqtt.annotations.Order; +import com.ninja.mobile.communicator.data.server.bert.BertTuple; + +public class Friend extends BaseModelMQQT { + + @Order(value = 1) + public Long id; + @Order(value = 2) + public String roster_id; + @Order(value = 3) + public String friend_id; + @Order(value = 4) + public String status; + + public Friend() { + } + + @Override Friend decode(BertTuple bertTuple) { + return null; + } + + @Override public Object encode() { + return null; + } +} diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Roster.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Roster.java index 50a2ec5d21..a5290b088f 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Roster.java +++ b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Roster.java @@ -27,6 +27,10 @@ public class Roster extends BaseModelMQQT implements Parcelable { public Roster() { } + public String getRosterId() { + return phone + "_" + id; + } + public static Roster getMockData() { Roster roster = new Roster(); roster.id = new Random().nextInt(1000); diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/right_models/Friend.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/right_models/Friend.java deleted file mode 100644 index e71144302d..0000000000 --- a/app/src/main/java/com/ninja/mobile/communicator/data/models/right_models/Friend.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ninja.mobile.communicator.data.models.right_models; - -public class Friend { - - public long id; - public String roster_id; - public String friend_id; - public String status; - - public Friend() { - } - -} diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/UserProfilePresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/UserProfilePresenter.java index a1e3706712..fa22266ecb 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/UserProfilePresenter.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/UserProfilePresenter.java @@ -1,9 +1,13 @@ package com.ninja.mobile.communicator.mvp.presenters; import com.arellomobile.mvp.InjectViewState; -import com.ninja.mobile.communicator.data.models.mqtt.Profile; +import com.ninja.mobile.communicator.data.models.events.ServerData; +import com.ninja.mobile.communicator.data.models.mqtt.Response; +import com.ninja.mobile.communicator.data.models.mqtt.Roster; import com.ninja.mobile.communicator.mvp.view.UserProfileView; +import timber.log.Timber; + /** * Created by dmitro.boiko on 03/07/2017. */ @@ -11,8 +15,23 @@ import com.ninja.mobile.communicator.mvp.view.UserProfileView; @InjectViewState public class UserProfilePresenter extends BasePresenter { - public void setUser(Profile profile) { - getViewState().setUser(profile); + @Override protected void onFirstViewAttach() { + super.onFirstViewAttach(); + addDisposable(mDataManager.getInputSubject() + .filter(data -> data instanceof ServerData) + .map(data -> new Response(((ServerData) data).getData().getPayload(), Roster.class)) + .filter(data -> data != null) + .subscribe(this::handleResponse, Timber::e)); + } + + private void handleResponse(Response response) { + if (response.data instanceof Roster){ + setUser((Roster) response.data); + } + } + + public void setUser(Roster roster) { + getViewState().setUser(roster); } public void showError(String error) { @@ -20,5 +39,6 @@ public class UserProfilePresenter extends BasePresenter { } public void geUserById(long userId) { + } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/UserProfileView.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/UserProfileView.java index 5b1fdfd3af..250a46464e 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/UserProfileView.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/UserProfileView.java @@ -3,7 +3,7 @@ package com.ninja.mobile.communicator.mvp.view; import android.support.annotation.NonNull; import com.arellomobile.mvp.MvpView; -import com.ninja.mobile.communicator.data.models.mqtt.Profile; +import com.ninja.mobile.communicator.data.models.mqtt.Roster; /** * Created by dmitro.boiko on 03/07/2017. @@ -11,7 +11,7 @@ import com.ninja.mobile.communicator.data.models.mqtt.Profile; public interface UserProfileView extends MvpView{ - void setUser(@NonNull Profile account); + void setUser(@NonNull Roster account); void showError(String error); } diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/activities/QRCodeGeneratorActivity.java b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/QRCodeGeneratorActivity.java index 6c225fcafc..c70cce7f91 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/activities/QRCodeGeneratorActivity.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/QRCodeGeneratorActivity.java @@ -39,10 +39,9 @@ public class QRCodeGeneratorActivity extends BaseActivity { setContentView(R.layout.activity_qr_code_generator); if (getIntent() != null && getIntent().getExtras() != null) { try { - //// FIXME: 29.06.2017 add real data Profile profile = getIntent().getParcelableExtra(MyProfileFragment.EDIT_PROFILE_TAG); Roster roster = profile.getRoster(); - String data = profile.phone + ";" + roster.getFullName(); + String data = roster.getRosterId() + ";" + roster.getFullName(); Bitmap qrCodeBitmap = ZxingEncoder.getInstance().generate_QR_CODE(data); qrCode.setImageBitmap(qrCodeBitmap); } catch (WriterException e) { diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/activities/QRCodeReaderActivity.java b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/QRCodeReaderActivity.java index 1c4dca4bec..489b51914b 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/activities/QRCodeReaderActivity.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/QRCodeReaderActivity.java @@ -8,6 +8,8 @@ import android.os.Bundle; import com.ninja.mobile.communicator.ui.base.BaseActivity; +import java.net.URLDecoder; + import butterknife.OnClick; import me.dm7.barcodescanner.zbar.Result; import me.dm7.barcodescanner.zbar.ZBarScannerView; @@ -48,20 +50,24 @@ public class QRCodeReaderActivity extends BaseActivity implements ZBarScannerVie @Override public void handleResult(Result rawResult) { - AlertDialog.Builder builder; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert); - } else { - builder = new AlertDialog.Builder(this); + try { + AlertDialog.Builder builder; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert); + } else { + builder = new AlertDialog.Builder(this); + } + builder.setTitle("QR Scanner") + .setMessage("Format: " + rawResult.getBarcodeFormat().getName() + " \n" + + "Result: " + URLDecoder.decode(rawResult.getContents(), "UTF-8")) + .setPositiveButton(android.R.string.yes, (dialog, which) -> { + // continue with delete + finish(); + }) + .show(); + } catch (Exception e) { + e.printStackTrace(); } - builder.setTitle("QR Scanner") - .setMessage("Format: " + rawResult.getBarcodeFormat().getName() - + " Result: " + rawResult.getContents()) - .setPositiveButton(android.R.string.yes, (dialog, which) -> { - // continue with delete - finish(); - }) - .show(); } @OnClick(android.R.id.content) diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/UserProfileFragment.java b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/UserProfileFragment.java index 2ab03b5fe3..450574ccad 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/UserProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/UserProfileFragment.java @@ -11,7 +11,6 @@ import android.widget.Toast; import com.arellomobile.mvp.presenter.InjectPresenter; import com.ninja.mobile.communicator.R; -import com.ninja.mobile.communicator.data.models.mqtt.Profile; import com.ninja.mobile.communicator.data.models.mqtt.Roster; import com.ninja.mobile.communicator.mvp.presenters.UserProfilePresenter; import com.ninja.mobile.communicator.mvp.view.UserProfileView; @@ -34,18 +33,18 @@ public class UserProfileFragment extends BaseFragment implements UserProfileView @InjectPresenter UserProfilePresenter mPresenter; - public static UserProfileFragment newInstance(Profile profile) { + public static UserProfileFragment newInstance(Roster roster) { UserProfileFragment userProfileFragment = new UserProfileFragment(); Bundle args = new Bundle(); - args.putParcelable(ACCOUNT_TAG, profile); + args.putParcelable(ACCOUNT_TAG, roster); userProfileFragment.setArguments(args); return userProfileFragment; } - public static UserProfileFragment newInstance(long userId) { + public static UserProfileFragment newInstance(long rosterId) { UserProfileFragment userProfileFragment = new UserProfileFragment(); Bundle args = new Bundle(); - args.putLong(USER_ID_TAG, userId); + args.putLong(USER_ID_TAG, rosterId); userProfileFragment.setArguments(args); return userProfileFragment; } @@ -60,9 +59,9 @@ public class UserProfileFragment extends BaseFragment implements UserProfileView super.onViewCreated(view, savedInstanceState); Bundle arguments = getArguments(); if (arguments != null) { - Profile account = getArguments().getParcelable(ACCOUNT_TAG); - if (account != null) { - mPresenter.setUser(account); + Roster roster = getArguments().getParcelable(ACCOUNT_TAG); + if (roster != null) { + mPresenter.setUser(roster); } else { long userId = arguments.getLong(USER_ID_TAG); //// FIXME: 03/07/2017 add request for user account @@ -71,16 +70,15 @@ public class UserProfileFragment extends BaseFragment implements UserProfileView } } - private void initViews(@NonNull Profile profile) { - Roster roster = profile.getRoster(); + private void initViews(@NonNull Roster roster) { mUserName.setText(roster.getFullName()); - mUserPhone.setText(profile.phone); + mUserPhone.setText(roster.phone); //// FIXME: 10/07/2017 isFriend field mAddContact.setVisibility(true ? View.INVISIBLE : View.VISIBLE); } - @Override public void setUser(@NonNull Profile account) { - initViews(account); + @Override public void setUser(@NonNull Roster roster) { + initViews(roster); } @Override public void showError(String error) { -- GitLab From 32317ea8c6abe90c18df89fba1022e29048864eb Mon Sep 17 00:00:00 2001 From: Dmitro Boiko Date: Fri, 14 Jul 2017 00:05:42 +0300 Subject: [PATCH 2/3] implement info fragment, fixed UI bugs, code refactoring. --- .../mvp/presenters/CodeInputPresenter.java | 10 +- .../mvp/presenters/EditProfilePresenter.java | 58 ++++++---- .../mvp/presenters/InfoPresenter.java | 104 ++++++++++++++++++ .../mvp/presenters/MainPresenter.java | 21 +++- .../mvp/presenters/MyProfilePresenter.java | 7 +- .../communicator/mvp/view/CodeInputView.java | 4 +- .../communicator/mvp/view/InfoView.java | 14 +++ .../communicator/mvp/view/MyProfileView.java | 4 +- .../ui/activities/RegistrationActivity.java | 27 +++-- .../communicator/ui/base/BaseFragment.java | 17 +++ .../fragments/profile/MyProfileFragment.java | 15 +-- .../fragments/signin/CodeInputFragment.java | 13 --- .../ui/fragments/signin/InfoFragment.java | 82 +++++++++++++- .../ui/fragments/signin/LoginFragment.java | 9 -- .../communicator/utils/ValidationUtils.java | 2 +- 15 files changed, 308 insertions(+), 79 deletions(-) create mode 100644 app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/InfoPresenter.java create mode 100644 app/src/main/java/com/ninja/mobile/communicator/mvp/view/InfoView.java 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 be81988c32..ba8f3d011a 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 @@ -5,6 +5,7 @@ import com.ninja.mobile.communicator.data.models.events.ServerData; import com.ninja.mobile.communicator.data.models.mqtt.Io; import com.ninja.mobile.communicator.data.models.mqtt.Response; import com.ninja.mobile.communicator.mvp.view.CodeInputView; +import com.ninja.mobile.communicator.ui.fragments.signin.InfoFragment; import com.ninja.mobile.communicator.utils.StringUtils; import com.ninja.mobile.communicator.utils.ValidationUtils; @@ -12,7 +13,7 @@ import timber.log.Timber; /** * Created by dmitro.boiko on 05/07/2017. - */ + **/ @InjectViewState public class CodeInputPresenter extends BaseErrorPresenter { @@ -37,7 +38,6 @@ public class CodeInputPresenter extends BaseErrorPresenter { } else { errorFlow(io); } - } } @@ -48,7 +48,7 @@ public class CodeInputPresenter extends BaseErrorPresenter { private void successFlow(Io io) { switch (io.getStatus()) { case Io.Responses.LOGIN: - navigateToMyProfile(); + navigateToInfoFragment(); mDataManager.setPhoneNumber(StringUtils.deleteSpaces(phoneNumber.replaceAll("\\+", ""))); mDataManager.setIsUserConfirmed(); break; @@ -76,7 +76,7 @@ public class CodeInputPresenter extends BaseErrorPresenter { getViewState().showCodeError(message, errorCode); } - private void navigateToMyProfile() { - getViewState().navigateToMyProfileScreen(); + private void navigateToInfoFragment() { + mRouter.replaceScreen(InfoFragment.class.getSimpleName(), null); } } 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 5a1ea31607..6c3712e602 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 @@ -40,15 +40,7 @@ public class EditProfilePresenter extends BasePresenter { private void handleResponse(Response response) { if (response.isSuccess()) { if (response.data instanceof Roster) { - Roster newRoster = (Roster) response.data; - ArrayList accounts = mProfile.accounts; - for (int i = 0; i < accounts.size(); i++) { - if (accounts.get(i).id.equals(newRoster.id)) { - accounts.set(i, newRoster); - break; - } - } - getViewState().navigateBack(mProfile); + manageRoster(response); } else { //// FIXME: 13/07/2017 message with error if (response.data instanceof Io) { @@ -58,27 +50,47 @@ public class EditProfilePresenter extends BasePresenter { } } + private void manageRoster(Response response) { + Roster newRoster = (Roster) response.data; + ArrayList accounts = mProfile.accounts; + for (int i = 0; i < accounts.size(); i++) { + if (accounts.get(i).id.equals(newRoster.id)) { + accounts.set(i, newRoster); + break; + } + } + getViewState().navigateBack(mProfile); + } + private void showErrorMessage(String errorMessage) { getViewState().onErrorMessage(errorMessage); } public void saveClick(Profile profile, String firstName, String lastName) { if (ValidationUtils.isNameValid(firstName)) { - mProfile = profile; - Roster roster = profile.getRoster(); - roster.names = firstName; - roster.surnames = lastName; - roster.status = BaseModelMQQT.Types.SET; - mDataManager.updateRoster(roster); + updateProfile(profile, firstName, lastName); } else { - //// FIXME: 30/06/2017 add error messages - String errorMessage; - if (TextUtils.isEmpty(firstName)) { - errorMessage = "FirstName cannot be empty."; - } else { - errorMessage = "FirstName length should be at least 2 symbols."; - } - showErrorMessage(errorMessage); + createErrorMessage(firstName); } } + + private void createErrorMessage(String firstName) { + //// FIXME: 30/06/2017 add error messages + String errorMessage; + if (TextUtils.isEmpty(firstName)) { + errorMessage = "FirstName cannot be empty."; + } else { + errorMessage = "FirstName length should be at least 2 symbols."; + } + showErrorMessage(errorMessage); + } + + private void updateProfile(Profile profile, String firstName, String lastName) { + mProfile = profile; + Roster roster = profile.getRoster(); + roster.names = firstName; + roster.surnames = lastName; + roster.status = BaseModelMQQT.Types.SET; + mDataManager.updateRoster(roster); + } } 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 new file mode 100644 index 0000000000..eb633cd614 --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/InfoPresenter.java @@ -0,0 +1,104 @@ +package com.ninja.mobile.communicator.mvp.presenters; + +/* + * Created by Bo on 13.07.2017. + */ + +import android.text.TextUtils; + +import com.arellomobile.mvp.InjectViewState; +import com.ninja.mobile.communicator.data.models.events.ServerData; +import com.ninja.mobile.communicator.data.models.mqtt.BaseModelMQQT; +import com.ninja.mobile.communicator.data.models.mqtt.Io; +import com.ninja.mobile.communicator.data.models.mqtt.Profile; +import com.ninja.mobile.communicator.data.models.mqtt.Response; +import com.ninja.mobile.communicator.data.models.mqtt.Roster; +import com.ninja.mobile.communicator.mvp.view.InfoView; +import com.ninja.mobile.communicator.utils.ValidationUtils; + +import java.util.ArrayList; + +import timber.log.Timber; + +@InjectViewState +public class InfoPresenter extends BaseErrorPresenter { + + private Profile mProfile; + + @Override + protected void onFirstViewAttach() { + super.onFirstViewAttach(); + addDisposable(mDataManager.getInputSubject() + .filter(data -> data instanceof ServerData) + .map(data -> new Response(((ServerData) data).getData().getPayload(), Profile.class, Roster.class)) + .filter(data -> data != null) + .subscribe(this::handleResponse, Timber::e)); + } + + private void handleResponse(Response response) { + if (response.isSuccess()) { + if (response.data instanceof Roster) { + updateProfile(response); + getViewState().navigateForward(mProfile); + } else if (response.data instanceof Profile) { + initProfile((Profile) response.data); + } else { + //// FIXME: 13/07/2017 message with error + if (response.data instanceof Io) { + showErrorMessage(((Io) response.data).getStatus(), -1); + } + } + } + } + + private void updateProfile(Response response) { + Roster newRoster = (Roster) response.data; + ArrayList accounts = mProfile.accounts; + for (int i = 0; i < accounts.size(); i++) { + if (accounts.get(i).id.equals(newRoster.id)) { + accounts.set(i, newRoster); + break; + } + } + } + + private void showErrorMessage(String message, int messageId) { + getViewState().showCodeError(message, messageId); + } + + public void onSaveClick(String firstName, String lastName) { + if (ValidationUtils.isNameValid(firstName)) { + updateRoster(firstName, lastName); + } else { + createErrorMessage(firstName); + } + } + + private void updateRoster(String firstName, String lastName) { + Roster roster = mProfile.getRoster(); + roster.names = firstName; + roster.surnames = lastName; + roster.status = BaseModelMQQT.Types.SET; + mDataManager.updateRoster(roster); + } + + private void createErrorMessage(String firstName) { + //// FIXME: 30/06/2017 add error messages + String errorMessage; + if (TextUtils.isEmpty(firstName)) { + errorMessage = "FirstName cannot be empty."; + } else { + errorMessage = "FirstName length should be at least 2 symbols."; + } + showErrorMessage(errorMessage, -1); + } + + public void getProfile() { + mDataManager.getProfileWithPersons(); + } + + private void initProfile(Profile profile) { + mProfile = profile; + getViewState().initPerson(profile); + } +} 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 131fa66451..a75da84bd6 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 @@ -2,6 +2,7 @@ package com.ninja.mobile.communicator.mvp.presenters; import com.arellomobile.mvp.InjectViewState; import com.ninja.mobile.communicator.data.models.events.ServerData; +import com.ninja.mobile.communicator.data.models.mqtt.BaseModelMQQT; import com.ninja.mobile.communicator.data.models.mqtt.Profile; import com.ninja.mobile.communicator.data.models.mqtt.Response; import com.ninja.mobile.communicator.mvp.view.MainView; @@ -10,7 +11,7 @@ import timber.log.Timber; /** * Created by dmitro.boiko on 07/07/2017. - */ + **/ @InjectViewState public class MainPresenter extends BaseErrorPresenter { @@ -37,17 +38,31 @@ public class MainPresenter extends BaseErrorPresenter { try { if (response.isSuccess()) { if (response.data instanceof Profile) { - mDataManager.saveProfile((Profile) response.data); + manageProfile(response); } else { // FIXME: 12.07.2017 show error + getViewState().showCodeError("Model error", -1); } + } else { + // FIXME: 12.07.2017 show error + getViewState().showCodeError("error", -1); } - } catch (Exception e) { Timber.e(e); } } + private void manageProfile(Response response) { + mDataManager.saveProfile((Profile) response.data); + Profile profile = (Profile) response.data; + if (profile.status.equals(BaseModelMQQT.Types.GET)) { + getViewState().showCodeError("Profile successfully received", -1); + } else { + getViewState().navigateToSplash(); + mDataManager.clearPreferences(); + } + } + public void onMyProfileClick() { getViewState().navigateToMyProfile(mDataManager.getProfile()); } diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/MyProfilePresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/MyProfilePresenter.java index 23aed22006..e9f1b88d1a 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/MyProfilePresenter.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/MyProfilePresenter.java @@ -15,6 +15,8 @@ import timber.log.Timber; @InjectViewState public class MyProfilePresenter extends BasePresenter { + private Profile mProfile; + public MyProfilePresenter() { addDisposable(mDataManager.getInputSubject() .filter(data -> data instanceof ServerData) @@ -36,11 +38,11 @@ public class MyProfilePresenter extends BasePresenter { } public void clickOnEditProfile() { - getViewState().navigateToEditProfile(); + getViewState().navigateToEditProfile(mProfile); } public void clickOnQrCode() { - getViewState().navigateToQqCode(); + getViewState().navigateToQqCode(mProfile); } public void clickOnCamera() { @@ -56,6 +58,7 @@ public class MyProfilePresenter extends BasePresenter { } private void initProfile(Profile profile) { + mProfile = profile; getViewState().initPerson(profile); } 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 0f5ab9d07f..1d5ae937e3 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 @@ -2,11 +2,9 @@ package com.ninja.mobile.communicator.mvp.view; /** * Created by dmitro.boiko on 05/07/2017. - */ + **/ public interface CodeInputView extends ErrorMvpView { - void navigateToMyProfileScreen(); - void showSuccessCodeSendMessage(); } 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 new file mode 100644 index 0000000000..6b11bbd505 --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/InfoView.java @@ -0,0 +1,14 @@ +package com.ninja.mobile.communicator.mvp.view; + +/* + * Created by Bo on 13.07.2017. + */ + +import com.ninja.mobile.communicator.data.models.mqtt.Profile; + +public interface InfoView extends ErrorMvpView { + + void navigateForward(Profile roster); + + void initPerson(Profile profile); +} diff --git a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/MyProfileView.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/MyProfileView.java index 8bc395f166..61dff26bbe 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/mvp/view/MyProfileView.java +++ b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/MyProfileView.java @@ -10,9 +10,9 @@ import com.ninja.mobile.communicator.data.models.mqtt.Profile; public interface MyProfileView extends MvpView { - void navigateToEditProfile(); + void navigateToEditProfile(Profile profile); - void navigateToQqCode(); + void navigateToQqCode(Profile profile); void navigateToCamera(); diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/activities/RegistrationActivity.java b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/RegistrationActivity.java index ba2f0f629d..87b1e99bca 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/activities/RegistrationActivity.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/RegistrationActivity.java @@ -8,6 +8,7 @@ import com.ninja.mobile.communicator.NynjaApp; import com.ninja.mobile.communicator.ui.base.BaseActivity; import com.ninja.mobile.communicator.ui.base.BaseFragment; import com.ninja.mobile.communicator.ui.fragments.signin.CodeInputFragment; +import com.ninja.mobile.communicator.ui.fragments.signin.InfoFragment; import com.ninja.mobile.communicator.ui.fragments.signin.LoginFragment; import ru.terrakok.cicerone.Navigator; @@ -30,7 +31,8 @@ public class RegistrationActivity extends BaseActivity { NynjaApp.getRouter().replaceScreen(LoginFragment.class.getSimpleName()); } - @Override protected void onResumeFragments() { + @Override + protected void onResumeFragments() { super.onResumeFragments(); NynjaApp.getNavigatorHolder().setNavigator(navigator); } @@ -45,12 +47,7 @@ public class RegistrationActivity extends BaseActivity { if (command instanceof Replace) { BaseFragment fragment; Replace replace = (Replace) command; - if (LoginFragment.class.getSimpleName().equalsIgnoreCase(replace.getScreenKey())) { - fragment = LoginFragment.newInstance(); - } else { - Object transitionData = replace.getTransitionData(); - fragment = CodeInputFragment.newInstance((Bundle) transitionData); - } + fragment = getBaseFragment(replace); getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, fragment) @@ -59,4 +56,20 @@ public class RegistrationActivity extends BaseActivity { startActivity(MainActivity.getLaunchIntent(this)); } } + + private BaseFragment getBaseFragment(Replace replace) { + BaseFragment fragment = null; + String screenKey = replace.getScreenKey(); + Object transitionData = replace.getTransitionData(); + if (LoginFragment.class.getSimpleName().equalsIgnoreCase(screenKey)) { + fragment = LoginFragment.newInstance(); + } else if (CodeInputFragment.class.getSimpleName().equalsIgnoreCase(screenKey)) { + if (transitionData instanceof Bundle) { + fragment = CodeInputFragment.newInstance((Bundle) transitionData); + } + } else if (InfoFragment.class.getSimpleName().equalsIgnoreCase(screenKey)) { + fragment = InfoFragment.newInstance(); + } + return fragment; + } } 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 0f9fb7222a..754646a2c9 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 @@ -1,10 +1,14 @@ package com.ninja.mobile.communicator.ui.base; +import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.annotation.StringRes; +import android.support.v7.app.AlertDialog; import android.view.View; import com.arellomobile.mvp.MvpAppCompatFragment; +import com.ninja.mobile.communicator.R; import com.tbruyelle.rxpermissions2.RxPermissions; import butterknife.ButterKnife; @@ -39,4 +43,17 @@ public abstract class BaseFragment extends MvpAppCompatFragment { protected boolean shouldRetainInstance() { return false; } + + protected void showAlert(@StringRes int id, DialogInterface.OnClickListener listener) { + showAlert(getString(id), listener); + } + + protected void showAlert(String message, DialogInterface.OnClickListener listener) { + //// FIXME: 02.07.17 move to dialog utils/factory + AlertDialog alertDialog = new AlertDialog.Builder(getContext()).create(); + alertDialog.setTitle(getString(R.string.app_name)); + alertDialog.setMessage(message); + alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.signin_text_ok), listener); + alertDialog.show(); + } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/MyProfileFragment.java b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/MyProfileFragment.java index 6248f47d24..80c9aae987 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/MyProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/MyProfileFragment.java @@ -65,7 +65,6 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, MyProfilePresenter mPresenter; private String mPhotoPath; - private Profile mProfile; @Nullable @Override @@ -76,9 +75,7 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, @Override public void onStart() { super.onStart(); - if (mProfile == null) { - mPresenter.getProfile(); - } + mPresenter.getProfile(); } @OnClick(R.id.username_myprofilefragment) @@ -111,14 +108,14 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, } @Override - public void navigateToEditProfile() { + public void navigateToEditProfile(Profile profile) { startActivityForResult(EditProfileActivity.getLaunchIntent(getContext(), - mProfile), EDIT_PROFILE_REQUEST_CODE); + profile), EDIT_PROFILE_REQUEST_CODE); } @Override - public void navigateToQqCode() { - startActivity(QRCodeGeneratorActivity.getLaunchIntent(getContext(), mProfile)); + public void navigateToQqCode(Profile profile) { + startActivity(QRCodeGeneratorActivity.getLaunchIntent(getContext(), profile)); } @Override @@ -158,7 +155,6 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, @Override public void initPerson(Profile profile) { - mProfile = profile; Roster roster = profile.getRoster(); mUserName.setText(roster.getFullName()); mUserPhone.setText(roster.phone); @@ -180,7 +176,6 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, } private void setPersonModel(Profile profile) { - mProfile = profile; Roster roster = profile.getRoster(); mUserName.setText(roster.getFullName()); mUserPhone.setText(roster.phone); 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 015ebc063b..24c2a9433c 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 @@ -77,10 +77,6 @@ public class CodeInputFragment extends BaseFragment implements CodeInputView { mCodeInputPresenter.onConfirmClick(StringUtils.getText(mPhoneNumber), StringUtils.getText(mCodeText)); } - @Override public void navigateToMyProfileScreen() { - startActivity(ProfileActivity.getLaunchIntent(getContext(), ProfileActivity.ProfileTypes.MyProfile)); - } - @Override public void showSuccessCodeSendMessage() { Toast.makeText(getContext(), R.string.code_successfully_send, Toast.LENGTH_SHORT).show(); } @@ -92,13 +88,4 @@ public class CodeInputFragment extends BaseFragment implements CodeInputView { @Override public void showCodeError(String message, int code) { showAlert(message, null); } - - private void showAlert(String message, DialogInterface.OnClickListener listener) { - //// FIXME: 02.07.17 move to dialog utils/factory - AlertDialog alertDialog = new AlertDialog.Builder(getContext()).create(); - alertDialog.setTitle(getString(R.string.app_name)); - alertDialog.setMessage(message); - alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.signin_text_ok), listener); - alertDialog.show(); - } } 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 4943ec131e..e6fc9a00cb 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 @@ -1,11 +1,91 @@ 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.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.arellomobile.mvp.presenter.InjectPresenter; +import com.ninja.mobile.communicator.R; +import com.ninja.mobile.communicator.data.models.mqtt.Profile; +import com.ninja.mobile.communicator.data.models.mqtt.Roster; +import com.ninja.mobile.communicator.mvp.presenters.InfoPresenter; +import com.ninja.mobile.communicator.mvp.view.InfoView; +import com.ninja.mobile.communicator.ui.activities.MainActivity; import com.ninja.mobile.communicator.ui.base.BaseFragment; +import com.ninja.mobile.communicator.utils.StringUtils; + +import butterknife.BindView; +import butterknife.OnClick; /** * Created by Max Chervatiuk on 23.06.17. * Email: duo.blood@gmail.com */ -public class InfoFragment extends BaseFragment { +public class InfoFragment extends BaseFragment implements InfoView { + + @BindView(R.id.f_iname_edt_first_name) + TextInputEditText mFirstName; + @BindView(R.id.f_iname_edt_last_name) + TextInputEditText mLastName; + + @InjectPresenter + InfoPresenter infoPresenter; + + public static InfoFragment newInstance() { + return new InfoFragment(); + } + + @Override + public void onStart() { + super.onStart(); + infoPresenter.getProfile(); + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_input_name, container, false); + } + + private void setUserModel(Profile profile) { + if (profile != null) { + Roster roster = profile.getRoster(); + mFirstName.setText(roster.names); + mLastName.setText(roster.surnames); + } + } + + @OnClick(R.id.f_iname_btn_next) + public void onSaveClick() { + infoPresenter.onSaveClick(StringUtils.getText(mFirstName), StringUtils.getText(mLastName)); + } + + @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 navigateForward(Profile roster) { + startActivity(MainActivity.getLaunchIntent(getContext())); + } + + @Override + public void initPerson(Profile profile) { + setUserModel(profile); + } } 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 ceb29713cc..1131d5cfe6 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 @@ -161,15 +161,6 @@ public class LoginFragment extends BaseFragment implements LoginView { showAlert(R.string.signin_text_invalid_phone, null); } - private void showAlert(@StringRes int id, DialogInterface.OnClickListener listener) { - //// FIXME: 02.07.17 move to dialog utils/factory - AlertDialog alertDialog = new AlertDialog.Builder(getContext()).create(); - alertDialog.setTitle(getString(R.string.app_name)); - alertDialog.setMessage(getString(id)); - alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.signin_text_ok), listener); - alertDialog.show(); - } - @Override public void setCountryList(List countries) { mWheelView.setAdapter(new CountryWheelAdapter(countries)); } diff --git a/app/src/main/java/com/ninja/mobile/communicator/utils/ValidationUtils.java b/app/src/main/java/com/ninja/mobile/communicator/utils/ValidationUtils.java index 3e6a545bfb..27410358eb 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/utils/ValidationUtils.java +++ b/app/src/main/java/com/ninja/mobile/communicator/utils/ValidationUtils.java @@ -17,7 +17,7 @@ public class ValidationUtils { } public static boolean isNameValid(String data) { - return StringUtils.isNotEmpty(data) && data.length() > 2; + return StringUtils.isNotEmpty(data) && data.length() >= 2; } public static boolean isCodeValid(String code) { -- GitLab From 4bc6b1395c47fa3050694b088b368c07ea2c2c2f Mon Sep 17 00:00:00 2001 From: Dmitro Boiko Date: Fri, 14 Jul 2017 00:27:56 +0300 Subject: [PATCH 3/3] added removed type. --- .../communicator/data/models/mqtt/BaseModelMQQT.java | 1 + .../communicator/mvp/presenters/MainPresenter.java | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/BaseModelMQQT.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/BaseModelMQQT.java index 52777348a4..268d63d219 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/BaseModelMQQT.java +++ b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/BaseModelMQQT.java @@ -31,6 +31,7 @@ public abstract class BaseModelMQQT { BertAtom GET = new BertAtom("get"); BertAtom SET = new BertAtom("set"); BertAtom REMOVE = new BertAtom("remove"); + BertAtom REMOVED = new BertAtom("removed"); } public T decode(byte[] payload) { 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 a75da84bd6..3a8ded2d81 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 @@ -55,11 +55,13 @@ public class MainPresenter extends BaseErrorPresenter { private void manageProfile(Response response) { mDataManager.saveProfile((Profile) response.data); Profile profile = (Profile) response.data; - if (profile.status.equals(BaseModelMQQT.Types.GET)) { - getViewState().showCodeError("Profile successfully received", -1); - } else { - getViewState().navigateToSplash(); - mDataManager.clearPreferences(); + if (profile.status != null) { + if (profile.status.equals(BaseModelMQQT.Types.GET)) { + getViewState().showCodeError("Profile successfully received", -1); + } else if (profile.status.equals(BaseModelMQQT.Types.REMOVED)) { + getViewState().navigateToSplash(); + mDataManager.clearPreferences(); + } } } -- GitLab