From cb1e7bcdefe77f5abe44eeb909cd3510014b9f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20Wrzeszczy=C5=84ski?= Date: Fri, 4 Jan 2019 21:05:23 +0100 Subject: [PATCH] Convert multiple api calls to flatMap with rxJava --- .../wmi/findmytutor/activity/BlackList.java | 65 +++++++++++------ .../findmytutor/activity/LoginActivity.java | 8 +-- .../wmi/findmytutor/activity/WhiteList.java | 69 ++++++++++++------- .../wmi/findmytutor/service/UserService.java | 3 +- .../com/uam/wmi/findmytutor/utils/Const.java | 2 +- app/src/main/res/values-pl/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 7 files changed, 101 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/BlackList.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/BlackList.java index 766bf8b..f7958da 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/BlackList.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/BlackList.java @@ -57,8 +57,12 @@ import java.util.Set; import butterknife.BindView; import butterknife.ButterKnife; +import io.reactivex.Observable; +import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.functions.Function; +import io.reactivex.observers.DisposableObserver; import io.reactivex.observers.DisposableSingleObserver; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; @@ -158,29 +162,44 @@ public class BlackList extends AppCompatActivity { ); } - private void fetchBlackListedUsers() { - for (String GUID : blacklistedUsersIDs){ - disposable.add( - userService.getUserById(GUID) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(new DisposableSingleObserver() { - @Override - public void onSuccess(User user) { - blacklistedUsers.add(user); - toggleEmptyNotes(); - if (blacklistedUsers.size() == blacklistedUsersIDs.size()) { - mAdapter.notifyDataSetChanged(); - } - } + private Observable> getListOfBlacklistedUsers(String userId) { + return userService.getTutorBlacklistedByID(userId) + .toObservable() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } - @Override - public void onError(Throwable e) { - showError(e); - } - }) - ); - } + private Observable getUserObservable(String userId) { + return userService + .getUserById(userId) + .toObservable() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + private void fetchBlackListedUsers() { + disposable.add(getListOfBlacklistedUsers(PrefUtils.getUserId(getApplicationContext())) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .flatMap((Function, Observable>) Observable::fromIterable) + .flatMap((Function>) this::getUserObservable) + .subscribeWith(new DisposableObserver() { + @Override + public void onNext(User user) { + blacklistedUsers.add(user); + } + + @Override + public void onError(Throwable e) { + showError(e); + } + + @Override + public void onComplete() { + toggleEmptyNotes(); + mAdapter.notifyDataSetChanged(); + } + })); } @@ -235,6 +254,8 @@ public class BlackList extends AppCompatActivity { private void handleAddUser(User user) { + Toast.makeText(this, R.string.add_user_to_list, Snackbar.LENGTH_LONG).show(); + blacklistedUsersIDs.clear(); blacklistedUsers.clear(); blacklistedUsersIDs.addAll(user.getBlacklist()); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java index 189f28a..1bf6765 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java @@ -148,10 +148,10 @@ public class LoginActivity extends AppCompatActivity { } private void loginProcess(String email, String password) { - ValidateUser user = new ValidateUser(email, password); - //LdapUser fakeUser = new LdapUser(email, password,"wmi","tutor",email,"Fałszywy",email); - disposable.add(ldapService.validate(user) - //disposable.add(ldapService.fakeValidate(fakeUser) + //ValidateUser user = new ValidateUser(email, password); + LdapUser fakeUser = new LdapUser(email, password,"wmi","tutor",email,"Fałszywy",email); + //disposable.add(ldapService.validate(user) + disposable.add(ldapService.fakeValidate(fakeUser) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::handleResponse, this::handleError)); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/WhiteList.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/WhiteList.java index d251307..afdd102 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/WhiteList.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/WhiteList.java @@ -46,8 +46,12 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; +import io.reactivex.Observable; +import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.functions.Function; +import io.reactivex.observers.DisposableObserver; import io.reactivex.observers.DisposableSingleObserver; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; @@ -146,32 +150,45 @@ public class WhiteList extends AppCompatActivity { ); } - private void fetchWhiteListedUsers() { - for (String GUID : whitelistedUsersIDs){ - disposable.add( - userService.getUserById(GUID) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(new DisposableSingleObserver() { - @Override - public void onSuccess(User user) { - whitelistedUsers.add(user); - toggleEmptyNotes(); - - if (whitelistedUsers.size() == whitelistedUsersIDs.size()) { - mAdapter.notifyDataSetChanged(); - } - } - - @Override - public void onError(Throwable e) { - showError(e); - } - }) - ); - } + private Observable> getListOfWhitelistedUsers(String userId) { + return userService.getTutorWhitelistedByID(userId) + .toObservable() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); } + private Observable getUserObservable(String userId) { + return userService + .getUserById(userId) + .toObservable() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + private void fetchWhiteListedUsers() { + disposable.add(getListOfWhitelistedUsers(PrefUtils.getUserId(getApplicationContext())) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .flatMap((Function, Observable>) Observable::fromIterable) + .flatMap((Function>) this::getUserObservable) + .subscribeWith(new DisposableObserver() { + @Override + public void onNext(User user) { + whitelistedUsers.add(user); + } + + @Override + public void onError(Throwable e) { + showError(e); + } + + @Override + public void onComplete() { + toggleEmptyNotes(); + mAdapter.notifyDataSetChanged(); + } + })); + } private void showFabDialog(View v){ LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getApplicationContext()); @@ -223,6 +240,8 @@ public class WhiteList extends AppCompatActivity { } private void handleAddUser(User user) { + Toast.makeText(this, R.string.add_user_to_list, Snackbar.LENGTH_LONG).show(); + whitelistedUsersIDs.clear(); whitelistedUsers.clear(); whitelistedUsersIDs.addAll(user.getWhitelist()); @@ -231,6 +250,7 @@ public class WhiteList extends AppCompatActivity { private void showError(Throwable e) { String message; + Log.e("ERR", String.valueOf(e)); if (e instanceof HttpException) { ResponseBody responseBody = ((HttpException) e).response().errorBody(); @@ -241,6 +261,7 @@ public class WhiteList extends AppCompatActivity { } else { message = "Network Error !"; } + Log.e("ERR",message); Toast.makeText(this, message, Snackbar.LENGTH_LONG).show(); } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java index 6fb51d6..f4092b4 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java @@ -10,6 +10,7 @@ import java.util.List; import io.reactivex.Completable; import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; import io.reactivex.Single; import retrofit2.Response; import retrofit2.http.Body; @@ -75,7 +76,7 @@ public interface UserService { Completable setUserInActive(@Path("userID") String userID); @GET("api/users/blacklist/{tutorID}") - Single> getTutorBlacklistedByID(@Path("tutorID") String tutorID); + Single > getTutorBlacklistedByID(@Path("tutorID") String tutorID); @PUT("api/users/blacklist/{tutorID}") Completable setTutorBlacklist(@Path("tutorID") String tutorID, @Body IsUsingListBool isUsing); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/Const.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/Const.java index d15ed63..d5f6466 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/Const.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/Const.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.List; public class Const { - public final static String BASE_URL = "https://s416084.projektstudencki.pl/master/"; + public final static String BASE_URL = "https://s416084.projektstudencki.pl/develop/"; public final static Integer mapRefreshInterval = 5000; public final static Integer onlineBackgroundLocationInterval = 7000; public final static Integer offlineBackgroundLocationInterval = 360000; diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 4e66421..1b734e8 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -266,5 +266,8 @@ Brak wyników! Nadaj nazwę tej lokalizacji. + + Użytkownik został dodany! + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a5fc583..507177c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -437,4 +437,7 @@ Search response is empty! Insert a name for this localization. + + User has been added! +