diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/DataManager.java b/app/src/main/java/com/ninja/mobile/communicator/data/DataManager.java index 5585445a35ad9a119508e565f9bca99fa45b1a57..936260077af5857a8be8be11719195f5ff9e7c0e 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/data/DataManager.java +++ b/app/src/main/java/com/ninja/mobile/communicator/data/DataManager.java @@ -1,6 +1,7 @@ package com.ninja.mobile.communicator.data; import android.content.Context; +import android.provider.Settings; import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork; import com.ninja.mobile.communicator.data.db.PreferenceHelper; @@ -12,11 +13,8 @@ import com.ninja.mobile.communicator.data.models.events.ServerData; import com.ninja.mobile.communicator.data.models.mqtt.Auth; import com.ninja.mobile.communicator.data.models.mqtt.DeleteUser; import com.ninja.mobile.communicator.data.models.mqtt.Person; -import com.ninja.mobile.communicator.data.models.mqtt.ResendSms; import com.ninja.mobile.communicator.data.models.mqtt.Token; import com.ninja.mobile.communicator.data.models.mqtt.TokenResponse; -import com.ninja.mobile.communicator.data.models.mqtt.Verify; -import com.ninja.mobile.communicator.data.models.mqtt.VerifyAccount; import com.ninja.mobile.communicator.data.server.bert.BertDecoder; import com.ninja.mobile.communicator.data.server.bert.BertTuple; import com.ninja.mobile.communicator.injection.ApplicationContext; @@ -49,6 +47,7 @@ public class DataManager { private final RxBus mBus; private Token mToken; private String DEFAULT_CLIENT_ID; + private String devKey; private PreferenceHelper mPreferenceHelper; public boolean isNetworkAvailable; @@ -61,7 +60,7 @@ public class DataManager { //TODO debug empty client id DEFAULT_CLIENT_ID = "emqttd_" + System.currentTimeMillis(); - //DEFAULT_CLIENT_ID = "emqttd_" + Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); + devKey = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID); ReactiveNetwork.observeInternetConnectivity() .subscribeOn(Schedulers.io()) @@ -103,10 +102,13 @@ public class DataManager { private void tryToSaveToken(ServerData serverData) { try { BertDecoder bertDecoder = BertDecoder.setupDecoder().withDecodeAtomAsString(true); - BertTuple bertTuple = (BertTuple) bertDecoder.decodeAny(serverData.getData().getPayload()); - TokenResponse tokenResponse = new TokenResponse().decode(bertTuple); - mPreferenceHelper.saveToken(tokenResponse.mToken); - mToken = tokenResponse.mToken; + Object object = bertDecoder.decodeAny(serverData.getData().getPayload()); + if (object instanceof BertTuple) { + BertTuple bertTuple = (BertTuple) object; + TokenResponse tokenResponse = new TokenResponse().decode(bertTuple); + mPreferenceHelper.saveToken(tokenResponse.mToken); + mToken = tokenResponse.mToken; + } } catch (Exception e) { Timber.e(e); } @@ -123,24 +125,30 @@ public class DataManager { //AUTH public void requestSms(String phone) { Auth auth = new Auth(); - auth.phone = phone; + auth.phone = phone.replaceAll(" ", ""); + auth.clientId = DEFAULT_CLIENT_ID; + auth.dev_key = devKey; mBus.postToServer(new SendMessage(EventTopics.LOGIN, auth)); } public void resendSms() { Token token = mPreferenceHelper.getToken(); if (token.isValid()) { - ResendSms resendSms = new ResendSms(token); - mBus.postToServer(new SendMessage(EventTopics.RESEND_MESSAGE, resendSms)); + Auth auth = new Auth(); + auth.token = getToken(); + auth.type = Auth.Types.RESEND_SMS; + mBus.postToServer(new SendMessage(EventTopics.RESEND_MESSAGE, auth)); } } public void confirmSms(String smsCode) { Token token = mPreferenceHelper.getToken(); if (token.isValid()) { - Verify verify = new Verify(smsCode); - VerifyAccount verifyAccount = new VerifyAccount(verify, token); - mBus.postToServer(new SendMessage(EventTopics.CONFIRM_ACCOUNT, verifyAccount)); + Auth auth = new Auth(); + auth.token = getToken(); + auth.type = Auth.Types.VERIFY; + auth.sms_code = smsCode; + mBus.postToServer(new SendMessage(EventTopics.CONFIRM_ACCOUNT, auth)); } } @@ -154,7 +162,7 @@ public class DataManager { } //Contacts - public List getContactsFromPhone(){ + public List getContactsFromPhone() { return ContactsUtil.getContacts(mContext); } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Auth.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Auth.java index e54e061a0601f6a23798472dc23874609e9ed145..0ff0daaa9be6f8abb066f88cc4e4edeedd71999f 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Auth.java +++ b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Auth.java @@ -7,13 +7,14 @@ import java.util.List; public class Auth extends BaseModelMQQT { - public String token; + public String dev_key; public String user_id; public String phone; - public String dev_key; + public String token; + public String clientId; public String type; public String sms_code; - public long attempts; + public Long attempts; public String services; @Override public Auth decode(BertTuple mqttMessage) { @@ -23,14 +24,21 @@ public class Auth extends BaseModelMQQT { @Override public List encode() { List list = new BertTuple(); list.add(name); - list.add(token); + list.add(dev_key); list.add(user_id); list.add(phone); - list.add(dev_key); + list.add(token); + list.add(clientId); list.add(type); list.add(sms_code); list.add(attempts); list.add(services); return list; } + + public interface Types { + + String RESEND_SMS = "resend_sms"; + String VERIFY = "verify"; + } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Io.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Io.java index 7fe20286802c589f4da0045deb2ab3e532ca5422..d725d6a99532bfffe86f0251704ccfb90650bfb7 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Io.java +++ b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Io.java @@ -53,5 +53,16 @@ public class Io extends BaseModelMQQT { return ""; } + public interface Types { + String LOGIN = "login"; + String SMS_SEND = "sms_send"; + String NOT_VERIFIED = "not_verified"; + String MISMATCH_USER_DATA = "mismatch_user_data"; + String ERROR = "Error"; + String ATTEMPTS_EXPIRED = "attempts_expired"; + String ROSTER_NOT_FOUND = "roster_not_found"; + String INVALID_SMS_CODE = "invalid_sms_code"; + String SESSION_NOT_FOUND = "session_not_found"; + } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/ResendSms.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/ResendSms.java deleted file mode 100644 index afca70f1316a85afe920f06dfb7245b6fb7773ec..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/ResendSms.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ninja.mobile.communicator.data.models.mqtt; - - -import com.ninja.mobile.communicator.data.server.bert.BertTuple; - -import java.util.List; - -/** - * Created by dmitro.boiko on 04/07/2017. - */ - -public class ResendSms extends BaseModelMQQT { - - public Token token; - - public ResendSms(Token token) { - this.token = token; - } - - @Override protected String name() { - return "resend_sms"; - } - - @Override public ResendSms decode(BertTuple bertTuple) { - return null; - } - - @Override public List encode() { - return new BertTuple() {{ - add(name); - BertTuple objects = new BertTuple(); - objects.addAll(token.encode()); - add(objects); - }}; - } -} diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Verify.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Verify.java deleted file mode 100644 index d074676b1182bc092b9ae9755792d5e469e315fe..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/Verify.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ninja.mobile.communicator.data.models.mqtt; - - -import com.ninja.mobile.communicator.data.server.bert.BertTuple; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by dmitro.boiko on 04/07/2017. - */ - -public class Verify extends BaseModelMQQT { - - public String smsCode; - - public Verify(String smsCode) { - this.smsCode = smsCode; - } - - @Override protected String name() { - return "verify"; - } - - @Override public Verify decode(BertTuple bertTuple) { - return null; - } - - @Override public List encode() { - return new ArrayList() { - { - add(name); - add(smsCode); - } - }; - } -} diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/VerifyAccount.java b/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/VerifyAccount.java deleted file mode 100644 index fa88aaf8ad414e59c79adb4d636ad5655ce4eb8a..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/ninja/mobile/communicator/data/models/mqtt/VerifyAccount.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ninja.mobile.communicator.data.models.mqtt; - - -import com.ninja.mobile.communicator.data.server.bert.BertTuple; - -import java.util.List; - -/** - * Created by dmitro.boiko on 04/07/2017. - */ - -public class VerifyAccount extends BaseModelMQQT { - - public Verify verify; - public Token token; - - public VerifyAccount(Verify verify, Token token) { - this.verify = verify; - this.token = token; - } - - @Override protected String name() { - return super.name(); - } - - @Override public VerifyAccount decode(BertTuple bertTuple) { - return null; - } - - @Override public List encode() { - BertTuple account = new BertTuple(); - - BertTuple verifyTuple = new BertTuple(); - verifyTuple.addAll(verify.encode()); - account.add(verifyTuple); - - BertTuple tokenTuple = new BertTuple(); - tokenTuple.addAll(token.encode()); - account.add(tokenTuple); - - return account; - } -} diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/server/PahoService.java b/app/src/main/java/com/ninja/mobile/communicator/data/server/PahoService.java index c8401d07bca5567ae47e99cd1f4f55f8f6a3e5ff..883f05ff3346ec5f7f988d01f8c2b72c5cc489e6 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/data/server/PahoService.java +++ b/app/src/main/java/com/ninja/mobile/communicator/data/server/PahoService.java @@ -17,13 +17,7 @@ import com.ninja.mobile.communicator.data.models.events.SendMessage; import com.ninja.mobile.communicator.data.models.events.ServerData; import com.ninja.mobile.communicator.data.models.events.SubscribeData; import com.ninja.mobile.communicator.data.models.events.SubscribeMessage; -import com.ninja.mobile.communicator.data.models.mqtt.Auth; -import com.ninja.mobile.communicator.data.models.mqtt.DeleteUser; import com.ninja.mobile.communicator.data.models.mqtt.InitModel; -import com.ninja.mobile.communicator.data.models.mqtt.ResendSms; -import com.ninja.mobile.communicator.data.models.mqtt.Token; -import com.ninja.mobile.communicator.data.models.mqtt.Verify; -import com.ninja.mobile.communicator.data.models.mqtt.VerifyAccount; import com.ninja.mobile.communicator.data.server.bert.BertDecoder; import com.ninja.mobile.communicator.data.server.bert.BertEncoder; import com.ninja.mobile.communicator.data.server.bert.BertTuple; @@ -51,7 +45,7 @@ import timber.log.Timber; public class PahoService extends Service { - private static final String SERVER_URL = "tcp://ns.synrc.com:1883"; //1883 default port for mqtt + private static final String SERVER_URL = "tcp://ns.synrc.com:8083"; //1883 default port for mqtt private static final String USERNAME_TO_API = "api"; private MqttAndroidClient mServerClient; @@ -98,12 +92,12 @@ public class PahoService extends Service { private void listenOutputMessage() { mDisposable = mBus.subscribeToOutput(data -> { - //// FIXME: 05/07/2017 add subscribe if (mDataManager.isNetworkAvailable) { if (data instanceof SendMessage) { SendMessage sendMessage = (SendMessage) data; PostData postData = sendMessage.getData(); - PahoService.this.publishMessage(sendMessage.getData().eventTopic.ordinal()+1, getAuthTopic(), postData.data.encode()); + publishMessageTest(sendMessage.getData().eventTopic.name(), postData.data.encode()); + PahoService.this.publishMessage(sendMessage.getData().eventTopic.ordinal(), getAuthTopic(), postData.data.encode()); } else if (data instanceof SubscribeMessage) { SubscribeMessage subscribeMessage = (SubscribeMessage) data; SubscribeData subscribeData = subscribeMessage.getData(); @@ -115,7 +109,7 @@ public class PahoService extends Service { }); } - private String getAuthTopic() {return Topics.getAuthTopic(maxNode, mDataManager.getClientId(), mDataManager.getToken());} + private String getAuthTopic() {return Topics.getAuthTopic(mDataManager.getClientId(), mDataManager.getToken());} private void connectToServer() { try { @@ -222,37 +216,9 @@ public class PahoService extends Service { } //TEST - public void testAllAuthReuqest() { - String smsCode = "1234"; - Token token = new Token(); - String phone = "380632889890"; - token.data = "123324t5y6tu7iyul,mvghcfg"; - if (maxNode == -1) { - maxNode = 4; - } - - //requestSms - Auth auth = new Auth(); - auth.phone = phone; - publishMessageTest(getAuthTopic(), auth.encode()); - - //resendSms - ResendSms resendSms = new ResendSms(token); - publishMessageTest(getAuthTopic(), resendSms.encode()); - - //confirmSms - Verify verify = new Verify(smsCode); - VerifyAccount verifyAccount = new VerifyAccount(verify, token); - publishMessageTest(getAuthTopic(), verifyAccount.encode()); - - // deleteUser - DeleteUser deleteUser = new DeleteUser(phone); - publishMessageTest(getAuthTopic(), deleteUser.encode()); - } - private void publishMessageTest(String topic, Object object) { MqttMessage message = new MqttMessage(encode(object)); byte[] payload = message.getPayload(); - Log.d("Test", ServerTestHelper.convertToString(payload)); + Log.e("Test", topic + " erl: " + ServerTestHelper.convertToString(payload)); } } diff --git a/app/src/main/java/com/ninja/mobile/communicator/data/server/Topics.java b/app/src/main/java/com/ninja/mobile/communicator/data/server/Topics.java index 41375b72b03a8c877255ae9da6e1c0209935420e..be78a7b570fa83312516779166231d5cd8950367 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/data/server/Topics.java +++ b/app/src/main/java/com/ninja/mobile/communicator/data/server/Topics.java @@ -3,15 +3,13 @@ package com.ninja.mobile.communicator.data.server; import android.support.annotation.NonNull; import java.util.Locale; -import java.util.Random; public class Topics { - private final static String AUTH_TOPIC = "events/%d/api/anon/%s/%s"; + private final static String AUTH_TOPIC = "events//api/anon/%s/%s"; private final static String ACTIONS_API_CLIENT_ID = "actions/api/%s"; - public static String getAuthTopic(int node, @NonNull String clientId, @NonNull String token) { - int nextInt = new Random().nextInt(node); - return String.format(Locale.getDefault(), AUTH_TOPIC, nextInt + 1, clientId, token); + public static String getAuthTopic( @NonNull String clientId, @NonNull String token) { + return String.format(Locale.getDefault(), AUTH_TOPIC, clientId, token); } public static String getAction(String clientId) { 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 e10e99dc0935a2748835fdde1c0a1eb541e01b08..5ed0289909bf2b02bc263901a8448689105f6f26 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 @@ -1,8 +1,11 @@ package com.ninja.mobile.communicator.mvp.presenters; +import android.os.Bundle; + import com.arellomobile.mvp.InjectViewState; import com.ninja.mobile.communicator.data.CountryHelper; 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.TokenResponse; import com.ninja.mobile.communicator.data.server.Topics; import com.ninja.mobile.communicator.data.server.bert.BertDecoder; @@ -69,7 +72,11 @@ public class LoginPresenter extends BasePresenter { mDataManager.requestSms(String.format("%s%s", mCode, mPhone)); } - private void navigateToCodeScreen() {mRouter.replaceScreen(CodeInputFragment.class.getSimpleName());} + private void navigateToCodeScreen() { + Bundle bundle = new Bundle(); + bundle.putString(CodeInputFragment.PHONE_TAG, String.format("+%s%s", mCode, mPhone)); + mRouter.replaceScreen(CodeInputFragment.class.getSimpleName(), bundle); + } public void setCodeObservable(Observable observable) { addDisposable(observable.subscribe(code -> { @@ -157,12 +164,11 @@ public class LoginPresenter extends BasePresenter { TokenResponse tokenResponse = new TokenResponse().decode(bertTuple); if (tokenResponse.mIo.isSuccess()) { switch (tokenResponse.mIo.getStatus()) { - case "login": + case Io.Types.LOGIN: navigateToMainScreen(); break; - case "send_sms": - case "sms_sent_successfully": + case Io.Types.SMS_SEND: navigateToCodeScreen(); break; default: @@ -170,17 +176,12 @@ public class LoginPresenter extends BasePresenter { } } else { switch (tokenResponse.mIo.getStatus()) { - case "not_verified": + case Io.Types.NOT_VERIFIED: mDataManager.resendSms(); break; - case "sms_send": - break; - - case "mismatch_user_data": - break; - - case "Error": + case Io.Types.MISMATCH_USER_DATA: + case Io.Types.ERROR: break; } } 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 f720ff1ed5a9760ffa830a51d486abf76e684896..ba2f0f629d4af0021b4f2361520b84ce8df0cef2 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 @@ -44,17 +44,18 @@ public class RegistrationActivity extends BaseActivity { private void handleCommand(Command command) { if (command instanceof Replace) { BaseFragment fragment; - if (LoginFragment.class.getSimpleName().equalsIgnoreCase(((Replace) command).getScreenKey())) { + Replace replace = (Replace) command; + if (LoginFragment.class.getSimpleName().equalsIgnoreCase(replace.getScreenKey())) { fragment = LoginFragment.newInstance(); } else { - fragment = CodeInputFragment.newInstance(); + Object transitionData = replace.getTransitionData(); + fragment = CodeInputFragment.newInstance((Bundle) transitionData); } getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, fragment) .commit(); - } - else if (command instanceof Forward){ + } else if (command instanceof Forward) { startActivity(MainActivity.getLaunchIntent(this)); } } 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 8de389b7d1b787bce77a90f97fdbc115e7465315..44d8593e5b0fa687424cd1d3463249c35aed3bac 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 @@ -31,13 +31,18 @@ import butterknife.OnClick; public class CodeInputFragment extends BaseFragment implements CodeInputView { + public static final String PHONE_TAG = "phone"; + @BindView(R.id.f_code_tv_repeat) TextView mNotReceivedText; + @BindView(R.id.f_code_tv_phone) TextView mPhoneNumber; @BindView(R.id.f_code_edt_code) HintEditText mCodeText; @InjectPresenter CodeInputPresenter mCodeInputPresenter; - public static CodeInputFragment newInstance() { - return new CodeInputFragment(); + public static CodeInputFragment newInstance(Bundle bundle) { + CodeInputFragment codeInputFragment = new CodeInputFragment(); + codeInputFragment.setArguments(bundle); + return codeInputFragment; } @Nullable @Override @@ -48,11 +53,19 @@ public class CodeInputFragment extends BaseFragment implements CodeInputView { @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - mCodeText.addTextChangedListener(new PhoneWatcher(mCodeText)); - mCodeText.setHintText("XXX XXX XXX".replace('X', '-')); + setupUI(); initSpannableTerms(); } + private void setupUI() { + Bundle arguments = getArguments(); + if (arguments != null) { + mPhoneNumber.setText(arguments.getString(PHONE_TAG)); + } + mCodeText.addTextChangedListener(new PhoneWatcher(mCodeText)); + mCodeText.setHintText("___ ___"); + } + private void initSpannableTerms() { View.OnClickListener onClickListener = v -> mCodeInputPresenter.onResendClick(); SpannableUtils.setSpannable(getActivity(), mNotReceivedText, R.string.signin_text_have_not_received, R.string.signin_text_have_not_received, onClickListener); diff --git a/app/src/main/java/com/ninja/mobile/communicator/ui/views/HintEditText.java b/app/src/main/java/com/ninja/mobile/communicator/ui/views/HintEditText.java index 4b0ca4fbe12f8afb4938fa48038c62b7259d8448..383fec64a94cd95dba8f013ff43bc798b8b2d25e 100644 --- a/app/src/main/java/com/ninja/mobile/communicator/ui/views/HintEditText.java +++ b/app/src/main/java/com/ninja/mobile/communicator/ui/views/HintEditText.java @@ -6,6 +6,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.os.Build; import android.support.annotation.RequiresApi; +import android.support.v4.content.ContextCompat; import android.util.AttributeSet; import android.widget.EditText; @@ -49,7 +50,7 @@ public class HintEditText extends EditText { private void init() { mPaint = new Paint(); - mPaint.setColor(getContext().getResources().getColor(R.color.colorAccent)); + mPaint.setColor(ContextCompat.getColor(getContext(), R.color.colorAccent)); } public String getHintText() { 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 a2f6f072e958a83989e951e585da60964f50a73b..3de850631429cc50c032c1e3f9da2374849163b6 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 @@ -21,6 +21,6 @@ public class ValidationUtils { } public static boolean isCodeValid(String code) { - return StringUtils.isNotEmpty(code) && code.length() == 6; + return StringUtils.isNotEmpty(code) && code.length() == 7; } } diff --git a/app/src/main/res/layout/fragment_input_code.xml b/app/src/main/res/layout/fragment_input_code.xml index 0344a9ec920d0c54c0024652adc601e19dd79c62..5026f8070fa81cd65a51919bca193300543faab4 100644 --- a/app/src/main/res/layout/fragment_input_code.xml +++ b/app/src/main/res/layout/fragment_input_code.xml @@ -74,26 +74,32 @@ app:layout_constraintVertical_bias="0.5" tools:text="+380 50 500 5050" /> - + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintBottom_toBottomOf="@+id/f_code_img_lock" + android:layout_marginBottom="0dp" />