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 52777348a40b486faacd12090e7cbf30699bdeaf..268d63d219a9d896d4c0450385bd7d9ee4974f18 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/data/models/mqtt/Friend.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Friend.java new file mode 100644 index 0000000000000000000000000000000000000000..2a23b611c150156d857f417a67800893b35fa8a9 --- /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 50a2ec5d21d86629055d13457822af655c7f391d..a5290b088ff38866c4e079560968a7ad0b578f30 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 e71144302d4ec78873e9b91ba6d7063e31f27cfc..0000000000000000000000000000000000000000 --- 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/CodeInputPresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/CodeInputPresenter.java index be81988c325c16ddab68ee9c6ea7c4305570f784..ba8f3d011a92085337c40a723b9db13508d482f0 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 5a1ea3160756167edf9617d10f148995583623eb..6c3712e602a010753ffafbcb6212f5956f3bb032 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 0000000000000000000000000000000000000000..eb633cd614b84541b011da2aa824a00251d28552 --- /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 131fa664519548c18232440938e4fdefe49f4bdb..3a8ded2d816c2d111fcd46b8654be5c35065f560 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,33 @@ 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 != 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(); + } + } + } + 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 23aed22006e57a1d6a73a13cf13dc813f943da66..e9f1b88d1a9575825d0c0e8b591c9f827f56b41c 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/presenters/UserProfilePresenter.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/presenters/UserProfilePresenter.java index a1e3706712be8cf53063bcb34d3a7ad279bd8838..fa22266ecba561232a94e77e54c186000ce97c3e 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/CodeInputView.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/CodeInputView.java index 0f5ab9d07f4b21e6f956143ad40291a539ac45ae..1d5ae937e3cdeb492b9e333f5b2940e03e56b8ae 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 0000000000000000000000000000000000000000..6b11bbd505d3edd998952cdd75b49141bef16130 --- /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 8bc395f1669cddf5356ae20e36d8df9abe9c5e73..61dff26bbe0fe3fe5d62c2dc70e0a038856c3756 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/mvp/view/UserProfileView.java b/app/src/main/java/com/ninja/mobile/communicator/mvp/view/UserProfileView.java index 5b1fdfd3afd4c979b016babe6eda3269f59d6711..250a46464e86cf710b34edf03caaa9237af2d965 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 6c225fcafcd4b357ad15cb3ca2eb4e0df63c880d..c70cce7f912ae8e035ed46b7dad8625bcdfae75d 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 1c4dca4bec9a8069d618a5f2d5f2d2c1d6d2c543..489b51914bbf395f99e50c63c6b5fd020a9d50ab 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/activities/RegistrationActivity.java b/app/src/main/java/com/ninja/mobile/communicator/ui/activities/RegistrationActivity.java index ba2f0f629d4af0021b4f2361520b84ce8df0cef2..87b1e99bcae6babce6cc36fc8eeced7dfab3cc37 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 0f9fb7222a5442fc9a4e4b4b01d2b09c122e96f9..754646a2c9580667f90c8930c4cd9caeb663c9ce 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 6248f47d24e951d8c0148d058e2d80419e74056f..80c9aae98701a525ebd189e7c9771b09dfadca85 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/profile/UserProfileFragment.java b/app/src/main/java/com/ninja/mobile/communicator/ui/fragments/profile/UserProfileFragment.java index 2ab03b5fe3a06648aadf071563a16f2fa24e5c5b..450574ccad66d4229b2c96b4e1863c04aadf5c73 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) { 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 015ebc063b0818457fa30827db09b5158d1263c8..24c2a9433c483ffd1f1467596181d870aa25bb4a 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 4943ec131e3a8e9fc2a25ec4464b3e0ecb8016ca..e6fc9a00cb8ac56f8bf227f506484fd8df2d722a 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 ceb29713ccd5820e07dd7fac074e2f3841fc4f3c..1131d5cfe6f1c6620cfde581faecb076efd9822d 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 3e6a545bfb4fee34144807976c78028c0810fdcb..27410358ebac72fc63ee4f2c670f2e1a55f571a4 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) {