Skip to content

Commit

Permalink
feat: Option to resend verification mail (#1473)
Browse files Browse the repository at this point in the history
* feat: Option to resend verification mail

* Remove unused imports

* feat: Option to resend verification mail

* feat: Option to resend verification mail
  • Loading branch information
ShridharGoel authored and iamareebjamal committed Jan 28, 2019
1 parent d4019e2 commit c98d8b5
Show file tree
Hide file tree
Showing 11 changed files with 146 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
Expand Down Expand Up @@ -50,6 +51,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
}

setHasOptionsMenu(true);

binding.detail.resendVerificationMail.setOnClickListener(view -> {
getPresenter().resendVerificationMail();
});

return binding.getRoot();
}

Expand Down Expand Up @@ -136,6 +142,11 @@ public void showProgress(boolean show) {
ViewUtils.showView(binding.progressBar, show);
}

@Override
public void showSnackbar(String message) {
Snackbar.make(getView(), message, Snackbar.LENGTH_SHORT).show();
}

@Override
public void onRefreshComplete(boolean success) {
refreshLayout.setRefreshing(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,35 @@

import com.eventyay.organizer.common.mvp.presenter.AbstractBasePresenter;
import com.eventyay.organizer.common.rx.Logger;
import com.eventyay.organizer.data.auth.AuthService;
import com.eventyay.organizer.data.auth.model.ResendVerificationMail;
import com.eventyay.organizer.data.user.User;
import com.eventyay.organizer.data.user.UserRepositoryImpl;
import com.eventyay.organizer.utils.ErrorUtils;

import javax.inject.Inject;

import io.reactivex.Observable;
import io.reactivex.disposables.CompositeDisposable;
import timber.log.Timber;

import static com.eventyay.organizer.common.rx.ViewTransformers.dispose;
import static com.eventyay.organizer.common.rx.ViewTransformers.progressiveErroneousRefresh;

public class OrganizerDetailPresenter extends AbstractBasePresenter<OrganizerDetailView> {

private final UserRepositoryImpl userRepository;
private final AuthService authService;
private final ResendVerificationMail resendVerificationMail = new ResendVerificationMail();

private final CompositeDisposable compositeDisposable = new CompositeDisposable();

private User user;

@Inject
public OrganizerDetailPresenter(UserRepositoryImpl userRepository) {
public OrganizerDetailPresenter(UserRepositoryImpl userRepository, AuthService authService) {
this.userRepository = userRepository;
this.authService = authService;
}

@Override
Expand All @@ -34,10 +44,23 @@ public void loadOrganizer(boolean forceReload) {
.compose(progressiveErroneousRefresh(getView(), forceReload))
.subscribe(loadedUser -> {
this.user = loadedUser;
resendVerificationMail.setEmail(user.getEmail());
getView().showResult(user);
}, Logger::logError);
}

public void resendVerificationMail() {
compositeDisposable.add(
authService.resendVerificationMail(resendVerificationMail)
.doOnSubscribe(disposable -> getView().showProgress(true))
.doFinally(() -> getView().showProgress(false))
.subscribe(resendMailResponse -> getView().showSnackbar("Verification Mail Resent"),
throwable -> {
getView().showError(ErrorUtils.getErrorDetails(throwable).toString());
Timber.e(throwable, "An exception occurred : %s", throwable.getMessage());
}));
}

private Observable<User> getOrganizerSource(boolean forceReload) {
if (user != null && !forceReload && isRotated()) {
return Observable.just(user);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,7 @@
import com.eventyay.organizer.common.mvp.view.Refreshable;
import com.eventyay.organizer.data.user.User;

public interface OrganizerDetailView extends Progressive, Erroneous, Refreshable, ItemResult<User> { }
public interface OrganizerDetailView extends Progressive, Erroneous, Refreshable, ItemResult<User> {

void showSnackbar(String message);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.eventyay.organizer.data.auth.model.LoginResponse;
import com.eventyay.organizer.data.auth.model.RequestToken;
import com.eventyay.organizer.data.auth.model.RequestTokenResponse;
import com.eventyay.organizer.data.auth.model.ResendVerificationMail;
import com.eventyay.organizer.data.auth.model.ResendVerificationMailResponse;
import com.eventyay.organizer.data.auth.model.SubmitToken;
import com.eventyay.organizer.data.auth.model.SubmitTokenResponse;
import com.eventyay.organizer.data.user.User;
Expand Down Expand Up @@ -38,4 +40,7 @@ public interface AuthApi {

@POST("auth/change-password")
Observable<ChangePasswordResponse> changePassword(@Body Map<String, ChangePassword> changePassword);

@POST("auth/resend-verification-email")
Observable<ResendVerificationMailResponse> resendMail(@Body ResendVerificationMail resendVerificationMail);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import com.eventyay.organizer.data.auth.model.EmailValidationResponse;
import com.eventyay.organizer.data.auth.model.Login;
import com.eventyay.organizer.data.auth.model.RequestToken;
import com.eventyay.organizer.data.auth.model.ResendVerificationMail;
import com.eventyay.organizer.data.auth.model.ResendVerificationMailResponse;
import com.eventyay.organizer.data.auth.model.SubmitToken;
import com.eventyay.organizer.data.user.User;

Expand All @@ -28,4 +30,6 @@ public interface AuthService {
Completable changePassword(ChangePassword changePassword);

Observable<EmailValidationResponse> checkEmailRegistered(EmailRequest emailRequest);

Observable<ResendVerificationMailResponse> resendVerificationMail(ResendVerificationMail resendVerificationMail);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.eventyay.organizer.data.auth.model.EmailValidationResponse;
import com.eventyay.organizer.data.auth.model.Login;
import com.eventyay.organizer.data.auth.model.RequestToken;
import com.eventyay.organizer.data.auth.model.ResendVerificationMail;
import com.eventyay.organizer.data.auth.model.ResendVerificationMailResponse;
import com.eventyay.organizer.data.auth.model.SubmitToken;
import com.eventyay.organizer.data.user.User;
import com.eventyay.organizer.common.Constants;
Expand Down Expand Up @@ -141,4 +143,15 @@ public Completable changePassword(ChangePassword changePassword) {
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}

@Override
public Observable<ResendVerificationMailResponse> resendVerificationMail(ResendVerificationMail resendVerificationMail) {
if (!repository.isConnected())
return Observable.error(new Throwable(Constants.NO_NETWORK));

return authApi
.resendMail(resendVerificationMail)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.eventyay.organizer.data.auth.model;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;

import lombok.Data;

@Data
@JsonTypeName("data")
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
public class ResendVerificationMail {

public String email;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.eventyay.organizer.data.auth.model;

import lombok.Data;

@Data
public class ResendVerificationMailResponse {

public String message;
}
97 changes: 57 additions & 40 deletions app/src/main/res/layout/organizer_detail_layout.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
<layout>

<data>

<import type="android.view.View" />

<import type="com.eventyay.organizer.utils.DateUtils" />

<variable
Expand All @@ -25,15 +27,15 @@
android:layout_width="@dimen/avatar_size"
android:layout_height="@dimen/avatar_size"
android:layout_gravity="center"
app:circleImageUrl="@{ user.avatarUrl }"
android:layout_margin="@dimen/spacing_medium"
app:placeholder="@{ @drawable/ic_account_circle }"
android:contentDescription="@string/profile_picture" />
android:contentDescription="@string/profile_picture"
app:circleImageUrl="@{ user.avatarUrl }"
app:placeholder="@{ @drawable/ic_account_circle }" />

<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_medium" >
android:layout_margin="@dimen/spacing_medium">

<LinearLayout
android:layout_width="match_parent"
Expand All @@ -43,50 +45,65 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#dedede"
android:padding="@dimen/spacing_small"
android:text="@string/details"
android:background="#dedede"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textColor="?android:textColorSecondary" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_clock }"
android:drawableLeft="@{ @drawable/ic_clock }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_clock }"
android:drawableStart="@{ @drawable/ic_clock }"
android:text='@{ "Joined: " + DateUtils.formatDateWithDefault(DateUtils.FORMAT_DAY_COMPLETE, user.createdAt) }' />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_email }"
android:drawableLeft="@{ @drawable/ic_email }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_email }"
android:drawableStart="@{ @drawable/ic_email }"
android:text='@{ user.email }' />

<TextView
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_server_sync }"
android:drawableStart="@{ @drawable/ic_server_sync }"
android:text='@{ user.isVerified ? @string/verified : @string/not_verified }' />
android:layout_height="wrap_content">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_server_sync }"
android:drawableLeft="@{ @drawable/ic_server_sync }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:text='@{ user.isVerified ? @string/verified : @string/not_verified }' />

<TextView
android:id="@+id/resend_verification_mail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/resend_verification_mail"
android:textColor="@color/color_accent"
android:padding="@dimen/spacing_small"
android:visibility="@{user.isVerified ? View.GONE : View.VISIBLE}" />

</LinearLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_info }"
android:drawableLeft="@{ @drawable/ic_info }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_info }"
android:drawableStart="@{ @drawable/ic_info }"
android:text='@{ user.details }'
android:visibility="@{user.details == null ? View.GONE : View.VISIBLE}" />

Expand All @@ -98,7 +115,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_medium"
android:visibility="@{user.facebookUrl != null || user.contact != null || user.twitterUrl != null || user.googlePlusUrl != null || user.instagramUrl != null ? View.VISIBLE : View.GONE}" >
android:visibility="@{user.facebookUrl != null || user.contact != null || user.twitterUrl != null || user.googlePlusUrl != null || user.instagramUrl != null ? View.VISIBLE : View.GONE}">

<LinearLayout
android:layout_width="match_parent"
Expand All @@ -108,66 +125,66 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#dedede"
android:padding="@dimen/spacing_small"
android:text="@string/contact"
android:background="#dedede"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textColor="?android:textColorSecondary" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_contact }"
android:drawableLeft="@{ @drawable/ic_contact }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_contact }"
android:drawableStart="@{ @drawable/ic_contact }"
android:text='@{ user.contact }'
android:visibility="@{user.contact == null ? View.GONE : View.VISIBLE}" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_facebook }"
android:drawableLeft="@{ @drawable/ic_facebook }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_facebook }"
android:drawableStart="@{ @drawable/ic_facebook }"
android:text='@{ user.facebookUrl }'
android:visibility="@{user.facebookUrl == null ? View.GONE : View.VISIBLE}" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_twitter }"
android:drawableLeft="@{ @drawable/ic_twitter }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_twitter }"
android:drawableStart="@{ @drawable/ic_twitter }"
android:text='@{ user.twitterUrl }'
android:visibility="@{user.twitterUrl == null ? View.GONE : View.VISIBLE}" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_google_plus }"
android:drawableLeft="@{ @drawable/ic_google_plus }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_google_plus }"
android:drawableStart="@{ @drawable/ic_google_plus }"
android:text='@{ user.googlePlusUrl }'
android:visibility="@{user.googlePlusUrl == null ? View.GONE : View.VISIBLE}" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@{ @drawable/ic_instagram }"
android:drawableLeft="@{ @drawable/ic_instagram }"
android:drawablePadding="@dimen/spacing_small"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
android:drawablePadding="@dimen/spacing_small"
android:drawableLeft="@{ @drawable/ic_instagram }"
android:drawableStart="@{ @drawable/ic_instagram }"
android:text='@{ user.instagramUrl }'
android:visibility="@{user.instagramUrl == null ? View.GONE : View.VISIBLE}"/>
android:visibility="@{user.instagramUrl == null ? View.GONE : View.VISIBLE}" />

</LinearLayout>

Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@
<string name="list_numbered">Action list in numbered points</string>
<string name="action_insert_link">Action insert link</string>
<string name="play_store_link">https://play.google.com/store/apps/details?id=com.eventyay.organizer</string>
<string name="resend_verification_mail">Resend verification mail</string>

<string-array name="timezones">
<item>Africa/Abidjan</item>
Expand Down
Loading

0 comments on commit c98d8b5

Please sign in to comment.