preyearegmi
6 years ago
22 changed files with 670 additions and 48 deletions
-
BIN.idea/caches/build_file_checksums.ser
-
9app/src/main/AndroidManifest.xml
-
12app/src/main/java/com/gmeremit/online/gmeremittance_native/GmeApplication.java
-
11app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java
-
4app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/gateway/RegisterV2Gateway.java
-
53app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/model/RegisterApiResponse.java
-
3app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2InteractorInterface.java
-
32app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java
-
15app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2PresenterInterface.java
-
55app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java
-
32app/src/main/java/com/gmeremit/online/gmeremittance_native/resetpassV2/gateway/ResetPassV2Gateway.java
-
53app/src/main/java/com/gmeremit/online/gmeremittance_native/resetpassV2/model/ResetApiResponse.java
-
16app/src/main/java/com/gmeremit/online/gmeremittance_native/resetpassV2/presenter/ResetPassV2InteractorInterface.java
-
82app/src/main/java/com/gmeremit/online/gmeremittance_native/resetpassV2/presenter/ResetPassV2Presenter.java
-
19app/src/main/java/com/gmeremit/online/gmeremittance_native/resetpassV2/presenter/ResetPassV2PresenterInterface.java
-
114app/src/main/java/com/gmeremit/online/gmeremittance_native/resetpassV2/view/ResetPassV2Activity.java
-
6app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java
-
1app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/API_URL.java
-
8app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/ApiEndpoints.java
-
6app/src/main/res/layout/activity_login_v2.xml
-
50app/src/main/res/layout/activity_register_v2.xml
-
137app/src/main/res/layout/activity_reset_pass_v2.xml
@ -0,0 +1,53 @@ |
|||||
|
package com.gmeremit.online.gmeremittance_native.registerV2.model; |
||||
|
|
||||
|
import com.google.gson.annotations.Expose; |
||||
|
import com.google.gson.annotations.SerializedName; |
||||
|
|
||||
|
public class RegisterApiResponse { |
||||
|
|
||||
|
@SerializedName("ErrorCode") |
||||
|
@Expose |
||||
|
private String errorCode; |
||||
|
@SerializedName("Msg") |
||||
|
@Expose |
||||
|
private String msg; |
||||
|
@SerializedName("Id") |
||||
|
@Expose |
||||
|
private String id; |
||||
|
@SerializedName("Data") |
||||
|
@Expose |
||||
|
private Object data; |
||||
|
|
||||
|
|
||||
|
public String getErrorCode() { |
||||
|
return errorCode; |
||||
|
} |
||||
|
|
||||
|
public void setErrorCode(String errorCode) { |
||||
|
this.errorCode = errorCode; |
||||
|
} |
||||
|
|
||||
|
public String getMsg() { |
||||
|
return msg; |
||||
|
} |
||||
|
|
||||
|
public void setMsg(String msg) { |
||||
|
this.msg = msg; |
||||
|
} |
||||
|
|
||||
|
public String getId() { |
||||
|
return id; |
||||
|
} |
||||
|
|
||||
|
public void setId(String id) { |
||||
|
this.id = id; |
||||
|
} |
||||
|
|
||||
|
public Object getData() { |
||||
|
return data; |
||||
|
} |
||||
|
|
||||
|
public void setData(Object data) { |
||||
|
this.data = data; |
||||
|
} |
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
package com.gmeremit.online.gmeremittance_native.resetpassV2.gateway; |
||||
|
|
||||
|
import com.gmeremit.online.gmeremittance_native.base.PrivilegedGateway; |
||||
|
import com.gmeremit.online.gmeremittance_native.kycV2.presenter.KYCV2InteractorInterface; |
||||
|
import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2InteractorInterface; |
||||
|
import com.gmeremit.online.gmeremittance_native.resetpassV2.model.ResetApiResponse; |
||||
|
import com.gmeremit.online.gmeremittance_native.resetpassV2.presenter.ResetPassV2InteractorInterface; |
||||
|
import com.gmeremit.online.gmeremittance_native.utils.https.HttpClientV2; |
||||
|
import com.google.gson.JsonObject; |
||||
|
|
||||
|
import io.reactivex.Observable; |
||||
|
|
||||
|
public class ResetPassV2Gateway extends PrivilegedGateway implements ResetPassV2InteractorInterface.ResetPassV2GatewayInterface { |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
private final ResetPassV2InteractorInterface interactor; |
||||
|
|
||||
|
public ResetPassV2Gateway(ResetPassV2InteractorInterface interactorInterface) { |
||||
|
this.interactor=interactorInterface; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public Observable<ResetApiResponse> resetPassV2(String auth, String userId, String dob) { |
||||
|
JsonObject jsonObject=new JsonObject(); |
||||
|
jsonObject.addProperty("userId",userId); |
||||
|
jsonObject.addProperty("dob",dob); |
||||
|
|
||||
|
return HttpClientV2.getInstance().resetPassV2(auth,jsonObject); |
||||
|
} |
||||
|
} |
@ -0,0 +1,53 @@ |
|||||
|
package com.gmeremit.online.gmeremittance_native.resetpassV2.model; |
||||
|
|
||||
|
import com.google.gson.annotations.Expose; |
||||
|
import com.google.gson.annotations.SerializedName; |
||||
|
|
||||
|
public class ResetApiResponse { |
||||
|
|
||||
|
@SerializedName("ErrorCode") |
||||
|
@Expose |
||||
|
private String errorCode; |
||||
|
@SerializedName("Msg") |
||||
|
@Expose |
||||
|
private String msg; |
||||
|
@SerializedName("Id") |
||||
|
@Expose |
||||
|
private String id; |
||||
|
@SerializedName("Data") |
||||
|
@Expose |
||||
|
private Object data; |
||||
|
|
||||
|
|
||||
|
public String getErrorCode() { |
||||
|
return errorCode; |
||||
|
} |
||||
|
|
||||
|
public void setErrorCode(String errorCode) { |
||||
|
this.errorCode = errorCode; |
||||
|
} |
||||
|
|
||||
|
public String getMsg() { |
||||
|
return msg; |
||||
|
} |
||||
|
|
||||
|
public void setMsg(String msg) { |
||||
|
this.msg = msg; |
||||
|
} |
||||
|
|
||||
|
public String getId() { |
||||
|
return id; |
||||
|
} |
||||
|
|
||||
|
public void setId(String id) { |
||||
|
this.id = id; |
||||
|
} |
||||
|
|
||||
|
public Object getData() { |
||||
|
return data; |
||||
|
} |
||||
|
|
||||
|
public void setData(Object data) { |
||||
|
this.data = data; |
||||
|
} |
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package com.gmeremit.online.gmeremittance_native.resetpassV2.presenter; |
||||
|
|
||||
|
import com.gmeremit.online.gmeremittance_native.base.BaseInteractorInterface; |
||||
|
import com.gmeremit.online.gmeremittance_native.base.PrivilegedGatewayInterface; |
||||
|
import com.gmeremit.online.gmeremittance_native.resetpassV2.model.ResetApiResponse; |
||||
|
|
||||
|
import io.reactivex.Observable; |
||||
|
|
||||
|
public interface ResetPassV2InteractorInterface extends BaseInteractorInterface { |
||||
|
|
||||
|
|
||||
|
interface ResetPassV2GatewayInterface extends PrivilegedGatewayInterface |
||||
|
{ |
||||
|
Observable<ResetApiResponse> resetPassV2(String auth,String userId,String dob); |
||||
|
} |
||||
|
} |
@ -0,0 +1,82 @@ |
|||||
|
package com.gmeremit.online.gmeremittance_native.resetpassV2.presenter; |
||||
|
|
||||
|
import com.gmeremit.online.gmeremittance_native.GmeApplication; |
||||
|
import com.gmeremit.online.gmeremittance_native.base.BasePresenter; |
||||
|
import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; |
||||
|
import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2PresenterInterface; |
||||
|
import com.gmeremit.online.gmeremittance_native.resetpassV2.gateway.ResetPassV2Gateway; |
||||
|
import com.gmeremit.online.gmeremittance_native.resetpassV2.model.ResetApiResponse; |
||||
|
import com.gmeremit.online.gmeremittance_native.utils.Constants; |
||||
|
import com.gmeremit.online.gmeremittance_native.utils.Utils; |
||||
|
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponse; |
||||
|
|
||||
|
import io.reactivex.android.schedulers.AndroidSchedulers; |
||||
|
import io.reactivex.disposables.CompositeDisposable; |
||||
|
import io.reactivex.schedulers.Schedulers; |
||||
|
|
||||
|
public class ResetPassV2Presenter extends BasePresenter implements ResetPassV2PresenterInterface, ResetPassV2InteractorInterface { |
||||
|
|
||||
|
|
||||
|
private final ResetPassV2Gateway gateway; |
||||
|
private final ResetPassV2ContractInterface view; |
||||
|
CompositeDisposable compositeDisposable; |
||||
|
|
||||
|
public ResetPassV2Presenter(ResetPassV2PresenterInterface.ResetPassV2ContractInterface view) { |
||||
|
this.gateway= new ResetPassV2Gateway(this); |
||||
|
compositeDisposable=new CompositeDisposable(); |
||||
|
this.view=view; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Override |
||||
|
public boolean validate(String emailId, String dob) { |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void resetPassword(String emailId, String dob) { |
||||
|
String auth = "Basic " + Utils.toBase64("172017F9EC11222E8107142733:QRK2UM0Q:" + GmeApplication.getAppRelatedMetaData().getDeviceId()); |
||||
|
compositeDisposable.add( |
||||
|
gateway.resetPassV2(auth,emailId,dob) |
||||
|
.doOnSubscribe(d->view.showProgressBar(true,"Requesting...")) |
||||
|
.doFinally(()->view.showProgressBar(false,"")) |
||||
|
.subscribeOn(Schedulers.io()) |
||||
|
.observeOn(AndroidSchedulers.mainThread()) |
||||
|
.subscribeWith(new ResetPassObserver()) |
||||
|
|
||||
|
); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void onViewDestroyed() { |
||||
|
super.onViewDestroyed(); |
||||
|
if (compositeDisposable != null & !compositeDisposable.isDisposed()) { |
||||
|
compositeDisposable.dispose(); |
||||
|
compositeDisposable.clear(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public class ResetPassObserver extends GenericApiObserverResponse<ResetApiResponse> |
||||
|
{ |
||||
|
|
||||
|
@Override |
||||
|
protected void onSuccess(ResetApiResponse resetApiResponse) { |
||||
|
if(resetApiResponse.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) |
||||
|
view.showPopUpMessage(resetApiResponse.getMsg(), CustomAlertDialog.AlertType.SUCCESS,alertType->view.exitView()); |
||||
|
else |
||||
|
view.showPopUpMessage(resetApiResponse.getMsg(), CustomAlertDialog.AlertType.FAILED,null); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void onFailed(String message) { |
||||
|
view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED,null); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void onConnectionNotEstablished(String message) { |
||||
|
view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED,null); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,19 @@ |
|||||
|
package com.gmeremit.online.gmeremittance_native.resetpassV2.presenter; |
||||
|
|
||||
|
import com.gmeremit.online.gmeremittance_native.base.BaseContractInterface; |
||||
|
import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface; |
||||
|
|
||||
|
public interface ResetPassV2PresenterInterface extends BasePresenterInterface { |
||||
|
|
||||
|
|
||||
|
boolean validate(String emailId, String dob); |
||||
|
|
||||
|
void resetPassword(String emailId, String dob); |
||||
|
|
||||
|
|
||||
|
interface ResetPassV2ContractInterface extends BaseContractInterface |
||||
|
{ |
||||
|
void showIncorrectEmail(String message); |
||||
|
void showIncorrectDob(String message); |
||||
|
|
||||
|
}} |
@ -0,0 +1,114 @@ |
|||||
|
package com.gmeremit.online.gmeremittance_native.resetpassV2.view; |
||||
|
|
||||
|
import android.app.DatePickerDialog; |
||||
|
import android.support.design.widget.TextInputLayout; |
||||
|
import android.support.v7.app.AppCompatActivity; |
||||
|
import android.os.Bundle; |
||||
|
import android.util.Log; |
||||
|
import android.view.View; |
||||
|
import android.widget.DatePicker; |
||||
|
import android.widget.EditText; |
||||
|
|
||||
|
import com.gmeremit.online.gmeremittance_native.R; |
||||
|
import com.gmeremit.online.gmeremittance_native.base.BaseActivity; |
||||
|
import com.gmeremit.online.gmeremittance_native.resetpassV2.presenter.ResetPassV2Presenter; |
||||
|
import com.gmeremit.online.gmeremittance_native.resetpassV2.presenter.ResetPassV2PresenterInterface; |
||||
|
|
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.util.Calendar; |
||||
|
import java.util.Locale; |
||||
|
|
||||
|
import butterknife.BindView; |
||||
|
import butterknife.ButterKnife; |
||||
|
|
||||
|
public class ResetPassV2Activity extends BaseActivity implements View.OnClickListener, ResetPassV2PresenterInterface.ResetPassV2ContractInterface { |
||||
|
|
||||
|
@BindView(R.id.email_mobile) |
||||
|
EditText emailId; |
||||
|
|
||||
|
@BindView(R.id.ed_dob) |
||||
|
EditText ed_dob; |
||||
|
|
||||
|
@BindView(R.id.useridWrapper) |
||||
|
TextInputLayout useridWrapper; |
||||
|
|
||||
|
@BindView(R.id.dobWrapper) |
||||
|
TextInputLayout dobWrapper; |
||||
|
|
||||
|
|
||||
|
@BindView(R.id.btn_submit) |
||||
|
View btn_submit; |
||||
|
|
||||
|
|
||||
|
private DatePickerDialog datePickerDialog; |
||||
|
|
||||
|
|
||||
|
private ResetPassV2PresenterInterface presenterInterface; |
||||
|
private Calendar newCalendar; |
||||
|
|
||||
|
@Override |
||||
|
protected void onCreate(Bundle savedInstanceState) { |
||||
|
super.onCreate(savedInstanceState); |
||||
|
setContentView(R.layout.activity_reset_pass_v2); |
||||
|
ButterKnife.bind(this); |
||||
|
initialize(); |
||||
|
performDefaultAction(savedInstanceState); |
||||
|
} |
||||
|
|
||||
|
private void initialize() { |
||||
|
presenterInterface = new ResetPassV2Presenter(this); |
||||
|
newCalendar = Calendar.getInstance(); |
||||
|
} |
||||
|
|
||||
|
private void performDefaultAction(Bundle savedInstanceState) { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void onStart() { |
||||
|
super.onStart(); |
||||
|
ed_dob.setOnClickListener(this); |
||||
|
btn_submit.setOnClickListener(this); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void onClick(View v) { |
||||
|
switch (v.getId()) { |
||||
|
case R.id.ed_dob: |
||||
|
promptDatePicker(); |
||||
|
break; |
||||
|
|
||||
|
case R.id.btn_submit: |
||||
|
if (presenterInterface.validate(emailId.getText().toString(), ed_dob.getText().toString())) { |
||||
|
presenterInterface.resetPassword(emailId.getText().toString(), ed_dob.getText().toString()); |
||||
|
} |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void promptDatePicker() { |
||||
|
datePickerDialog = new DatePickerDialog(this, (DatePickerDialog.OnDateSetListener) (view, year, monthOfYear, dayOfMonth) -> { |
||||
|
Calendar newDate = Calendar.getInstance(); |
||||
|
newDate.set(year, monthOfYear, dayOfMonth); |
||||
|
Log.d("year", year + monthOfYear + dayOfMonth + " ---"); |
||||
|
|
||||
|
ed_dob.setText(new SimpleDateFormat("yyyy/dd/MM", Locale.US).format(newDate.getTime())); |
||||
|
}, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); |
||||
|
|
||||
|
datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis()); |
||||
|
datePickerDialog.getDatePicker().updateDate(1990, 1, 1); |
||||
|
|
||||
|
datePickerDialog.show(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void showIncorrectEmail(String message) { |
||||
|
useridWrapper.setError(message); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void showIncorrectDob(String message) { |
||||
|
dobWrapper.setError(message); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,137 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||
|
xmlns:app="http://schemas.android.com/apk/res-auto" |
||||
|
xmlns:tools="http://schemas.android.com/tools" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="match_parent" |
||||
|
android:orientation="vertical" |
||||
|
android:background="#fff"> |
||||
|
<include layout="@layout/layout_kyc_toolbar"/> |
||||
|
<RelativeLayout |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="0dp" |
||||
|
android:layout_weight="1" |
||||
|
android:background="#fff" |
||||
|
android:paddingLeft="10dp" |
||||
|
android:paddingRight="10dp" |
||||
|
tools:context="com.gmeremit.online.gmeremittance_native.sign_in.view.LoginView"> |
||||
|
|
||||
|
<ScrollView |
||||
|
android:id="@+id/scrollView" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="match_parent" |
||||
|
android:scrollbars="none"> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:layout_marginLeft="10dp" |
||||
|
android:orientation="vertical" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content"> |
||||
|
|
||||
|
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView |
||||
|
android:id="@+id/welcome_label" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:paddingTop="10dp" |
||||
|
android:paddingBottom="5dp" |
||||
|
android:text="Need Help with your\nPassword?" |
||||
|
android:textColor="@color/colorAccent" |
||||
|
android:textSize="24sp" |
||||
|
app:txtfontName="@string/bold"/> |
||||
|
|
||||
|
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView |
||||
|
android:id="@+id/loginText" |
||||
|
android:layout_width="wrap_content" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:text="Reset your password using your email address linked to your GME account." |
||||
|
android:textSize="14sp" |
||||
|
android:paddingTop="8dp" |
||||
|
android:paddingBottom="8dp" |
||||
|
app:txtfontName="@string/regular" |
||||
|
/> |
||||
|
|
||||
|
<android.support.design.widget.TextInputLayout |
||||
|
android:paddingTop="1dp" |
||||
|
android:paddingBottom="1dp" |
||||
|
android:id="@+id/useridWrapper" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:hint="Email Address" |
||||
|
android:textColorHint="@color/darkgray"> |
||||
|
<EditText |
||||
|
android:id="@+id/email_mobile" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
style="@style/editetxtsingleline" |
||||
|
android:inputType="textEmailAddress" |
||||
|
/> |
||||
|
|
||||
|
</android.support.design.widget.TextInputLayout> |
||||
|
|
||||
|
<FrameLayout |
||||
|
android:layout_marginEnd="5dp" |
||||
|
android:visibility="visible" |
||||
|
android:layout_marginTop="4dp" |
||||
|
android:layout_marginBottom="4dp" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:orientation="horizontal" |
||||
|
android:layout_marginRight="5dp"> |
||||
|
<android.support.design.widget.TextInputLayout |
||||
|
android:id="@+id/dobWrapper" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:hint="Date of Birth" |
||||
|
app:hintEnabled="true" |
||||
|
android:paddingTop="1dp" |
||||
|
android:paddingBottom="1dp" |
||||
|
android:textColorHint="@color/darkgray"> |
||||
|
<EditText |
||||
|
android:id="@+id/ed_dob" |
||||
|
style="@style/editetxtsingleline" |
||||
|
android:enabled="true" |
||||
|
android:focusable="false" |
||||
|
android:layout_marginRight="12dp" |
||||
|
android:layout_marginEnd="12dp" |
||||
|
android:imeOptions="actionDone" |
||||
|
android:layout_width="match_parent" |
||||
|
android:singleLine="false" |
||||
|
android:layout_height="wrap_content" |
||||
|
/> |
||||
|
|
||||
|
</android.support.design.widget.TextInputLayout> |
||||
|
<ImageView |
||||
|
|
||||
|
android:layout_gravity="center_vertical|end" |
||||
|
android:layout_width="wrap_content" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:background="@drawable/ic_arrow_down" |
||||
|
/> |
||||
|
</FrameLayout> |
||||
|
|
||||
|
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeButton |
||||
|
android:id="@+id/btn_submit" |
||||
|
android:layout_width="200dp" |
||||
|
android:layout_height="50dp" |
||||
|
android:layout_gravity="center" |
||||
|
android:layout_marginBottom="4dp" |
||||
|
android:layout_marginTop="10dp" |
||||
|
android:background="@drawable/ic_rounded_background_coloured" |
||||
|
android:text="Reset" |
||||
|
android:textAllCaps="false" |
||||
|
android:textColor="@color/white" |
||||
|
android:textSize="18sp"/> |
||||
|
</LinearLayout> |
||||
|
</ScrollView> |
||||
|
|
||||
|
<ImageView |
||||
|
android:id="@+id/bottomImage" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_alignParentBottom="true" |
||||
|
android:src="@drawable/login_footer_image"/> |
||||
|
|
||||
|
|
||||
|
</RelativeLayout> |
||||
|
|
||||
|
</LinearLayout> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue