Initial apiv3 support

This commit is contained in:
Phillip Thelen 2016-05-09 16:08:33 +02:00
parent fe8a584a7a
commit 0ed79c8b53
149 changed files with 1912 additions and 2304 deletions

View file

@ -0,0 +1 @@
ALTER TABLE UserParty ADD COLUMN 'partyOrder' varchar(255);

View file

@ -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;

View file

@ -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">
<ImageView
android:layout_width="17dp"
@ -71,7 +71,8 @@
<TableRow
android:id="@+id/email_row"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
style="@style/LoginRow">
<ImageView
android:layout_width="17dp"
@ -94,7 +95,8 @@
<TableRow
android:id="@+id/password_row"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
style="@style/LoginRow">
<ImageView
android:layout_width="17dp"
@ -118,7 +120,8 @@
<TableRow
android:id="@+id/confirm_password_row"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
style="@style/LoginRow">
<ImageView
android:layout_width="17dp"

View file

@ -6,4 +6,5 @@
<string name="SP_APIToken" translatable="false">APIToken</string>
<string name="SP_username" translatable="false">Username</string>
<string name="SP_email" translatable="false">E-mail</string>
<string name="base_url" translatable="false">https://habitica.com</string>
</resources>

View file

@ -176,4 +176,10 @@
<item name="android:layout_gravity">center</item>
<item name="android:gravity">center</item>
</style>
<style name="LoginRow">
<item name="android:layout_marginLeft">8dp</item>
<item name="android:layout_marginRight">8dp</item>
<item name="android:layout_gravity">center</item>
</style>
</resources>

View file

