diff --git a/Habitica/assets/migrations/Habitica/19.sql b/Habitica/assets/migrations/Habitica/19.sql new file mode 100644 index 000000000..592a99a51 --- /dev/null +++ b/Habitica/assets/migrations/Habitica/19.sql @@ -0,0 +1 @@ +ALTER TABLE UserParty ADD COLUMN 'partyOrder' varchar(255); \ No newline at end of file diff --git a/Habitica/build.gradle b/Habitica/build.gradle index c51d1aa83..67458a0a6 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -44,7 +44,12 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0' compile 'com.squareup.okhttp3:okhttp:3.2.0' - compile 'com.squareup.retrofit:retrofit:1.9.0' + compile 'com.squareup.okhttp3:logging-interceptor:3.2.0' + compile ('com.squareup.retrofit2:retrofit:2.0.2') { + exclude module: 'okhttp' + } + compile 'com.squareup.retrofit2:converter-gson:2.0.2' + compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2' compile('com.crashlytics.sdk.android:crashlytics:2.3.0@aar') { transitive = true; diff --git a/Habitica/res/layout/login_screen.xml b/Habitica/res/layout/activity_login.xml similarity index 95% rename from Habitica/res/layout/login_screen.xml rename to Habitica/res/layout/activity_login.xml index 4d32d0732..29a3fc588 100644 --- a/Habitica/res/layout/login_screen.xml +++ b/Habitica/res/layout/activity_login.xml @@ -47,7 +47,7 @@ android:id="@+id/username_row" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_gravity="center"> + style="@style/LoginRow"> + android:layout_height="match_parent" + style="@style/LoginRow"> + android:layout_height="match_parent" + style="@style/LoginRow"> + android:layout_height="match_parent" + style="@style/LoginRow"> APIToken Username E-mail + https://habitica.com \ No newline at end of file diff --git a/Habitica/res/values/styles.xml b/Habitica/res/values/styles.xml index dfba5ba86..826cef312 100644 --- a/Habitica/res/values/styles.xml +++ b/Habitica/res/values/styles.xml @@ -176,4 +176,10 @@ center center + + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java index bb2a1c19c..153913dc0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java @@ -1,11 +1,5 @@ package com.habitrpg.android.habitica; -import android.app.Activity; -import android.support.v7.app.AlertDialog; -import android.util.Log; - -import com.amplitude.api.Amplitude; -import com.crashlytics.android.Crashlytics; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; @@ -15,24 +9,24 @@ import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; -import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; -import com.habitrpg.android.habitica.callbacks.TaskScoringCallback; + +import com.amplitude.api.Amplitude; +import com.crashlytics.android.Crashlytics; import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy; import com.magicmicky.habitrpgwrapper.lib.api.ApiService; import com.magicmicky.habitrpgwrapper.lib.api.InAppPurchasesApiService; import com.magicmicky.habitrpgwrapper.lib.api.MaintenanceApiService; import com.magicmicky.habitrpgwrapper.lib.api.Server; -import com.magicmicky.habitrpgwrapper.lib.api.TypeAdapter.TagsAdapter; import com.magicmicky.habitrpgwrapper.lib.models.ChatMessage; import com.magicmicky.habitrpgwrapper.lib.models.ContentResult; import com.magicmicky.habitrpgwrapper.lib.models.Customization; import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; import com.magicmicky.habitrpgwrapper.lib.models.Group; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult; import com.magicmicky.habitrpgwrapper.lib.models.Purchases; import com.magicmicky.habitrpgwrapper.lib.models.Skill; -import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection; import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep; import com.magicmicky.habitrpgwrapper.lib.models.UserAuth; import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse; @@ -44,9 +38,11 @@ import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; +import com.magicmicky.habitrpgwrapper.lib.models.responses.FeedResponse; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; import com.magicmicky.habitrpgwrapper.lib.utils.ChatMessageDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.ChecklistItemSerializer; @@ -55,6 +51,7 @@ import com.magicmicky.habitrpgwrapper.lib.utils.CustomizationDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.DateDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.EggListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.FAQArticleListDeserilializer; +import com.magicmicky.habitrpgwrapper.lib.utils.FeedResponseDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.FoodListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.GroupSerialization; import com.magicmicky.habitrpgwrapper.lib.utils.HatchingPotionListDeserializer; @@ -66,33 +63,60 @@ import com.magicmicky.habitrpgwrapper.lib.utils.QuestListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.SkillDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.TaskListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.TaskSerializer; +import com.magicmicky.habitrpgwrapper.lib.utils.TaskTagDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.TutorialStepListDeserializer; import com.raizlabs.android.dbflow.structure.ModelAdapter; +import org.json.JSONException; +import org.json.JSONObject; + +import android.app.Activity; +import android.support.v7.app.AlertDialog; + import java.io.IOException; +import java.lang.annotation.Annotation; import java.lang.reflect.Type; +import java.net.ConnectException; import java.util.Date; import java.util.HashMap; import java.util.List; -import retrofit.Callback; -import retrofit.ErrorHandler; -import retrofit.Profiler; -import retrofit.RequestInterceptor; -import retrofit.RestAdapter; -import retrofit.RetrofitError; -import retrofit.converter.GsonConverter; +import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okhttp3.logging.HttpLoggingInterceptor; +import retrofit2.Call; +import retrofit2.Converter; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava.HttpException; +import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; +import rx.Observable; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; +import rx.schedulers.Schedulers; -public class APIHelper implements ErrorHandler, Profiler { +public class APIHelper implements Action1 { - private static final String TAG = "ApiHelper"; // I think we don't need the APIHelper anymore we could just use ApiService public final ApiService apiService; private final InAppPurchasesApiService inAppPurchasesService; public final MaintenanceApiService maintenanceService; + private final GsonConverterFactory gsonConverter; + private final Retrofit retrofitAdapter; private HostConfig cfg; + + final Observable.Transformer apiCallTransformer = + observable -> ((Observable)observable).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doOnError(this); + private AlertDialog displayedAlert; + //private OnHabitsAPIResult mResultListener; //private HostConfig mConfig; public APIHelper(final HostConfig cfg) { @@ -101,17 +125,10 @@ public class APIHelper implements ErrorHandler, Profiler { Crashlytics.getInstance().core.setUserName(cfg.getUser()); Amplitude.getInstance().setUserId(cfg.getUser()); - RequestInterceptor requestInterceptor = request -> { - request.addHeader("x-api-key", cfg.getApi()); - request.addHeader("x-api-user", cfg.getUser()); - request.addHeader("x-client", "habitica-android"); - }; - Type taskTagClassListType = new TypeToken>() { }.getType(); - Type taskClassListType = new TypeToken>() {}.getType(); Type skillListType = new TypeToken>() {}.getType(); Type customizationListType = new TypeToken>() {}.getType(); Type tutorialStepListType = new TypeToken>() {}.getType(); @@ -124,7 +141,7 @@ public class APIHelper implements ErrorHandler, Profiler { Type petListType = new TypeToken>() {}.getType(); Type mountListType = new TypeToken>() {}.getType(); - //Exclusion stratety needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121 + //Exclusion strategy needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121 Gson gson = new GsonBuilder() .setExclusionStrategies(new CheckListItemExcludeStrategy()) .setExclusionStrategies(new ExclusionStrategy() { @@ -138,12 +155,12 @@ public class APIHelper implements ErrorHandler, Profiler { return false; } }) - .registerTypeAdapter(taskTagClassListType, new TagsAdapter()) + .registerTypeAdapter(taskTagClassListType, new TaskTagDeserializer()) .registerTypeAdapter(Boolean.class, booleanAsIntAdapter) .registerTypeAdapter(boolean.class, booleanAsIntAdapter) .registerTypeAdapter(skillListType, new SkillDeserializer()) .registerTypeAdapter(ChecklistItem.class, new ChecklistItemSerializer()) - .registerTypeAdapter(taskClassListType, new TaskListDeserializer()) + .registerTypeAdapter(TaskList.class, new TaskListDeserializer()) .registerTypeAdapter(Purchases.class, new PurchasedDeserializer()) .registerTypeAdapter(customizationListType, new CustomizationDeserializer()) .registerTypeAdapter(tutorialStepListType, new TutorialStepListDeserializer()) @@ -160,36 +177,81 @@ public class APIHelper implements ErrorHandler, Profiler { .registerTypeAdapter(ChatMessage.class, new ChatMessageDeserializer()) .registerTypeAdapter(Task.class, new TaskSerializer()) .registerTypeAdapter(ContentResult.class, new ContentDeserializer()) + .registerTypeAdapter(FeedResponse.class, new FeedResponseDeserializer()) .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") .create(); - Server server = new Server(cfg.getAddress()); - RestAdapter adapter = new RestAdapter.Builder() - .setEndpoint(server.toString()) - .setErrorHandler(this) - .setProfiler(this) - .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) - .setRequestInterceptor(requestInterceptor) - .setConverter(new GsonConverter(gson)) + Interceptor remove_data_interceptor = chain -> { + Response response = chain.proceed(chain.request()); + String stringJson = response.body().string(); + JSONObject jsonObject = null; + String dataString = null; + try { + jsonObject = new JSONObject(stringJson); + if (jsonObject.has("data")) { + dataString = jsonObject.getString("data"); + } + } catch (JSONException e) { + e.printStackTrace(); + } + MediaType contentType = response.body().contentType(); + ResponseBody body = null; + + if (dataString != null) { + body = ResponseBody.create(contentType, dataString); + } else { + body = ResponseBody.create(contentType, stringJson); + } + return response.newBuilder().body(body).build(); + }; + + HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); + if (BuildConfig.DEBUG) { + logging.setLevel(HttpLoggingInterceptor.Level.BASIC); + } + + OkHttpClient client = new OkHttpClient.Builder() + .addInterceptor(remove_data_interceptor) + .addInterceptor(logging) + .addNetworkInterceptor(chain -> { + Request original = chain.request(); + if (cfg.getUser() != null) { + Request request = original.newBuilder() + .header("x-api-key", cfg.getApi()) + .header("x-api-user", cfg.getUser()) + .header("x-client", "habitica-android") + .method(original.method(), original.body()) + .build(); + return chain.proceed(request); + } else { + return chain.proceed(original); + } + }) .build(); - this.apiService = adapter.create(ApiService.class); + + + gsonConverter = GsonConverterFactory.create(gson); + + Server server = new Server(cfg.getAddress()); + retrofitAdapter = new Retrofit.Builder() + .client(client) + .baseUrl(server.toString()) + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .addConverterFactory(gsonConverter) + .build(); + this.apiService = retrofitAdapter.create(ApiService.class); server = new Server(cfg.getAddress(), false); - adapter = new RestAdapter.Builder() - .setEndpoint(server.toString()) - .setErrorHandler(this) - .setProfiler(this) - .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) - .setRequestInterceptor(requestInterceptor) - .setConverter(new GsonConverter(gson)) + Retrofit adapter = new Retrofit.Builder() + .baseUrl(server.toString()) + .addConverterFactory(gsonConverter) .build(); this.inAppPurchasesService = adapter.create(InAppPurchasesApiService.class); - adapter = new RestAdapter.Builder() - .setEndpoint("https://habitica-assets.s3.amazonaws.com/mobileApp/endpoint/") - .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) - .setRequestInterceptor(requestInterceptor) - .setConverter(new GsonConverter(gson)) + adapter = new Retrofit.Builder() + .baseUrl("https://habitica-assets.s3.amazonaws.com/mobileApp/endpoint/") + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .addConverterFactory(gsonConverter) .build(); this.maintenanceService = adapter.create(MaintenanceApiService.class); } @@ -223,117 +285,92 @@ public class APIHelper implements ErrorHandler, Profiler { } }; - - public void createNewTask(Task item, Callback cb) { - this.apiService.createItem(item, cb); - } - - public void retrieveUser(final HabitRPGUserCallback callback) { - new Thread(() -> { - apiService.getUser(callback); - }).start(); - } - - public void updateTaskDirection(String id, TaskDirection direction, TaskScoringCallback callback) { - this.apiService.postTaskDirection(id, direction.toString(), callback); - } - - public void registerUser(String username, String email, String password, String confirmPassword, Callback callback) { + public Observable registerUser(String username, String email, String password, String confirmPassword) { UserAuth auth = new UserAuth(); auth.setUsername(username); auth.setPassword(password); auth.setConfirmPassword(confirmPassword); auth.setEmail(email); - this.apiService.registerUser(auth, callback); + return this.apiService.registerUser(auth) + .compose(this.configureApiCallObserver()); } - public void connectUser(String username, String password, Callback callback) { + public Observable connectUser(String username, String password) { UserAuth auth = new UserAuth(); auth.setUsername(username); auth.setPassword(password); - this.apiService.connectLocal(auth, callback); + return this.apiService.connectLocal(auth) + .compose(this.configureApiCallObserver()); } - public void connectSocial(String userId, String accessToken, Callback callback) { + public Observable connectSocial(String userId, String accessToken) { UserAuthSocial auth = new UserAuthSocial(); auth.setNetwork("facebook"); UserAuthSocialTokens authResponse = new UserAuthSocialTokens(); authResponse.setClient_id(userId); authResponse.setAccess_token(accessToken); auth.setAuthResponse(authResponse); - this.apiService.connectSocial(auth, callback); + return this.apiService.connectSocial(auth) + .compose(this.configureApiCallObserver()); } - public void updateTask(Task item, Callback cb) { - this.apiService.updateTask(item.getId(), item, cb); - } - - public class ErrorResponse{ - public String err; - } - - public class ErrorListResponse { - public List err; - } - - @Override - public Throwable handleError(RetrofitError cause) { - - if (cause.getKind().equals(RetrofitError.Kind.NETWORK)) { - //It also handles timeouts - showConnectionProblemDialog(R.string.network_error_no_network_body); - return cause; - } else if (cause.getKind().equals(RetrofitError.Kind.HTTP)) { - Crashlytics.getInstance().core.log(Log.INFO, "Habitica", "Error loading " + cause.getUrl()); - retrofit.client.Response response = cause.getResponse(); - + @Override + public void call(Throwable throwable) { + if (throwable.getClass().equals(ConnectException.class)) { + this.showConnectionProblemDialog(R.string.internal_error_api); + } else if (throwable.getClass().equals(HttpException.class)) { + HttpException error = (HttpException)throwable; + retrofit2.Response response = error.response(); ErrorResponse res = null; + Converter errorConverter = + gsonConverter + .responseBodyConverter(ErrorResponse.class, new Annotation[0], retrofitAdapter); try { - res = new ErrorResponse(); - res.err = (String) cause.getBodyAs(String.class); - } catch (RuntimeException e) { - try { - res = (ErrorResponse) cause.getBodyAs(ErrorResponse.class); - } catch (RuntimeException e2) { - try { - ErrorListResponse resList = (ErrorListResponse) cause.getBodyAs(ErrorListResponse.class); - if (resList.err != null && resList.err.size() >= 1) { - res = new ErrorResponse(); - res.err = resList.err.get(0); - } - } catch (RuntimeException e3) { - res = null; - } - - } + res = (ErrorResponse) errorConverter.convert(response.errorBody()); + } catch (IOException e) { + e.printStackTrace(); } - int status = response.getStatus(); + int status = error.code(); if (status == 401) { - if(res != null && res.err != null && !res.err.isEmpty()) { - showConnectionProblemDialog("", res.err); + if(res != null && res.message != null && !res.message.isEmpty()) { + showConnectionProblemDialog("", res.message); } else { showConnectionProblemDialog(R.string.authentication_error_title, R.string.authentication_error_body); } - return cause; } else if (status >= 500 && status < 600) { this.showConnectionProblemDialog(R.string.internal_error_api); - return cause; - } else if (status == 404 && cause.getUrl().endsWith("party/chat")) { - return cause; } else if (status == 400) { - if(res != null && res.err != null && !res.err.isEmpty()) { - showConnectionProblemDialog("", res.err); + if(res != null && res.message != null && !res.message.isEmpty()) { + showConnectionProblemDialog("", res.message); } - return cause; + } else { + showConnectionProblemDialog(R.string.internal_error_api); } - } - this.showConnectionProblemDialog(R.string.internal_error_api); + } + } - return cause; - } + public Observable retrieveUser(boolean withTasks) { + Observable userObservable = apiService.getUser(); + if (withTasks) { + Observable tasksObservable = apiService.getTasks(); + + userObservable = Observable.zip(userObservable, tasksObservable, (habitRPGUser, tasks) -> { + habitRPGUser.setHabits(tasks.habits); + habitRPGUser.setDailys(tasks.dailies); + habitRPGUser.setTodos(tasks.todos); + habitRPGUser.setRewards(tasks.rewards); + return habitRPGUser; + }); + } + return userObservable.compose(configureApiCallObserver()); + } + + public class ErrorResponse{ + public String message; + } private void showConnectionProblemDialog(final int resourceMessageString) { showConnectionProblemDialog(R.string.network_error_title, resourceMessageString); @@ -348,42 +385,30 @@ public class APIHelper implements ErrorHandler, Profiler { private void showConnectionProblemDialog(final String resourceTitleString, final String resourceMessageString){ HabiticaApplication.currentActivity.runOnUiThread(() -> { - if (!(HabiticaApplication.currentActivity).isFinishing()) { + if (!(HabiticaApplication.currentActivity).isFinishing() && displayedAlert == null) { AlertDialog.Builder builder = new AlertDialog.Builder(HabiticaApplication.currentActivity) .setTitle(resourceTitleString) .setMessage(resourceMessageString) .setNeutralButton(android.R.string.ok, (dialog, which) -> { + displayedAlert = null; }); if (!resourceTitleString.isEmpty()) { builder.setIcon(R.drawable.ic_warning_black); } - builder.show(); + displayedAlert = builder.show(); } }); } - @Override - public Object beforeCall() { - return null; - } - - @Override - public void afterCall(RequestInformation requestInfo, long elapsedTime, int statusCode, Object beforeCallData) { - - } - - public void toggleSleep(Callback cb){ - apiService.sleep(cb); - } - - public void reviveUser(HabitRPGUserCallback cb) { - apiService.revive(cb); + public PurchaseValidationResult validatePurchase(PurchaseValidationRequest request) throws IOException { + Call response = inAppPurchasesService.validatePurchase(cfg.getUser(), cfg.getApi(), request); + return response.execute().body(); } - public PurchaseValidationResult validatePurchase(PurchaseValidationRequest request) - { - return inAppPurchasesService.validatePurchase(cfg.getUser(), cfg.getApi(), request); + @SuppressWarnings("unchecked") + public Observable.Transformer configureApiCallObserver() { + return (Observable.Transformer) apiCallTransformer; } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java index 61c2e8a97..5254646d3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java @@ -13,10 +13,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - public class ContentCache { public interface GotContentEntryCallback { @@ -83,89 +79,70 @@ public class ContentCache { } private void getContentAndSearchFor(final String typeOfSearch, final String searchKey, final GotContentEntryCallback gotEntry) { - apiService.getContent(new Callback() { - @Override - public void success(ContentResult contentResult, Response response) { - switch (typeOfSearch) { - case "quest": { - Collection questList = contentResult.quests; + apiService.getContent().subscribe(contentResult -> { + switch (typeOfSearch) { + case "quest": { + Collection questList = contentResult.quests; - for (QuestContent quest : questList) { - if (quest.getKey() == searchKey) { - gotEntry.GotObject((T) quest); - } + for (QuestContent quest : questList) { + if (quest.getKey() == searchKey) { + gotEntry.GotObject((T) quest); } - - break; } - case "item": { - T searchedItem = null; - if (searchKey == "potion") { - searchedItem = (T) contentResult.potion; - } else if (searchKey == "armoire") { - searchedItem = (T) contentResult.armoire; - } else { - Collection itemList = contentResult.gear.flat; - - for (ItemData item : itemList) { - if (item.key.equals(searchKey)) { - searchedItem = (T) item; - } - } - } - - gotEntry.GotObject((T) searchedItem); - - break; - } + break; } + case "item": { + T searchedItem = null; - saveContentResultToDb(contentResult); + if (searchKey == "potion") { + searchedItem = (T) contentResult.potion; + } else if (searchKey == "armoire") { + searchedItem = (T) contentResult.armoire; + } else { + Collection itemList = contentResult.gear.flat; + + for (ItemData item : itemList) { + if (item.key.equals(searchKey)) { + searchedItem = (T) item; + } + } + } + + gotEntry.GotObject((T) searchedItem); + + break; + } } - - @Override - public void failure(RetrofitError error) { - - } - }); + saveContentResultToDb(contentResult); + }, throwable -> {}); } private void getContentAndSearchForList(final String typeOfSearch, final List searchKeys, final GotContentEntryCallback> gotEntry) { - apiService.getContent(new Callback() { - @Override - public void success(ContentResult contentResult, Response response) { + apiService.getContent().subscribe(contentResult -> { + switch (typeOfSearch) { + case "item": { + List resultList = new ArrayList(); - switch (typeOfSearch) { - case "item": { - List resultList = new ArrayList(); + List itemList = new ArrayList(contentResult.gear.flat); + itemList.add(contentResult.potion); + itemList.add(contentResult.armoire); - List itemList = new ArrayList(contentResult.gear.flat); - itemList.add(contentResult.potion); - itemList.add(contentResult.armoire); - - for (ItemData item : itemList) { - if (searchKeys.contains(item.key)) { - resultList.add((T) item); - } + for (ItemData item : itemList) { + if (searchKeys.contains(item.key)) { + resultList.add((T) item); } - - gotEntry.GotObject(resultList); - - break; } + + gotEntry.GotObject(resultList); + + break; } - - saveContentResultToDb(contentResult); } - - @Override - public void failure(RetrofitError error) { - - } - }); + saveContentResultToDb(contentResult); + }, throwable -> {}); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java index d6392ca89..d48b90186 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java @@ -7,5 +7,5 @@ public class HabitDatabase { public static final String NAME = "Habitica"; - public static final int VERSION = 18; + public static final int VERSION = 19; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaApplication.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaApplication.java index 078ab7c4a..0825dfd09 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaApplication.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaApplication.java @@ -1,21 +1,5 @@ package com.habitrpg.android.habitica; -import android.app.Activity; -import android.app.Application; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.database.DatabaseErrorHandler; -import android.database.sqlite.SQLiteDatabase; -import android.os.Build; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.multidex.MultiDex; -import android.support.multidex.MultiDexApplication; -import android.util.Log; - import com.amplitude.api.Amplitude; import com.crashlytics.android.Crashlytics; import com.crashlytics.android.core.CrashlyticsCore; @@ -33,6 +17,20 @@ import org.solovyev.android.checkout.ProductTypes; import org.solovyev.android.checkout.Products; import org.solovyev.android.checkout.PurchaseVerifier; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.DatabaseErrorHandler; +import android.database.sqlite.SQLiteDatabase; +import android.os.Build; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.multidex.MultiDexApplication; +import android.util.Log; + import java.io.File; import java.lang.reflect.Field; import java.util.Arrays; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.java index 1e6d3fb0c..b43f3f113 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.java @@ -1,9 +1,5 @@ package com.habitrpg.android.habitica; -import android.content.Context; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; - import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult; import com.magicmicky.habitrpgwrapper.lib.models.Transaction; @@ -12,6 +8,11 @@ import org.solovyev.android.checkout.BasePurchaseVerifier; import org.solovyev.android.checkout.Purchase; import org.solovyev.android.checkout.RequestListener; +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -47,16 +48,19 @@ public class HabiticaPurchaseVerifier extends BasePurchaseVerifier { validationRequest.transaction.receipt = purchase.data; validationRequest.transaction.signature = purchase.signature; - PurchaseValidationResult purchaseValidationResult = HabiticaApplication.ApiHelper.validatePurchase(validationRequest); + try { + PurchaseValidationResult purchaseValidationResult = HabiticaApplication.ApiHelper.validatePurchase(validationRequest); + if (purchaseValidationResult.ok) { + purchasedOrderList.add(purchase.orderId); - if (purchaseValidationResult.ok) { - purchasedOrderList.add(purchase.orderId); + verifiedPurchases.add(purchase); - verifiedPurchases.add(purchase); - - requestListener.onSuccess(verifiedPurchases); - } else { - requestListener.onError(purchases.indexOf(purchase), new Exception(purchaseValidationResult.data.toString())); + requestListener.onSuccess(verifiedPurchases); + } else { + requestListener.onError(purchases.indexOf(purchase), new Exception(purchaseValidationResult.data.toString())); + } + } catch (IOException e) { + e.printStackTrace(); } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/NotificationPublisher.java b/Habitica/src/main/java/com/habitrpg/android/habitica/NotificationPublisher.java index 781452dbb..ed6e487b2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/NotificationPublisher.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/NotificationPublisher.java @@ -1,5 +1,10 @@ package com.habitrpg.android.habitica; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.Select; + import android.annotation.TargetApi; import android.app.Notification; import android.app.NotificationManager; @@ -11,11 +16,6 @@ import android.os.Build; import android.support.v4.content.ContextCompat; import android.util.Log; -import com.habitrpg.android.habitica.ui.activities.MainActivity; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; - import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/HabitRPGUserCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/HabitRPGUserCallback.java index e7e7af9ad..02bb362bd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/HabitRPGUserCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/HabitRPGUserCallback.java @@ -2,36 +2,26 @@ package com.habitrpg.android.habitica.callbacks; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; -/** +/**r * Created by magicmicky on 18/02/15. */ -public class HabitRPGUserCallback implements Callback { +public class HabitRPGUserCallback implements Action1 { - private final OnUserReceived mCallback; + public final OnUserReceived callBack; public HabitRPGUserCallback(OnUserReceived callback) { - this.mCallback = callback; + this.callBack = callback; } @Override - public void success(HabitRPGUser habitRPGUser, Response response) { + public void call(HabitRPGUser habitRPGUser) { habitRPGUser.async().save(); - - mCallback.onUserReceived(habitRPGUser); - } - - @Override - public void failure(RetrofitError error) { - mCallback.onUserFail(); + callBack.onUserReceived(habitRPGUser); } public interface OnUserReceived { void onUserReceived(HabitRPGUser user); - - void onUserFail(); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/ItemsCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/ItemsCallback.java index 25014ab32..ad4af4e6b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/ItemsCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/ItemsCallback.java @@ -3,11 +3,9 @@ package com.habitrpg.android.habitica.callbacks; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.Items; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; -public class ItemsCallback implements Callback { +public class ItemsCallback implements Action1 { private final HabitRPGUserCallback.OnUserReceived mCallback; @@ -19,16 +17,9 @@ public class ItemsCallback implements Callback { } @Override - public void success(Items items, Response response) { + public void call(Items items) { this.user.setItems(items); - this.user.async().save(); - mCallback.onUserReceived(this.user); } - - @Override - public void failure(RetrofitError error) { - mCallback.onUserFail(); - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/MergeUserCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/MergeUserCallback.java index 140cd40cc..f3ac19d97 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/MergeUserCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/MergeUserCallback.java @@ -1,26 +1,19 @@ package com.habitrpg.android.habitica.callbacks; -import com.habitrpg.android.habitica.ui.activities.MainActivity; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.Items; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; -public class MergeUserCallback implements Callback { - - private final HabitRPGUserCallback.OnUserReceived mCallback; +public class MergeUserCallback extends HabitRPGUserCallback { private HabitRPGUser user; public MergeUserCallback(HabitRPGUserCallback.OnUserReceived callback, HabitRPGUser user) { - this.mCallback = callback; + super(callback); this.user = user; } @Override - public void success(HabitRPGUser user, Response response) { + public void call(HabitRPGUser user) { if (user.getItems() != null) { this.user.setItems(user.getItems()); } @@ -36,11 +29,6 @@ public class MergeUserCallback implements Callback { this.user.async().save(); - mCallback.onUserReceived(this.user); - } - - @Override - public void failure(RetrofitError error) { - mCallback.onUserFail(); + callBack.onUserReceived(this.user); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/SkillCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/SkillCallback.java index 9f7f4f380..2354c7088 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/SkillCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/SkillCallback.java @@ -6,32 +6,22 @@ import com.magicmicky.habitrpgwrapper.lib.models.Skill; import org.greenrobot.eventbus.EventBus; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - /** * Created by viirus on 28/11/15. */ -public class SkillCallback implements Callback { +public class SkillCallback extends HabitRPGUserCallback { private Skill usedSkill; - private final HabitRPGUserCallback.OnUserReceived callback; public SkillCallback(HabitRPGUserCallback.OnUserReceived callback, Skill usedSkill) { - this.callback = callback; + super(callback); this.usedSkill = usedSkill; } @Override - public void success(HabitRPGUser habitRPGUser, Response response) { + public void call(HabitRPGUser habitRPGUser) { habitRPGUser.async().save(); EventBus.getDefault().post(new SkillUsedEvent(this.usedSkill, habitRPGUser.getStats().getMp())); - callback.onUserReceived(habitRPGUser); - } - - @Override - public void failure(RetrofitError error) { - callback.onUserFail(); + callBack.onUserReceived(habitRPGUser); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskCreationCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskCreationCallback.java index 415caee0c..d138d07d0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskCreationCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskCreationCallback.java @@ -1,28 +1,20 @@ package com.habitrpg.android.habitica.callbacks; -import android.util.Log; - import com.habitrpg.android.habitica.events.TaskCreatedEvent; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import org.greenrobot.eventbus.EventBus; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; /** * Created by magicmicky on 02/04/15. */ -public class TaskCreationCallback implements Callback { +public class TaskCreationCallback implements Action1 { + @Override - public void success(Task task, Response response) { + public void call(Task task) { task.save(); EventBus.getDefault().post(new TaskCreatedEvent(task)); } - - @Override - public void failure(RetrofitError error) { - Log.w("HabitCreation", "Error", error); - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskDeletionCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskDeletionCallback.java index f3a694c80..830e114c9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskDeletionCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskDeletionCallback.java @@ -1,17 +1,14 @@ package com.habitrpg.android.habitica.callbacks; -import android.util.Log; - import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; + /** * Created by magicmicky on 02/04/15. */ -public class TaskDeletionCallback implements Callback { +public class TaskDeletionCallback implements Action1 { private final OnTaskDeleted callback; private final Task taskToDelete; @@ -21,20 +18,12 @@ public class TaskDeletionCallback implements Callback { } @Override - public void success(Void aVoid, Response response) { + public void call(Void aVoid) { callback.onTaskDeleted(taskToDelete); } - @Override - public void failure(RetrofitError error) { - callback.onTaskDeletionFail(); - Log.w("HabitDeletion", "Error", error); - } - public interface OnTaskDeleted { public void onTaskDeleted(Task deleted); - - public void onTaskDeletionFail(); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskScoringCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskScoringCallback.java index 996b84530..16f4d93a0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskScoringCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskScoringCallback.java @@ -1,13 +1,10 @@ package com.habitrpg.android.habitica.callbacks; -import android.util.Log; - import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Item; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction; import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener; @@ -15,14 +12,12 @@ import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.From; import com.raizlabs.android.dbflow.sql.language.Select; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; /** * Created by magicmicky on 18/02/15. */ -public class TaskScoringCallback implements Callback { +public class TaskScoringCallback implements Action1 { private final OnTaskScored mCallback; private final String taskId; @@ -32,7 +27,7 @@ public class TaskScoringCallback implements Callback { } @Override - public void success(final TaskDirectionData taskDirectionData, Response response) { + public void call(TaskDirectionData taskDirectionData) { new Select().from(Task.class).where(Condition.column("id").eq(taskId)) .async() .querySingle(new TransactionListener() { @@ -102,15 +97,7 @@ public class TaskScoringCallback implements Callback { } } - @Override - public void failure(RetrofitError error) { - this.mCallback.onTaskScoringFailed(); - Log.w("TaskScoring", "Task scoring failed", error); - } - public interface OnTaskScored { void onTaskDataReceived(TaskDirectionData data, Task task); - - void onTaskScoringFailed(); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskUpdateCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskUpdateCallback.java index b5cc1da45..88bbe9a51 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskUpdateCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/TaskUpdateCallback.java @@ -1,31 +1,21 @@ package com.habitrpg.android.habitica.callbacks; -import android.util.Log; - import com.habitrpg.android.habitica.events.TaskUpdatedEvent; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import org.greenrobot.eventbus.EventBus; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; /** * Created by magicmicky on 02/04/15. */ -public class TaskUpdateCallback implements Callback { +public class TaskUpdateCallback implements Action1 { @Override - public void success(Task task, Response response) { + public void call(Task task) { task.save(); EventBus.getDefault().post(new TaskUpdatedEvent(task)); } - - @Override - public void failure(RetrofitError error) { - Log.w("HabitUpdate", "Error", error); - } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/UnlockCallback.java b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/UnlockCallback.java index 4cb7f3ce2..166dbfef5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/UnlockCallback.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/callbacks/UnlockCallback.java @@ -3,37 +3,29 @@ package com.habitrpg.android.habitica.callbacks; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.responses.UnlockResponse; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; /** * Created by magicmicky on 18/02/15. */ -public class UnlockCallback implements Callback { +public class UnlockCallback implements Action1 { - private final HabitRPGUserCallback.OnUserReceived mCallback; + private final HabitRPGUserCallback.OnUserReceived callback; private HabitRPGUser user; public UnlockCallback(HabitRPGUserCallback.OnUserReceived callback, HabitRPGUser user) { - this.mCallback = callback; + this.callback = callback; this.user = user; } @Override - public void success(UnlockResponse unlockResponse, Response response) { + public void call(UnlockResponse unlockResponse) { this.user.setPurchased(unlockResponse.purchased); this.user.setItems(unlockResponse.items); this.user.setPreferences(unlockResponse.preferences); - this.user.async().save(); - mCallback.onUserReceived(this.user); - } - - @Override - public void failure(RetrofitError error) { - mCallback.onUserFail(); + callback.onUserReceived(this.user); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShareEvent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShareEvent.java index 5368a1945..e47e08cfe 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShareEvent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShareEvent.java @@ -1,7 +1,6 @@ package com.habitrpg.android.habitica.events; import android.graphics.Bitmap; -import android.net.Uri; public class ShareEvent { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/EquipCommand.java b/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/EquipCommand.java index c4357e95a..beea8c255 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/EquipCommand.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/EquipCommand.java @@ -1,7 +1,5 @@ package com.habitrpg.android.habitica.events.commands; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; - public class EquipCommand { public String key; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/CustomListPreference.java b/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/CustomListPreference.java index 991f0d044..94ff0930b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/CustomListPreference.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/CustomListPreference.java @@ -1,9 +1,10 @@ package com.habitrpg.android.habitica.prefs; +import com.habitrpg.android.habitica.BuildConfig; +import com.habitrpg.android.habitica.R; + import android.app.AlertDialog.Builder; import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; import android.content.SharedPreferences; import android.preference.ListPreference; import android.preference.PreferenceManager; @@ -11,18 +12,13 @@ import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnFocusChangeListener; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.BaseAdapter; -import android.widget.CompoundButton; import android.widget.EditText; import android.widget.RadioButton; import android.widget.TextView; -import com.habitrpg.android.habitica.BuildConfig; -import com.habitrpg.android.habitica.R; - import java.util.ArrayList; public class CustomListPreference extends ListPreference { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/scanner/IntentIntegrator.java b/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/scanner/IntentIntegrator.java index 15785fbcf..3e937c68d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/scanner/IntentIntegrator.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/scanner/IntentIntegrator.java @@ -19,7 +19,6 @@ package com.habitrpg.android.habitica.prefs.scanner; import android.app.Activity; import android.app.AlertDialog; import android.content.ActivityNotFoundException; -import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.java index 510504630..324670c90 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.java @@ -1,5 +1,16 @@ package com.habitrpg.android.habitica.ui; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.databinding.ValueBarBinding; +import com.habitrpg.android.habitica.events.BoughtGemsEvent; +import com.habitrpg.android.habitica.events.commands.OpenGemPurchaseFragmentCommand; +import com.habitrpg.android.habitica.userpicture.UserPicture; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.Stats; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + import android.annotation.TargetApi; import android.content.Context; import android.databinding.DataBindingUtil; @@ -12,17 +23,6 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.databinding.ValueBarBinding; -import com.habitrpg.android.habitica.events.BoughtGemsEvent; -import com.habitrpg.android.habitica.events.commands.OpenGemPurchaseFragmentCommand; -import com.habitrpg.android.habitica.userpicture.UserPicture; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.Stats; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; - /** * Created by Negue on 14.06.2015. */ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/EditTextDrawer.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/EditTextDrawer.java index e7015435b..f8438d76a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/EditTextDrawer.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/EditTextDrawer.java @@ -1,10 +1,5 @@ package com.habitrpg.android.habitica.ui; -import android.support.v4.content.ContextCompat; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.commands.CreateTagCommand; import com.habitrpg.android.habitica.ui.helpers.ViewHelper; @@ -14,6 +9,11 @@ import com.mikepenz.materialdrawer.model.BaseViewHolder; import org.greenrobot.eventbus.EventBus; +import android.support.v4.content.ContextCompat; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + import butterknife.BindView; import butterknife.ButterKnife; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java index ef75834e0..308c50e6e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java @@ -1,35 +1,31 @@ package com.habitrpg.android.habitica.ui; -import android.app.Activity; -import android.content.Intent; -import android.support.v7.widget.Toolbar; -import android.view.View; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.activities.AboutActivity; import com.habitrpg.android.habitica.ui.activities.MainActivity; import com.habitrpg.android.habitica.ui.activities.PrefsActivity; import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; import com.habitrpg.android.habitica.ui.fragments.GemsPurchaseFragment; -import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemsFragment; import com.habitrpg.android.habitica.ui.fragments.NewsFragment; import com.habitrpg.android.habitica.ui.fragments.SkillsFragment; -import com.habitrpg.android.habitica.ui.fragments.inventory.StableFragment; import com.habitrpg.android.habitica.ui.fragments.faq.FAQOverviewFragment; +import com.habitrpg.android.habitica.ui.fragments.inventory.StableFragment; import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarOverviewFragment; import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentOverviewFragment; +import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemsFragment; import com.habitrpg.android.habitica.ui.fragments.social.GuildsOverviewFragment; import com.habitrpg.android.habitica.ui.fragments.social.TavernFragment; import com.habitrpg.android.habitica.ui.fragments.social.party.PartyFragment; import com.habitrpg.android.habitica.ui.fragments.tasks.TasksFragment; import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.AccountHeaderBuilder; -import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.ProfileDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; + +import android.app.Activity; +import android.content.Intent; +import android.support.v7.widget.Toolbar; public class MainDrawerBuilder { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/SectionIconDrawerItem.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/SectionIconDrawerItem.java index 74f00e6c8..f2a4bf751 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/SectionIconDrawerItem.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/SectionIconDrawerItem.java @@ -1,5 +1,12 @@ package com.habitrpg.android.habitica.ui; +import com.habitrpg.android.habitica.R; +import com.mikepenz.fastadapter.utils.ViewHolderFactory; +import com.mikepenz.materialdrawer.holder.StringHolder; +import com.mikepenz.materialdrawer.model.AbstractDrawerItem; +import com.mikepenz.materialdrawer.model.interfaces.Nameable; +import com.mikepenz.materialdrawer.model.interfaces.Typefaceable; + import android.content.Context; import android.graphics.Typeface; import android.support.annotation.LayoutRes; @@ -9,13 +16,6 @@ import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.mikepenz.fastadapter.utils.ViewHolderFactory; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.model.AbstractDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.Nameable; -import com.mikepenz.materialdrawer.model.interfaces.Typefaceable; - /** * Created by mikepenz on 03.02.15. */ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/TutorialView.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/TutorialView.java index 4bda04c88..3a35c3b52 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/TutorialView.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/TutorialView.java @@ -1,5 +1,8 @@ package com.habitrpg.android.habitica.ui; +import com.habitrpg.android.habitica.R; +import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep; + import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -8,9 +11,6 @@ import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep; - import butterknife.BindView; import butterknife.ButterKnife; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/UiUtils.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/UiUtils.java index 33d7e248c..7fa478d7a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/UiUtils.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/UiUtils.java @@ -1,5 +1,7 @@ package com.habitrpg.android.habitica.ui; +import com.habitrpg.android.habitica.R; + import android.app.Activity; import android.content.Context; import android.support.design.widget.Snackbar; @@ -8,8 +10,6 @@ import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; -import com.habitrpg.android.habitica.R; - /** * Simple utilities class for UI related stuff. */ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/WrapContentRecyclerViewLayoutManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/WrapContentRecyclerViewLayoutManager.java index 4913508aa..58129be99 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/WrapContentRecyclerViewLayoutManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/WrapContentRecyclerViewLayoutManager.java @@ -1,12 +1,12 @@ package com.habitrpg.android.habitica.ui; +import com.habitrpg.android.habitica.BuildConfig; + import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; -import com.habitrpg.android.habitica.BuildConfig; - /** * http://stackoverflow.com/a/29945693/1315039 */ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AboutActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AboutActivity.java index f6c14f2f3..4f3fd664c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AboutActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AboutActivity.java @@ -1,5 +1,13 @@ package com.habitrpg.android.habitica.ui.activities; +import com.github.porokoro.paperboy.ItemTypeBuilder; +import com.github.porokoro.paperboy.PaperboyBuilder; +import com.github.porokoro.paperboy.ViewTypes; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.AboutFragment; +import com.mikepenz.aboutlibraries.Libs; +import com.mikepenz.aboutlibraries.LibsBuilder; + import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; @@ -9,14 +17,6 @@ import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.view.MenuItem; -import com.github.porokoro.paperboy.ItemTypeBuilder; -import com.github.porokoro.paperboy.PaperboyBuilder; -import com.github.porokoro.paperboy.ViewTypes; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.AboutFragment; -import com.mikepenz.aboutlibraries.Libs; -import com.mikepenz.aboutlibraries.LibsBuilder; - import butterknife.BindView; public class AboutActivity extends BaseActivity { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.java index c41756225..92409936d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.java @@ -22,11 +22,9 @@ import java.util.Map; import butterknife.BindView; import butterknife.OnClick; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; -public class ClassSelectionActivity extends BaseActivity implements Callback { +public class ClassSelectionActivity extends BaseActivity implements Action1 { Boolean isInitialSelection; Boolean classWasUnset = false; @@ -113,7 +111,11 @@ public class ClassSelectionActivity extends BaseActivity implements Callback { + classWasUnset = true; + }, throwable -> {}); } } @@ -184,18 +186,25 @@ public class ClassSelectionActivity extends BaseActivity implements Callback updateData = new HashMap<>(); updateData.put("preferences.disableClasses", true); updateData.put("flags.classSelected", true); - apiHelper.apiService.updateUser(updateData, this); + apiHelper.apiService.updateUser(updateData) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(this, throwable -> {}); } private void selectClass(String selectedClass) { shouldFinish = true; this.displayProgressDialog(); - apiHelper.apiService.changeClass(selectedClass, this); + apiHelper.apiService.changeClass(selectedClass) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(this, throwable -> {}); + } + + private void displayProgressDialog() { + progressDialog = ProgressDialog.show(this, getString(R.string.changing_class_progress), null, true); } @Override - public void success(HabitRPGUser habitRPGUser, Response response) { - this.classWasUnset = true; + public void call(HabitRPGUser user) { if (shouldFinish) { if (progressDialog != null) { progressDialog.dismiss(); @@ -204,13 +213,4 @@ public class ClassSelectionActivity extends BaseActivity implements Callback { +public class IntroActivity extends BaseActivity implements View.OnClickListener, ViewPager.OnPageChangeListener { @BindView(R.id.view_pager) ViewPager pager; @@ -52,7 +48,9 @@ public class IntroActivity extends BaseActivity implements View.OnClickListener, HostConfig hostConfig = PrefsActivity.fromContext(this); APIHelper apiHelper = new APIHelper(hostConfig); - apiHelper.apiService.getContent(this); + apiHelper.apiService.getContent() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(contentResult -> {}, throwable -> {}); } private void setupIntro() { @@ -126,14 +124,4 @@ public class IntroActivity extends BaseActivity implements View.OnClickListener, public void onPageScrollStateChanged(int state) { } - - @Override - public void success(ContentResult contentResult, Response response) { - - } - - @Override - public void failure(RetrofitError error) { - - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java index 95dc926bc..e0a181725 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java @@ -1,27 +1,5 @@ package com.habitrpg.android.habitica.ui.activities; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Color; -import android.net.Uri; -import android.os.Bundle; -import android.support.design.widget.Snackbar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.preference.PreferenceManager; -import android.text.SpannableString; -import android.text.style.UnderlineSpan; -import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.inputmethod.EditorInfo; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ProgressBar; -import android.widget.TableRow; -import android.widget.TextView; - import com.amplitude.api.Amplitude; import com.facebook.AccessToken; import com.facebook.CallbackManager; @@ -42,23 +20,41 @@ import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse; import org.json.JSONException; import org.json.JSONObject; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.preference.PreferenceManager; +import android.text.SpannableString; +import android.text.style.UnderlineSpan; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.inputmethod.EditorInfo; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.TableRow; +import android.widget.TextView; + import butterknife.BindView; -import butterknife.BindString; import butterknife.ButterKnife; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; /** * @author Mickael Goubin */ public class LoginActivity extends AppCompatActivity - implements Callback,HabitRPGUserCallback.OnUserReceived { + implements Action1, HabitRPGUserCallback.OnUserReceived { private final static String TAG_ADDRESS="address"; private final static String TAG_USERID="user"; private final static String TAG_APIKEY="key"; - private APIHelper mApiHelper; + private APIHelper apiHelper; public String mTmpUserToken; public String mTmpApiToken; public Boolean isRegistering; @@ -98,7 +94,7 @@ public class LoginActivity extends AppCompatActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.login_screen); + setContentView(R.layout.activity_login); //Set default values to avoid null-responses when requesting unedited settings PreferenceManager.setDefaultValues(this, R.xml.preferences_fragment, false); @@ -120,7 +116,9 @@ public class LoginActivity extends AppCompatActivity @Override public void onSuccess(LoginResult loginResult) { AccessToken accessToken = AccessToken.getCurrentAccessToken(); - mApiHelper.connectSocial(accessToken.getUserId(), accessToken.getToken(), LoginActivity.this); + apiHelper.connectSocial(accessToken.getUserId(), accessToken.getToken()) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(LoginActivity.this, throwable -> {hideProgress();}); } @Override @@ -138,7 +136,7 @@ public class LoginActivity extends AppCompatActivity if(hc ==null) { hc = new HostConfig(BuildConfig.BASE_URL, BuildConfig.PORT, "", ""); } - mApiHelper = new APIHelper(hc); + apiHelper = new APIHelper(hc); this.isRegistering = true; @@ -156,17 +154,17 @@ public class LoginActivity extends AppCompatActivity private void resetLayout() { if (this.isRegistering) { if (this.mEmailRow.getVisibility() == View.GONE) { - expand(this.mEmailRow); + show(this.mEmailRow); } if (this.mConfirmPasswordRow.getVisibility() == View.GONE) { - expand(this.mConfirmPasswordRow); + show(this.mConfirmPasswordRow); } } else { if (this.mEmailRow.getVisibility() == View.VISIBLE) { - collapse(this.mEmailRow); + hide(this.mEmailRow); } if (this.mConfirmPasswordRow.getVisibility() == View.VISIBLE) { - collapse(this.mConfirmPasswordRow); + hide(this.mConfirmPasswordRow); } } } @@ -185,7 +183,9 @@ public class LoginActivity extends AppCompatActivity showValidationError(R.string.login_validation_error_fieldsmissing); return; } - mApiHelper.registerUser(username,email,password, cpassword, LoginActivity.this); + apiHelper.registerUser(username,email,password, cpassword) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(LoginActivity.this, throwable -> {hideProgress();}); } else { String username,password; username = String.valueOf(mUsernameET.getText()).trim(); @@ -194,7 +194,9 @@ public class LoginActivity extends AppCompatActivity showValidationError(R.string.login_validation_error_fieldsmissing); return; } - mApiHelper.connectUser(username,password, LoginActivity.this); + apiHelper.connectUser(username,password) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(LoginActivity.this, throwable -> {hideProgress();}); } } }; @@ -207,11 +209,11 @@ startActivity(i); }; - public static void expand(final View v) { + public static void show(final View v) { v.setVisibility(View.VISIBLE); } - public static void collapse(final View v) { + public static void hide(final View v) { v.setVisibility(View.GONE); } @@ -320,8 +322,45 @@ startActivity(i); return super.onOptionsItemSelected(item); } + private void saveTokens(String api, String user) throws Exception { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this); + SharedPreferences.Editor editor = prefs.edit(); + boolean ans = editor.putString(getString(R.string.SP_APIToken), api) + .putString(getString(R.string.SP_userID), user) + .putString(getString(R.string.SP_address),BuildConfig.BASE_URL) + .commit(); + if(!ans) { + throw new Exception("PB_string_commit"); + } + } + @Override - public void success(UserAuthResponse userAuthResponse, Response response) { + public void onUserReceived(HabitRPGUser user) { + try { + saveTokens(mTmpApiToken, mTmpUserToken); + } catch (Exception e) { + e.printStackTrace(); + } + this.startMainActivity(); + } + + private void hideProgress() { + mProgressBar.setVisibility(View.GONE); + } + + private void showValidationError(int resourceMessageString) { + mProgressBar.setVisibility(View.GONE); + new android.support.v7.app.AlertDialog.Builder(this) + .setTitle(R.string.login_validation_error_title) + .setMessage(resourceMessageString) + .setNeutralButton(android.R.string.ok, (dialog, which) -> { + }) + .setIcon(R.drawable.ic_warning_black) + .show(); + } + + @Override + public void call(UserAuthResponse userAuthResponse) { try { saveTokens(userAuthResponse.getToken(), userAuthResponse.getId()); } catch (Exception e) { @@ -341,48 +380,4 @@ startActivity(i); this.startMainActivity(); } } - - private void saveTokens(String api, String user) throws Exception { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this); - SharedPreferences.Editor editor = prefs.edit(); - boolean ans = editor.putString(getString(R.string.SP_APIToken), api) - .putString(getString(R.string.SP_userID), user) - .putString(getString(R.string.SP_address),BuildConfig.BASE_URL) - .commit(); - if(!ans) { - throw new Exception("PB_string_commit"); - } - } - - @Override - public void failure(RetrofitError error) { - mProgressBar.setVisibility(View.GONE); - } - - @Override - public void onUserReceived(HabitRPGUser user) { - try { - saveTokens(mTmpApiToken, mTmpUserToken); - } catch (Exception e) { - e.printStackTrace(); - } - this.startMainActivity(); - } - - @Override - public void onUserFail() { - mProgressBar.setVisibility(View.GONE); - showSnackbar(getString(R.string.unknown_error)); - } - - private void showValidationError(int resourceMessageString) { - mProgressBar.setVisibility(View.GONE); - new android.support.v7.app.AlertDialog.Builder(this) - .setTitle(R.string.login_validation_error_title) - .setMessage(resourceMessageString) - .setNeutralButton(android.R.string.ok, (dialog, which) -> { - }) - .setIcon(R.drawable.ic_warning_black) - .show(); - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java index 5cb301a4d..d211a05a3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java @@ -1,39 +1,5 @@ package com.habitrpg.android.habitica.ui.activities; -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.database.sqlite.SQLiteDoneException; -import android.databinding.DataBindingUtil; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Rect; -import android.graphics.drawable.BitmapDrawable; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.preference.PreferenceManager; -import android.support.design.widget.TabLayout; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.content.FileProvider; -import android.support.v4.view.GravityCompat; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.Toolbar; -import android.util.AttributeSet; -import android.util.Log; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.TextView; - import com.amplitude.api.Amplitude; import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.HabiticaApplication; @@ -73,8 +39,6 @@ import com.habitrpg.android.habitica.ui.fragments.GemsPurchaseFragment; import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; import com.habitrpg.android.habitica.userpicture.BitmapUtils; import com.habitrpg.android.habitica.userpicture.UserPicture; -import com.habitrpg.android.habitica.userpicture.UserPictureRunnable; -import com.magicmicky.habitrpgwrapper.lib.models.ContentResult; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.SuppressedModals; import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection; @@ -86,8 +50,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Item; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; -import com.magicmicky.habitrpgwrapper.lib.models.responses.BuyResponse; -import com.magicmicky.habitrpgwrapper.lib.models.responses.FeedResponse; import com.magicmicky.habitrpgwrapper.lib.models.responses.MaintenanceResponse; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days; @@ -119,9 +81,40 @@ import org.json.JSONObject; import org.solovyev.android.checkout.ActivityCheckout; import org.solovyev.android.checkout.Checkout; +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.database.sqlite.SQLiteDoneException; +import android.databinding.DataBindingUtil; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.preference.PreferenceManager; +import android.support.design.widget.TabLayout; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.content.FileProvider; +import android.support.v4.view.GravityCompat; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -133,14 +126,12 @@ import java.util.TimeZone; import java.util.concurrent.TimeUnit; import butterknife.BindView; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; import static com.habitrpg.android.habitica.ui.UiUtils.SnackbarDisplayType; import static com.habitrpg.android.habitica.ui.UiUtils.showSnackbar; -public class MainActivity extends BaseActivity implements HabitRPGUserCallback.OnUserReceived, +public class MainActivity extends BaseActivity implements Action1, HabitRPGUserCallback.OnUserReceived, TaskScoringCallback.OnTaskScored, GemsPurchaseFragment.Listener, TutorialView.OnTutorialReaction { @@ -167,7 +158,7 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O private AccountHeader accountHeader; private BaseMainFragment activeFragment; private AvatarWithBarsViewModel avatarInHeader; - private APIHelper mAPIHelper; + private APIHelper apiHelper; private AlertDialog faintDialog; private UserPicture sideUserPicture; @@ -194,7 +185,7 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O //Check if reminder alarm is set scheduleReminder(this); - HabiticaApplication.ApiHelper = this.mAPIHelper = new APIHelper(hostConfig); + HabiticaApplication.ApiHelper = this.apiHelper = new APIHelper(hostConfig); new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).async().querySingle(userTransactionListener); @@ -226,8 +217,9 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O //resync, if last sync was more than 10 minutes ago if (this.lastSync == null || (new Date().getTime() - this.lastSync.getTime()) > 600000) { - if (this.mAPIHelper != null) { - this.mAPIHelper.retrieveUser(new HabitRPGUserCallback(this)); + if (this.apiHelper != null) { + this.apiHelper.retrieveUser(true) + .subscribe(new HabitRPGUserCallback(this), throwable -> {}); this.checkMaintenance(); } } @@ -275,7 +267,7 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O } this.activeFragment = fragment; fragment.setArguments(getIntent().getExtras()); - fragment.mAPIHelper = mAPIHelper; + fragment.apiHelper = apiHelper; fragment.setUser(user); fragment.setActivity(this); fragment.setTabLayout(detail_tabs); @@ -317,7 +309,8 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O if (offset != user.getPreferences().getTimezoneOffset()) { Map updateData = new HashMap<>(); updateData.put("preferences.timezoneOffset", String.valueOf(offset)); - mAPIHelper.apiService.updateUser(updateData, new HabitRPGUserCallback(this)); + apiHelper.apiService.updateUser(updateData).compose(apiHelper.configureApiCallObserver()) + .subscribe(new MergeUserCallback(this, user), throwable -> {}); } runOnUiThread(() -> { updateHeader(); @@ -356,8 +349,8 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O ArrayList allTaskTags = new ArrayList<>(); for (Task t : allTasks) { - if (t.tags != null) { - allTaskTags.addAll(t.tags); + if (t.getTags() != null) { + allTaskTags.addAll(t.getTags()); } } loadAndRemoveOldTaskTags(allTaskTags); @@ -629,10 +622,6 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O MainActivity.this.setUserData(false); } - @Override - public void onUserFail() { - } - public void setActiveFragment(BaseMainFragment fragment) { this.activeFragment = fragment; this.drawer.setSelectionAtPosition(this.activeFragment.fragmentSidebarPosition, false); @@ -660,8 +649,9 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O super.onActivityResult(requestCode, resultCode, data); checkout.onActivityResult(requestCode, resultCode, data); if (resultCode == SELECT_CLASS_RESULT) { - if (this.mAPIHelper != null) { - this.mAPIHelper.retrieveUser(new HabitRPGUserCallback(this)); + if (this.apiHelper != null) { + this.apiHelper.retrieveUser(true) + .subscribe(new HabitRPGUserCallback(this), throwable -> {}); } } } @@ -685,19 +675,24 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O @Subscribe public void onEvent(UpdateUserCommand event) { - mAPIHelper.apiService.updateUser(event.updateData, new HabitRPGUserCallback(this)); + apiHelper.apiService.updateUser(event.updateData).compose(apiHelper.configureApiCallObserver()) + .subscribe(new MergeUserCallback(this, user), throwable -> {}); } @Subscribe public void onEvent(EquipCommand event) { - this.mAPIHelper.apiService.equipItem(event.type, event.key, new ItemsCallback(this, this.user)); + this.apiHelper.apiService.equipItem(event.type, event.key) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new ItemsCallback(this, this.user), throwable -> {}); } @Subscribe public void onEvent(UnlockPathCommand event) { this.user.setBalance(this.user.getBalance() - event.balanceDiff); this.setUserData(false); - mAPIHelper.apiService.unlockPath(event.path, new UnlockCallback(this, this.user)); + apiHelper.apiService.unlockPath(event.path) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new UnlockCallback(this, this.user), throwable -> {}); } @Subscribe @@ -726,43 +721,36 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O } if (event.Reward.specialTag != null && event.Reward.specialTag.equals("item")) { - mAPIHelper.apiService.buyItem(event.Reward.getId(), new Callback() { + apiHelper.apiService.buyItem(event.Reward.getId()).compose(apiHelper.configureApiCallObserver()) + .subscribe(buyResponse -> { + String snackbarMessage = event.Reward.getText() + " successfully purchased!"; - @Override - public void success(BuyResponse buyResponse, Response response) { - String snackbarMessage = event.Reward.getText() + " successfully purchased!"; - - if (event.Reward.getId().equals("armoire")) { - if (buyResponse.armoire.get("type").equals("gear")) { - snackbarMessage = getApplicationContext().getString(R.string.armoireEquipment, buyResponse.armoire.get("dropText")); - } else if (buyResponse.armoire.get("type").equals("food")) { - snackbarMessage = getApplicationContext().getString(R.string.armoireFood, buyResponse.armoire.get("dropArticle"), buyResponse.armoire.get("dropText")); - } else { - snackbarMessage = getApplicationContext().getString(R.string.armoireExp); - } - } else if (!event.Reward.getId().equals("potion")) { - EventBus.getDefault().post(new TaskRemovedEvent(event.Reward.getId())); + if (event.Reward.getId().equals("armoire")) { + if (buyResponse.armoire.get("type").equals("gear")) { + snackbarMessage = getApplicationContext().getString(R.string.armoireEquipment, buyResponse.armoire.get("dropText")); + } else if (buyResponse.armoire.get("type").equals("food")) { + snackbarMessage = getApplicationContext().getString(R.string.armoireFood, buyResponse.armoire.get("dropArticle"), buyResponse.armoire.get("dropText")); + } else { + snackbarMessage = getApplicationContext().getString(R.string.armoireExp); } - - user.setItems(buyResponse.items); - user.setStats(buyResponse.stats); - user.setFlags(buyResponse.flags); - - user.async().save(); - MainActivity.this.setUserData(true); - - showSnackbar(MainActivity.this, floatingMenuWrapper, snackbarMessage, SnackbarDisplayType.NORMAL); + } else if (!event.Reward.getId().equals("potion")) { + EventBus.getDefault().post(new TaskRemovedEvent(event.Reward.getId())); } - @Override - public void failure(RetrofitError error) { + user.setItems(buyResponse.items); + user.setStats(buyResponse.stats); + user.setFlags(buyResponse.flags); - showSnackbar(MainActivity.this, floatingMenuWrapper, "Buy Reward Error " + event.Reward.getText(), SnackbarDisplayType.FAILURE); - } - }); + user.async().save(); + MainActivity.this.setUserData(true); + + showSnackbar(MainActivity.this, floatingMenuWrapper, snackbarMessage, SnackbarDisplayType.NORMAL); + }, throwable -> {}); } else { // user created Rewards - mAPIHelper.updateTaskDirection(rewardKey, TaskDirection.down, new TaskScoringCallback(this, rewardKey)); + apiHelper.apiService.postTaskDirection(rewardKey, TaskDirection.down.toString()) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new TaskScoringCallback(this, rewardKey), throwable -> {}); } avatarInHeader.updateData(user); @@ -771,17 +759,10 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O @Subscribe public void onEvent(final DeleteTaskCommand cmd) { - mAPIHelper.apiService.deleteTask(cmd.TaskIdToDelete, new Callback() { - @Override - public void success(Void aVoid, Response response) { - EventBus.getDefault().post(new TaskRemovedEvent(cmd.TaskIdToDelete)); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + apiHelper.apiService.deleteTask(cmd.TaskIdToDelete).compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + EventBus.getDefault().post(new TaskRemovedEvent(cmd.TaskIdToDelete)); + }, throwable -> {}); } @Subscribe @@ -801,20 +782,14 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O @Subscribe public void onEvent(SellItemCommand event) { - this.mAPIHelper.apiService.sellItem(event.item.getType(), event.item.getKey(), new Callback() { - @Override - public void success(HabitRPGUser habitRPGUser, Response response) { - user.setItems(habitRPGUser.getItems()); - user.save(); - user.setStats(habitRPGUser.getStats()); - setUserData(false); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + this.apiHelper.apiService.sellItem(event.item.getType(), event.item.getKey()) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(habitRPGUser -> { + user.setItems(habitRPGUser.getItems()); + user.save(); + user.setStats(habitRPGUser.getStats()); + setUserData(false); + }, throwable -> {}); } @Subscribe @@ -822,42 +797,37 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O if (event.usingEgg == null || event.usingHatchingPotion == null) { return; } - this.mAPIHelper.apiService.hatchPet(event.usingEgg.getKey(), event.usingHatchingPotion.getKey(), new ItemsCallback(new HabitRPGUserCallback.OnUserReceived() { - @Override - public void onUserReceived(HabitRPGUser user) { - FrameLayout petWrapper = (FrameLayout) getLayoutInflater().inflate(R.layout.pet_imageview, null); - ImageView petImageView = (ImageView) petWrapper.findViewById(R.id.pet_imageview); + this.apiHelper.apiService.hatchPet(event.usingEgg.getKey(), event.usingHatchingPotion.getKey()) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new ItemsCallback(user1 -> { + FrameLayout petWrapper = (FrameLayout) getLayoutInflater().inflate(R.layout.pet_imageview, null); + ImageView petImageView = (ImageView) petWrapper.findViewById(R.id.pet_imageview); - DataBindingUtils.loadImage(petImageView, "Pet-" + event.usingEgg.getKey() + "-" + event.usingHatchingPotion.getKey()); - String potionName = event.usingHatchingPotion.getText(); - String eggName = event.usingEgg.getText(); - AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) - .setTitle(getString(R.string.hatched_pet_title, potionName, eggName)) - .setView(petWrapper) - .setPositiveButton(R.string.close, (hatchingDialog, which) -> { - hatchingDialog.dismiss(); - }) - .setNeutralButton(R.string.share, (hatchingDialog, which) -> { - ShareEvent event = new ShareEvent(); - event.sharedMessage = getString(R.string.share_hatched, potionName, eggName) + " https://habitica.com/social/hatch-pet"; - Bitmap animalBitmap = ((BitmapDrawable)petImageView.getDrawable()).getBitmap(); - Bitmap sharedImage = Bitmap.createBitmap(140, 140, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(sharedImage); - canvas.drawColor(getResources().getColor(R.color.brand_300)); - canvas.drawBitmap(animalBitmap, new Rect(0, 0, animalBitmap.getWidth(), animalBitmap.getHeight()), - new Rect(30, 0, animalBitmap.getWidth() + 30, animalBitmap.getHeight()), new Paint()); - event.shareImage = sharedImage; - EventBus.getDefault().post(event); - hatchingDialog.dismiss(); - }) - .create(); - dialog.show(); - } - - @Override - public void onUserFail() { - } - }, this.user)); + DataBindingUtils.loadImage(petImageView, "Pet-" + event.usingEgg.getKey() + "-" + event.usingHatchingPotion.getKey()); + String potionName = event.usingHatchingPotion.getText(); + String eggName = event.usingEgg.getText(); + AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) + .setTitle(getString(R.string.hatched_pet_title, potionName, eggName)) + .setView(petWrapper) + .setPositiveButton(R.string.close, (hatchingDialog, which) -> { + hatchingDialog.dismiss(); + }) + .setNeutralButton(R.string.share, (hatchingDialog, which) -> { + ShareEvent event1 = new ShareEvent(); + event1.sharedMessage = getString(R.string.share_hatched, potionName, eggName) + " https://habitica.com/social/hatch-pet"; + Bitmap animalBitmap = ((BitmapDrawable)petImageView.getDrawable()).getBitmap(); + Bitmap sharedImage = Bitmap.createBitmap(140, 140, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(sharedImage); + canvas.drawColor(getResources().getColor(R.color.brand_300)); + canvas.drawBitmap(animalBitmap, new Rect(0, 0, animalBitmap.getWidth(), animalBitmap.getHeight()), + new Rect(30, 0, animalBitmap.getWidth() + 30, animalBitmap.getHeight()), new Paint()); + event1.shareImage = sharedImage; + EventBus.getDefault().post(event1); + hatchingDialog.dismiss(); + }) + .create(); + dialog.show(); + }, this.user), throwable -> {}); } @Subscribe @@ -866,68 +836,56 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O return; } final Pet pet = event.usingPet; - this.mAPIHelper.apiService.feedPet(event.usingPet.getKey(), event.usingFood.getKey(), new Callback() { - @Override - public void success(FeedResponse feedResponse, Response response) { - MainActivity.this.user.getItems().getPets().put(pet.getKey(), feedResponse.value); - MainActivity.this.user.getItems().getFood().put(event.usingFood.getKey(), event.usingFood.getOwned()-1); - MainActivity.this.setUserData(false); - showSnackbar(MainActivity.this, floatingMenuWrapper, getString(R.string.notification_pet_fed, pet.getColorText(), pet.getAnimalText()), SnackbarDisplayType.NORMAL); - if (feedResponse.value == -1) { - FrameLayout mountWrapper = (FrameLayout) getLayoutInflater().inflate(R.layout.pet_imageview, null); - ImageView mountImageView = (ImageView) mountWrapper.findViewById(R.id.pet_imageview); + this.apiHelper.apiService.feedPet(event.usingPet.getKey(), event.usingFood.getKey()) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(feedResponse -> { + MainActivity.this.user.getItems().getPets().put(pet.getKey(), feedResponse.value); + MainActivity.this.user.getItems().getFood().put(event.usingFood.getKey(), event.usingFood.getOwned()-1); + MainActivity.this.setUserData(false); + showSnackbar(MainActivity.this, floatingMenuWrapper, getString(R.string.notification_pet_fed, pet.getColorText(), pet.getAnimalText()), SnackbarDisplayType.NORMAL); + if (feedResponse.value == -1) { + FrameLayout mountWrapper = (FrameLayout) getLayoutInflater().inflate(R.layout.pet_imageview, null); + ImageView mountImageView = (ImageView) mountWrapper.findViewById(R.id.pet_imageview); - DataBindingUtils.loadImage(mountImageView, "Mount_Icon_" + event.usingPet.getKey()); - String colorName = event.usingPet.getColorText(); - String animalName = event.usingPet.getAnimalText(); - AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) - .setTitle(getString(R.string.hatched_pet_title, colorName, animalName)) - .setView(mountWrapper) - .setPositiveButton(R.string.close, (hatchingDialog, which) -> { - hatchingDialog.dismiss(); - }) - .setNeutralButton(R.string.share, (hatchingDialog, which) -> { - ShareEvent event = new ShareEvent(); - event.sharedMessage = getString(R.string.share_raised, colorName, animalName) + " https://habitica.com/social/raise-pet"; - Bitmap animalBitmap = ((BitmapDrawable)mountImageView.getDrawable()).getBitmap(); - Bitmap sharedImage = Bitmap.createBitmap(99, 99, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(sharedImage); - canvas.drawColor(getResources().getColor(R.color.brand_300)); - canvas.drawBitmap(animalBitmap, new Rect(0, 0, animalBitmap.getWidth(), animalBitmap.getHeight()), - new Rect(9, 0, animalBitmap.getWidth() + 9, animalBitmap.getHeight()), new Paint()); - event.shareImage = sharedImage; - EventBus.getDefault().post(event); - hatchingDialog.dismiss(); - }) - .create(); - dialog.show(); - } - } - - @Override - public void failure(RetrofitError error) { - - } - }); + DataBindingUtils.loadImage(mountImageView, "Mount_Icon_" + event.usingPet.getKey()); + String colorName = event.usingPet.getColorText(); + String animalName = event.usingPet.getAnimalText(); + AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) + .setTitle(getString(R.string.hatched_pet_title, colorName, animalName)) + .setView(mountWrapper) + .setPositiveButton(R.string.close, (hatchingDialog, which) -> { + hatchingDialog.dismiss(); + }) + .setNeutralButton(R.string.share, (hatchingDialog, which) -> { + ShareEvent event1 = new ShareEvent(); + event1.sharedMessage = getString(R.string.share_raised, colorName, animalName) + " https://habitica.com/social/raise-pet"; + Bitmap animalBitmap = ((BitmapDrawable)mountImageView.getDrawable()).getBitmap(); + Bitmap sharedImage = Bitmap.createBitmap(99, 99, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(sharedImage); + canvas.drawColor(getResources().getColor(R.color.brand_300)); + canvas.drawBitmap(animalBitmap, new Rect(0, 0, animalBitmap.getWidth(), animalBitmap.getHeight()), + new Rect(9, 0, animalBitmap.getWidth() + 9, animalBitmap.getHeight()), new Paint()); + event1.shareImage = sharedImage; + EventBus.getDefault().post(event1); + hatchingDialog.dismiss(); + }) + .create(); + dialog.show(); + } + }, throwable -> {}); } @Subscribe public void reloadContent(ReloadContentEvent event) { if (!this.isloadingContent) { this.isloadingContent = true; - this.mAPIHelper.apiService.getContent(new Callback() { - @Override - public void success(ContentResult contentResult, Response response) { - isloadingContent = false; - ContentReloadedEvent event = new ContentReloadedEvent(); - EventBus.getDefault().post(event); - } - - @Override - public void failure(RetrofitError error) { - isloadingContent = false; - } - }); + this.apiHelper.apiService.getContent() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(contentResult -> { + isloadingContent = false; + ContentReloadedEvent event1 = new ContentReloadedEvent(); + EventBus.getDefault().post(event1); + }, throwable -> {}); } } @@ -963,7 +921,9 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O if (lvl > user.getStats().getLvl()) { displayLevelUpDialog(lvl); - this.mAPIHelper.retrieveUser(new HabitRPGUserCallback(this)); + this.apiHelper.apiService.revive() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new MergeUserCallback(this, user), throwable -> {}); user.getStats().setLvl(lvl); showSnackbar(this, floatingMenuWrapper, message.toString(), SnackbarDisplayType.NORMAL); @@ -996,11 +956,6 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O setUserData(true); } - @Override - public void onTaskScoringFailed() { - //Do nothing - } - static public Double round(Double value, int n) { return (Math.round(value * Math.pow(10, n))) / (Math.pow(10, n)); } @@ -1031,7 +986,9 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O .setView(customView) .setPositiveButton(R.string.faint_button, (dialog, which) -> { faintDialog = null; - mAPIHelper.reviveUser(new HabitRPGUserCallback(MainActivity.this)); + apiHelper.apiService.revive() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new MergeUserCallback(MainActivity.this, MainActivity.this.user), throwable -> {}); }) .create(); @@ -1176,7 +1133,9 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O String path = "flags.tutorial." + step.getTutorialGroup() + "." + step.getIdentifier(); Map updateData = new HashMap<>(); updateData.put(path, true); - mAPIHelper.apiService.updateUser(updateData, new HabitRPGUserCallback(this)); + apiHelper.apiService.updateUser(updateData) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new MergeUserCallback(this, user), throwable -> {}); this.overlayFrameLayout.removeView(this.activeTutorialView); this.removeActiveTutorialView(); @@ -1233,33 +1192,27 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O } private void checkMaintenance() { - this.mAPIHelper.maintenanceService.getMaintenanceStatus(new Callback() { - @Override - public void success(MaintenanceResponse maintenanceResponse, Response response) { - if (maintenanceResponse.activeMaintenance) { - Intent intent = createMaintenanceIntent(maintenanceResponse, false); - startActivity(intent); - } else { - if (maintenanceResponse.minBuild != null) { - PackageInfo packageInfo = null; - try { - packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); - if (packageInfo.versionCode < maintenanceResponse.minBuild) { - Intent intent = createMaintenanceIntent(maintenanceResponse, true); - startActivity(intent); + this.apiHelper.maintenanceService.getMaintenanceStatus() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(maintenanceResponse -> { + if (maintenanceResponse.activeMaintenance) { + Intent intent = createMaintenanceIntent(maintenanceResponse, false); + startActivity(intent); + } else { + if (maintenanceResponse.minBuild != null) { + PackageInfo packageInfo = null; + try { + packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); + if (packageInfo.versionCode < maintenanceResponse.minBuild) { + Intent intent = createMaintenanceIntent(maintenanceResponse, true); + startActivity(intent); + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); } - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); } } - } - } - - @Override - public void failure(RetrofitError error) { - - } - }); + }, throwable -> {}); } private Intent createMaintenanceIntent(MaintenanceResponse maintenanceResponse, Boolean isDeprecationNotice) { @@ -1272,4 +1225,9 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O intent.putExtras(data); return intent; } + + @Override + public void call(Throwable throwable) { + + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.java index 75aa09577..d9e76fe07 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.java @@ -5,7 +5,6 @@ import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.HostConfig; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; -import com.magicmicky.habitrpgwrapper.lib.models.responses.MaintenanceResponse; import com.squareup.picasso.Picasso; import android.content.Intent; @@ -17,24 +16,21 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; -import butterknife.Bind; +import butterknife.BindView; import butterknife.OnClick; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; public class MaintenanceActivity extends BaseActivity { - @Bind(R.id.titleTextView) + @BindView(R.id.titleTextView) TextView titleTextView; - @Bind(R.id.imageView) + @BindView(R.id.imageView) ImageView imageView; - @Bind(R.id.descriptionTextView) + @BindView(R.id.descriptionTextView) EmojiTextView descriptionTextView; - @Bind(R.id.playStoreButton) + @BindView(R.id.playStoreButton) Button playStoreButton; private APIHelper apiHelper; private Boolean isDeprecationNotice; @@ -69,17 +65,10 @@ public class MaintenanceActivity extends BaseActivity { protected void onResume() { super.onResume(); if (!isDeprecationNotice) { - this.apiHelper.maintenanceService.getMaintenanceStatus(new Callback() { - @Override - public void success(MaintenanceResponse maintenanceResponse, Response response) { - if (!maintenanceResponse.activeMaintenance) { - finish(); - } - } - - @Override - public void failure(RetrofitError error) { - + this.apiHelper.maintenanceService.getMaintenanceStatus() + .subscribe(maintenanceResponse -> { + if (!maintenanceResponse.activeMaintenance) { + finish(); } }); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PartyInviteActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PartyInviteActivity.java index ec827d479..ad4809b0e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PartyInviteActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PartyInviteActivity.java @@ -1,5 +1,8 @@ package com.habitrpg.android.habitica.ui.activities; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment; + import android.content.Intent; import android.os.Bundle; import android.support.design.widget.TabLayout; @@ -9,18 +12,10 @@ import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.MenuItem; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.BaseFragment; -import com.habitrpg.android.habitica.ui.fragments.inventory.StableFragment; -import com.habitrpg.android.habitica.ui.fragments.inventory.StableRecyclerFragment; -import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment; -import com.raizlabs.android.dbflow.structure.BaseModel; - import java.util.ArrayList; import java.util.List; import butterknife.BindView; -import butterknife.ButterKnife; public class PartyInviteActivity extends BaseActivity { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.java index 3ceb9cc68..912703974 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.java @@ -1,5 +1,11 @@ package com.habitrpg.android.habitica.ui.activities; +import com.habitrpg.android.habitica.BuildConfig; +import com.habitrpg.android.habitica.HostConfig; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.AccountDetailsFragment; +import com.habitrpg.android.habitica.ui.fragments.PreferencesFragment; + import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; @@ -8,12 +14,6 @@ import android.support.v7.preference.PreferenceFragmentCompat; import android.support.v7.preference.PreferenceScreen; import android.support.v7.widget.Toolbar; -import com.habitrpg.android.habitica.BuildConfig; -import com.habitrpg.android.habitica.HostConfig; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.AccountDetailsFragment; -import com.habitrpg.android.habitica.ui.fragments.PreferencesFragment; - import butterknife.BindView; public class PrefsActivity extends BaseActivity implements @@ -78,7 +78,7 @@ public class PrefsActivity extends BaseActivity implements SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); HostConfig config; String httpPort = BuildConfig.PORT; - String address = prefs.getString(ctx.getString(R.string.SP_address), BuildConfig.BASE_URL); + String address = BuildConfig.DEBUG ? BuildConfig.BASE_URL : ctx.getString(R.string.base_url); String api = prefs.getString(ctx.getString(R.string.SP_APIToken), null); String userID = prefs.getString(ctx.getString(R.string.SP_userID), null); config = new HostConfig(address, httpPort, api, userID); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java index 4eb82433f..b54b9b2af 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java @@ -1,18 +1,11 @@ package com.habitrpg.android.habitica.ui.activities; -import android.content.Intent; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.view.ViewPager; -import android.view.View; -import android.widget.Button; - import com.amplitude.api.Amplitude; import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.HostConfig; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; +import com.habitrpg.android.habitica.callbacks.MergeUserCallback; import com.habitrpg.android.habitica.events.commands.UpdateUserCommand; import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment; import com.habitrpg.android.habitica.ui.fragments.setup.TaskSetupFragment; @@ -25,6 +18,14 @@ import org.greenrobot.eventbus.Subscribe; import org.json.JSONException; import org.json.JSONObject; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.View; +import android.widget.Button; + import java.util.List; import java.util.Map; @@ -104,7 +105,8 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener, if (this.user != null) { setupViewpager(); } else { - this.apiHelper.retrieveUser(new HabitRPGUserCallback(this)); + this.apiHelper.apiService.getUser() + .subscribe(new HabitRPGUserCallback(this), throwable -> {}); } } } @@ -142,7 +144,8 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener, @Subscribe public void onEvent(UpdateUserCommand event) { - this.apiHelper.apiService.updateUser(event.updateData, new HabitRPGUserCallback(this)); + this.apiHelper.apiService.updateUser(event.updateData) + .subscribe(new MergeUserCallback(this, user), throwable -> {}); } @Override @@ -151,7 +154,7 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener, if (this.pager.getCurrentItem() == 1) { List> operations = this.taskSetupFragment.createSampleTasks(); this.completedSetup = true; - this.apiHelper.apiService.batchOperation(operations, new HabitRPGUserCallback(this)); + //this.apiHelper.apiService.batchOperation(operations, new HabitRPGUserCallback(this)); } this.pager.setCurrentItem(this.pager.getCurrentItem()+1); } else if (v == this.previousButton) { @@ -217,11 +220,6 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener, Amplitude.getInstance().logEvent("setup", eventProperties); } - @Override - public void onUserFail() { - - } - private void startMainActivity() { Intent intent = new Intent(SetupActivity.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.java index c0697363e..910866bc4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.java @@ -1,5 +1,11 @@ package com.habitrpg.android.habitica.ui.activities; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter; +import com.habitrpg.android.habitica.ui.fragments.SkillTasksRecyclerViewFragment; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; + import android.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -8,12 +14,6 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter; -import com.habitrpg.android.habitica.ui.fragments.SkillTasksRecyclerViewFragment; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; - import java.util.HashMap; import java.util.Map; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java index 7f781b899..c5c9f3775 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java @@ -1,5 +1,27 @@ package com.habitrpg.android.habitica.ui.activities; +import com.github.data5tream.emojilib.EmojiEditText; +import com.github.data5tream.emojilib.EmojiPopup; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.TaskSaveEvent; +import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand; +import com.habitrpg.android.habitica.ui.WrapContentRecyclerViewLayoutManager; +import com.habitrpg.android.habitica.ui.adapter.tasks.CheckListAdapter; +import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; +import com.habitrpg.android.habitica.ui.helpers.SimpleItemTouchHelperCallback; +import com.habitrpg.android.habitica.ui.helpers.ViewHelper; +import com.magicmicky.habitrpgwrapper.lib.models.Tag; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; +import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction; +import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.Select; + +import org.greenrobot.eventbus.EventBus; + import android.app.DatePickerDialog; import android.content.Context; import android.content.DialogInterface; @@ -31,28 +53,6 @@ import android.widget.Spinner; import android.widget.TableRow; import android.widget.TextView; -import com.github.data5tream.emojilib.EmojiEditText; -import com.github.data5tream.emojilib.EmojiPopup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.events.TaskSaveEvent; -import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand; -import com.habitrpg.android.habitica.ui.WrapContentRecyclerViewLayoutManager; -import com.habitrpg.android.habitica.ui.adapter.tasks.CheckListAdapter; -import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; -import com.habitrpg.android.habitica.ui.helpers.SimpleItemTouchHelperCallback; -import com.habitrpg.android.habitica.ui.helpers.ViewHelper; -import com.magicmicky.habitrpgwrapper.lib.models.Tag; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; -import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction; -import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; - -import org.greenrobot.eventbus.EventBus; - import java.text.DateFormat; import java.text.DecimalFormat; import java.text.NumberFormat; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.java index f492520e0..37e561d5f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.java @@ -1,5 +1,16 @@ package com.habitrpg.android.habitica.ui.adapter; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand; +import com.habitrpg.android.habitica.events.commands.UnlockPathCommand; +import com.habitrpg.android.habitica.events.commands.UpdateUserCommand; +import com.habitrpg.android.habitica.ui.MainDrawerBuilder; +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; +import com.magicmicky.habitrpgwrapper.lib.models.Customization; +import com.magicmicky.habitrpgwrapper.lib.models.CustomizationSet; + +import org.greenrobot.eventbus.EventBus; + import android.content.Context; import android.support.v7.app.AlertDialog; import android.support.v7.widget.CardView; @@ -13,17 +24,6 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand; -import com.habitrpg.android.habitica.events.commands.UnlockPathCommand; -import com.habitrpg.android.habitica.events.commands.UpdateUserCommand; -import com.habitrpg.android.habitica.ui.MainDrawerBuilder; -import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; -import com.magicmicky.habitrpgwrapper.lib.models.Customization; -import com.magicmicky.habitrpgwrapper.lib.models.CustomizationSet; - -import org.greenrobot.eventbus.EventBus; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/FAQOverviewRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/FAQOverviewRecyclerAdapter.java index 5d557fb38..cf6c68dca 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/FAQOverviewRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/FAQOverviewRecyclerAdapter.java @@ -1,5 +1,10 @@ package com.habitrpg.android.habitica.ui.adapter; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.habitrpg.android.habitica.ui.fragments.faq.FAQDetailFragment; +import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; + import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -7,11 +12,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.activities.MainActivity; -import com.habitrpg.android.habitica.ui.fragments.faq.FAQDetailFragment; -import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; - import java.util.List; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillTasksRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillTasksRecyclerViewAdapter.java index 6a41778c4..58cc0b0c0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillTasksRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillTasksRecyclerViewAdapter.java @@ -1,5 +1,13 @@ package com.habitrpg.android.habitica.ui.adapter; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.databinding.SkillTaskItemCardBinding; +import com.habitrpg.android.habitica.ui.activities.SkillTasksActivity; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.OrderBy; +import com.raizlabs.android.dbflow.sql.language.Select; + import android.databinding.DataBindingUtil; import android.databinding.ObservableArrayList; import android.support.v7.widget.RecyclerView; @@ -9,14 +17,6 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.databinding.SkillTaskItemCardBinding; -import com.habitrpg.android.habitica.ui.activities.SkillTasksActivity; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.OrderBy; -import com.raizlabs.android.dbflow.sql.language.Select; - import java.util.UUID; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillsRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillsRecyclerViewAdapter.java index 826255176..2a44b15de 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillsRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillsRecyclerViewAdapter.java @@ -1,5 +1,12 @@ package com.habitrpg.android.habitica.ui.adapter; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.commands.UseSkillCommand; +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; +import com.magicmicky.habitrpgwrapper.lib.models.Skill; + +import org.greenrobot.eventbus.EventBus; + import android.content.Context; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; @@ -10,14 +17,6 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.events.commands.UseSkillCommand; -import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; -import com.magicmicky.habitrpgwrapper.lib.models.Skill; -import com.squareup.picasso.Picasso; - -import org.greenrobot.eventbus.EventBus; - import java.util.List; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/EquipmentRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/EquipmentRecyclerViewAdapter.java index 03a79ca9a..432dfd813 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/EquipmentRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/EquipmentRecyclerViewAdapter.java @@ -1,15 +1,5 @@ package com.habitrpg.android.habitica.ui.adapter.inventory; -import android.content.Context; -import android.content.res.Resources; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.commands.EquipCommand; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; @@ -17,6 +7,15 @@ import com.squareup.picasso.Picasso; import org.greenrobot.eventbus.EventBus; +import android.content.Context; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + import java.util.List; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java index 990b0f352..ca7e49606 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java @@ -1,13 +1,5 @@ package com.habitrpg.android.habitica.ui.adapter.inventory; -import android.content.Context; -import android.content.res.Resources; -import android.databinding.DataBindingUtil; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.databinding.ItemItemBinding; import com.habitrpg.android.habitica.events.ReloadContentEvent; @@ -18,7 +10,6 @@ import com.habitrpg.android.habitica.events.commands.SellItemCommand; import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment; import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu; import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem; -import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuSelectionRunnable; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; @@ -28,6 +19,14 @@ import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import org.greenrobot.eventbus.EventBus; +import android.content.Context; +import android.content.res.Resources; +import android.databinding.DataBindingUtil; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import java.util.HashMap; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.java index 4bf801340..9dd872430 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.java @@ -1,5 +1,14 @@ package com.habitrpg.android.habitica.ui.adapter.inventory; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.commands.EquipCommand; +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; +import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu; +import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; + +import org.greenrobot.eventbus.EventBus; + import android.content.Context; import android.content.res.Resources; import android.support.v7.widget.CardView; @@ -10,18 +19,6 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.events.commands.EquipCommand; -import com.habitrpg.android.habitica.events.commands.FeedCommand; -import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; -import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu; -import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem; -import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuSelectionRunnable; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; - -import org.greenrobot.eventbus.EventBus; - import java.util.HashMap; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.java index 3ca66ba35..59ada401c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.java @@ -1,29 +1,26 @@ package com.habitrpg.android.habitica.ui.adapter.inventory; -import android.content.Context; -import android.content.res.Resources; -import android.support.v7.widget.CardView; -import android.support.v7.widget.RecyclerView; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.commands.EquipCommand; import com.habitrpg.android.habitica.events.commands.FeedCommand; import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu; import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem; -import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuSelectionRunnable; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; import org.greenrobot.eventbus.EventBus; +import android.content.Context; +import android.content.res.Resources; +import android.support.v7.widget.CardView; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + import java.util.HashMap; import java.util.List; @@ -158,7 +155,6 @@ public class PetDetailRecyclerAdapter extends RecyclerView.Adapter { - Log.e("EEEEEEE", index.toString()); if (index == 0) { EquipCommand event = new EquipCommand(); event.type = "pet"; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java index 6facc4956..dfe815abe 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java @@ -1,5 +1,12 @@ package com.habitrpg.android.habitica.ui.adapter.inventory; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.habitrpg.android.habitica.ui.fragments.inventory.MountDetailRecyclerFragment; +import com.habitrpg.android.habitica.ui.fragments.inventory.PetDetailRecyclerFragment; +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Animal; + import android.content.Context; import android.content.res.Resources; import android.support.v7.widget.CardView; @@ -11,14 +18,6 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.activities.MainActivity; -import com.habitrpg.android.habitica.ui.fragments.inventory.MountDetailRecyclerFragment; -import com.habitrpg.android.habitica.ui.fragments.inventory.PetDetailRecyclerFragment; -import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Animal; - -import java.util.HashMap; import java.util.List; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/setup/CustomizationSetupAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/setup/CustomizationSetupAdapter.java index d31ed328b..c5031bf6d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/setup/CustomizationSetupAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/setup/CustomizationSetupAdapter.java @@ -1,5 +1,14 @@ package com.habitrpg.android.habitica.ui.adapter.setup; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.commands.UpdateUserCommand; +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; +import com.magicmicky.habitrpgwrapper.lib.models.Customization; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.Preferences; + +import org.greenrobot.eventbus.EventBus; + import android.content.Context; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; @@ -10,15 +19,6 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.events.commands.UpdateUserCommand; -import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; -import com.magicmicky.habitrpgwrapper.lib.models.Customization; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.Preferences; - -import org.greenrobot.eventbus.EventBus; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/setup/TaskSetupAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/setup/TaskSetupAdapter.java index c8b378a93..0e0dbfb31 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/setup/TaskSetupAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/setup/TaskSetupAdapter.java @@ -1,5 +1,7 @@ package com.habitrpg.android.habitica.ui.adapter.setup; +import com.habitrpg.android.habitica.R; + import android.content.res.Resources; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -9,8 +11,6 @@ import android.widget.CheckBox; import android.widget.RelativeLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.R; - import java.util.ArrayList; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java index 05aab3148..9b114e72c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java @@ -1,21 +1,5 @@ package com.habitrpg.android.habitica.ui.adapter.social; -import android.content.Context; -import android.content.res.Resources; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.PopupMenu; -import android.support.v7.widget.RecyclerView; -import android.text.method.LinkMovementMethod; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - import com.github.data5tream.emojilib.EmojiEditText; import com.github.data5tream.emojilib.EmojiTextView; import com.habitrpg.android.habitica.HabiticaApplication; @@ -34,6 +18,22 @@ import com.magicmicky.habitrpgwrapper.lib.models.ChatMessage; import org.greenrobot.eventbus.EventBus; +import android.content.Context; +import android.content.res.Resources; +import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.PopupMenu; +import android.support.v7.widget.RecyclerView; +import android.text.method.LinkMovementMethod; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + import java.lang.reflect.Field; import java.util.List; import java.util.Map; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PartyMemberRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PartyMemberRecyclerViewAdapter.java index 40c07ac3a..621d1267e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PartyMemberRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PartyMemberRecyclerViewAdapter.java @@ -1,5 +1,12 @@ package com.habitrpg.android.habitica.ui.adapter.social; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.databinding.ValueBarBinding; +import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel; +import com.habitrpg.android.habitica.ui.helpers.ViewHelper; +import com.habitrpg.android.habitica.userpicture.UserPicture; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; + import android.content.Context; import android.content.res.Resources; import android.databinding.DataBindingUtil; @@ -12,14 +19,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.databinding.ValueBarBinding; -import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel; -import com.habitrpg.android.habitica.ui.helpers.ViewHelper; -import com.habitrpg.android.habitica.userpicture.UserPicture; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; - -import java.util.ArrayList; +import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; @@ -27,9 +27,9 @@ import butterknife.ButterKnife; public class PartyMemberRecyclerViewAdapter extends RecyclerView.Adapter { - private ArrayList memberList; + private List memberList; public Context context; - public void setMemberList(ArrayList memberList) { + public void setMemberList(List memberList) { this.memberList = memberList; this.notifyDataSetChanged(); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java index cb75ed552..edd63529f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java @@ -1,13 +1,5 @@ package com.habitrpg.android.habitica.ui.adapter.social; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; -import android.widget.Toast; - import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.DisplayFragmentEvent; @@ -16,26 +8,30 @@ import com.magicmicky.habitrpgwrapper.lib.models.Group; import org.greenrobot.eventbus.EventBus; -import java.util.ArrayList; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter { public APIHelper apiHelper; - private ArrayList publicGuildList; - private ArrayList memberGuildIDs; + private List publicGuildList; + private List memberGuildIDs; - public void setPublicGuildList(ArrayList publicGuildList) { + public void setPublicGuildList(List publicGuildList) { this.publicGuildList = publicGuildList; this.notifyDataSetChanged(); } - public void setMemberGuildIDs(ArrayList memberGuildIDs) { + public void setMemberGuildIDs(List memberGuildIDs) { this.memberGuildIDs = memberGuildIDs; } @@ -57,35 +53,21 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter() { - @Override - public void success(Void nope, Response response) { - memberGuildIDs.remove(guild.id); - int indexOfGroup = publicGuildList.indexOf(guild); - notifyItemChanged(indexOfGroup); - } - - @Override - public void failure(RetrofitError error) { - Toast.makeText(guildViewHolder.itemView.getContext(), R.string.unknown_error, Toast.LENGTH_SHORT) - .show(); - } - }); + PublicGuildsRecyclerViewAdapter.this.apiHelper.apiService.leaveGroup(guild.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + memberGuildIDs.remove(guild.id); + int indexOfGroup = publicGuildList.indexOf(guild); + notifyItemChanged(indexOfGroup); + }, throwable -> {}); } else { - PublicGuildsRecyclerViewAdapter.this.apiHelper.apiService.joinGroup(guild.id, new Callback() { - @Override - public void success(Group group, Response response) { - memberGuildIDs.add(group.id); - int indexOfGroup = publicGuildList.indexOf(group); - notifyItemChanged(indexOfGroup); - } - - @Override - public void failure(RetrofitError error) { - Toast.makeText(guildViewHolder.itemView.getContext(), R.string.unknown_error, Toast.LENGTH_SHORT) - .show(); - } - }); + PublicGuildsRecyclerViewAdapter.this.apiHelper.apiService.joinGroup(guild.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(group -> { + memberGuildIDs.add(group.id); + int indexOfGroup = publicGuildList.indexOf(group); + notifyItemChanged(indexOfGroup); + }, throwable -> {}); } }); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/QuestCollectRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/QuestCollectRecyclerViewAdapter.java index 2d0f9ce35..7e7c4ba30 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/QuestCollectRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/QuestCollectRecyclerViewAdapter.java @@ -1,5 +1,10 @@ package com.habitrpg.android.habitica.ui.adapter.social; +import com.habitrpg.android.habitica.R; +import com.magicmicky.habitrpgwrapper.lib.models.QuestProgress; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; +import com.squareup.picasso.Picasso; + import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -7,11 +12,6 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.magicmicky.habitrpgwrapper.lib.models.QuestProgress; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; -import com.squareup.picasso.Picasso; - import java.util.ArrayList; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/CheckListAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/CheckListAdapter.java index 538d16a8e..38f16f7ed 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/CheckListAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/CheckListAdapter.java @@ -1,5 +1,11 @@ package com.habitrpg.android.habitica.ui.adapter.tasks; +import com.github.data5tream.emojilib.EmojiEditText; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.helpers.ItemTouchHelperAdapter; +import com.habitrpg.android.habitica.ui.helpers.ItemTouchHelperViewHolder; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; + import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.text.Editable; @@ -9,12 +15,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; -import com.github.data5tream.emojilib.EmojiEditText; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.helpers.ItemTouchHelperAdapter; -import com.habitrpg.android.habitica.ui.helpers.ItemTouchHelperViewHolder; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; - import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitItemRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitItemRecyclerViewAdapter.java index 75a851fbe..84b54cf17 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitItemRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitItemRecyclerViewAdapter.java @@ -1,28 +1,5 @@ package com.habitrpg.android.habitica.ui.adapter.tasks; -import android.app.Activity; -import android.content.Context; -import android.databinding.DataBindingUtil; -import android.databinding.ObservableArrayList; -import android.graphics.Rect; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.TouchDelegate; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - import com.github.data5tream.emojilib.EmojiTextView; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.databinding.DailyItemCardBinding; @@ -52,10 +29,32 @@ import com.raizlabs.android.dbflow.sql.language.Select; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; +import android.app.Activity; +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; +import android.graphics.Rect; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.TouchDelegate; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + import java.text.DateFormat; import java.util.List; import java.util.Locale; -import java.util.UUID; import butterknife.BindView; import butterknife.ButterKnife; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.java index 9fc9fb1fd..f0c7acb5b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.java @@ -1,5 +1,7 @@ package com.habitrpg.android.habitica.ui.fragments; +import com.habitrpg.android.habitica.R; + import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; @@ -13,8 +15,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import com.habitrpg.android.habitica.R; - import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AccountDetailsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AccountDetailsFragment.java index 7199ffede..5999ce103 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AccountDetailsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AccountDetailsFragment.java @@ -1,13 +1,13 @@ package com.habitrpg.android.habitica.ui.fragments; +import com.habitrpg.android.habitica.R; + import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.support.v7.preference.Preference; import android.widget.Toast; -import com.habitrpg.android.habitica.R; - import java.util.Arrays; import java.util.List; import java.util.Map; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.java index 2c1c77149..6413c5265 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.java @@ -1,13 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments; -import android.os.Bundle; -import android.support.annotation.CallSuper; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.amplitude.api.Amplitude; import com.habitrpg.android.habitica.events.DisplayTutorialEvent; import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep; @@ -21,6 +13,14 @@ import org.greenrobot.eventbus.EventBusException; import org.json.JSONException; import org.json.JSONObject; +import android.os.Bundle; +import android.support.annotation.CallSuper; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import java.util.Date; import butterknife.ButterKnife; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.java index 0b027eb65..d7bb6d699 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.java @@ -1,5 +1,12 @@ package com.habitrpg.android.habitica.ui.fragments; +import com.habitrpg.android.habitica.APIHelper; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.habitrpg.android.habitica.ui.activities.PrefsActivity; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.Select; + import android.content.Context; import android.os.Bundle; import android.support.design.widget.TabLayout; @@ -8,19 +15,12 @@ import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; -import com.habitrpg.android.habitica.APIHelper; -import com.habitrpg.android.habitica.ui.activities.MainActivity; -import com.habitrpg.android.habitica.ui.activities.PrefsActivity; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; - public abstract class BaseMainFragment extends BaseFragment { public MainActivity activity; public TabLayout tabLayout; public FrameLayout floatingMenuWrapper; - public APIHelper mAPIHelper; + public APIHelper apiHelper; protected HabitRPGUser user; public boolean usesTabLayout; public int fragmentSidebarPosition; @@ -75,8 +75,8 @@ public abstract class BaseMainFragment extends BaseFragment { } } - if (mAPIHelper == null) { - mAPIHelper = new APIHelper(PrefsActivity.fromContext(getContext())); + if (apiHelper == null) { + apiHelper = new APIHelper(PrefsActivity.fromContext(getContext())); } if (floatingMenuWrapper != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BasePreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BasePreferencesFragment.java index b47f8ab9c..fe1b4562b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BasePreferencesFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BasePreferencesFragment.java @@ -1,10 +1,10 @@ package com.habitrpg.android.habitica.ui.fragments; +import com.habitrpg.android.habitica.R; + import android.os.Bundle; import android.support.v7.preference.PreferenceFragmentCompat; -import com.habitrpg.android.habitica.R; - public abstract class BasePreferencesFragment extends PreferenceFragmentCompat { @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/GemsPurchaseFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/GemsPurchaseFragment.java index cc6a3d02b..1aef7f99e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/GemsPurchaseFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/GemsPurchaseFragment.java @@ -1,14 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments; -import android.content.Context; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; - import com.habitrpg.android.habitica.HabiticaApplication; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.BoughtGemsEvent; @@ -25,6 +16,15 @@ import org.solovyev.android.checkout.Purchases; import org.solovyev.android.checkout.RequestListener; import org.solovyev.android.checkout.Sku; +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + import butterknife.BindView; import butterknife.OnClick; import io.fabric.sdk.android.Fabric; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.java index 90e4a44f5..fbe076f25 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.java @@ -1,14 +1,14 @@ package com.habitrpg.android.habitica.ui.fragments; +import com.habitrpg.android.habitica.BuildConfig; +import com.habitrpg.android.habitica.R; + import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; -import com.habitrpg.android.habitica.BuildConfig; -import com.habitrpg.android.habitica.R; - import butterknife.BindView; import butterknife.ButterKnife; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PreferencesFragment.java index 327389801..37d74af0e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PreferencesFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PreferencesFragment.java @@ -1,5 +1,18 @@ package com.habitrpg.android.habitica.ui.fragments; +import com.habitrpg.android.habitica.APIHelper; +import com.habitrpg.android.habitica.HabiticaApplication; +import com.habitrpg.android.habitica.NotificationPublisher; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.prefs.TimePreference; +import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction; +import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.Select; + import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; @@ -7,35 +20,11 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceCategory; - -import com.habitrpg.android.habitica.APIHelper; -import com.habitrpg.android.habitica.HabiticaApplication; -import com.habitrpg.android.habitica.HostConfig; -import com.habitrpg.android.habitica.NotificationPublisher; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; -import com.habitrpg.android.habitica.callbacks.MergeUserCallback; -import com.habitrpg.android.habitica.prefs.TimePreference; -import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity; -import com.habitrpg.android.habitica.ui.activities.MainActivity; -import com.habitrpg.android.habitica.ui.activities.PrefsActivity; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction; -import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; import java.util.Calendar; -import java.util.HashMap; -import java.util.Map; - -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; public class PreferencesFragment extends BasePreferencesFragment implements - SharedPreferences.OnSharedPreferenceChangeListener, Callback { + SharedPreferences.OnSharedPreferenceChangeListener { private Context context; private TimePreference timePreference; @@ -201,14 +190,4 @@ public class PreferencesFragment extends BasePreferencesFragment implements classSelectionPreference.setVisible(true); } } - - @Override - public void success(HabitRPGUser habitRPGUser, Response response) { - - } - - @Override - public void failure(RetrofitError error) { - - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SkillTasksRecyclerViewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SkillTasksRecyclerViewFragment.java index bd8b5c37b..0e8d2dd5a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SkillTasksRecyclerViewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SkillTasksRecyclerViewFragment.java @@ -1,5 +1,11 @@ package com.habitrpg.android.habitica.ui.fragments; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand; +import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter; + +import org.greenrobot.eventbus.EventBus; + import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; @@ -9,12 +15,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand; -import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter; - -import org.greenrobot.eventbus.EventBus; - public class SkillTasksRecyclerViewFragment extends Fragment implements View.OnClickListener { public RecyclerView mRecyclerView; public RecyclerView.Adapter mAdapter; @@ -39,6 +39,7 @@ public class SkillTasksRecyclerViewFragment extends Fragment implements View.OnC @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); android.support.v4.app.FragmentActivity context = getActivity(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SkillsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SkillsFragment.java index 64365b06b..41daf5e0b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SkillsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SkillsFragment.java @@ -1,18 +1,7 @@ package com.habitrpg.android.habitica.ui.fragments; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; +import com.habitrpg.android.habitica.callbacks.MergeUserCallback; import com.habitrpg.android.habitica.callbacks.SkillCallback; import com.habitrpg.android.habitica.events.SkillUsedEvent; import com.habitrpg.android.habitica.events.commands.UseSkillCommand; @@ -26,6 +15,17 @@ import com.raizlabs.android.dbflow.sql.language.Select; import org.greenrobot.eventbus.Subscribe; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import java.util.List; import butterknife.BindView; @@ -99,7 +99,9 @@ public class SkillsFragment extends BaseMainFragment { startActivityForResult(intent, TASK_SELECTION_ACTIVITY); } else { displayProgressDialog(); - mAPIHelper.apiService.useSkill(skill.key, skill.target, new SkillCallback(activity, skill)); + apiHelper.apiService.useSkill(skill.key, skill.target) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new SkillCallback(activity, skill), throwable -> {}); } } @@ -109,7 +111,9 @@ public class SkillsFragment extends BaseMainFragment { Skill skill = event.usedSkill; adapter.setMana(event.newMana); UiUtils.showSnackbar(activity, activity.getFloatingMenuWrapper(), activity.getString(R.string.used_skill, skill.text, skill.mana), UiUtils.SnackbarDisplayType.NORMAL); - mAPIHelper.retrieveUser(new HabitRPGUserCallback(activity)); + apiHelper.apiService.getUser() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new MergeUserCallback(activity, user), throwable -> {}); } @Override @@ -119,7 +123,9 @@ public class SkillsFragment extends BaseMainFragment { case (TASK_SELECTION_ACTIVITY) : { if (resultCode == Activity.RESULT_OK) { displayProgressDialog(); - mAPIHelper.apiService.useSkill(selectedSkill.key, selectedSkill.target, data.getStringExtra("task_id"), new SkillCallback(activity, selectedSkill)); + apiHelper.apiService.useSkill(selectedSkill.key, selectedSkill.target, data.getStringExtra("task_id")) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new SkillCallback(activity, selectedSkill), throwable -> {}); } break; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/TimePreferenceDialogFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/TimePreferenceDialogFragment.java index ac75be8e3..771150272 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/TimePreferenceDialogFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/TimePreferenceDialogFragment.java @@ -1,5 +1,7 @@ package com.habitrpg.android.habitica.ui.fragments; +import com.habitrpg.android.habitica.prefs.TimePreference; + import android.content.Context; import android.os.Build; import android.os.Bundle; @@ -8,8 +10,6 @@ import android.support.v7.preference.PreferenceFragmentCompat; import android.view.View; import android.widget.TimePicker; -import com.habitrpg.android.habitica.prefs.TimePreference; - import java.util.Locale; public class TimePreferenceDialogFragment extends PreferenceDialogFragmentCompat { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQDetailFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQDetailFragment.java index ccb29d72c..18b10495c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQDetailFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQDetailFragment.java @@ -1,5 +1,10 @@ package com.habitrpg.android.habitica.ui.fragments.faq; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; +import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; + import android.os.Bundle; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; @@ -7,11 +12,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; -import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; - import butterknife.BindView; import butterknife.ButterKnife; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.java index fa99dd6be..4c3d89be8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.java @@ -1,12 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.faq; -import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.DividerItemDecoration; import com.habitrpg.android.habitica.ui.adapter.FAQOverviewRecyclerAdapter; @@ -14,6 +7,13 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; import com.raizlabs.android.dbflow.sql.language.Select; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import java.util.List; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/MountDetailRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/MountDetailRecyclerFragment.java index 183305db8..5b65f21f7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/MountDetailRecyclerFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/MountDetailRecyclerFragment.java @@ -1,5 +1,13 @@ package com.habitrpg.android.habitica.ui.fragments.inventory; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.adapter.inventory.MountDetailRecyclerAdapter; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.habitrpg.android.habitica.ui.helpers.MarginDecoration; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.Select; + import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.GridLayoutManager; @@ -8,20 +16,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.adapter.inventory.MountDetailRecyclerAdapter; -import com.habitrpg.android.habitica.ui.adapter.inventory.PetDetailRecyclerAdapter; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.habitrpg.android.habitica.ui.helpers.MarginDecoration; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Animal; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; - -import java.util.HashMap; import java.util.List; -import java.util.Map; public class MountDetailRecyclerFragment extends BaseMainFragment { public RecyclerView recyclerView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/PetDetailRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/PetDetailRecyclerFragment.java index 35d8a8ff3..16ff995e7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/PetDetailRecyclerFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/PetDetailRecyclerFragment.java @@ -1,5 +1,18 @@ package com.habitrpg.android.habitica.ui.fragments.inventory; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.commands.FeedCommand; +import com.habitrpg.android.habitica.ui.adapter.inventory.PetDetailRecyclerAdapter; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment; +import com.habitrpg.android.habitica.ui.helpers.MarginDecoration; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.Select; + +import org.greenrobot.eventbus.Subscribe; + import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.GridLayoutManager; @@ -8,27 +21,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.events.commands.FeedCommand; -import com.habitrpg.android.habitica.ui.adapter.inventory.PetDetailRecyclerAdapter; -import com.habitrpg.android.habitica.ui.adapter.inventory.StableRecyclerAdapter; -import com.habitrpg.android.habitica.ui.fragments.BaseFragment; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment; -import com.habitrpg.android.habitica.ui.helpers.MarginDecoration; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Animal; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.From; -import com.raizlabs.android.dbflow.sql.language.Select; - -import org.greenrobot.eventbus.Subscribe; - -import java.util.HashMap; import java.util.List; -import java.util.Map; public class PetDetailRecyclerFragment extends BaseMainFragment { public RecyclerView recyclerView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableFragment.java index 4761e7566..c0374baba 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableFragment.java @@ -1,5 +1,8 @@ package com.habitrpg.android.habitica.ui.fragments.inventory; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; + import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; @@ -8,11 +11,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment; -import com.magicmicky.habitrpgwrapper.lib.models.UserParty; - public class StableFragment extends BaseMainFragment { public ViewPager viewPager; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableRecyclerFragment.java index 934c35c26..a7f07c95e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableRecyclerFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableRecyclerFragment.java @@ -1,13 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.inventory; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.widget.GridLayoutManager; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.ContentReloadedEvent; import com.habitrpg.android.habitica.events.ReloadContentEvent; @@ -26,6 +18,14 @@ import com.raizlabs.android.dbflow.sql.language.Where; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.GridLayoutManager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + import java.util.ArrayList; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.java index 3ac92cf60..ab0572a60 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.java @@ -1,12 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.customization; -import android.os.Bundle; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.adapter.CustomizationRecyclerViewAdapter; import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; @@ -19,6 +12,13 @@ import com.raizlabs.android.dbflow.sql.language.OrderBy; import com.raizlabs.android.dbflow.sql.language.Select; import com.raizlabs.android.dbflow.sql.language.Where; +import android.os.Bundle; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import java.util.Date; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java index bebcce31d..a514e41f1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java @@ -1,5 +1,11 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.customization; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.callbacks.MergeUserCallback; +import com.habitrpg.android.habitica.databinding.FragmentAvatarOverviewBinding; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; + import android.databinding.DataBindingUtil; import android.os.Bundle; import android.view.LayoutInflater; @@ -8,23 +14,13 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Spinner; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; -import com.habitrpg.android.habitica.databinding.FragmentAvatarOverviewBinding; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.magicmicky.habitrpgwrapper.lib.models.ContentResult; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; - import java.util.HashMap; import java.util.Map; import butterknife.BindView; import butterknife.ButterKnife; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; -public class AvatarOverviewFragment extends BaseMainFragment implements AdapterView.OnItemSelectedListener, Callback { +public class AvatarOverviewFragment extends BaseMainFragment implements AdapterView.OnItemSelectedListener { FragmentAvatarOverviewBinding viewBinding; @@ -63,8 +59,10 @@ public class AvatarOverviewFragment extends BaseMainFragment implements AdapterV public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (this.mAPIHelper != null) { - this.mAPIHelper.apiService.getContent(this); + if (this.apiHelper != null) { + this.apiHelper.apiService.getContent() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(contentResult -> {}, throwable -> {}); } } @@ -136,20 +134,12 @@ public class AvatarOverviewFragment extends BaseMainFragment implements AdapterV if (!this.user.getPreferences().getSize().equals(newSize)) { Map updateData = new HashMap<>(); updateData.put("preferences.size", newSize); - mAPIHelper.apiService.updateUser(updateData, new HabitRPGUserCallback(activity)); + apiHelper.apiService.updateUser(updateData) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new MergeUserCallback(activity, user), throwable -> {}); } } @Override public void onNothingSelected(AdapterView parent) {} - - @Override - public void success(ContentResult contentResult, Response response) { - - } - - @Override - public void failure(RetrofitError error) { - - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.java index a1d6f4127..67cb1d49e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.java @@ -1,12 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.equipment; -import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.DividerItemDecoration; import com.habitrpg.android.habitica.ui.adapter.inventory.EquipmentRecyclerViewAdapter; @@ -15,6 +8,13 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.Select; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import java.util.List; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.java index 8660d6b80..317882da8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.java @@ -1,13 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.equipment; -import android.databinding.DataBindingUtil; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CompoundButton; -import android.widget.Switch; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.databinding.FragmentEquipmentOverviewBinding; import com.habitrpg.android.habitica.events.commands.UpdateUserCommand; @@ -20,6 +12,13 @@ import com.raizlabs.android.dbflow.sql.language.Select; import org.greenrobot.eventbus.EventBus; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Switch; + import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java index 9db8a2b6d..a1e5fc5f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java @@ -1,17 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.items; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.widget.TextView; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.ContentReloadedEvent; import com.habitrpg.android.habitica.ui.DividerItemDecoration; @@ -29,7 +17,15 @@ import com.raizlabs.android.dbflow.sql.language.From; import com.raizlabs.android.dbflow.sql.language.Select; import org.greenrobot.eventbus.Subscribe; -import org.w3c.dom.Text; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.TextView; import java.util.HashMap; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java index 3b971c16f..31b27a20a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java @@ -1,7 +1,16 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.items; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.commands.HatchingCommand; +import com.habitrpg.android.habitica.events.commands.InvitePartyToQuestCommand; +import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand; +import com.habitrpg.android.habitica.ui.MainDrawerBuilder; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + import android.os.Bundle; -import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; @@ -9,25 +18,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.ContentCache; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.events.commands.FeedCommand; -import com.habitrpg.android.habitica.events.commands.HatchingCommand; -import com.habitrpg.android.habitica.events.commands.InvitePartyToQuestCommand; -import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand; -import com.habitrpg.android.habitica.ui.MainDrawerBuilder; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.habitrpg.android.habitica.ui.fragments.inventory.PetDetailRecyclerFragment; -import com.magicmicky.habitrpgwrapper.lib.models.Group; -import com.magicmicky.habitrpgwrapper.lib.models.UserParty; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; - -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - public class ItemsFragment extends BaseMainFragment { public ViewPager viewPager; @@ -110,19 +100,13 @@ public class ItemsFragment extends BaseMainFragment { @Subscribe public void onEvent(InvitePartyToQuestCommand event) { - this.mAPIHelper.apiService.inviteToQuest("party", event.questKey, new Callback() { - @Override - public void success(Group group, Response response) { - OpenMenuItemCommand event = new OpenMenuItemCommand(); - event.identifier = MainDrawerBuilder.SIDEBAR_PARTY; - EventBus.getDefault().post(event); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + this.apiHelper.apiService.inviteToQuest("party", event.questKey) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(group -> { + OpenMenuItemCommand event1 = new OpenMenuItemCommand(); + event1.identifier = MainDrawerBuilder.SIDEBAR_PARTY; + EventBus.getDefault().post(event1); + }, throwable -> {}); } @Subscribe diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.java index 0e065e510..4aaf368c9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.java @@ -1,14 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.setup; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.activities.SetupActivity; import com.habitrpg.android.habitica.ui.adapter.setup.CustomizationSetupAdapter; @@ -21,6 +12,15 @@ import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.Select; import com.raizlabs.android.dbflow.sql.language.Where; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + import java.util.List; import butterknife.BindView; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.java index 5c7980934..6fed29d19 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.java @@ -1,5 +1,8 @@ package com.habitrpg.android.habitica.ui.fragments.setup; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.BaseFragment; + import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.Nullable; @@ -9,9 +12,6 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.BaseFragment; - import butterknife.BindView; import butterknife.ButterKnife; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.java index 1cd8fcc1c..883660e67 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.java @@ -1,5 +1,10 @@ package com.habitrpg.android.habitica.ui.fragments.setup; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.SetupActivity; +import com.habitrpg.android.habitica.ui.adapter.setup.TaskSetupAdapter; +import com.habitrpg.android.habitica.ui.fragments.BaseFragment; + import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; @@ -8,11 +13,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.activities.SetupActivity; -import com.habitrpg.android.habitica.ui.adapter.setup.TaskSetupAdapter; -import com.habitrpg.android.habitica.ui.fragments.BaseFragment; - import java.util.ArrayList; import java.util.Date; import java.util.HashMap; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java index 6edf825bb..061056af3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java @@ -1,17 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.social; -import android.content.Context; -import android.os.AsyncTask; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.HabiticaApplication; import com.habitrpg.android.habitica.R; @@ -29,24 +17,33 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment; import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; import com.magicmicky.habitrpgwrapper.lib.models.ChatMessage; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult; import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.Select; import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.EventBusException; import org.greenrobot.eventbus.Subscribe; +import android.content.Context; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; +import rx.functions.Action1; -public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, Callback> { +public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, Action1> { private Context ctx; private String groupId; @@ -140,7 +137,8 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout public void onRefresh() { swipeRefreshLayout.setRefreshing(true); - apiHelper.apiService.listGroupChat(groupId, this); + apiHelper.apiService.listGroupChat(groupId).compose(apiHelper.configureApiCallObserver()) + .subscribe(this, throwable -> {}); } private List currentChatMessages; @@ -152,8 +150,97 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout markMessagesAsSeen(); } + private boolean navigatedOnceToFragment = false; + private boolean gotNewMessages = false; + + private void markMessagesAsSeen(){ + if(!isTavern && seenGroupId != null && !seenGroupId.isEmpty() + && gotNewMessages && navigatedOnceToFragment) { + + gotNewMessages = false; + + apiHelper.apiService.seenMessages(seenGroupId) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(s -> {}, throwable -> {}); + } + } + + @Subscribe + public void onEvent(final FlagChatMessageCommand cmd) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setMessage(R.string.chat_flag_confirmation) + .setPositiveButton(R.string.flag_confirm, (dialog, id) -> { + apiHelper.apiService.flagMessage(cmd.groupId, cmd.chatMessage.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + UiUtils.showSnackbar(activity, activity.getFloatingMenuWrapper(), "Flagged message by " + cmd.chatMessage.user, UiUtils.SnackbarDisplayType.NORMAL); + }, throwable -> {}); + }) + .setNegativeButton(R.string.action_cancel, (dialog, id) -> { + }); + builder.show(); + } + + @Subscribe + public void onEvent(final ToggleLikeMessageCommand cmd) { + apiHelper.apiService.likeMessage(cmd.groupId, cmd.chatMessage.id).compose(apiHelper.configureApiCallObserver()) + .subscribe(voids -> {}); + } + + @Subscribe + public void onEvent(final DeleteChatMessageCommand cmd) { + apiHelper.apiService.deleteMessage(cmd.groupId, cmd.chatMessage.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + if (currentChatMessages != null) { + currentChatMessages.remove(cmd.chatMessage); + + ChatListFragment.this.call(currentChatMessages); + } + }, throwable -> {}); + } + + @Subscribe + public void onEvent(SendNewGroupMessageCommand cmd) { + HashMap messageObject = new HashMap<>(); + messageObject.put("message", cmd.Message); + apiHelper.apiService.postGroupChat(cmd.TargetGroupId, messageObject) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(postChatMessageResult -> { + if (currentChatMessages != null) { + currentChatMessages.add(0, postChatMessageResult.message); + + ChatListFragment.this.call(currentChatMessages); + } + }, throwable -> {}); + + UiUtils.dismissKeyboard(HabiticaApplication.currentActivity); + } + + // If the ChatList is Tavern, we're able to toggle the sleep-mode + @Subscribe + public void onEvent(ToggleInnCommand event) { + apiHelper.apiService.sleep().compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + ToggledInnStateEvent innState = new ToggledInnStateEvent(); + innState.Inn = !user.getPreferences().getSleep(); + + user.getPreferences().setSleep(innState.Inn); + + EventBus.getDefault().post(innState); + }, throwable -> {}); + } + @Override - public void success(List chatMessages, Response response) { + public void onSaveInstanceState(Bundle outState) { + outState.putString("userId", this.userId); + outState.putString("groupId", this.groupId); + outState.putBoolean("isTavern", this.isTavern); + super.onSaveInstanceState(outState); + } + + @Override + public void call(List chatMessages) { currentChatMessages = chatMessages; //Load unparsed messages first @@ -174,139 +261,6 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout markMessagesAsSeen(); } - private boolean navigatedOnceToFragment = false; - private boolean gotNewMessages = false; - - private void markMessagesAsSeen(){ - if(!isTavern && seenGroupId != null && !seenGroupId.isEmpty() - && gotNewMessages && navigatedOnceToFragment) { - - gotNewMessages = false; - - apiHelper.apiService.seenMessages(seenGroupId, new Callback() { - @Override - public void success(String str, Response response) { - - } - - @Override - public void failure(RetrofitError error) { - - } - }); - } - } - - @Override - public void failure(RetrofitError error) { - - } - - @Subscribe - public void onEvent(final FlagChatMessageCommand cmd) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setMessage(R.string.chat_flag_confirmation) - .setPositiveButton(R.string.flag_confirm, (dialog, id) -> { - apiHelper.apiService.flagMessage(cmd.groupId, cmd.chatMessage.id, new Callback() { - @Override - public void success(Void aVoid, Response response) { - UiUtils.showSnackbar(activity, activity.getFloatingMenuWrapper(), "Flagged message by " + cmd.chatMessage.user, UiUtils.SnackbarDisplayType.NORMAL); - } - - @Override - public void failure(RetrofitError error) { - } - }); }) - .setNegativeButton(R.string.action_cancel, (dialog, id) -> { - }); - builder.show(); - } - - @Subscribe - public void onEvent(final ToggleLikeMessageCommand cmd) { - apiHelper.apiService.likeMessage(cmd.groupId, cmd.chatMessage.id, new Callback>() { - @Override - public void success(List aVoid, Response response) { - } - - @Override - public void failure(RetrofitError error) { - - //showSnackbar("Failed to like message by " + cmd.chatMessage.user, true); - } - }); - } - - @Subscribe - public void onEvent(final DeleteChatMessageCommand cmd) { - apiHelper.apiService.deleteMessage(cmd.groupId, cmd.chatMessage.id, new Callback() { - @Override - public void success(Void aVoid, Response response) { - if (currentChatMessages != null) { - currentChatMessages.remove(cmd.chatMessage); - - ChatListFragment.this.success(currentChatMessages, null); - } - } - - @Override - public void failure(RetrofitError error) { - - } - }); - } - - @Subscribe - public void onEvent(SendNewGroupMessageCommand cmd) { - - apiHelper.apiService.postGroupChat(cmd.TargetGroupId, cmd.Message, new Callback() { - @Override - public void success(PostChatMessageResult msg, Response response) { - if (currentChatMessages != null) { - currentChatMessages.add(0, msg.message); - - ChatListFragment.this.success(currentChatMessages, null); - } - } - - @Override - public void failure(RetrofitError error) { - - } - }); - - UiUtils.dismissKeyboard(HabiticaApplication.currentActivity); - } - - // If the ChatList is Tavern, we're able to toggle the sleep-mode - @Subscribe - public void onEvent(ToggleInnCommand event) { - apiHelper.toggleSleep(new Callback() { - @Override - public void success(Void aVoid, Response response) { - ToggledInnStateEvent innState = new ToggledInnStateEvent(); - innState.Inn = !user.getPreferences().getSleep(); - - user.getPreferences().setSleep(innState.Inn); - - EventBus.getDefault().post(innState); - } - - @Override - public void failure(RetrofitError error) { - - } - }); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - outState.putString("userId", this.userId); - outState.putString("groupId", this.groupId); - outState.putBoolean("isTavern", this.isTavern); - super.onSaveInstanceState(outState); - } - private class ParseMessages extends AsyncTask { private List chatMessages; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java index ee330d0a5..1d6cff982 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java @@ -1,5 +1,14 @@ package com.habitrpg.android.habitica.ui.fragments.social; +import com.habitrpg.android.habitica.APIHelper; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.databinding.FragmentGroupInfoBinding; +import com.habitrpg.android.habitica.databinding.ValueBarBinding; +import com.habitrpg.android.habitica.ui.adapter.social.QuestCollectRecyclerViewAdapter; +import com.magicmicky.habitrpgwrapper.lib.models.Group; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; + import android.app.AlertDialog; import android.content.Context; import android.databinding.DataBindingUtil; @@ -15,28 +24,16 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.APIHelper; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.databinding.FragmentGroupInfoBinding; -import com.habitrpg.android.habitica.databinding.ValueBarBinding; -import com.habitrpg.android.habitica.ui.adapter.social.QuestCollectRecyclerViewAdapter; -import com.magicmicky.habitrpgwrapper.lib.models.Group; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; - import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; public class GroupInformationFragment extends Fragment { private View view; FragmentGroupInfoBinding viewBinding; - APIHelper mAPIHelper; + APIHelper apiHelper; @BindView(R.id.questMemberView) LinearLayout questMemberView; @BindView(R.id.collectionStats) @@ -57,7 +54,7 @@ public class GroupInformationFragment extends Fragment { fragment.setArguments(args); fragment.group = group; fragment.user = user; - fragment.mAPIHelper = mAPIHelper; + fragment.apiHelper = mAPIHelper; return fragment; } @@ -150,7 +147,7 @@ public class GroupInformationFragment extends Fragment { viewBinding.setHideParticipantCard(true); return; } - if (group.quest.members == null) { + if (group.quest.members == null || group.members == null) { viewBinding.setHideParticipantCard(true); return; } @@ -182,39 +179,27 @@ public class GroupInformationFragment extends Fragment { @OnClick(R.id.btnQuestAccept) public void onQuestAccept() { - mAPIHelper.apiService.acceptQuest(group.id, new Callback() { - @Override - public void success(Void aVoid, Response response) { - user.getParty().getQuest().RSVPNeeded = false; - group.quest.members.put(user.getId(), true); - setGroup(group); - viewBinding.setUser(user); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + apiHelper.apiService.acceptQuest(group.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + user.getParty().getQuest().RSVPNeeded = false; + group.quest.members.put(user.getId(), true); + setGroup(group); + viewBinding.setUser(user); + }, throwable -> {}); } @OnClick(R.id.btnQuestReject) public void onQuestReject() { - mAPIHelper.apiService.rejectQuest(group.id, new Callback() { - @Override - public void success(Void aVoid, Response response) { - user.getParty().getQuest().RSVPNeeded = false; + apiHelper.apiService.rejectQuest(group.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + user.getParty().getQuest().RSVPNeeded = false; group.quest.members.put(user.getId(), false); setGroup(group); viewBinding.setUser(user); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + }, throwable -> {}); } @@ -223,18 +208,12 @@ public class GroupInformationFragment extends Fragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setMessage("Are you sure you want to leave the active quest? All your quest progress will be lost.") .setPositiveButton("Yes", (dialog, which) -> { - mAPIHelper.apiService.leaveQuest(group.id, new Callback() { - @Override - public void success(Void aVoid, Response response) { - group.quest.members.remove(user.getId()); - setGroup(group); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + apiHelper.apiService.leaveQuest(group.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + group.quest.members.remove(user.getId()); + setGroup(group); + }, throwable -> {}); }).setNegativeButton("No", (dialog, which) -> { }); @@ -247,17 +226,12 @@ public class GroupInformationFragment extends Fragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setMessage(R.string.quest_begin_message) .setPositiveButton(R.string.yes, (dialog, which) -> { - mAPIHelper.apiService.forceStartQuest(group.id, group, new Callback() { - @Override - public void success(Group group1, Response response) { - setGroup(group1); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + apiHelper.apiService.forceStartQuest(group.id, group) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(quest -> { + group.quest = quest; + setGroup(group); + }, throwable -> {}); }).setNegativeButton(R.string.no, (dialog, which) -> { }); @@ -269,18 +243,12 @@ public class GroupInformationFragment extends Fragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setMessage(R.string.quest_cancel_message) .setPositiveButton(R.string.yes, (dialog, which) -> { - mAPIHelper.apiService.cancelQuest(group.id, new Callback() { - @Override - public void success(Void aVoid, Response response) { - setGroup(group); - setQuestContent(null); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + apiHelper.apiService.cancelQuest(group.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + setGroup(group); + setQuestContent(null); + }, throwable -> {}); }).setNegativeButton(R.string.no, (dialog, which) -> { }); @@ -292,18 +260,13 @@ public class GroupInformationFragment extends Fragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setMessage("Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner.") .setPositiveButton("Yes", (dialog, which) -> { - mAPIHelper.apiService.abortQuest(group.id, new Callback() { - @Override - public void success(Group group1, Response response) { - setGroup(group1); - setQuestContent(null); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + apiHelper.apiService.abortQuest(group.id) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(quest -> { + group.quest = quest; + setGroup(group); + setQuestContent(null); + }, throwable -> {}); }).setNegativeButton("No", (dialog, which) -> { }); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java index 53433127c..8a21ac43e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java @@ -1,5 +1,11 @@ package com.habitrpg.android.habitica.ui.fragments.social; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.GroupFormActivity; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.magicmicky.habitrpgwrapper.lib.models.Group; +import com.magicmicky.habitrpgwrapper.lib.models.UserParty; + import android.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -13,17 +19,9 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.activities.GroupFormActivity; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.magicmicky.habitrpgwrapper.lib.models.Group; -import com.magicmicky.habitrpgwrapper.lib.models.UserParty; +import rx.functions.Action1; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - -public class GuildFragment extends BaseMainFragment implements Callback { +public class GuildFragment extends BaseMainFragment implements Action1 { private Group guild; public boolean isMember; @@ -39,8 +37,9 @@ public class GuildFragment extends BaseMainFragment implements Callback { this.guildInformationFragment.setGroup(guild); } if (this.guild.chat == null) { - if (this.mAPIHelper != null) { - mAPIHelper.apiService.getGroup(this.guild.id, this); + if (this.apiHelper != null) { + apiHelper.apiService.getGroup(this.guild.id).compose(apiHelper.configureApiCallObserver()) + .subscribe(this, throwable -> {}); } } } @@ -64,8 +63,9 @@ public class GuildFragment extends BaseMainFragment implements Callback { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - if (this.mAPIHelper != null && this.guild != null) { - mAPIHelper.apiService.getGroup(this.guild.id, this); + if (this.apiHelper != null && this.guild != null) { + apiHelper.apiService.getGroup(this.guild.id).compose(apiHelper.configureApiCallObserver()) + .subscribe(this, throwable -> {}); } } @@ -89,20 +89,15 @@ public class GuildFragment extends BaseMainFragment implements Callback { switch (id) { case R.id.menu_guild_join: - this.mAPIHelper.apiService.joinGroup(this.guild.id, this); + this.apiHelper.apiService.joinGroup(this.guild.id).compose(apiHelper.configureApiCallObserver()) + .subscribe(this, throwable -> {}); this.isMember = true; return true; case R.id.menu_guild_leave: - this.mAPIHelper.apiService.leaveGroup(this.guild.id, new Callback() { - @Override - public void success(Void aVoid, Response response) { - getActivity().supportInvalidateOptionsMenu(); - } - - @Override - public void failure(RetrofitError error) { - } - }); + this.apiHelper.apiService.leaveGroup(this.guild.id).compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> { + this.activity.supportInvalidateOptionsMenu(); + }, throwable -> {}); this.isMember = false; return true; case R.id.menu_guild_edit: @@ -130,12 +125,12 @@ public class GuildFragment extends BaseMainFragment implements Callback { switch (position) { case 0: { - fragment = guildInformationFragment = GroupInformationFragment.newInstance(GuildFragment.this.guild, user, mAPIHelper); + fragment = guildInformationFragment = GroupInformationFragment.newInstance(GuildFragment.this.guild, user, apiHelper); break; } case 1: { chatListFragment = new ChatListFragment(); - chatListFragment.configure(activity, GuildFragment.this.guild.id, mAPIHelper, user, activity, false); + chatListFragment.configure(activity, GuildFragment.this.guild.id, apiHelper, user, activity, false); fragment = chatListFragment; break; } @@ -226,16 +221,9 @@ public class GuildFragment extends BaseMainFragment implements Callback { needsSaving = true; } if (needsSaving) { - this.mAPIHelper.apiService.updateGroup(this.guild.id, this.guild, new Callback() { - @Override - public void success(Void aVoid, Response response) { - } - - @Override - public void failure(RetrofitError error) { - - } - }); + this.apiHelper.apiService.updateGroup(this.guild.id, this.guild) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); this.guildInformationFragment.setGroup(guild); } } @@ -245,7 +233,7 @@ public class GuildFragment extends BaseMainFragment implements Callback { } @Override - public void success(Group group, Response response) { + public void call(Group group) { if (group != null) { if (this.guildInformationFragment != null) { this.guildInformationFragment.setGroup(group); @@ -259,8 +247,4 @@ public class GuildFragment extends BaseMainFragment implements Callback { } this.activity.supportInvalidateOptionsMenu(); } - - @Override - public void failure(RetrofitError error) { - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.java index 463b3ed7c..fb5d8a120 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.java @@ -1,5 +1,9 @@ package com.habitrpg.android.habitica.ui.fragments.social; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.magicmicky.habitrpgwrapper.lib.models.Group; + import android.content.Context; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; @@ -10,23 +14,13 @@ import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.magicmicky.habitrpgwrapper.lib.models.Group; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; -import com.raizlabs.android.dbflow.sql.language.Where; - import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; -public class GuildsOverviewFragment extends BaseMainFragment implements Callback>, View.OnClickListener, SwipeRefreshLayout.OnRefreshListener { +public class GuildsOverviewFragment extends BaseMainFragment implements View.OnClickListener, SwipeRefreshLayout.OnRefreshListener { @BindView(R.id.my_guilds_listview) LinearLayout guildsListView; @@ -68,8 +62,16 @@ public class GuildsOverviewFragment extends BaseMainFragment implements Callback } private void fetchGuilds() { - if (this.mAPIHelper != null && this.mAPIHelper.apiService != null) { - this.mAPIHelper.apiService.listGroups("guilds", this); + if (this.apiHelper != null && this.apiHelper.apiService != null) { + this.apiHelper.apiService.listGroups("guilds") + .compose(apiHelper.configureApiCallObserver()) + .subscribe(groups -> { + GuildsOverviewFragment.this.guilds = groups; + GuildsOverviewFragment.this.setGuildsOnListView(); + if (swipeRefreshLayout != null) { + swipeRefreshLayout.setRefreshing(false); + } + }, throwable -> {}); } } @@ -89,20 +91,6 @@ public class GuildsOverviewFragment extends BaseMainFragment implements Callback } } - @Override - public void success(ArrayList groups, Response response) { - this.guilds = groups; - this.setGuildsOnListView(); - if (swipeRefreshLayout != null) { - swipeRefreshLayout.setRefreshing(false); - } - } - - @Override - public void failure(RetrofitError error) { - - } - @Override public void onClick(View v) { if (v == this.publicGuildsButton) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java index 253d1e64b..f18521378 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java @@ -1,5 +1,11 @@ package com.habitrpg.android.habitica.ui.fragments.social; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.DividerItemDecoration; +import com.habitrpg.android.habitica.ui.adapter.social.PublicGuildsRecyclerViewAdapter; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.magicmicky.habitrpgwrapper.lib.models.Group; + import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; @@ -8,24 +14,15 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.DividerItemDecoration; -import com.habitrpg.android.habitica.ui.adapter.social.PublicGuildsRecyclerViewAdapter; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.magicmicky.habitrpgwrapper.lib.models.Group; - -import java.util.ArrayList; +import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; -public class PublicGuildsFragment extends BaseMainFragment implements Callback> { +public class PublicGuildsFragment extends BaseMainFragment { - ArrayList memberGuildIDs; - ArrayList guilds; + List memberGuildIDs; + List guilds; @BindView(R.id.recyclerView) RecyclerView recyclerView; @@ -45,7 +42,7 @@ public class PublicGuildsFragment extends BaseMainFragment implements Callback { + PublicGuildsFragment.this.guilds = groups; + if (PublicGuildsFragment.this.viewAdapter!= null) { + PublicGuildsFragment.this.viewAdapter.setPublicGuildList(groups); + } + }, throwable -> {}); } } - - @Override - public void success(ArrayList groups, Response response) { - this.guilds = groups; - if (this.viewAdapter!= null) { - this.viewAdapter.setPublicGuildList(groups); - } - } - - @Override - public void failure(RetrofitError error) { - - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java index 1f46d34cb..2021663cd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java @@ -1,5 +1,10 @@ package com.habitrpg.android.habitica.ui.fragments.social; +import com.habitrpg.android.habitica.ContentCache; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.magicmicky.habitrpgwrapper.lib.models.Group; + import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; @@ -8,16 +13,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.ContentCache; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.magicmicky.habitrpgwrapper.lib.models.Group; - -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - -public class TavernFragment extends BaseMainFragment implements Callback { +public class TavernFragment extends BaseMainFragment { public ViewPager viewPager; Group tavern; @@ -46,36 +42,30 @@ public class TavernFragment extends BaseMainFragment implements Callback @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - if (this.mAPIHelper != null) { - mAPIHelper.apiService.getGroup("habitrpg", this); - } - } + if (this.apiHelper != null) { + apiHelper.apiService.getGroup("habitrpg") + .compose(apiHelper.configureApiCallObserver()) + .subscribe(group -> { + TavernFragment.this.tavern = group; + if (group.quest != null && TavernFragment.this.isAdded()) { + TavernFragment.this.viewPager.getAdapter().notifyDataSetChanged(); + if (TavernFragment.this.tabLayout != null) { + TavernFragment.this.tabLayout.setVisibility(View.VISIBLE); + TavernFragment.this.tabLayout.setupWithViewPager(TavernFragment.this.viewPager); + } - @Override - public void success(Group group, Response response) { - this.tavern = group; - if (group.quest != null && this.isAdded()) { - this.viewPager.getAdapter().notifyDataSetChanged(); - if (this.tabLayout != null) { - this.tabLayout.setVisibility(View.VISIBLE); - this.tabLayout.setupWithViewPager(this.viewPager); - } + ContentCache contentCache = new ContentCache(apiHelper.apiService); - ContentCache contentCache = new ContentCache(mAPIHelper.apiService); - - contentCache.GetQuestContent(group.quest.key, content -> { - if (questInfoFragment != null) { - questInfoFragment.setQuestContent(content); + contentCache.GetQuestContent(group.quest.key, content -> { + if (questInfoFragment != null) { + questInfoFragment.setQuestContent(content); + } + }); } - }); + }, throwable -> {}); } } - @Override - public void failure(RetrofitError error) { - - } - public void setViewPagerAdapter() { android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager(); if (this.user == null) { @@ -92,12 +82,12 @@ public class TavernFragment extends BaseMainFragment implements Callback switch (position) { case 0: { chatListFragment = new ChatListFragment(); - chatListFragment.configure(activity, "habitrpg", mAPIHelper, user, activity, true); + chatListFragment.configure(activity, "habitrpg", apiHelper, user, activity, true); fragment = chatListFragment; break; } case 1: { - fragment = questInfoFragment = GroupInformationFragment.newInstance(tavern, user, mAPIHelper); + fragment = questInfoFragment = GroupInformationFragment.newInstance(tavern, user, apiHelper); break; } default: diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java index 331e83e57..ef688b05e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java @@ -1,5 +1,15 @@ package com.habitrpg.android.habitica.ui.fragments.social.party; +import com.habitrpg.android.habitica.ContentCache; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.GroupFormActivity; +import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.habitrpg.android.habitica.ui.fragments.social.ChatListFragment; +import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment; +import com.magicmicky.habitrpgwrapper.lib.models.Group; +import com.magicmicky.habitrpgwrapper.lib.models.UserParty; + import android.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -14,26 +24,12 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.ContentCache; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.activities.GroupFormActivity; -import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.habitrpg.android.habitica.ui.fragments.social.ChatListFragment; -import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment; -import com.magicmicky.habitrpgwrapper.lib.models.Group; -import com.magicmicky.habitrpgwrapper.lib.models.UserParty; - import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - public class PartyFragment extends BaseMainFragment { @@ -43,6 +39,7 @@ public class PartyFragment extends BaseMainFragment { private PartyMemberListFragment partyMemberListFragment; private GroupInformationFragment groupInformationFragment; private ChatListFragment chatListFragment; + private ContentCache contentCache; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -55,51 +52,34 @@ public class PartyFragment extends BaseMainFragment { viewPager.setCurrentItem(0); - final ContentCache contentCache = new ContentCache(mAPIHelper.apiService); + contentCache = new ContentCache(apiHelper.apiService); // Get the full group data - mAPIHelper.apiService.getGroup("party", new Callback() { - @Override - public void success(Group group, Response response) { - if (group == null) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity) - .setMessage(activity.getString(R.string.no_party_message)) - .setNeutralButton(android.R.string.ok, (dialog, which) -> { - activity.getSupportFragmentManager().popBackStackImmediate(); - }); - builder.show(); - tabLayout.removeAllTabs(); - return; - } - PartyFragment.this.group = group; + apiHelper.apiService.getGroup("party") + .compose(this.apiHelper.configureApiCallObserver()) + .subscribe(group -> { + if (group == null) { + AlertDialog.Builder builder = new AlertDialog.Builder(activity) + .setMessage(activity.getString(R.string.no_party_message)) + .setNeutralButton(android.R.string.ok, (dialog, which) -> { + activity.getSupportFragmentManager().popBackStackImmediate(); + }); + builder.show(); + tabLayout.removeAllTabs(); + return; + } + PartyFragment.this.group = group; - if (partyMemberListFragment != null) { - partyMemberListFragment.setMemberList(group.members); - } + updateGroupUI(); - if (groupInformationFragment != null) { - groupInformationFragment.setGroup(group); - } - - if(chatListFragment != null){ - chatListFragment.seenGroupId = group.id; - } - - PartyFragment.this.activity.supportInvalidateOptionsMenu(); - - if (group.quest != null && group.quest.key != null && !group.quest.key.isEmpty()) { - contentCache.GetQuestContent(group.quest.key, content -> { - if (groupInformationFragment != null) { - groupInformationFragment.setQuestContent(content); - } - }); - } - } - - @Override - public void failure(RetrofitError error) { - } - }); + apiHelper.apiService.getGroupMembers(group.id, true) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(members -> { + PartyFragment.this.group.members = members; + updateGroupUI(); + }, + throwable -> {}); + }, throwable -> {}); setViewPagerAdapter(); this.tutorialStepIdentifier = "party"; @@ -108,6 +88,30 @@ public class PartyFragment extends BaseMainFragment { return v; } + private void updateGroupUI() { + if (partyMemberListFragment != null) { + partyMemberListFragment.setMemberList(group.members); + } + + if (groupInformationFragment != null) { + groupInformationFragment.setGroup(group); + } + + if(chatListFragment != null){ + chatListFragment.seenGroupId = group.id; + } + + PartyFragment.this.activity.supportInvalidateOptionsMenu(); + + if (group.quest != null && group.quest.key != null && !group.quest.key.isEmpty()) { + contentCache.GetQuestContent(group.quest.key, content -> { + if (groupInformationFragment != null) { + groupInformationFragment.setQuestContent(content); + } + }); + } + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if (this.group != null) { @@ -135,17 +139,10 @@ public class PartyFragment extends BaseMainFragment { this.displayEditForm(); return true; case R.id.menu_guild_leave: - this.mAPIHelper.apiService.leaveGroup(this.group.id, new Callback() { - @Override - public void success(Void aVoid, Response response) { + this.apiHelper.apiService.leaveGroup(this.group.id).compose(apiHelper.configureApiCallObserver()) + .subscribe(group -> { getActivity().getSupportFragmentManager().beginTransaction().remove(PartyFragment.this).commit(); - } - - @Override - public void failure(RetrofitError error) { - - } - }); + }, throwable -> {}); return true; } @@ -190,16 +187,9 @@ public class PartyFragment extends BaseMainFragment { needsSaving = true; } if (needsSaving) { - this.mAPIHelper.apiService.updateGroup(this.group.id, this.group, new Callback() { - @Override - public void success(Void aVoid, Response response) { - } - - @Override - public void failure(RetrofitError error) { - - } - }); + this.apiHelper.apiService.updateGroup(this.group.id, this.group) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); this.groupInformationFragment.setGroup(group); } } @@ -224,16 +214,9 @@ public class PartyFragment extends BaseMainFragment { Collections.addAll(invites, userIDs); inviteData.put("uuids", invites); } - this.mAPIHelper.apiService.inviteToGroup(this.group.id, inviteData, new Callback() { - @Override - public void success(Void group, Response response) { - } - - @Override - public void failure(RetrofitError error) { - - } - }); + this.apiHelper.apiService.inviteToGroup(this.group.id, inviteData) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); } } } @@ -259,12 +242,12 @@ public class PartyFragment extends BaseMainFragment { switch (position) { case 0: { - fragment = groupInformationFragment = GroupInformationFragment.newInstance(group, user, mAPIHelper); + fragment = groupInformationFragment = GroupInformationFragment.newInstance(group, user, apiHelper); break; } case 1: { chatListFragment = new ChatListFragment(); - chatListFragment.configure(activity, "party", mAPIHelper, user, activity, false); + chatListFragment.configure(activity, "party", apiHelper, user, activity, false); fragment = chatListFragment; break; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.java index 6f408cc98..3dbaa94bc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.java @@ -1,5 +1,8 @@ package com.habitrpg.android.habitica.ui.fragments.social.party; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.BaseFragment; + import android.os.Bundle; import android.support.annotation.Nullable; import android.text.InputType; @@ -10,9 +13,6 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.fragments.BaseFragment; - import java.util.ArrayList; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java index fd2b85352..ba5395089 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java @@ -1,5 +1,9 @@ package com.habitrpg.android.habitica.ui.fragments.social.party; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; + import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; @@ -10,11 +14,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; - -import java.util.ArrayList; +import java.util.List; import butterknife.BindView; @@ -24,11 +24,11 @@ import butterknife.BindView; public class PartyMemberListFragment extends Fragment { private Context ctx; - private ArrayList members; + private List members; private PartyMemberRecyclerViewAdapter viewAdapter; - public void configure(Context ctx, ArrayList members) { + public void configure(Context ctx, List members) { this.ctx = ctx; this.members = members; @@ -62,7 +62,7 @@ public class PartyMemberListFragment extends Fragment { } } - public void setMemberList(ArrayList members) { + public void setMemberList(List members) { this.members = members; viewAdapter.setMemberList(members); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.java index c15ea399a..81bb293ed 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.java @@ -1,13 +1,5 @@ package com.habitrpg.android.habitica.ui.fragments.tasks; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand; import com.habitrpg.android.habitica.ui.DividerItemDecoration; @@ -17,6 +9,14 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import org.greenrobot.eventbus.EventBus; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + /** * TaskRecyclerViewFragment * - Creates the View only once @@ -90,6 +90,7 @@ public class TaskRecyclerViewFragment extends BaseFragment implements View.OnCli @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); mRecyclerView.setAdapter(mAdapter); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.java index 509fd0c13..9c72831e3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.java @@ -1,5 +1,46 @@ package com.habitrpg.android.habitica.ui.fragments.tasks; +import com.github.clans.fab.FloatingActionButton; +import com.github.clans.fab.FloatingActionMenu; +import com.habitrpg.android.habitica.ContentCache; +import com.habitrpg.android.habitica.HabiticaApplication; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; +import com.habitrpg.android.habitica.callbacks.TaskCreationCallback; +import com.habitrpg.android.habitica.callbacks.TaskScoringCallback; +import com.habitrpg.android.habitica.callbacks.TaskUpdateCallback; +import com.habitrpg.android.habitica.events.HabitScoreEvent; +import com.habitrpg.android.habitica.events.TaskSaveEvent; +import com.habitrpg.android.habitica.events.TaskTappedEvent; +import com.habitrpg.android.habitica.events.ToggledInnStateEvent; +import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand; +import com.habitrpg.android.habitica.events.commands.CreateTagCommand; +import com.habitrpg.android.habitica.events.commands.FilterTasksByTagsCommand; +import com.habitrpg.android.habitica.events.commands.TaskCheckedCommand; +import com.habitrpg.android.habitica.helpers.TagsHelper; +import com.habitrpg.android.habitica.ui.EditTextDrawer; +import com.habitrpg.android.habitica.ui.UiUtils; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.habitrpg.android.habitica.ui.activities.TaskFormActivity; +import com.habitrpg.android.habitica.ui.adapter.tasks.HabitItemRecyclerViewAdapter; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.habitrpg.android.habitica.ui.helpers.Debounce; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.Tag; +import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; +import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; +import com.mikepenz.materialdrawer.model.SectionDrawerItem; +import com.mikepenz.materialdrawer.model.SwitchDrawerItem; +import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.Select; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + import android.content.Context; import android.content.Intent; import android.os.AsyncTask; @@ -22,57 +63,11 @@ import android.widget.CompoundButton; import android.widget.FrameLayout; import android.widget.ImageView; -import com.github.clans.fab.FloatingActionButton; -import com.github.clans.fab.FloatingActionMenu; -import com.habitrpg.android.habitica.ContentCache; -import com.habitrpg.android.habitica.HabiticaApplication; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; -import com.habitrpg.android.habitica.callbacks.TaskCreationCallback; -import com.habitrpg.android.habitica.callbacks.TaskScoringCallback; -import com.habitrpg.android.habitica.callbacks.TaskUpdateCallback; -import com.habitrpg.android.habitica.events.HabitScoreEvent; -import com.habitrpg.android.habitica.events.TaskSaveEvent; -import com.habitrpg.android.habitica.events.TaskTappedEvent; -import com.habitrpg.android.habitica.events.ToggledInnStateEvent; -import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand; -import com.habitrpg.android.habitica.events.commands.CreateTagCommand; -import com.habitrpg.android.habitica.events.commands.FilterTasksByTagsCommand; -import com.habitrpg.android.habitica.events.commands.TaskCheckedCommand; -import com.habitrpg.android.habitica.helpers.TagsHelper; -import com.habitrpg.android.habitica.ui.EditTextDrawer; -import com.habitrpg.android.habitica.ui.UiUtils; -import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity; -import com.habitrpg.android.habitica.ui.activities.MainActivity; -import com.habitrpg.android.habitica.ui.activities.TaskFormActivity; -import com.habitrpg.android.habitica.ui.adapter.tasks.HabitItemRecyclerViewAdapter; -import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; -import com.habitrpg.android.habitica.ui.helpers.Debounce; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.Tag; -import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; -import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; -import com.mikepenz.materialdrawer.model.SectionDrawerItem; -import com.mikepenz.materialdrawer.model.SwitchDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - public class TasksFragment extends BaseMainFragment implements OnCheckedChangeListener { private static final int TASK_CREATED_RESULT = 1; @@ -111,7 +106,7 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi public void setActivity(MainActivity activity) { super.setActivity(activity); - contentCache = new ContentCache(mAPIHelper.apiService); + contentCache = new ContentCache(apiHelper.apiService); } @Override @@ -167,9 +162,6 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); switch (id) { @@ -196,8 +188,12 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi refreshItem.setActionView(iv); - if (mAPIHelper != null) { - mAPIHelper.retrieveUser(new HabitRPGUserCallback(activity)); + if (apiHelper != null) { + apiHelper.retrieveUser(true) + .subscribe( + new HabitRPGUserCallback(activity), + throwable -> stopAnimatingRefreshItem() + ); } } @@ -235,59 +231,52 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi callBack -> { // request buyable gear - if (mAPIHelper != null) { - mAPIHelper.apiService.getInventoryBuyableGear(new Callback>() { - @Override - public void success(List itemDatas, Response response) { + if (apiHelper != null) { + apiHelper.apiService.getInventoryBuyableGear() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(itemDatas -> { + // get itemdata list + ArrayList itemKeys = new ArrayList<>(); + for (ItemData item : itemDatas) { + itemKeys.add(item.key); + } + itemKeys.add("potion"); + if (user.getFlags().getArmoireEnabled()) + itemKeys.add("armoire"); - // get itemdata list - ArrayList itemKeys = new ArrayList<>(); - for (ItemData item : itemDatas) { - itemKeys.add(item.key); + contentCache.GetItemDataList(itemKeys, obj -> { + ArrayList buyableItems = new ArrayList<>(); + if (!isAdded()) { + return; } - itemKeys.add("potion"); - if (user.getFlags().getArmoireEnabled()) - itemKeys.add("armoire"); + for (ItemData item : obj) { + Task reward = new Task(); + reward.text = item.text; + reward.notes = item.notes; + reward.value = item.value; + reward.setType("reward"); + reward.specialTag = "item"; + reward.setId(item.key); - contentCache.GetItemDataList(itemKeys, obj -> { - ArrayList buyableItems = new ArrayList<>(); - if (!isAdded()) { - return; - } - for (ItemData item : obj) { - Task reward = new Task(); - reward.text = item.text; - reward.notes = item.notes; - reward.value = item.value; - reward.setType("reward"); - reward.specialTag = "item"; - reward.setId(item.key); - - if (item.key.equals("armoire")) { - if (user.getFlags().getArmoireEmpty()) { - reward.notes = getResources().getString(R.string.armoireNotesEmpty); - } else { - long gearCount = new Select().count() - .from(ItemData.class) - .where(Condition.CombinedCondition.begin(Condition.column("klass").eq("armoire")) - .and(Condition.column("owned").isNull()) - ).count(); - reward.notes = getResources().getString(R.string.armoireNotesFull, gearCount); - } + if (item.key.equals("armoire")) { + if (user.getFlags().getArmoireEmpty()) { + reward.notes = getResources().getString(R.string.armoireNotesEmpty); + } else { + long gearCount = new Select().count() + .from(ItemData.class) + .where(Condition.CombinedCondition.begin(Condition.column("klass").eq("armoire")) + .and(Condition.column("owned").isNull()) + ).count(); + reward.notes = getResources().getString(R.string.armoireNotesFull, gearCount); } - - buyableItems.add(reward); } - callBack.GotAdditionalItems(buyableItems); - }); - } + buyableItems.add(reward); + } - @Override - public void failure(RetrofitError error) { - - } - }); + callBack.GotAdditionalItems(buyableItems); + }); + }, throwable -> {}); } }); @@ -335,13 +324,7 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi public void updateUserData(HabitRPGUser user) { super.updateUserData(user); - if (refreshItem != null) { - View actionView = refreshItem.getActionView(); - if (actionView != null) { - actionView.clearAnimation(); - } - refreshItem.setActionView(null); - } + stopAnimatingRefreshItem(); if (this.user != null) { fillTagFilterDrawer(user.getTags()); @@ -385,24 +368,20 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi UiUtils.dismissKeyboard(activity); final Tag t = new Tag(); t.setName(event.tagName); - if (mAPIHelper != null) { - mAPIHelper.apiService.createTag(t, new Callback>() { - @Override - public void success(List tags, Response response) { - // Since we get a list of all tags, we just save them all - for (Tag onlineTag : tags) { - onlineTag.user_id = user.getId(); - onlineTag.async().save(); - } + if (apiHelper != null) { + apiHelper.apiService.createTag(t) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(tags -> { + // Since we get a list of all tags, we just save them all + for (Tag onlineTag : tags) { + onlineTag.user_id = user.getId(); + onlineTag.async().save(); + } - fillTagFilterDrawer(tags); - } - - @Override - public void failure(RetrofitError error) { - UiUtils.showSnackbar(activity, activity.getFloatingMenuWrapper(), "Error: " + error.getMessage(), UiUtils.SnackbarDisplayType.FAILURE); - } - }); + fillTagFilterDrawer(tags); + }, throwable -> { + UiUtils.showSnackbar(activity, activity.getFloatingMenuWrapper(), "Error: " + throwable.getMessage(), UiUtils.SnackbarDisplayType.FAILURE); + }); } } @@ -434,12 +413,16 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi @Subscribe public void onEvent(TaskCheckedCommand event) { - mAPIHelper.updateTaskDirection(event.Task.getId(), event.Task.getCompleted() ? TaskDirection.down : TaskDirection.up, new TaskScoringCallback(activity, event.Task.getId())); + apiHelper.apiService.postTaskDirection(event.Task.getId(), (event.Task.getCompleted() ? TaskDirection.down : TaskDirection.up).toString()) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new TaskScoringCallback(activity, event.Task.getId()), throwable -> {}); } @Subscribe public void onEvent(HabitScoreEvent event) { - mAPIHelper.updateTaskDirection(event.Habit.getId(), event.Up ? TaskDirection.up : TaskDirection.down, new TaskScoringCallback(activity, event.Habit.getId())); + apiHelper.apiService.postTaskDirection(event.Habit.getId(), (event.Up ? TaskDirection.up : TaskDirection.down).toString()) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new TaskScoringCallback(activity, event.Habit.getId()), throwable -> {}); } @Subscribe @@ -451,11 +434,15 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi public void onEvent(final TaskSaveEvent event) { Task task = event.task; if (event.created) { - this.mAPIHelper.createNewTask(task, new TaskCreationCallback()); + this.apiHelper.apiService.createItem(task) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new TaskCreationCallback(), throwable -> {}); updateTags(event.task.getTags()); floatingMenu.close(true); } else { - this.mAPIHelper.updateTask(task, new TaskUpdateCallback()); + this.apiHelper.apiService.updateTask(task.getId(), task) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new TaskUpdateCallback(), throwable -> {}); } } @@ -567,4 +554,14 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi } return this.tagIds; } + + public void stopAnimatingRefreshItem() { + if (refreshItem != null) { + View actionView = refreshItem.getActionView(); + if (actionView != null) { + actionView.clearAnimation(); + } + refreshItem.setActionView(null); + } + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.java index 6585cfde0..c4992433e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.java @@ -1,5 +1,10 @@ package com.habitrpg.android.habitica.ui.helpers; +import com.github.data5tream.emojilib.EmojiTextView; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.databinding.ValueBarBinding; +import com.squareup.picasso.Picasso; + import android.databinding.BindingAdapter; import android.databinding.DataBindingUtil; import android.graphics.PorterDuff; @@ -17,11 +22,6 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import com.github.data5tream.emojilib.EmojiTextView; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.databinding.ValueBarBinding; -import com.squareup.picasso.Picasso; - public class DataBindingUtils { @BindingAdapter("bind:imageName") diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/EmojiKeyboard.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/EmojiKeyboard.java index 14c421a25..3ed7e5117 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/EmojiKeyboard.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/EmojiKeyboard.java @@ -1,18 +1,15 @@ package com.habitrpg.android.habitica.ui.helpers; +import com.github.data5tream.emojilib.EmojiEditText; +import com.github.data5tream.emojilib.EmojiPopup; +import com.habitrpg.android.habitica.R; + import android.content.Context; import android.support.v4.content.ContextCompat; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.ImageButton; -import android.widget.PopupWindow; - -import com.github.data5tream.emojilib.EmojiEditText; -import com.github.data5tream.emojilib.EmojiGridView; -import com.github.data5tream.emojilib.EmojiPopup; -import com.github.data5tream.emojilib.emoji.Emojicon; -import com.habitrpg.android.habitica.R; /** * @author data5tream diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/FloatingActionMenuBehavior.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/FloatingActionMenuBehavior.java index e9dc24852..906c0d1d0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/FloatingActionMenuBehavior.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/FloatingActionMenuBehavior.java @@ -2,6 +2,9 @@ package com.habitrpg.android.habitica.ui.helpers; // https://gist.github.com/lodlock/e3cd12130bad70a098db +import com.github.clans.fab.FloatingActionMenu; +import com.habitrpg.android.habitica.R; + import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; @@ -12,10 +15,6 @@ import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; -import android.widget.FrameLayout; - -import com.github.clans.fab.FloatingActionMenu; -import com.habitrpg.android.habitica.R; import java.util.List; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarginDecoration.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarginDecoration.java index 56d65953e..57f56f28b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarginDecoration.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarginDecoration.java @@ -1,12 +1,12 @@ package com.habitrpg.android.habitica.ui.helpers; +import com.habitrpg.android.habitica.R; + import android.content.Context; import android.graphics.Rect; import android.support.v7.widget.RecyclerView; import android.view.View; -import com.habitrpg.android.habitica.R; - public class MarginDecoration extends RecyclerView.ItemDecoration { private int margin; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarkdownParser.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarkdownParser.java index 174df89f7..f658c05b0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarkdownParser.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarkdownParser.java @@ -1,10 +1,10 @@ package com.habitrpg.android.habitica.ui.helpers; -import android.text.Html; - import com.commonsware.cwac.anddown.AndDown; import com.github.data5tream.emojilib.EmojiParser; +import android.text.Html; + /** * @author data5tream */ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenu.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenu.java index 1b9415574..58d34ee58 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenu.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenu.java @@ -1,13 +1,13 @@ package com.habitrpg.android.habitica.ui.menu; +import com.habitrpg.android.habitica.R; + import android.content.Context; import android.support.design.widget.BottomSheetDialog; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; -import com.habitrpg.android.habitica.R; - public class BottomSheetMenu extends BottomSheetDialog implements View.OnClickListener { private LayoutInflater inflater; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenuItem.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenuItem.java index 228d7f2d7..0785318d3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenuItem.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenuItem.java @@ -1,5 +1,7 @@ package com.habitrpg.android.habitica.ui.menu; +import com.habitrpg.android.habitica.R; + import android.content.Context; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; @@ -8,8 +10,6 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.R; - public class BottomSheetMenuItem { private String title; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/userpicture/UserPicture.java b/Habitica/src/main/java/com/habitrpg/android/habitica/userpicture/UserPicture.java index 26f26b768..a1e3a9b81 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/userpicture/UserPicture.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/userpicture/UserPicture.java @@ -1,5 +1,9 @@ package com.habitrpg.android.habitica.userpicture; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; + import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -11,11 +15,6 @@ import android.net.Uri; import android.util.Log; import android.widget.ImageView; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.squareup.picasso.Picasso; -import com.squareup.picasso.Target; - -import java.net.URI; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/SimpleWidget.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/SimpleWidget.java index 83e48a1db..4c0f07076 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/SimpleWidget.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/SimpleWidget.java @@ -1,5 +1,7 @@ package com.habitrpg.android.habitica.widget; +import com.habitrpg.android.habitica.R; + import android.annotation.TargetApi; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; @@ -12,8 +14,6 @@ import android.util.Log; import android.view.View; import android.widget.RemoteViews; -import com.habitrpg.android.habitica.R; - /** * Define a simple custom widget for the habitrpg client * Created by Mickael on 31/10/13. diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/UpdateWidgetService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/UpdateWidgetService.java index 6463f880c..fd100c5c1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/UpdateWidgetService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/UpdateWidgetService.java @@ -1,5 +1,13 @@ package com.habitrpg.android.habitica.widget; +import com.habitrpg.android.habitica.APIHelper; +import com.habitrpg.android.habitica.HostConfig; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.habitrpg.android.habitica.ui.activities.PrefsActivity; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; + import android.app.PendingIntent; import android.app.Service; import android.appwidget.AppWidgetManager; @@ -9,14 +17,6 @@ import android.os.IBinder; import android.util.Log; import android.widget.RemoteViews; -import com.habitrpg.android.habitica.APIHelper; -import com.habitrpg.android.habitica.HostConfig; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; -import com.habitrpg.android.habitica.ui.activities.MainActivity; -import com.habitrpg.android.habitica.ui.activities.PrefsActivity; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; - /** * The service that should update the simple widget * @@ -43,7 +43,7 @@ public class UpdateWidgetService extends Service implements HabitRPGUserCallback HostConfig hc = PrefsActivity.fromContext(this); if (hc != null && hc.getApi() != null && !hc.getApi().equals("") && hc.getUser() != null && !hc.getUser().equals("")) { this.apiHelper = new APIHelper(hc); - apiHelper.retrieveUser(new HabitRPGUserCallback(this)); + apiHelper.retrieveUser(true).subscribe(new HabitRPGUserCallback(this)); for (int widgetId : allWidgetIds) { RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.simple_widget); appWidgetManager.updateAppWidget(widgetId, remoteViews); @@ -116,9 +116,4 @@ public class UpdateWidgetService extends Service implements HabitRPGUserCallback this.updateData(user, appWidgetManager); } - - @Override - public void onUserFail() { - //TODO - } } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java index ab4de9ae1..bf6d1c6bf 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java @@ -6,6 +6,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.Items; import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult; +import com.magicmicky.habitrpgwrapper.lib.models.Quest; import com.magicmicky.habitrpgwrapper.lib.models.Status; import com.magicmicky.habitrpgwrapper.lib.models.Tag; import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData; @@ -17,175 +18,185 @@ import com.magicmicky.habitrpgwrapper.lib.models.responses.FeedResponse; import com.magicmicky.habitrpgwrapper.lib.models.responses.UnlockResponse; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; -import retrofit.Callback; -import retrofit.http.Body; -import retrofit.http.DELETE; -import retrofit.http.GET; -import retrofit.http.POST; -import retrofit.http.PUT; -import retrofit.http.Path; -import retrofit.http.Query; +import retrofit2.http.Body; +import retrofit2.http.DELETE; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.PUT; +import retrofit2.http.Path; +import retrofit2.http.Query; +import rx.Observable; + /** * Created by MagicMicky on 10/06/2014. */ public interface ApiService { - @GET("/status") - void getStatus(Callback statusCallback); + @GET("status") + Observable getStatus(); - @GET("/content") - void getContent(Callback contentResultCallback); + @GET("content") + Observable getContent(); /* user API */ - @GET("/user/") - void getUser(Callback habitRPGUserCallback); + @GET("user/") + Observable getUser(); - @PUT("/user/") - void updateUser(@Body Map updateDictionary, Callback habitRPGUserCallback); + @PUT("user/") + Observable updateUser(@Body Map updateDictionary); - @GET("/user/inventory/buy") - void getInventoryBuyableGear(Callback> buyableGearCallback); + @GET("user/inventory/buy") + Observable> getInventoryBuyableGear(); - @POST("/user/inventory/equip/{type}/{key}") - void equipItem(@Path("type") String type, @Path("key") String itemKey, Callback gearCallback); + @POST("user/equip/{type}/{key}") + Observable equipItem(@Path("type") String type, @Path("key") String itemKey); - @POST("/user/inventory/buy/{key}") - void buyItem(@Path("key") String itemKey, Callback voidCallback); + @POST("user/buy/{key}") + Observable buyItem(@Path("key") String itemKey); - @POST("/user/inventory/sell/{type}/{key}") - void sellItem(@Path("type") String itemType, @Path("key") String itemKey, Callback voidCallback); + @POST("user/sell/{type}/{key}") + Observable sellItem(@Path("type") String itemType, @Path("key") String itemKey); - @POST("/user/inventory/feed/{pet}/{food}") - void feedPet(@Path("pet") String petKey, @Path("food") String foodKey, Callback feedingCallback); + @POST("user/feed/{pet}/{food}") + Observable feedPet(@Path("pet") String petKey, @Path("food") String foodKey); - @POST("/user/inventory/hatch/{egg}/{hatchingPotion}") - void hatchPet(@Path("egg") String eggKey, @Path("hatchingPotion") String hatchingPotionKey, Callback itemsCallback); + @POST("user/hatch/{egg}/{hatchingPotion}") + Observable hatchPet(@Path("egg") String eggKey, @Path("hatchingPotion") String hatchingPotionKey); - @POST("/user/unlock") - void unlockPath(@Query("path") String path, Callback unlockResponseCallback); + @GET("tasks/user") + Observable getTasks(); - @GET("/user/tasks/{id}") - void getTask(@Path("id") String id, Callback habitItemCallback); + @POST("user/unlock") + Observable unlockPath(@Query("path") String path); - @POST("/user/tasks/{id}/{direction}") - void postTaskDirection(@Path("id") String id, @Path("direction") String direction, Callback taskDirectionCallback); + @GET("tasks/{id}") + Observable getTask(@Path("id") String id); - @POST("/user/tasks") - void createItem(@Body Task item, Callback habitItemCallback); + @POST("tasks/{id}/score/{direction}") + Observable postTaskDirection(@Path("id") String id, @Path("direction") String direction); + + @POST("tasks/user") + Observable createItem(@Body Task item); + + @PUT("tasks/{id}") + Observable updateTask(@Path("id") String id, @Body Task item); + + @DELETE("tasks/{id}") + Observable deleteTask(@Path("id") String id); - @PUT("/user/tasks/{id}") - void updateTask(@Path("id") String id, @Body Task item, Callback habitItemCallback); + @POST("tags") + Observable> createTag(@Body Tag tag); + + @PUT("tags/{id}") + Observable updateTag(@Path("id") String id, @Body Tag tag); + + @DELETE("tags/{id}") + Observable deleteTag(@Path("id") String id); - @DELETE("/user/tasks/{id}") - void deleteTask(@Path("id") String id, Callback voidCallback); + @POST("user/auth/local/register") + Observable registerUser(@Body UserAuth auth); + + @POST("user/auth/local/login") + Observable connectLocal(@Body UserAuth auth); + + @POST("user/auth/social") + Observable connectSocial(@Body UserAuthSocial auth); - @POST("/user/tags") - void createTag(@Body Tag tag, Callback> multiTagCallback); + @POST("user/sleep") + Observable sleep(); + @POST("user/revive") + Observable revive(); - @PUT("/user/tags/{id}") - void updateTag(@Path("id") String id, @Body Tag tag, Callback multiTagCallback); + @POST("user/class/cast/{skill}") + Observable useSkill(@Path("skill") String skillName, @Query("targetType") String targetType, @Query("targetId") String targetId); + @POST("user/class/cast/{skill}") + Observable useSkill(@Path("skill") String skillName, @Query("targetType") String targetType); - @DELETE("/user/tags/{id}") - void deleteTag(@Path("id") String id, Callback voidCallback); + @POST("user/change-class") + Observable changeClass(); - @POST("/register") - void registerUser(@Body UserAuth auth, Callback callback); + @POST("user/change-class") + Observable changeClass(@Query("class") String className); - @POST("/user/auth/local") - void connectLocal(@Body UserAuth auth, Callback callback); - - @POST("/user/auth/social") - void connectSocial(@Body UserAuthSocial auth, Callback callback); - - @POST("/user/sleep") - void sleep(Callback voidCallback); - - @POST("/user/revive") - void revive(Callback habitRPGUserCallback); - - @POST("/user/class/cast/{skill}") - void useSkill(@Path("skill") String skillName, @Query("targetType") String targetType, @Query("targetId") String targetId, Callback habitRPGUserCallback); - - @POST("/user/class/cast/{skill}") - void useSkill(@Path("skill") String skillName, @Query("targetType") String targetType, Callback habitRPGUserCallback); - - @POST("/user/class/change") - void changeClass(Callback cb); - - @POST("/user/class/change") - void changeClass(@Query("class") String className, Callback cb); + @POST("user/disable-classes") + Observable disableClasses(); /* Group API */ - @GET("/groups") - void listGroups(@Query("type") String type, Callback> cb); + @GET("groups") + Observable> listGroups(@Query("type") String type); - @GET("/groups/{gid}") - void getGroup(@Path("gid") String groupId, Callback cb); + @GET("groups/{gid}") + Observable getGroup(@Path("gid") String groupId); - @POST("/groups/{id}") - void updateGroup(@Path("id") String id, @Body Group item, Callback habitItemCallback); + @POST("groups/{id}") + Observable updateGroup(@Path("id") String id, @Body Group item); - @GET("/groups/{gid}/chat") - void listGroupChat(@Path("gid") String groupId, Callback> cb); + @GET("groups/{gid}/chat") + Observable> listGroupChat(@Path("gid") String groupId); - @POST("/groups/{gid}/join") - void joinGroup(@Path("gid") String groupId, Callback cb); + @POST("groups/{gid}/join") + Observable joinGroup(@Path("gid") String groupId); - @POST("/groups/{gid}/leave") - void leaveGroup(@Path("gid") String groupId, Callback cb); + @POST("groups/{gid}/leave") + Observable leaveGroup(@Path("gid") String groupId); - @POST("/groups/{gid}/chat") - void postGroupChat(@Path("gid") String groupId, @Query("message") String message, Callback cb); + @POST("groups/{gid}/chat") + Observable postGroupChat(@Path("gid") String groupId, @Body HashMap message); - @DELETE("/groups/{gid}/chat/{messageId}") - void deleteMessage(@Path("gid") String groupId, @Path("messageId") String messageId, Callback cb); + @DELETE("groups/{gid}/chat/{messageId}") + Observable deleteMessage(@Path("gid") String groupId, @Path("messageId") String messageId); + + @GET("groups/{gid}/members") + Observable> getGroupMembers(@Path("gid") String groupId, @Query("includeAllPublicFields") Boolean includeAllPublicFields); + + @GET("groups/{gid}/members") + Observable> getGroupMembers(@Path("gid") String groupId, @Query("includeAllPublicFields") Boolean includeAllPublicFields, @Query("lastId") String lastId); // Like returns the full chat list - @POST("/groups/{gid}/chat/{mid}/like") - void likeMessage(@Path("gid") String groupId, @Path("mid") String mid, Callback> cb); + @POST("groups/{gid}/chat/{mid}/like") + Observable> likeMessage(@Path("gid") String groupId, @Path("mid") String mid); - @POST("/groups/{gid}/chat/{mid}/flag") - void flagMessage(@Path("gid") String groupId, @Path("mid") String mid, Callback cb); + @POST("groups/{gid}/chat/{mid}/flag") + Observable flagMessage(@Path("gid") String groupId, @Path("mid") String mid); - @POST("/groups/{gid}/chat/seen") - void seenMessages(@Path("gid") String groupId, Callback cb); + @POST("groups/{gid}/chat/seen") + Observable seenMessages(@Path("gid") String groupId); - @POST("/groups/{gid}/invite") - void inviteToGroup(@Path("gid") String groupId, @Body Map inviteData, Callback groupCallback); + @POST("groups/{gid}/invite") + Observable inviteToGroup(@Path("gid") String groupId, @Body Map inviteData); - @POST("/user/batch-update") - void batchOperation(@Body List> operations, Callback cb); + @POST("groups/{gid}/quests/accept") + Observable acceptQuest(@Path("gid") String groupId); - @POST("/groups/{gid}/questAccept") - void acceptQuest(@Path("gid") String groupId, Callback cb); + @POST("groups/{gid}/quests/reject") + Observable rejectQuest(@Path("gid") String groupId); - @POST("/groups/{gid}/questReject") - void rejectQuest(@Path("gid") String groupId, Callback cb); + @POST("groups/{gid}/quests/cancel") + Observable cancelQuest(@Path("gid") String groupId); - @POST("/groups/{gid}/questCancel") - void cancelQuest(@Path("gid") String groupId, Callback cb); + @POST("groups/{gid}/quests/force-start") + Observable forceStartQuest(@Path("gid") String groupId, @Body Group group); - @POST("/groups/{gid}/questAccept?force=true") - void forceStartQuest(@Path("gid") String groupId, @Body Group group, Callback cb); + @POST("groups/{gid}/quests/invite/{questKey}") + Observable inviteToQuest(@Path("gid") String groupId, @Path("questKey") String questKey); - @POST("/groups/{gid}/questAccept") - void inviteToQuest(@Path("gid") String groupId, @Query("key") String questKey, Callback cb); - @POST("/groups/{gid}/questAbort") - void abortQuest(@Path("gid") String groupId, Callback cb); + @POST("groups/{gid}/quests/abort") + Observable abortQuest(@Path("gid") String groupId); - @POST("/groups/{gid}/questLeave") - void leaveQuest(@Path("gid") String groupId, Callback cb); + @POST("groups/{gid}/quests/leave") + Observable leaveQuest(@Path("gid") String groupId); } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/InAppPurchasesApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/InAppPurchasesApiService.java index fe999f70f..9b1bff19f 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/InAppPurchasesApiService.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/InAppPurchasesApiService.java @@ -3,14 +3,16 @@ package com.magicmicky.habitrpgwrapper.lib.api; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult; -import retrofit.http.Body; -import retrofit.http.POST; -import retrofit.http.Query; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.POST; +import retrofit2.http.Query; + /** * Created by Negue on 27.11.2015. */ public interface InAppPurchasesApiService { @POST("/iap/android/verify") - PurchaseValidationResult validatePurchase(@Query("_id") String id, @Query("apiToken") String apiToken, @Body PurchaseValidationRequest request); + Call validatePurchase(@Query("_id") String id, @Query("apiToken") String apiToken, @Body PurchaseValidationRequest request); } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/MaintenanceApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/MaintenanceApiService.java index f8e51a2cb..fba1dd32d 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/MaintenanceApiService.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/MaintenanceApiService.java @@ -2,15 +2,15 @@ package com.magicmicky.habitrpgwrapper.lib.api; import com.magicmicky.habitrpgwrapper.lib.models.responses.MaintenanceResponse; -import retrofit.Callback; -import retrofit.http.GET; +import retrofit2.http.GET; +import rx.Observable; public interface MaintenanceApiService { @GET("/maintenance-android.json") - void getMaintenanceStatus(Callback statusCallback); + Observable getMaintenanceStatus(); @GET("/deprecation-android.json") - void getDepricationStatus(Callback statusCallback); + Observable getDepricationStatus(); } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/Server.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/Server.java index 319c563bc..16f62ebf8 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/Server.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/Server.java @@ -11,15 +11,15 @@ public class Server { this(addr, true); } - public Server(String addr, boolean attachPrefix) + public Server(String addr, boolean attachSuffix) { - if(attachPrefix){ - if(addr.endsWith("/api/v2") || addr.endsWith("/api/v2/")) + if(attachSuffix){ + if(addr.endsWith("/api/v3") || addr.endsWith("/api/v3/")) this.addr=addr; else if(addr.endsWith("/")) - this.addr=addr + "api/v2"; + this.addr=addr + "api/v3/"; else - this.addr = addr + "/api/v2"; + this.addr = addr + "/api/v3/"; } else { diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/TypeAdapter/TagsAdapter.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/TypeAdapter/TagsAdapter.java deleted file mode 100644 index 2787aac39..000000000 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/TypeAdapter/TagsAdapter.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.magicmicky.habitrpgwrapper.lib.api.TypeAdapter; - -import com.google.gson.TypeAdapter; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; -import com.magicmicky.habitrpgwrapper.lib.models.Tag; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; -import com.raizlabs.android.dbflow.sql.language.Select; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * Created by magicmicky on 15/05/15. - */ -public class TagsAdapter extends TypeAdapter>{ - - @Override - public void write(JsonWriter out, List value) throws IOException { - out.beginObject(); - if (value != null) { - for(TaskTag tag : value) { - out.name(tag.getTag().getId()); - out.value(true); - } - } - out.endObject(); - } - - private boolean alreadyContainsTag(List list, String idToCheck) - { - for(TaskTag t : list) - { - if(t.getTag().getId().equals(idToCheck)) { - return true; - } - } - - return false; - } - - @Override - public List read(JsonReader in) throws IOException { - List tags = new ArrayList<>(); - List allTags = new Select() - .from(Tag.class) - .queryList(); - boolean isClosed=false; - do { - switch(in.peek()) { - case BEGIN_OBJECT: - in.beginObject(); - break; - case NAME: - String tagId = in.nextName(); - - if(in.nextBoolean()) { - TaskTag taskTag = new TaskTag(); - for (Tag tag : allTags) { - if (tag.getId().equals(tagId)) { - taskTag.setTag(tag); - - if(!alreadyContainsTag(tags, tagId)) - { - tags.add(taskTag); - } - - break; - } - } - } - break; - case END_OBJECT: - in.endObject(); - isClosed=true; - break; - case BEGIN_ARRAY: - in.beginArray(); - break; - - case END_ARRAY: - in.endArray(); - isClosed = true; - break; - default: - } - } while(!isClosed); - return tags; - } -} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java index 97547d114..81343289d 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.google.gson.annotations.SerializedName; + import com.habitrpg.android.habitica.HabitDatabase; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ForeignKey; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/BasicStats.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/BasicStats.java index 4deaa0020..2e7b30d31 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/BasicStats.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/BasicStats.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.google.gson.annotations.SerializedName; + import com.habitrpg.android.habitica.HabitDatabase; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.NotNull; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ChatMessage.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ChatMessage.java index 1fe5f0c43..f1a23f9ff 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ChatMessage.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ChatMessage.java @@ -1,9 +1,9 @@ package com.magicmicky.habitrpgwrapper.lib.models; -import android.content.res.Resources; - import com.habitrpg.android.habitica.R; +import android.content.res.Resources; + import java.util.Date; import java.util.HashMap; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Gear.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Gear.java index f4dedf584..3eb097019 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Gear.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Gear.java @@ -1,7 +1,6 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.habitrpg.android.habitica.HabitDatabase; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ForeignKey; import com.raizlabs.android.dbflow.annotation.ForeignKeyReference; @@ -11,7 +10,6 @@ import com.raizlabs.android.dbflow.annotation.Table; import com.raizlabs.android.dbflow.structure.BaseModel; import java.util.HashMap; -import java.util.List; /** * Created by viirus on 20/07/15. diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java index f4446876d..3ed3fbb7b 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java @@ -1,9 +1,10 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.google.gson.annotations.SerializedName; + import com.raizlabs.android.dbflow.structure.BaseModel; -import java.util.ArrayList; +import java.util.List; /** * Created by Negue on 16.09.2015. @@ -33,9 +34,9 @@ public class Group extends BaseModel { public String privacy; - public ArrayList chat; + public List chat; - public ArrayList members; + public List members; public int challengeCount; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java index b37ded90b..94c372b91 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.google.gson.annotations.SerializedName; + import com.habitrpg.android.habitica.HabitDatabase; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.raizlabs.android.dbflow.annotation.Column; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java index 9f0c56514..d99f77354 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java @@ -1,26 +1,16 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.habitrpg.android.habitica.HabitDatabase; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; -import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ForeignKey; import com.raizlabs.android.dbflow.annotation.ForeignKeyReference; import com.raizlabs.android.dbflow.annotation.NotNull; import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import com.raizlabs.android.dbflow.structure.BaseModel; -import java.util.ArrayList; import java.util.Date; import java.util.HashMap; -import java.util.List; /** * Created by MagicMicky on 16/03/14. diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Outfit.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Outfit.java index 1fef5a02e..ff92c63e7 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Outfit.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Outfit.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.google.gson.annotations.SerializedName; + import com.habitrpg.android.habitica.HabitDatabase; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.NotNull; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PlayerMinStats.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PlayerMinStats.java index 67ce8052b..9871aa16d 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PlayerMinStats.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PlayerMinStats.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.google.gson.annotations.SerializedName; + import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ForeignKey; import com.raizlabs.android.dbflow.annotation.ForeignKeyReference; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/UserParty.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/UserParty.java index b852fa8f5..9d8384661 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/UserParty.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/UserParty.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.google.gson.annotations.SerializedName; + import com.habitrpg.android.habitica.HabitDatabase; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ForeignKey; @@ -26,7 +27,8 @@ public class UserParty extends BaseModel { private Quest quest; @Column - private String order;//Order to display ppl + @SerializedName("order") + private String partyOrder;//Order to display ppl @Column private String orderAscending;//Order type @@ -35,22 +37,28 @@ public class UserParty extends BaseModel { } - public UserParty(String id, Quest quest, String order, String orderAscending) { + public UserParty(String id, Quest quest, String partyOrder, String orderAscending) { this.id = id; this.quest = quest; - this.order = order; + this.partyOrder = partyOrder; this.orderAscending = orderAscending; } - - public String getOrder() { - return order; + public String getId() { + return id; } - public void setOrder(String order) { - this.order = order; + public void setId(String id) { + this.id = id; } + public String getPartyOrder() { + return partyOrder; + } + + public void setPartyOrder(String partyOrder) { + this.partyOrder = partyOrder; + } public String getOrderAscending() { return orderAscending; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Item.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Item.java index d5b13d133..92ed5789a 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Item.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Item.java @@ -1,9 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models.inventory; -import com.habitrpg.android.habitica.HabitDatabase; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.PrimaryKey; -import com.raizlabs.android.dbflow.annotation.Table; import com.raizlabs.android.dbflow.structure.BaseModel; public abstract class Item extends BaseModel { diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Mount.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Mount.java index d81bd0bf2..a9033f541 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Mount.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Mount.java @@ -2,9 +2,7 @@ package com.magicmicky.habitrpgwrapper.lib.models.inventory; import com.habitrpg.android.habitica.HabitDatabase; import com.raizlabs.android.dbflow.annotation.Column; -import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; -import com.raizlabs.android.dbflow.structure.BaseModel; @Table(databaseName = HabitDatabase.NAME) public class Mount extends Animal { diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Pet.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Pet.java index 0c91a5a07..827490669 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Pet.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Pet.java @@ -2,9 +2,7 @@ package com.magicmicky.habitrpgwrapper.lib.models.inventory; import com.habitrpg.android.habitica.HabitDatabase; import com.raizlabs.android.dbflow.annotation.Column; -import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; -import com.raizlabs.android.dbflow.structure.BaseModel; @Table(databaseName = HabitDatabase.NAME) public class Pet extends Animal { diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/ItemData.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/ItemData.java index 08d7c633a..a97da6bf4 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/ItemData.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/ItemData.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models.tasks; import com.google.gson.annotations.SerializedName; + import com.habitrpg.android.habitica.HabitDatabase; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.PrimaryKey; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java index e3d93cd13..bd91441cd 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models.tasks; import com.google.gson.annotations.SerializedName; + import com.habitrpg.android.habitica.HabitDatabase; import com.habitrpg.android.habitica.R; import com.raizlabs.android.dbflow.annotation.Column; @@ -42,9 +43,11 @@ public class Task extends BaseModel { @Column @PrimaryKey @NotNull + @SerializedName("_id") String id; @Column + @SerializedName("userId") public String user_id; @Column diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/TaskList.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/TaskList.java new file mode 100644 index 000000000..d7c05b0ad --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/TaskList.java @@ -0,0 +1,12 @@ +package com.magicmicky.habitrpgwrapper.lib.models.tasks; + +import java.util.List; + +public class TaskList { + + public List habits; + public List dailies; + public List todos; + public List rewards; + +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ChatMessageDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ChatMessageDeserializer.java index 8c0bf7602..e33e3f2f6 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ChatMessageDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ChatMessageDeserializer.java @@ -6,10 +6,10 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; + import com.magicmicky.habitrpgwrapper.lib.models.Backer; import com.magicmicky.habitrpgwrapper.lib.models.ChatMessage; import com.magicmicky.habitrpgwrapper.lib.models.Contributor; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; import java.lang.reflect.Type; import java.util.HashMap; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ChecklistItemSerializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ChecklistItemSerializer.java index 4f456e50e..e1e1ecaa9 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ChecklistItemSerializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ChecklistItemSerializer.java @@ -4,6 +4,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; + import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; import java.lang.reflect.Type; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ContentDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ContentDeserializer.java index 6ba6d239c..05242229c 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ContentDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ContentDeserializer.java @@ -6,6 +6,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; + import com.magicmicky.habitrpgwrapper.lib.models.ContentGear; import com.magicmicky.habitrpgwrapper.lib.models.ContentResult; import com.magicmicky.habitrpgwrapper.lib.models.Customization; @@ -41,6 +42,10 @@ public class ContentDeserializer implements JsonDeserializer { result.armoire = context.deserialize(object.get("armoire"), ItemData.class); result.gear = context.deserialize(object.get("gear"), ContentGear.class); + items.add(result.potion); + items.add(result.armoire); + items.addAll(result.gear.flat); + result.quests = context.deserialize(object.get("quests"), new TypeToken>() {}.getType()); result.eggs = context.deserialize(object.get("eggs"), new TypeToken>() {}.getType()); result.food = context.deserialize(object.get("food"), new TypeToken>() {}.getType()); @@ -116,7 +121,6 @@ public class ContentDeserializer implements JsonDeserializer { items.add(mount); } - result.spells = context.deserialize(object.get("spells"), new TypeToken>() {}.getType()); result.appearances = context.deserialize(object.get("appearances"), new TypeToken>() {}.getType()); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/CustomizationDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/CustomizationDeserializer.java index 57b7d5869..6edb2152e 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/CustomizationDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/CustomizationDeserializer.java @@ -1,19 +1,17 @@ package com.magicmicky.habitrpgwrapper.lib.utils; -import android.annotation.SuppressLint; - import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.Customization; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.Select; +import android.annotation.SuppressLint; + import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.ArrayList; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/EggListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/EggListDeserializer.java index 3178aae28..584b1b1e9 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/EggListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/EggListDeserializer.java @@ -5,10 +5,8 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import com.raizlabs.android.dbflow.sql.language.Select; import java.lang.reflect.Type; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FAQArticleListDeserilializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FAQArticleListDeserilializer.java index 9a6d9922c..830903107 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FAQArticleListDeserilializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FAQArticleListDeserilializer.java @@ -5,10 +5,8 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import java.lang.reflect.Type; import java.util.ArrayList; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FeedResponseDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FeedResponseDeserializer.java new file mode 100644 index 000000000..4fdce5bd6 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FeedResponseDeserializer.java @@ -0,0 +1,19 @@ +package com.magicmicky.habitrpgwrapper.lib.utils; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +import com.magicmicky.habitrpgwrapper.lib.models.responses.FeedResponse; + +import java.lang.reflect.Type; + +public class FeedResponseDeserializer implements JsonDeserializer { + @Override + public FeedResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + FeedResponse response = new FeedResponse(); + response.value = json.getAsInt(); + return response; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FoodListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FoodListDeserializer.java index f5611b21e..f099d6e26 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FoodListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FoodListDeserializer.java @@ -5,10 +5,8 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import com.raizlabs.android.dbflow.sql.language.Select; import java.lang.reflect.Type; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/GroupSerialization.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/GroupSerialization.java index dca63b82a..2af4bcf93 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/GroupSerialization.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/GroupSerialization.java @@ -9,6 +9,7 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.google.gson.reflect.TypeToken; + import com.magicmicky.habitrpgwrapper.lib.models.ChatMessage; import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/HatchingPotionListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/HatchingPotionListDeserializer.java index 301a18a3e..d9443e4bc 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/HatchingPotionListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/HatchingPotionListDeserializer.java @@ -5,10 +5,8 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import com.raizlabs.android.dbflow.sql.language.Select; import java.lang.reflect.Type; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ItemDataListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ItemDataListDeserializer.java index fd477d59a..00eb235e1 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ItemDataListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ItemDataListDeserializer.java @@ -5,10 +5,8 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import com.raizlabs.android.dbflow.sql.language.Select; import java.lang.reflect.Type; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/MountListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/MountListDeserializer.java index c889dd956..a65af40a3 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/MountListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/MountListDeserializer.java @@ -4,16 +4,11 @@ import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; public class MountListDeserializer implements JsonDeserializer> { diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PetListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PetListDeserializer.java index 667af1775..4b07cd61e 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PetListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PetListDeserializer.java @@ -3,19 +3,12 @@ package com.magicmicky.habitrpgwrapper.lib.utils; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import com.google.gson.JsonParseException; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; + import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; -import com.raizlabs.android.dbflow.sql.language.Select; import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; public class PetListDeserializer implements JsonDeserializer> { diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PurchasedDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PurchasedDeserializer.java index 428b90062..047c61492 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PurchasedDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PurchasedDeserializer.java @@ -5,6 +5,7 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.Customization; import com.magicmicky.habitrpgwrapper.lib.models.Purchases; import com.raizlabs.android.dbflow.runtime.TransactionManager; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/QuestListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/QuestListDeserializer.java index b25a83e8b..de71e5ba8 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/QuestListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/QuestListDeserializer.java @@ -5,6 +5,7 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import com.raizlabs.android.dbflow.runtime.TransactionManager; import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/SkillDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/SkillDeserializer.java index 2624c4c0b..84d08a005 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/SkillDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/SkillDeserializer.java @@ -5,10 +5,8 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.Skill; -import com.raizlabs.android.dbflow.runtime.TransactionManager; -import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; -import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; import java.lang.reflect.Type; import java.util.ArrayList; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskListDeserializer.java index 8dd35815f..509421c33 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskListDeserializer.java @@ -3,7 +3,9 @@ package com.magicmicky.habitrpgwrapper.lib.utils; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; + import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList; import java.lang.reflect.Type; import java.util.ArrayList; @@ -12,17 +14,42 @@ import java.util.List; /** * Created by viirus on 09/12/15. */ -public class TaskListDeserializer implements JsonDeserializer> { +public class TaskListDeserializer implements JsonDeserializer { + + public TaskList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) { + TaskList tasks = new TaskList(); + List habits = new ArrayList<>(); + List dailies = new ArrayList<>(); + List todos = new ArrayList<>(); + List rewards = new ArrayList<>(); - public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) { - List vals = new ArrayList<>(); - int position = 0; for (JsonElement e : json.getAsJsonArray()) { Task task = ctx.deserialize(e, Task.class); - task.position = position; - vals.add(task); - position++; + switch(task.type) { + case Task.TYPE_HABIT: + task.position = habits.size(); + habits.add(task); + break; + case Task.TYPE_DAILY: + task.position = dailies.size(); + dailies.add(task); + break; + case Task.TYPE_TODO: + task.position = todos.size(); + todos.add(task); + break; + case Task.TYPE_REWARD: + task.position = rewards.size(); + rewards.add(task); + break; + } } - return vals; + + tasks.habits = habits; + tasks.dailies = dailies; + tasks.todos = todos; + tasks.rewards = rewards; + + return tasks; } } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskSerializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskSerializer.java index 5dec7c2c6..5bafa45a1 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskSerializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskSerializer.java @@ -1,10 +1,11 @@ package com.magicmicky.habitrpgwrapper.lib.utils; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; -import com.google.gson.JsonNull; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; + import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; @@ -21,11 +22,11 @@ public class TaskSerializer implements JsonSerializer { obj.addProperty("priority", task.getPriority()); obj.addProperty("attribute", task.getAttribute()); obj.addProperty("type", task.getType()); - JsonObject tagsObj = new JsonObject(); + JsonArray tagsList = new JsonArray(); for (TaskTag tag : task.getTags()) { - tagsObj.addProperty(tag.getTag().getId(), true); + tagsList.add(tag.getTag().getId()); } - obj.add("tags", tagsObj); + obj.add("tags", tagsList); switch (task.getType()) { case "habit": obj.addProperty("up", task.getUp()); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskTagDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskTagDeserializer.java new file mode 100644 index 000000000..4f4078de1 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TaskTagDeserializer.java @@ -0,0 +1,54 @@ +package com.magicmicky.habitrpgwrapper.lib.utils; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +import com.magicmicky.habitrpgwrapper.lib.models.Tag; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +public class TaskTagDeserializer implements JsonDeserializer> { + @Override + public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + List taskTags = new ArrayList<>(); + List allTags = new Select() + .from(Tag.class) + .queryList(); + + for (JsonElement tagElement : json.getAsJsonArray()) { + String tagId = tagElement.getAsString(); + TaskTag taskTag = new TaskTag(); + for (Tag tag : allTags) { + if (tag.getId().equals(tagId)) { + taskTag.setTag(tag); + + if(!alreadyContainsTag(taskTags, tagId)) + { + taskTags.add(taskTag); + } + + break; + } + } + } + + + return taskTags; + } + + private boolean alreadyContainsTag(List list, String idToCheck) { + for(TaskTag t : list) { + if(t.getTag().getId().equals(idToCheck)) { + return true; + } + } + + return false; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TutorialStepListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TutorialStepListDeserializer.java index 839ba9321..fcd49fe4b 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TutorialStepListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/TutorialStepListDeserializer.java @@ -4,6 +4,7 @@ import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; + import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep; import java.lang.reflect.Type; diff --git a/Habitica/src/test/java/com/magicmicky/habitrpgwrapper/lib/utils/DateDeserializerTest.java b/Habitica/src/test/java/com/magicmicky/habitrpgwrapper/lib/utils/DateDeserializerTest.java index c7e4bb502..3d9dd1279 100644 --- a/Habitica/src/test/java/com/magicmicky/habitrpgwrapper/lib/utils/DateDeserializerTest.java +++ b/Habitica/src/test/java/com/magicmicky/habitrpgwrapper/lib/utils/DateDeserializerTest.java @@ -5,6 +5,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; + import com.habitrpg.android.habitica.BuildConfig; import org.junit.Before;