diff --git a/app/build.gradle b/app/build.gradle index f7c97e6..890d1d6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -83,6 +83,8 @@ dependencies { implementation 'org.greenrobot:eventbus:3.0.0' implementation 'net.hockeyapp.android:HockeySDK:4.1.1' + implementation 'com.hbb20:ccp:2.2.6' + testImplementation 'junit:junit:' + rootProject.junitVersion testImplementation 'org.mockito:mockito-core:' + rootProject.mockitoVersion } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b81339e..e5bfdc7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools"> @@ -23,7 +24,8 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" - android:allowBackup="false"> + android:allowBackup="false" + tools:replace="android:allowBackup"> { + + @BindView(R.id.country_code) + CountryCodePicker countryCodePicker; + @BindView(R.id.phone) EditText username; @@ -92,10 +98,11 @@ boolean onDoneEditPassword(TextView textView, int i, KeyEvent keyEvent) { } private void login() { + String countryCode = countryCodePicker.getSelectedCountryCodeWithPlus(); String phoneNumber = username.getText().toString(); String pin = password.getText().toString(); String udid = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); - viewModel.login(phoneNumber, pin, udid); + viewModel.login(countryCode + phoneNumber, pin, udid); } private void showErrorDialog(String message) { diff --git a/app/src/main/java/ro/code4/monitorizarevot/data/repository/AuthRepositoryImpl.java b/app/src/main/java/ro/code4/monitorizarevot/data/repository/AuthRepositoryImpl.java index ef1c206..a9d4f23 100644 --- a/app/src/main/java/ro/code4/monitorizarevot/data/repository/AuthRepositoryImpl.java +++ b/app/src/main/java/ro/code4/monitorizarevot/data/repository/AuthRepositoryImpl.java @@ -1,10 +1,13 @@ package ro.code4.monitorizarevot.data.repository; +import android.telephony.PhoneNumberUtils; + import static android.text.TextUtils.isEmpty; import javax.inject.Inject; import javax.inject.Singleton; +import io.michaelrocks.libphonenumber.android.PhoneNumberUtil; import ro.code4.monitorizarevot.data.datasource.ApiDataSource; import ro.code4.monitorizarevot.data.datasource.DataSourceFactory; import ro.code4.monitorizarevot.domain.exception.MessageType; @@ -30,8 +33,12 @@ public Observable login(LoginDataParams params) { return Observable.error(new VoteException(MessageType.EMPTY_CREDENTIALS)); } + if(!PhoneNumberUtils.isGlobalPhoneNumber(params.getPhoneNumber())) { + return Observable.error(new VoteException(MessageType.INVALID_PHONE_NUMBER)); + } + ApiDataSource apiDataSource = mDataSourceFactory.dataSource(params.isLocal()); - User user = new User(params.getPhoneNumber(), params.getPinNumber(), params.getUdid()); + User user = new User(params.getPhoneNumber().replaceAll("[^+\\d.]", ""), params.getPinNumber(), params.getUdid()); return apiDataSource.login(user); } diff --git a/app/src/main/java/ro/code4/monitorizarevot/domain/exception/MessageType.java b/app/src/main/java/ro/code4/monitorizarevot/domain/exception/MessageType.java index 0c234e3..ab2df60 100644 --- a/app/src/main/java/ro/code4/monitorizarevot/domain/exception/MessageType.java +++ b/app/src/main/java/ro/code4/monitorizarevot/domain/exception/MessageType.java @@ -2,6 +2,7 @@ public enum MessageType { EMPTY_CREDENTIALS, + INVALID_PHONE_NUMBER, NO_INTERNET_CONNECTION, SERVER_ERROR, CUSTOM_ERROR, diff --git a/app/src/main/java/ro/code4/monitorizarevot/presentation/MessageFactory.java b/app/src/main/java/ro/code4/monitorizarevot/presentation/MessageFactory.java index 7479dfd..ccd180d 100644 --- a/app/src/main/java/ro/code4/monitorizarevot/presentation/MessageFactory.java +++ b/app/src/main/java/ro/code4/monitorizarevot/presentation/MessageFactory.java @@ -33,6 +33,10 @@ private Message getMessage(MessageType type) { message = mContext.getString(R.string.error_empty_credentials); break; + case INVALID_PHONE_NUMBER: + message = mContext.getString(R.string.error_invalid_phone_number); + break; + case NO_INTERNET_CONNECTION: message = mContext.getString(R.string.error_no_connection); break; diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index db9a234..4e9fbc6 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -1,29 +1,32 @@ + android:layout_height="match_parent" + android:background="@drawable/ic_login_bkg"> + + android:paddingTop="2dp" + android:paddingBottom="2dp"> + + android:text="@string/developed_by" /> + + android:layout_marginTop="36dp" + android:orientation="vertical" + android:paddingStart="@dimen/activity_horizontal_margin" + android:paddingEnd="@dimen/activity_horizontal_margin"> + android:layout_weight="1" + android:orientation="horizontal"> + + android:textSize="14sp" + tools:text="V0.00" /> + + android:layout_height="wrap_content" + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:orientation="horizontal"> - + + + + + - + + + + + + android:textColorHint="@color/textPrimary"> + android:inputType="textPassword" /> + +