@ -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<Throwable> {
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<List<TaskTag>>() {
}.getType();
Type taskClassListType = new TypeToken<List<Task>>() {}.getType();
Type skillListType = new TypeToken<List<Skill>>() {}.getType();
Type customizationListType = new TypeToken<List<Customization>>() {}.getType();
Type tutorialStepListType = new TypeToken<List<TutorialStep>>() {}.getType();
@ -124,7 +141,7 @@ public class APIHelper implements ErrorHandler, Profiler {
Type petListType = new TypeToken<HashMap<String, Pet>>() {}.getType();
Type mountListType = new TypeToken<HashMap<String, Mount>>() {}.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<Task> 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<UserAuthResponse> callback) {
public Observable<UserAuthResponse> 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<UserAuthResponse> callback) {
public Observable<UserAuthResponse> 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<UserAuthResponse> callback) {
public Observable<UserAuthResponse> 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<Task> cb) {
this.apiService.updateTask(item.getId(), item, cb);
}
public class ErrorResponse{
public String err;
}
public class ErrorListResponse {
public List<String> 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<ResponseBody, ?> 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<HabitRPGUser> retrieveUser(boolean withTasks) {
Observable<HabitRPGUser> userObservable = apiService.getUser();
if (withTasks) {
Observable<TaskList> 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<Void> cb){
apiService.sleep(cb);
}
public void reviveUser(HabitRPGUserCallback cb) {
apiService.revive(cb);
public PurchaseValidationResult validatePurchase(PurchaseValidationRequest request) throws IOException {
Call<PurchaseValidationResult> 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 <T> Observable.Transformer<T, T> configureApiCallObserver() {
return (Observable.Transformer<T, T>) apiCallTransformer;
}
}

View file

@ -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<T extends Object> {
@ -83,89 +79,70 @@ public class ContentCache {
}
private <T extends Object> void getContentAndSearchFor(final String typeOfSearch, final String searchKey, final GotContentEntryCallback<T> gotEntry) {
apiService.getContent(new Callback<ContentResult>() {
@Override
public void success(ContentResult contentResult, Response response) {
switch (typeOfSearch) {
case "quest": {
Collection<QuestContent> questList = contentResult.quests;
apiService.getContent().subscribe(contentResult -> {
switch (typeOfSearch) {
case "quest": {
Collection<QuestContent> 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<ItemData> 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<ItemData> 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 <T extends Object> void getContentAndSearchForList(final String typeOfSearch, final List<String> searchKeys, final GotContentEntryCallback<List<T>> gotEntry) {
apiService.getContent(new Callback<ContentResult>() {
@Override
public void success(ContentResult contentResult, Response response) {
apiService.getContent().subscribe(contentResult -> {
switch (typeOfSearch) {
case "item": {
List<T> resultList = new ArrayList<T>();
switch (typeOfSearch) {
case "item": {
List<T> resultList = new ArrayList<T>();
List<ItemData> itemList = new ArrayList<ItemData>(contentResult.gear.flat);
itemList.add(contentResult.potion);
itemList.add(contentResult.armoire);
List<ItemData> itemList = new ArrayList<ItemData>(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 -> {});
}

View file

@ -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;
}

View file

@ -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;

View file

@ -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();
}
}
}

View file

@ -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;

View file

@ -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<HabitRPGUser> {
public class HabitRPGUserCallback implements Action1<HabitRPGUser> {
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();
}
}

View file

@ -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<Items> {
public class ItemsCallback implements Action1<Items> {
private final HabitRPGUserCallback.OnUserReceived mCallback;
@ -19,16 +17,9 @@ public class ItemsCallback implements Callback<Items> {
}
@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();
}
}

View file

@ -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<HabitRPGUser> {
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<HabitRPGUser> {
this.user.async().save();
mCallback.onUserReceived(this.user);
}
@Override
public void failure(RetrofitError error) {
mCallback.onUserFail();
callBack.onUserReceived(this.user);
}
}

View file

@ -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<HabitRPGUser> {
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);
}
}

View file

@ -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<Task> {
public class TaskCreationCallback implements Action1<Task> {
@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);
}
}

View file

@ -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<Void> {
public class TaskDeletionCallback implements Action1<Void> {
private final OnTaskDeleted callback;
private final Task taskToDelete;
@ -21,20 +18,12 @@ public class TaskDeletionCallback implements Callback<Void> {
}
@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();
}
}

View file

@ -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<TaskDirectionData> {
public class TaskScoringCallback implements Action1<TaskDirectionData> {
private final OnTaskScored mCallback;
private final String taskId;
@ -32,7 +27,7 @@ public class TaskScoringCallback implements Callback<TaskDirectionData> {
}
@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<Task>() {
@ -102,15 +97,7 @@ public class TaskScoringCallback implements Callback<TaskDirectionData> {
}
}
@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();
}
}

View file

@ -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<Task> {
public class TaskUpdateCallback implements Action1<Task> {
@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);
}
}

View file

@ -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<UnlockResponse> {
public class UnlockCallback implements Action1<UnlockResponse> {
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);
}
}

View file

@ -1,7 +1,6 @@
package com.habitrpg.android.habitica.events;
import android.graphics.Bitmap;
import android.net.Uri;
public class ShareEvent {

View file

@ -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;

View file

@ -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 {

View file

@ -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;

View file

@ -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.
*/

View file

@ -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;

View file

@ -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 {

View file

@ -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.
*/

View file

@ -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;

View file

@ -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.
*/

View file

@ -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
*/

View file

@ -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 {

View file

@ -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<HabitRPGUser> {
public class ClassSelectionActivity extends BaseActivity implements Action1<HabitRPGUser> {
Boolean isInitialSelection;
Boolean classWasUnset = false;
@ -113,7 +111,11 @@ public class ClassSelectionActivity extends BaseActivity implements Callback<Hab
warriorUserPicture.setPictureOn(warriorImageView);
if (!isInitialSelection) {
apiHelper.apiService.changeClass(this);
apiHelper.apiService.changeClass()
.compose(apiHelper.configureApiCallObserver())
.subscribe(user -> {
classWasUnset = true;
}, throwable -> {});
}
}
@ -184,18 +186,25 @@ public class ClassSelectionActivity extends BaseActivity implements Callback<Hab
Map<String, Object> 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<Hab
finish();
}
}
@Override
public void failure(RetrofitError error) {
shouldFinish = false;
}
private void displayProgressDialog() {
progressDialog = ProgressDialog.show(this, getString(R.string.changing_class_progress), null, true);
}
}

View file

@ -1,5 +1,11 @@
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.ui.UiUtils;
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
@ -13,17 +19,8 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.Spinner;
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;
import com.habitrpg.android.habitica.ui.UiUtils;
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
import butterknife.BindView;
public class GroupFormActivity extends BaseActivity {

View file

@ -1,5 +1,11 @@
package com.habitrpg.android.habitica.ui.activities;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.HostConfig;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment;
import com.viewpagerindicator.CirclePageIndicator;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@ -9,19 +15,9 @@ import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.Button;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.HostConfig;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment;
import com.magicmicky.habitrpgwrapper.lib.models.ContentResult;
import com.viewpagerindicator.CirclePageIndicator;
import butterknife.BindView;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class IntroActivity extends BaseActivity implements View.OnClickListener, ViewPager.OnPageChangeListener, Callback<ContentResult> {
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) {
}
}

View file

@ -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<UserAuthResponse>,HabitRPGUserCallback.OnUserReceived {
implements Action1<UserAuthResponse>, 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();
}
}

View file

@ -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<Throwable>, 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<String, Object> 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<TaskTag> 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<BuyResponse>() {
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<Void>() {
@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<HabitRPGUser>() {
@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<FeedResponse>() {
@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<ContentResult>() {
@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<String, Object> 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<MaintenanceResponse>() {
@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) {
}
}

View file

@ -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<MaintenanceResponse>() {
@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();
}
});
}

View file

@ -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 {

View file

@ -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);

View file

@ -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<Map<String, Object>> 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);

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<PetDetailRecy
menu.addMenuItem(new BottomSheetMenuItem(resources.getString(R.string.feed)));
}
menu.setSelectionRunnable(index -> {
Log.e("EEEEEEE", index.toString());
if (index == 0) {
EquipCommand event = new EquipCommand();
event.type = "pet";

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<PartyMemberRecyclerViewAdapter.MemberViewHolder> {
private ArrayList<HabitRPGUser> memberList;
private List<HabitRPGUser> memberList;
public Context context;
public void setMemberList(ArrayList<HabitRPGUser> memberList) {
public void setMemberList(List<HabitRPGUser> memberList) {
this.memberList = memberList;
this.notifyDataSetChanged();
}

View file

@ -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<PublicGuildsRecyclerViewAdapter.GuildViewHolder> {
public APIHelper apiHelper;
private ArrayList<Group> publicGuildList;
private ArrayList<String> memberGuildIDs;
private List<Group> publicGuildList;
private List<String> memberGuildIDs;
public void setPublicGuildList(ArrayList<Group> publicGuildList) {
public void setPublicGuildList(List<Group> publicGuildList) {
this.publicGuildList = publicGuildList;
this.notifyDataSetChanged();
}
public void setMemberGuildIDs(ArrayList<String> memberGuildIDs) {
public void setMemberGuildIDs(List<String> memberGuildIDs) {
this.memberGuildIDs = memberGuildIDs;
}
@ -57,35 +53,21 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<Public
Group guild = (Group) v.getTag();
boolean isMember = this.memberGuildIDs != null && this.memberGuildIDs.contains(guild.id);
if (isMember) {
PublicGuildsRecyclerViewAdapter.this.apiHelper.apiService.leaveGroup(guild.id, new Callback<Void>() {
@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<Group>() {
@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 -> {});
}
});

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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) {

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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<HabitRPGUser> {
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) {
}
}

View file

@ -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();

View file

@ -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;
}

View file

@ -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 {

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<ContentResult> {
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<String, Object> 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) {
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<Group>() {
@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

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<List<ChatMessage>> {
public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, Action1<List<ChatMessage>> {
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<ChatMessage> 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<String, String> 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<ChatMessage> 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<ChatMessage> 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<String>() {
@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<Void>() {
@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<List<Void>>() {
@Override
public void success(List<Void> 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<Void>() {
@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<PostChatMessageResult>() {
@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<Void>() {
@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<Void, Void, Void> {
private List<ChatMessage> chatMessages;

View file

@ -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<Void>() {
@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<Void>() {
@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<Void>() {
@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<Group>() {
@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<Void>() {
@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<Group>() {
@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) -> {
});

View file

@ -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<Group> {
public class GuildFragment extends BaseMainFragment implements Action1<Group> {
private Group guild;
public boolean isMember;
@ -39,8 +37,9 @@ public class GuildFragment extends BaseMainFragment implements Callback<Group> {
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<Group> {
@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<Group> {
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<Void>() {
@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<Group> {
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<Group> {
needsSaving = true;
}
if (needsSaving) {
this.mAPIHelper.apiService.updateGroup(this.guild.id, this.guild, new Callback<Void>() {
@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<Group> {
}
@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<Group> {
}
this.activity.supportInvalidateOptionsMenu();
}
@Override
public void failure(RetrofitError error) {
}
}

View file

@ -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<ArrayList<Group>>, 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<Group> 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) {

View file

@ -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<ArrayList<Group>> {
public class PublicGuildsFragment extends BaseMainFragment {
ArrayList<String> memberGuildIDs;
ArrayList <Group> guilds;
List<String> memberGuildIDs;
List <Group> guilds;
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@ -45,7 +42,7 @@ public class PublicGuildsFragment extends BaseMainFragment implements Callback<A
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
viewAdapter = new PublicGuildsRecyclerViewAdapter();
viewAdapter.setMemberGuildIDs(this.memberGuildIDs);
viewAdapter.apiHelper = this.mAPIHelper;
viewAdapter.apiHelper = this.apiHelper;
recyclerView.setAdapter(viewAdapter);
if (this.guilds != null) {
this.viewAdapter.setPublicGuildList(this.guilds);
@ -61,21 +58,15 @@ public class PublicGuildsFragment extends BaseMainFragment implements Callback<A
}
private void fetchGuilds() {
if (this.mAPIHelper != null) {
this.mAPIHelper.apiService.listGroups("public", this);
if (this.apiHelper != null) {
this.apiHelper.apiService.listGroups("publicGuilds")
.compose(apiHelper.configureApiCallObserver())
.subscribe(groups -> {
PublicGuildsFragment.this.guilds = groups;
if (PublicGuildsFragment.this.viewAdapter!= null) {
PublicGuildsFragment.this.viewAdapter.setPublicGuildList(groups);
}
}, throwable -> {});
}
}
@Override
public void success(ArrayList<Group> groups, Response response) {
this.guilds = groups;
if (this.viewAdapter!= null) {
this.viewAdapter.setPublicGuildList(groups);
}
}
@Override
public void failure(RetrofitError error) {
}
}

View file

@ -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<Group> {
public class TavernFragment extends BaseMainFragment {
public ViewPager viewPager;
Group tavern;
@ -46,36 +42,30 @@ public class TavernFragment extends BaseMainFragment implements Callback<Group>
@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<Group>
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:

View file

@ -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<Group>() {
@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<Void>() {
@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<Void>() {
@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<Void>() {
@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;
}

View file

@ -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;

View file

@ -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<HabitRPGUser> members;
private List<HabitRPGUser> members;
private PartyMemberRecyclerViewAdapter viewAdapter;
public void configure(Context ctx, ArrayList<HabitRPGUser> members) {
public void configure(Context ctx, List<HabitRPGUser> members) {
this.ctx = ctx;
this.members = members;
@ -62,7 +62,7 @@ public class PartyMemberListFragment extends Fragment {
}
}
public void setMemberList(ArrayList<HabitRPGUser> members) {
public void setMemberList(List<HabitRPGUser> members) {
this.members = members;
viewAdapter.setMemberList(members);
}

View file

@ -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);
}

View file

@ -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<List<ItemData>>() {
@Override
public void success(List<ItemData> itemDatas, Response response) {
if (apiHelper != null) {
apiHelper.apiService.getInventoryBuyableGear()
.compose(apiHelper.configureApiCallObserver())
.subscribe(itemDatas -> {
// get itemdata list
ArrayList<String> 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<String> itemKeys = new ArrayList<>();
for (ItemData item : itemDatas) {
itemKeys.add(item.key);
contentCache.GetItemDataList(itemKeys, obj -> {
ArrayList<Task> 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<Task> 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<List<Tag>>() {
@Override
public void success(List<Tag> 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);
}
}
}

View file

@ -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")

View file

@ -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

View file

@ -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;

Some files were not shown because too many files have changed in this diff Show more