mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
begin using dagger
This commit is contained in:
parent
c8a44f28a9
commit
e5cc8cf09d
57 changed files with 785 additions and 256 deletions
|
|
@ -2,7 +2,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.habitrpg.android.habitica"
|
||||
android:versionCode="84"
|
||||
android:versionCode="86"
|
||||
android:versionName="0.0.30.1"
|
||||
android:screenOrientation="portrait"
|
||||
android:installLocation="auto" >
|
||||
|
|
|
|||
|
|
@ -63,6 +63,10 @@ dependencies {
|
|||
compile 'com.jakewharton:butterknife:8.0.1'
|
||||
apt 'com.jakewharton:butterknife-compiler:8.0.1'
|
||||
|
||||
//Dependency Injection
|
||||
compile 'com.google.dagger:dagger:2.2'
|
||||
apt 'com.google.dagger:dagger-compiler:2.2'
|
||||
provided 'org.glassfish:javax.annotation:10.0-b28'
|
||||
//App Compatibility and Material Design
|
||||
compile('com.mikepenz:materialdrawer:5.2.6@aar') {
|
||||
transitive = true
|
||||
|
|
|
|||
|
|
@ -1,86 +1,29 @@
|
|||
package com.habitrpg.android.habitica;
|
||||
|
||||
import com.google.gson.ExclusionStrategy;
|
||||
import com.google.gson.FieldAttributes;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.TypeAdapter;
|
||||
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.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.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.TutorialStep;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuth;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocial;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocialTokens;
|
||||
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.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;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.ContentDeserializer;
|
||||
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;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.ItemDataListDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.MountListDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.PetListDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.PurchasedDeserializer;
|
||||
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 android.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Type;
|
||||
import java.net.ConnectException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
|
@ -107,11 +50,9 @@ public class APIHelper implements Action1<Throwable> {
|
|||
|
||||
// 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 HostConfig hostConfig;
|
||||
private final Retrofit retrofitAdapter;
|
||||
private HostConfig cfg;
|
||||
|
||||
final Observable.Transformer apiCallTransformer =
|
||||
observable -> ((Observable)observable).subscribeOn(Schedulers.io())
|
||||
|
|
@ -122,67 +63,12 @@ public class APIHelper implements Action1<Throwable> {
|
|||
|
||||
//private OnHabitsAPIResult mResultListener;
|
||||
//private HostConfig mConfig;
|
||||
public APIHelper(final HostConfig cfg) {
|
||||
this.cfg = cfg;
|
||||
Crashlytics.getInstance().core.setUserIdentifier(cfg.getUser());
|
||||
Crashlytics.getInstance().core.setUserName(cfg.getUser());
|
||||
Amplitude.getInstance().setUserId(cfg.getUser());
|
||||
|
||||
Type taskTagClassListType = new TypeToken<List<TaskTag>>() {
|
||||
}.getType();
|
||||
|
||||
|
||||
Type skillListType = new TypeToken<List<Skill>>() {}.getType();
|
||||
Type customizationListType = new TypeToken<List<Customization>>() {}.getType();
|
||||
Type tutorialStepListType = new TypeToken<List<TutorialStep>>() {}.getType();
|
||||
Type faqArticleListType = new TypeToken<List<FAQArticle>>() {}.getType();
|
||||
Type itemDataListType = new TypeToken<List<ItemData>>() {}.getType();
|
||||
Type eggListType = new TypeToken<List<Egg>>() {}.getType();
|
||||
Type foodListType = new TypeToken<List<Food>>() {}.getType();
|
||||
Type hatchingPotionListType = new TypeToken<List<HatchingPotion>>() {}.getType();
|
||||
Type questContentListType = new TypeToken<List<QuestContent>>() {}.getType();
|
||||
Type petListType = new TypeToken<HashMap<String, Pet>>() {}.getType();
|
||||
Type mountListType = new TypeToken<HashMap<String, Mount>>() {}.getType();
|
||||
|
||||
//Exclusion strategy needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121
|
||||
Gson gson = new GsonBuilder()
|
||||
.setExclusionStrategies(new CheckListItemExcludeStrategy())
|
||||
.setExclusionStrategies(new ExclusionStrategy() {
|
||||
@Override
|
||||
public boolean shouldSkipField(FieldAttributes f) {
|
||||
return f.getDeclaredClass().equals(ModelAdapter.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldSkipClass(Class<?> clazz) {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.registerTypeAdapter(taskTagClassListType, new TaskTagDeserializer())
|
||||
.registerTypeAdapter(Boolean.class, booleanAsIntAdapter)
|
||||
.registerTypeAdapter(boolean.class, booleanAsIntAdapter)
|
||||
.registerTypeAdapter(skillListType, new SkillDeserializer())
|
||||
.registerTypeAdapter(ChecklistItem.class, new ChecklistItemSerializer())
|
||||
.registerTypeAdapter(TaskList.class, new TaskListDeserializer())
|
||||
.registerTypeAdapter(Purchases.class, new PurchasedDeserializer())
|
||||
.registerTypeAdapter(customizationListType, new CustomizationDeserializer())
|
||||
.registerTypeAdapter(tutorialStepListType, new TutorialStepListDeserializer())
|
||||
.registerTypeAdapter(faqArticleListType, new FAQArticleListDeserilializer())
|
||||
.registerTypeAdapter(Group.class, new GroupSerialization())
|
||||
.registerTypeAdapter(Date.class, new DateDeserializer())
|
||||
.registerTypeAdapter(itemDataListType, new ItemDataListDeserializer())
|
||||
.registerTypeAdapter(eggListType, new EggListDeserializer())
|
||||
.registerTypeAdapter(foodListType, new FoodListDeserializer())
|
||||
.registerTypeAdapter(hatchingPotionListType, new HatchingPotionListDeserializer())
|
||||
.registerTypeAdapter(questContentListType, new QuestListDeserializer())
|
||||
.registerTypeAdapter(petListType, new PetListDeserializer())
|
||||
.registerTypeAdapter(mountListType, new MountListDeserializer())
|
||||
.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();
|
||||
public APIHelper(GsonConverterFactory gsonConverter, HostConfig hostConfig) {
|
||||
this.gsonConverter = gsonConverter;
|
||||
this.hostConfig = hostConfig;
|
||||
Crashlytics.getInstance().core.setUserIdentifier(this.hostConfig.getUser());
|
||||
Crashlytics.getInstance().core.setUserName(this.hostConfig.getUser());
|
||||
Amplitude.getInstance().setUserId(this.hostConfig.getUser());
|
||||
|
||||
Interceptor remove_data_interceptor = chain -> {
|
||||
Response response = chain.proceed(chain.request());
|
||||
|
|
@ -218,10 +104,10 @@ public class APIHelper implements Action1<Throwable> {
|
|||
.addInterceptor(logging)
|
||||
.addNetworkInterceptor(chain -> {
|
||||
Request original = chain.request();
|
||||
if (cfg.getUser() != null) {
|
||||
if (this.hostConfig.getUser() != null) {
|
||||
Request request = original.newBuilder()
|
||||
.header("x-api-key", cfg.getApi())
|
||||
.header("x-api-user", cfg.getUser())
|
||||
.header("x-api-key", this.hostConfig.getApi())
|
||||
.header("x-api-user", this.hostConfig.getUser())
|
||||
.header("x-client", "habitica-android")
|
||||
.method(original.method(), original.body())
|
||||
.build();
|
||||
|
|
@ -232,10 +118,7 @@ public class APIHelper implements Action1<Throwable> {
|
|||
})
|
||||
.build();
|
||||
|
||||
|
||||
gsonConverter = GsonConverterFactory.create(gson);
|
||||
|
||||
Server server = new Server(cfg.getAddress());
|
||||
Server server = new Server(this.hostConfig.getAddress());
|
||||
retrofitAdapter = new Retrofit.Builder()
|
||||
.client(client)
|
||||
.baseUrl(server.toString())
|
||||
|
|
@ -243,51 +126,8 @@ public class APIHelper implements Action1<Throwable> {
|
|||
.addConverterFactory(gsonConverter)
|
||||
.build();
|
||||
this.apiService = retrofitAdapter.create(ApiService.class);
|
||||
|
||||
server = new Server(cfg.getAddress(), false);
|
||||
Retrofit adapter = new Retrofit.Builder()
|
||||
.baseUrl(server.toString())
|
||||
.addConverterFactory(gsonConverter)
|
||||
.build();
|
||||
this.inAppPurchasesService = adapter.create(InAppPurchasesApiService.class);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
private static final TypeAdapter<Boolean> booleanAsIntAdapter = new TypeAdapter<Boolean>() {
|
||||
@Override
|
||||
public void write(JsonWriter out, Boolean value) throws IOException {
|
||||
if (value == null) {
|
||||
out.nullValue();
|
||||
} else {
|
||||
out.value(value);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean read(JsonReader in) throws IOException {
|
||||
JsonToken peek = in.peek();
|
||||
switch (peek) {
|
||||
case BOOLEAN:
|
||||
return in.nextBoolean();
|
||||
case NULL:
|
||||
in.nextNull();
|
||||
return null;
|
||||
case NUMBER:
|
||||
return in.nextInt() != 0;
|
||||
case STRING:
|
||||
return Boolean.parseBoolean(in.nextString());
|
||||
default:
|
||||
throw new IllegalStateException("Expected BOOLEAN or NUMBER but was " + peek);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public Observable<UserAuthResponse> registerUser(String username, String email, String password, String confirmPassword) {
|
||||
UserAuth auth = new UserAuth();
|
||||
auth.setUsername(username);
|
||||
|
|
@ -422,7 +262,7 @@ public class APIHelper implements Action1<Throwable> {
|
|||
}
|
||||
|
||||
public PurchaseValidationResult validatePurchase(PurchaseValidationRequest request) throws IOException {
|
||||
Call<PurchaseValidationResult> response = inAppPurchasesService.validatePurchase(cfg.getUser(), cfg.getApi(), request);
|
||||
Call<PurchaseValidationResult> response = apiService.validatePurchase(request);
|
||||
return response.execute().body();
|
||||
}
|
||||
|
||||
|
|
@ -430,4 +270,12 @@ public class APIHelper implements Action1<Throwable> {
|
|||
public <T> Observable.Transformer<T, T> configureApiCallObserver() {
|
||||
return (Observable.Transformer<T, T>) apiCallTransformer;
|
||||
}
|
||||
|
||||
public void updateAuthenticationCredentials(String userID, String apiToken) {
|
||||
this.hostConfig.setUser(userID);
|
||||
this.hostConfig.setApi(apiToken);
|
||||
Crashlytics.getInstance().core.setUserIdentifier(this.hostConfig.getUser());
|
||||
Crashlytics.getInstance().core.setUserName(this.hostConfig.getUser());
|
||||
Amplitude.getInstance().setUserId(this.hostConfig.getUser());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ import com.amplitude.api.Amplitude;
|
|||
import com.crashlytics.android.Crashlytics;
|
||||
import com.crashlytics.android.core.CrashlyticsCore;
|
||||
import com.facebook.FacebookSdk;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.facebook.drawee.backends.pipeline.Fresco;
|
||||
import com.habitrpg.android.habitica.components.DaggerAppComponent;
|
||||
import com.habitrpg.android.habitica.modules.ApiModule;
|
||||
import com.habitrpg.android.habitica.modules.AppModule;
|
||||
import com.habitrpg.android.habitica.ui.activities.IntroActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.LoginActivity;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
|
@ -36,6 +40,9 @@ import java.io.File;
|
|||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import dagger.Lazy;
|
||||
import io.fabric.sdk.android.Fabric;
|
||||
|
||||
public class HabiticaApplication extends MultiDexApplication {
|
||||
|
|
@ -44,6 +51,10 @@ public class HabiticaApplication extends MultiDexApplication {
|
|||
public static HabitRPGUser User;
|
||||
public static APIHelper ApiHelper;
|
||||
public static Activity currentActivity = null;
|
||||
private AppComponent component;
|
||||
|
||||
@Inject
|
||||
Lazy<APIHelper> lazyApiHelper;
|
||||
|
||||
public static HabiticaApplication getInstance(Context context) {
|
||||
return (HabiticaApplication) context.getApplicationContext();
|
||||
|
|
@ -52,6 +63,7 @@ public class HabiticaApplication extends MultiDexApplication {
|
|||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
setupDagger();
|
||||
setupLeakCanary();
|
||||
setupFlowManager();
|
||||
setupFacebookSdk();
|
||||
|
|
@ -59,10 +71,15 @@ public class HabiticaApplication extends MultiDexApplication {
|
|||
createBillingAndCheckout();
|
||||
registerActivityLifecycleCallbacks();
|
||||
Amplitude.getInstance().initialize(this, getString(R.string.amplitude_app_id)).enableForegroundTracking(this);
|
||||
|
||||
Fresco.initialize(this);
|
||||
}
|
||||
|
||||
private void setupDagger() {
|
||||
component = DaggerAppComponent.builder()
|
||||
.appModule(new AppModule(this))
|
||||
.build();
|
||||
}
|
||||
|
||||
private void setupLeakCanary() {
|
||||
// LeakCanary 1.3.1 has problems on Marshmallow; can remove check once updated with fixes
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
|
|
@ -217,6 +234,7 @@ public class HabiticaApplication extends MultiDexApplication {
|
|||
editor.putBoolean("use_reminder", use_reminder);
|
||||
editor.putString("reminder_time", reminder_time);
|
||||
editor.apply();
|
||||
getInstance(context).lazyApiHelper.get().updateAuthenticationCredentials(null, null);
|
||||
startActivity(LoginActivity.class, context);
|
||||
}
|
||||
|
||||
|
|
@ -283,4 +301,8 @@ public class HabiticaApplication extends MultiDexApplication {
|
|||
}
|
||||
|
||||
// endregion
|
||||
|
||||
public AppComponent getComponent() {
|
||||
return component;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
package com.habitrpg.android.habitica;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
/**
|
||||
* The configuration of the host<br />
|
||||
* Currently, the Port isn't used at all.
|
||||
|
|
@ -10,6 +14,15 @@ public class HostConfig {
|
|||
private String port;
|
||||
private String api;
|
||||
private String user;
|
||||
|
||||
public HostConfig(SharedPreferences sharedPreferences, Context context) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
this.port = BuildConfig.PORT;
|
||||
this.address = BuildConfig.DEBUG ? BuildConfig.BASE_URL : context.getString(R.string.base_url);
|
||||
this.api = prefs.getString(context.getString(R.string.SP_APIToken), null);
|
||||
this.user = prefs.getString(context.getString(R.string.SP_userID), null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new HostConfig
|
||||
* @param address the address of the server
|
||||
|
|
|
|||
|
|
@ -0,0 +1,143 @@
|
|||
package com.habitrpg.android.habitica.components;
|
||||
|
||||
import com.habitrpg.android.habitica.modules.ApiModule;
|
||||
import com.habitrpg.android.habitica.modules.AppModule;
|
||||
import com.habitrpg.android.habitica.ui.activities.AboutActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.IntroActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.LoginActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.MaintenanceActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.PrefsActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.SetupActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.SkillTasksActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.GemsPurchaseFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.NewsFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.faq.FAQDetailFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.faq.FAQOverviewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarCustomizationFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarOverviewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentDetailFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentOverviewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemsFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.stable.MountDetailRecyclerFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.stable.PetDetailRecyclerFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.stable.StableFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.stable.StableRecyclerFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.setup.TaskSetupFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.skills.SkillsFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.ChatListFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GuildFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GuildsOverviewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.PublicGuildsFragment;
|
||||
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.social.party.PartyInviteFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyMemberListFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.tasks.TaskRecyclerViewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.tasks.TasksFragment;
|
||||
import com.habitrpg.android.habitica.widget.UpdateWidgetService;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Component;
|
||||
|
||||
@Singleton
|
||||
@Component(modules = {AppModule.class, ApiModule.class})
|
||||
public interface AppComponent {
|
||||
void inject(UpdateWidgetService target);
|
||||
|
||||
void inject(ClassSelectionActivity classSelectionActivity);
|
||||
|
||||
void inject(AboutActivity aboutActivity);
|
||||
|
||||
void inject(GroupFormActivity groupFormActivity);
|
||||
|
||||
void inject(IntroActivity introActivity);
|
||||
|
||||
void inject(LoginActivity loginActivity);
|
||||
|
||||
void inject(MainActivity mainActivity);
|
||||
|
||||
void inject(MaintenanceActivity maintenanceActivity);
|
||||
|
||||
void inject(PartyInviteActivity partyInviteActivity);
|
||||
|
||||
void inject(PrefsActivity prefsActivity);
|
||||
|
||||
void inject(SetupActivity setupActivity);
|
||||
|
||||
void inject(SkillTasksActivity skillTasksActivity);
|
||||
|
||||
void inject(TaskFormActivity taskFormActivity);
|
||||
|
||||
void inject(TasksFragment tasksFragment);
|
||||
|
||||
void inject(FAQDetailFragment faqDetailFragment);
|
||||
|
||||
void inject(FAQOverviewFragment faqOverviewFragment);
|
||||
|
||||
void inject(AvatarCustomizationFragment avatarCustomizationFragment);
|
||||
|
||||
void inject(AvatarOverviewFragment avatarOverviewFragment);
|
||||
|
||||
void inject(EquipmentDetailFragment equipmentDetailFragment);
|
||||
|
||||
void inject(EquipmentOverviewFragment equipmentOverviewFragment);
|
||||
|
||||
void inject(ItemRecyclerFragment itemRecyclerFragment);
|
||||
|
||||
void inject(ItemsFragment itemsFragment);
|
||||
|
||||
void inject(MountDetailRecyclerFragment mountDetailRecyclerFragment);
|
||||
|
||||
void inject(PetDetailRecyclerFragment petDetailRecyclerFragment);
|
||||
|
||||
void inject(StableFragment stableFragment);
|
||||
|
||||
void inject(StableRecyclerFragment stableRecyclerFragment);
|
||||
|
||||
void inject(AvatarSetupFragment avatarSetupFragment);
|
||||
|
||||
void inject(IntroFragment introFragment);
|
||||
|
||||
void inject(TaskSetupFragment taskSetupFragment);
|
||||
|
||||
void inject(SkillsFragment skillsFragment);
|
||||
|
||||
void inject(SkillTasksRecyclerViewFragment skillTasksRecyclerViewFragment);
|
||||
|
||||
void inject(PartyFragment partyFragment);
|
||||
|
||||
void inject(PartyInviteFragment partyInviteFragment);
|
||||
|
||||
void inject(PartyMemberListFragment partyMemberListFragment);
|
||||
|
||||
void inject(ChatListFragment chatListFragment);
|
||||
|
||||
void inject(GroupInformationFragment groupInformationFragment);
|
||||
|
||||
void inject(GuildFragment guildFragment);
|
||||
|
||||
void inject(GuildsOverviewFragment guildsOverviewFragment);
|
||||
|
||||
void inject(PublicGuildsFragment publicGuildsFragment);
|
||||
|
||||
void inject(TavernFragment tavernFragment);
|
||||
|
||||
void inject(TaskRecyclerViewFragment taskRecyclerViewFragment);
|
||||
|
||||
void inject(GemsPurchaseFragment gemsPurchaseFragment);
|
||||
|
||||
void inject(NewsFragment newsFragment);
|
||||
}
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
package com.habitrpg.android.habitica.modules;
|
||||
|
||||
import com.google.gson.ExclusionStrategy;
|
||||
import com.google.gson.FieldAttributes;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import com.habitrpg.android.habitica.APIHelper;
|
||||
import com.habitrpg.android.habitica.HostConfig;
|
||||
import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.MaintenanceApiService;
|
||||
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.Purchases;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Skill;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep;
|
||||
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.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.BooleanAsIntAdapter;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.ChatMessageDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.ChecklistItemSerializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.ContentDeserializer;
|
||||
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;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.ItemDataListDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.MountListDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.PetListDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.PurchasedDeserializer;
|
||||
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 android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import retrofit2.Retrofit;
|
||||
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
|
||||
import retrofit2.converter.gson.GsonConverterFactory;
|
||||
|
||||
@Module
|
||||
public class ApiModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public HostConfig providesHostConfig(SharedPreferences sharedPreferences, Context context) {
|
||||
return new HostConfig(sharedPreferences, context);
|
||||
}
|
||||
|
||||
@Provides
|
||||
public GsonConverterFactory providesGsonConverterFactory() {
|
||||
Type taskTagClassListType = new TypeToken<List<TaskTag>>() {}.getType();
|
||||
Type skillListType = new TypeToken<List<Skill>>() {}.getType();
|
||||
Type customizationListType = new TypeToken<List<Customization>>() {}.getType();
|
||||
Type tutorialStepListType = new TypeToken<List<TutorialStep>>() {}.getType();
|
||||
Type faqArticleListType = new TypeToken<List<FAQArticle>>() {}.getType();
|
||||
Type itemDataListType = new TypeToken<List<ItemData>>() {}.getType();
|
||||
Type eggListType = new TypeToken<List<Egg>>() {}.getType();
|
||||
Type foodListType = new TypeToken<List<Food>>() {}.getType();
|
||||
Type hatchingPotionListType = new TypeToken<List<HatchingPotion>>() {}.getType();
|
||||
Type questContentListType = new TypeToken<List<QuestContent>>() {}.getType();
|
||||
Type petListType = new TypeToken<HashMap<String, Pet>>() {}.getType();
|
||||
Type mountListType = new TypeToken<HashMap<String, Mount>>() {}.getType();
|
||||
|
||||
//Exclusion strategy needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121
|
||||
Gson gson = new GsonBuilder()
|
||||
.setExclusionStrategies(new CheckListItemExcludeStrategy())
|
||||
.setExclusionStrategies(new ExclusionStrategy() {
|
||||
@Override
|
||||
public boolean shouldSkipField(FieldAttributes f) {
|
||||
return f.getDeclaredClass().equals(ModelAdapter.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldSkipClass(Class<?> clazz) {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.registerTypeAdapter(taskTagClassListType, new TaskTagDeserializer())
|
||||
.registerTypeAdapter(Boolean.class, new BooleanAsIntAdapter())
|
||||
.registerTypeAdapter(boolean.class, new BooleanAsIntAdapter())
|
||||
.registerTypeAdapter(skillListType, new SkillDeserializer())
|
||||
.registerTypeAdapter(ChecklistItem.class, new ChecklistItemSerializer())
|
||||
.registerTypeAdapter(TaskList.class, new TaskListDeserializer())
|
||||
.registerTypeAdapter(Purchases.class, new PurchasedDeserializer())
|
||||
.registerTypeAdapter(customizationListType, new CustomizationDeserializer())
|
||||
.registerTypeAdapter(tutorialStepListType, new TutorialStepListDeserializer())
|
||||
.registerTypeAdapter(faqArticleListType, new FAQArticleListDeserilializer())
|
||||
.registerTypeAdapter(Group.class, new GroupSerialization())
|
||||
.registerTypeAdapter(Date.class, new DateDeserializer())
|
||||
.registerTypeAdapter(itemDataListType, new ItemDataListDeserializer())
|
||||
.registerTypeAdapter(eggListType, new EggListDeserializer())
|
||||
.registerTypeAdapter(foodListType, new FoodListDeserializer())
|
||||
.registerTypeAdapter(hatchingPotionListType, new HatchingPotionListDeserializer())
|
||||
.registerTypeAdapter(questContentListType, new QuestListDeserializer())
|
||||
.registerTypeAdapter(petListType, new PetListDeserializer())
|
||||
.registerTypeAdapter(mountListType, new MountListDeserializer())
|
||||
.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();
|
||||
return GsonConverterFactory.create(gson);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public APIHelper providesApiHelper(GsonConverterFactory gsonConverter, HostConfig hostConfig) {
|
||||
return new APIHelper(gsonConverter, hostConfig);
|
||||
}
|
||||
|
||||
@Provides
|
||||
public MaintenanceApiService providesMaintenanceApiService(GsonConverterFactory gsonConverter, HostConfig hostConfig) {
|
||||
Retrofit adapter = new Retrofit.Builder()
|
||||
.baseUrl("https://habitica-assets.s3.amazonaws.com/mobileApp/endpoint/")
|
||||
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
|
||||
.addConverterFactory(gsonConverter)
|
||||
.build();
|
||||
return adapter.create(MaintenanceApiService.class);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package com.habitrpg.android.habitica.modules;
|
||||
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v7.preference.PreferenceManager;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@Module
|
||||
public class AppModule {
|
||||
|
||||
private HabiticaApplication application;
|
||||
|
||||
public AppModule(HabiticaApplication application) {
|
||||
this.application = application;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public Context providesContext() {
|
||||
return application;
|
||||
}
|
||||
|
||||
@Provides @Singleton
|
||||
public SharedPreferences provideSharedPreferences(Context context) {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.activities;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.AboutFragment;
|
||||
import com.mikepenz.aboutlibraries.Libs;
|
||||
import com.mikepenz.aboutlibraries.LibsBuilder;
|
||||
|
|
@ -70,6 +71,10 @@ public class AboutActivity extends BaseActivity {
|
|||
|
||||
tabLayout.setupWithViewPager(pager);
|
||||
}
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package com.habitrpg.android.habitica.ui.activities;
|
||||
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
|
|
@ -20,10 +23,13 @@ public abstract class BaseActivity extends AppCompatActivity {
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
injectActivity(getHabiticaApplication().getComponent());
|
||||
setContentView(getLayoutResId());
|
||||
ButterKnife.bind(this);
|
||||
}
|
||||
|
||||
protected abstract void injectActivity(AppComponent component);
|
||||
|
||||
protected void setupToolbar(Toolbar toolbar) {
|
||||
if (toolbar != null) {
|
||||
setSupportActionBar(toolbar);
|
||||
|
|
@ -44,4 +50,8 @@ public abstract class BaseActivity extends AppCompatActivity {
|
|||
destroyed = true;
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
public HabiticaApplication getHabiticaApplication() {
|
||||
return (HabiticaApplication)getApplication();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.ui.activities;
|
|||
import com.habitrpg.android.habitica.APIHelper;
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.AvatarView;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Gear;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
|
@ -16,9 +17,6 @@ import android.content.Intent;
|
|||
import android.os.Bundle;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import rx.functions.Action1;
|
||||
|
|
@ -110,6 +108,11 @@ public class ClassSelectionActivity extends BaseActivity implements Action1<Habi
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
public HabitRPGUser makeUser(Preferences preferences, Outfit outfit) {
|
||||
HabitRPGUser user = new HabitRPGUser();
|
||||
user.setPreferences(preferences);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.helpers.UiUtils;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
|
||||
|
||||
|
|
@ -120,6 +121,12 @@ public class GroupFormActivity extends BaseActivity {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void fillForm() {
|
||||
this.groupNameEditText.setText(this.groupName);
|
||||
this.groupDescriptionEditText.setText(this.groupDescription);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment;
|
||||
import com.viewpagerindicator.CirclePageIndicator;
|
||||
|
||||
|
|
@ -15,6 +16,8 @@ import android.support.v4.view.ViewPager;
|
|||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import butterknife.BindView;
|
||||
|
||||
public class IntroActivity extends BaseActivity implements View.OnClickListener, ViewPager.OnPageChangeListener {
|
||||
|
|
@ -31,6 +34,9 @@ public class IntroActivity extends BaseActivity implements View.OnClickListener,
|
|||
@BindView(R.id.finishButton)
|
||||
Button finishButton;
|
||||
|
||||
@Inject
|
||||
public APIHelper apiHelper;
|
||||
|
||||
@Override
|
||||
protected int getLayoutResId() {
|
||||
return R.layout.activity_intro;
|
||||
|
|
@ -40,19 +46,24 @@ public class IntroActivity extends BaseActivity implements View.OnClickListener,
|
|||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
getHabiticaApplication().getComponent().inject(this);
|
||||
|
||||
setupIntro();
|
||||
indicator.setViewPager(pager);
|
||||
|
||||
this.skipButton.setOnClickListener(this);
|
||||
this.finishButton.setOnClickListener(this);
|
||||
|
||||
HostConfig hostConfig = PrefsActivity.fromContext(this);
|
||||
APIHelper apiHelper = new APIHelper(hostConfig);
|
||||
apiHelper.apiService.getContent()
|
||||
.compose(apiHelper.configureApiCallObserver())
|
||||
.subscribe(contentResult -> {}, throwable -> {});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void setupIntro() {
|
||||
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ import com.facebook.login.LoginResult;
|
|||
import com.facebook.login.widget.LoginButton;
|
||||
import com.habitrpg.android.habitica.APIHelper;
|
||||
import com.habitrpg.android.habitica.BuildConfig;
|
||||
import com.habitrpg.android.habitica.HostConfig;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
|
||||
import com.habitrpg.android.habitica.prefs.scanner.IntentResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
|
@ -26,7 +26,6 @@ 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;
|
||||
|
|
@ -41,6 +40,8 @@ import android.widget.ProgressBar;
|
|||
import android.widget.TableRow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import rx.functions.Action1;
|
||||
|
|
@ -48,13 +49,16 @@ import rx.functions.Action1;
|
|||
/**
|
||||
* @author Mickael Goubin
|
||||
*/
|
||||
public class LoginActivity extends AppCompatActivity
|
||||
public class LoginActivity extends BaseActivity
|
||||
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 apiHelper;
|
||||
@Inject
|
||||
public APIHelper apiHelper;
|
||||
@Inject
|
||||
public SharedPreferences sharedPrefs;
|
||||
public String mTmpUserToken;
|
||||
public String mTmpApiToken;
|
||||
public Boolean isRegistering;
|
||||
|
|
@ -92,9 +96,13 @@ public class LoginActivity extends AppCompatActivity
|
|||
@BindView(R.id.forgot_pw_tv)
|
||||
TextView mForgotPWTV;
|
||||
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@Override
|
||||
protected int getLayoutResId() {
|
||||
return R.layout.activity_login;
|
||||
}
|
||||
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_login);
|
||||
|
||||
//Set default values to avoid null-responses when requesting unedited settings
|
||||
PreferenceManager.setDefaultValues(this, R.xml.preferences_fragment, false);
|
||||
|
|
@ -132,12 +140,6 @@ public class LoginActivity extends AppCompatActivity
|
|||
}
|
||||
});
|
||||
|
||||
HostConfig hc= PrefsActivity.fromContext(this);
|
||||
if(hc ==null) {
|
||||
hc = new HostConfig(BuildConfig.BASE_URL, BuildConfig.PORT, "", "");
|
||||
}
|
||||
apiHelper = new APIHelper(hc);
|
||||
|
||||
this.isRegistering = true;
|
||||
|
||||
JSONObject eventProperties = new JSONObject();
|
||||
|
|
@ -151,7 +153,12 @@ public class LoginActivity extends AppCompatActivity
|
|||
Amplitude.getInstance().logEvent("navigate", eventProperties);
|
||||
}
|
||||
|
||||
private void resetLayout() {
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void resetLayout() {
|
||||
if (this.isRegistering) {
|
||||
if (this.mEmailRow.getVisibility() == View.GONE) {
|
||||
show(this.mEmailRow);
|
||||
|
|
@ -323,11 +330,10 @@ startActivity(i);
|
|||
}
|
||||
|
||||
private void saveTokens(String api, String user) throws Exception {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this);
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
this.apiHelper.updateAuthenticationCredentials(user, api);
|
||||
SharedPreferences.Editor editor = sharedPrefs.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");
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import com.habitrpg.android.habitica.callbacks.ItemsCallback;
|
|||
import com.habitrpg.android.habitica.callbacks.MergeUserCallback;
|
||||
import com.habitrpg.android.habitica.callbacks.TaskScoringCallback;
|
||||
import com.habitrpg.android.habitica.callbacks.UnlockCallback;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.databinding.ValueBarBinding;
|
||||
import com.habitrpg.android.habitica.events.ContentReloadedEvent;
|
||||
import com.habitrpg.android.habitica.events.DisplayFragmentEvent;
|
||||
|
|
@ -39,9 +40,10 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
|||
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.magicmicky.habitrpgwrapper.lib.api.MaintenanceApiService;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.SuppressedModals;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep;
|
||||
|
|
@ -61,7 +63,6 @@ import com.mikepenz.materialdrawer.AccountHeader;
|
|||
import com.mikepenz.materialdrawer.Drawer;
|
||||
import com.mikepenz.materialdrawer.DrawerBuilder;
|
||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
|
||||
import com.mikepenz.materialdrawer.model.SwitchDrawerItem;
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IProfile;
|
||||
import com.raizlabs.android.dbflow.runtime.TransactionManager;
|
||||
|
|
@ -128,6 +129,8 @@ import java.util.Map;
|
|||
import java.util.TimeZone;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import butterknife.BindView;
|
||||
import rx.functions.Action1;
|
||||
|
||||
|
|
@ -156,12 +159,18 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
public ActivityCheckout checkout = null;
|
||||
private Drawer drawer;
|
||||
private Drawer filterDrawer;
|
||||
|
||||
@Inject
|
||||
protected HostConfig hostConfig;
|
||||
@Inject
|
||||
public APIHelper apiHelper;
|
||||
@Inject
|
||||
public MaintenanceApiService maintenanceService;
|
||||
|
||||
public HabitRPGUser user;
|
||||
private AccountHeader accountHeader;
|
||||
private BaseMainFragment activeFragment;
|
||||
private AvatarWithBarsViewModel avatarInHeader;
|
||||
private APIHelper apiHelper;
|
||||
private AlertDialog faintDialog;
|
||||
|
||||
private AvatarView sideAvatarView;
|
||||
|
|
@ -181,15 +190,12 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
this.hostConfig = PrefsActivity.fromContext(this);
|
||||
if (!HabiticaApplication.checkUserAuthentication(this, hostConfig))
|
||||
return;
|
||||
|
||||
//Check if reminder alarm is set
|
||||
scheduleReminder(this);
|
||||
|
||||
HabiticaApplication.ApiHelper = this.apiHelper = new APIHelper(hostConfig);
|
||||
|
||||
new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).async().querySingle(userTransactionListener);
|
||||
|
||||
setupToolbar(toolbar);
|
||||
|
|
@ -213,6 +219,11 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
EventBus.getDefault().register(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
|
@ -269,7 +280,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
}
|
||||
this.activeFragment = fragment;
|
||||
fragment.setArguments(getIntent().getExtras());
|
||||
fragment.apiHelper = apiHelper;
|
||||
fragment.setUser(user);
|
||||
fragment.setActivity(this);
|
||||
fragment.setTabLayout(detail_tabs);
|
||||
|
|
@ -1214,7 +1224,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
}
|
||||
|
||||
private void checkMaintenance() {
|
||||
this.apiHelper.maintenanceService.getMaintenanceStatus()
|
||||
this.maintenanceService.getMaintenanceStatus()
|
||||
.compose(apiHelper.configureApiCallObserver())
|
||||
.subscribe(maintenanceResponse -> {
|
||||
if (maintenanceResponse.activeMaintenance) {
|
||||
|
|
|
|||
|
|
@ -2,9 +2,12 @@ package com.habitrpg.android.habitica.ui.activities;
|
|||
|
||||
import com.github.data5tream.emojilib.EmojiTextView;
|
||||
import com.habitrpg.android.habitica.APIHelper;
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
import com.habitrpg.android.habitica.HostConfig;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.MaintenanceApiService;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import android.content.Intent;
|
||||
|
|
@ -16,8 +19,12 @@ import android.widget.Button;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
public class MaintenanceActivity extends BaseActivity {
|
||||
|
||||
|
|
@ -32,7 +39,10 @@ public class MaintenanceActivity extends BaseActivity {
|
|||
|
||||
@BindView(R.id.playStoreButton)
|
||||
Button playStoreButton;
|
||||
private APIHelper apiHelper;
|
||||
|
||||
@Inject
|
||||
public MaintenanceApiService maintenanceService;
|
||||
|
||||
private Boolean isDeprecationNotice;
|
||||
|
||||
@Override
|
||||
|
|
@ -57,16 +67,20 @@ public class MaintenanceActivity extends BaseActivity {
|
|||
} else {
|
||||
this.playStoreButton.setVisibility(View.GONE);
|
||||
}
|
||||
HostConfig hostConfig = PrefsActivity.fromContext(this);
|
||||
apiHelper = new APIHelper(hostConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (!isDeprecationNotice) {
|
||||
this.apiHelper.maintenanceService.getMaintenanceStatus()
|
||||
.compose(this.apiHelper.configureApiCallObserver())
|
||||
this.maintenanceService.getMaintenanceStatus()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(maintenanceResponse -> {
|
||||
if (!maintenanceResponse.activeMaintenance) {
|
||||
finish();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.activities;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment;
|
||||
|
||||
import android.content.Intent;
|
||||
|
|
@ -41,6 +42,11 @@ public class PartyInviteActivity extends BaseActivity {
|
|||
setViewPagerAdapter();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.preferences.AccountDetailsFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.preferences.PreferencesFragment;
|
||||
|
||||
|
|
@ -38,6 +39,11 @@ public class PrefsActivity extends BaseActivity implements
|
|||
.commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSupportNavigateUp() {
|
||||
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ 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.components.AppComponent;
|
||||
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;
|
||||
|
|
@ -30,6 +31,8 @@ import android.widget.Button;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import butterknife.BindView;
|
||||
|
||||
public class SetupActivity extends BaseActivity implements View.OnClickListener, ViewPager.OnPageChangeListener, HabitRPGUserCallback.OnUserReceived {
|
||||
|
|
@ -49,7 +52,9 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener,
|
|||
AvatarSetupFragment avatarSetupFragment;
|
||||
TaskSetupFragment taskSetupFragment;
|
||||
|
||||
private APIHelper apiHelper;
|
||||
@Inject
|
||||
public APIHelper apiHelper;
|
||||
@Inject
|
||||
protected HostConfig hostConfig;
|
||||
HabitRPGUser user;
|
||||
Boolean completedSetup;
|
||||
|
|
@ -62,14 +67,8 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener,
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
this.hostConfig = PrefsActivity.fromContext(this);
|
||||
|
||||
this.apiHelper = new APIHelper(hostConfig);
|
||||
|
||||
this.user = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle();
|
||||
|
||||
|
||||
this.skipButton.setOnClickListener(this);
|
||||
this.nextButton.setOnClickListener(this);
|
||||
this.previousButton.setOnClickListener(this);
|
||||
|
|
@ -86,6 +85,11 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener,
|
|||
Amplitude.getInstance().logEvent("setup", eventProperties);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.activities;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter;
|
||||
import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
|
@ -40,6 +41,11 @@ public class SkillTasksActivity extends BaseActivity {
|
|||
loadTaskLists();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
public void loadTaskLists() {
|
||||
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.TaskSaveEvent;
|
||||
import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand;
|
||||
import com.habitrpg.android.habitica.ui.WrapContentRecyclerViewLayoutManager;
|
||||
|
|
@ -393,6 +394,11 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
|
|||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private boolean isEmojiEditText(View view) {
|
||||
return view instanceof EmojiEditText;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments;
|
||||
|
||||
import com.amplitude.api.Amplitude;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.DisplayTutorialEvent;
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep;
|
||||
import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction;
|
||||
import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener;
|
||||
|
|
@ -26,7 +28,7 @@ import java.util.Date;
|
|||
import butterknife.ButterKnife;
|
||||
import butterknife.Unbinder;
|
||||
|
||||
public class BaseFragment extends DialogFragment {
|
||||
public abstract class BaseFragment extends DialogFragment {
|
||||
|
||||
private boolean registerEventBus = false;
|
||||
|
||||
|
|
@ -63,6 +65,8 @@ public class BaseFragment extends DialogFragment {
|
|||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
|
||||
injectFragment(((MainActivity)getActivity()).getHabiticaApplication().getComponent());
|
||||
|
||||
// Receive Events
|
||||
try {
|
||||
EventBus.getDefault().register(this);
|
||||
|
|
@ -74,6 +78,8 @@ public class BaseFragment extends DialogFragment {
|
|||
return null;
|
||||
}
|
||||
|
||||
public abstract void injectFragment(AppComponent component);
|
||||
|
||||
@CallSuper
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
|
|
|
|||
|
|
@ -15,12 +15,16 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public abstract class BaseMainFragment extends BaseFragment {
|
||||
|
||||
@Inject
|
||||
public APIHelper apiHelper;
|
||||
|
||||
public MainActivity activity;
|
||||
public TabLayout tabLayout;
|
||||
public FrameLayout floatingMenuWrapper;
|
||||
public APIHelper apiHelper;
|
||||
protected HabitRPGUser user;
|
||||
public boolean usesTabLayout;
|
||||
public int fragmentSidebarPosition;
|
||||
|
|
@ -75,10 +79,6 @@ public abstract class BaseMainFragment extends BaseFragment {
|
|||
}
|
||||
}
|
||||
|
||||
if (apiHelper == null) {
|
||||
apiHelper = new APIHelper(PrefsActivity.fromContext(getContext()));
|
||||
}
|
||||
|
||||
if (floatingMenuWrapper != null) {
|
||||
floatingMenuWrapper.removeAllViews();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.ui.fragments;
|
|||
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.BoughtGemsEvent;
|
||||
import com.habitrpg.android.habitica.ui.helpers.ViewHelper;
|
||||
|
||||
|
|
@ -57,6 +58,11 @@ public class GemsPurchaseFragment extends BaseMainFragment {
|
|||
return inflater.inflate(R.layout.fragment_gem_purchase, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.ui.fragments;
|
|||
|
||||
import com.habitrpg.android.habitica.BuildConfig;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
|
|
@ -33,4 +34,9 @@ public class NewsFragment extends BaseMainFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.faq;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle;
|
||||
|
|
@ -40,6 +41,10 @@ public class FAQDetailFragment extends BaseMainFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
}
|
||||
|
||||
public void setArticle(FAQArticle article) {
|
||||
this.article = article;
|
||||
if (this.questionTextView != null) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.faq;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.menu.DividerItemDecoration;
|
||||
import com.habitrpg.android.habitica.ui.adapter.FAQOverviewRecyclerAdapter;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
|
|
@ -42,7 +43,12 @@ public class FAQOverviewFragment extends BaseMainFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
private void loadArticles() {
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void loadArticles() {
|
||||
if(user == null || adapter == null){
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.customization;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.adapter.CustomizationRecyclerViewAdapter;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarginDecoration;
|
||||
|
|
@ -76,6 +77,11 @@ public class AvatarCustomizationFragment extends BaseMainFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void loadCustomizations() {
|
||||
if(user == null || adapter == null){
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.databinding.FragmentAvatarOverviewBinding;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
|
@ -100,6 +101,11 @@ public class AvatarOverviewFragment extends BaseMainFragment implements AdapterV
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void displayCustomizationFragment(String type, String category) {
|
||||
AvatarCustomizationFragment fragment = new AvatarCustomizationFragment();
|
||||
fragment.type = type;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.equipment;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.menu.DividerItemDecoration;
|
||||
import com.habitrpg.android.habitica.ui.adapter.inventory.EquipmentRecyclerViewAdapter;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
|
|
@ -54,6 +55,11 @@ public class EquipmentDetailFragment extends BaseMainFragment {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void loadGear() {
|
||||
if(user == null || adapter == null){
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.equipment;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.databinding.FragmentEquipmentOverviewBinding;
|
||||
import com.habitrpg.android.habitica.events.commands.UpdateUserCommand;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
|
|
@ -131,6 +132,11 @@ public class EquipmentOverviewFragment extends BaseMainFragment implements Trans
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void displayEquipmentDetailList(String type, String equipped, Boolean isCostume) {
|
||||
EquipmentDetailFragment fragment = new EquipmentDetailFragment();
|
||||
fragment.type = type;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.items;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.ContentReloadedEvent;
|
||||
import com.habitrpg.android.habitica.ui.menu.DividerItemDecoration;
|
||||
import com.habitrpg.android.habitica.ui.adapter.inventory.ItemRecyclerAdapter;
|
||||
|
|
@ -114,6 +115,11 @@ public class ItemRecyclerFragment extends BaseFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.items;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.commands.HatchingCommand;
|
||||
import com.habitrpg.android.habitica.events.commands.InvitePartyToQuestCommand;
|
||||
import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand;
|
||||
|
|
@ -38,6 +39,11 @@ public class ItemsFragment extends BaseMainFragment {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
public void setViewPagerAdapter() {
|
||||
android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.stable;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
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;
|
||||
|
|
@ -62,6 +63,11 @@ public class MountDetailRecyclerFragment extends BaseMainFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.stable;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
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;
|
||||
|
|
@ -67,6 +68,11 @@ public class PetDetailRecyclerFragment extends BaseMainFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.stable;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
|
@ -31,6 +32,11 @@ public class StableFragment extends BaseMainFragment {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
public void setViewPagerAdapter() {
|
||||
android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.stable;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.ContentReloadedEvent;
|
||||
import com.habitrpg.android.habitica.events.ReloadContentEvent;
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity;
|
||||
|
|
@ -97,6 +98,11 @@ public class StableRecyclerFragment extends BaseFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.setup;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.AvatarView;
|
||||
import com.habitrpg.android.habitica.ui.activities.SetupActivity;
|
||||
import com.habitrpg.android.habitica.ui.adapter.setup.CustomizationSetupAdapter;
|
||||
|
|
@ -81,6 +82,11 @@ public class AvatarSetupFragment extends BaseFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.setup;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
|
@ -53,6 +54,11 @@ public class IntroFragment extends BaseFragment {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
public void setImage(Drawable image) {
|
||||
this.image = image;
|
||||
if (this.imageView != null && image != null) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.setup;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
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;
|
||||
|
|
@ -56,6 +57,11 @@ public class TaskSetupFragment extends BaseFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void setTasks() {
|
||||
this.taskGroups = new String[][]{
|
||||
{getString(R.string.setup_group_work), "work"},
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.skills;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand;
|
||||
import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
|
|
@ -15,7 +17,7 @@ import android.view.LayoutInflater;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
public class SkillTasksRecyclerViewFragment extends Fragment implements View.OnClickListener {
|
||||
public class SkillTasksRecyclerViewFragment extends BaseFragment implements View.OnClickListener {
|
||||
public RecyclerView mRecyclerView;
|
||||
public RecyclerView.Adapter mAdapter;
|
||||
private String classType;
|
||||
|
|
@ -35,7 +37,12 @@ public class SkillTasksRecyclerViewFragment extends Fragment implements View.OnC
|
|||
return view;
|
||||
}
|
||||
|
||||
LinearLayoutManager layoutManager = null;
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
LinearLayoutManager layoutManager = null;
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.ui.fragments.skills;
|
|||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.MergeUserCallback;
|
||||
import com.habitrpg.android.habitica.callbacks.SkillCallback;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.SkillUsedEvent;
|
||||
import com.habitrpg.android.habitica.events.commands.UseSkillCommand;
|
||||
import com.habitrpg.android.habitica.ui.helpers.UiUtils;
|
||||
|
|
@ -58,6 +59,11 @@ public class SkillsFragment extends BaseMainFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@BindView(R.id.recyclerView)
|
||||
RecyclerView mRecyclerView;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.ui.fragments.social;
|
|||
import com.habitrpg.android.habitica.APIHelper;
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.ToggledInnStateEvent;
|
||||
import com.habitrpg.android.habitica.events.commands.DeleteChatMessageCommand;
|
||||
import com.habitrpg.android.habitica.events.commands.FlagChatMessageCommand;
|
||||
|
|
@ -39,6 +40,8 @@ import java.util.ArrayList;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import rx.functions.Action1;
|
||||
|
|
@ -48,7 +51,9 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout
|
|||
private Context ctx;
|
||||
private String groupId;
|
||||
public String seenGroupId;
|
||||
private APIHelper apiHelper;
|
||||
|
||||
@Inject
|
||||
public APIHelper apiHelper;
|
||||
private HabitRPGUser user;
|
||||
private String userId;
|
||||
public boolean isTavern;
|
||||
|
|
@ -94,13 +99,14 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout
|
|||
if (view == null)
|
||||
view = inflater.inflate(R.layout.fragment_chatlist, container, false);
|
||||
|
||||
if (apiHelper == null) {
|
||||
apiHelper = new APIHelper(PrefsActivity.fromContext(getContext()));
|
||||
}
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@BindView(R.id.chat_list)
|
||||
RecyclerView mRecyclerView;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.databinding.FragmentGroupInfoBinding;
|
||||
import com.habitrpg.android.habitica.databinding.ValueBarBinding;
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.QuestCollectRecyclerViewAdapter;
|
||||
|
|
@ -99,6 +100,11 @@ public class GroupInformationFragment extends BaseFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Group;
|
||||
|
|
@ -60,6 +61,11 @@ public class GuildFragment extends BaseMainFragment implements Action1<Group> {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Group;
|
||||
|
||||
|
|
@ -54,6 +55,11 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
swipeRefreshLayout.setRefreshing(true);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.menu.DividerItemDecoration;
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.PublicGuildsRecyclerViewAdapter;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
|
|
@ -51,6 +52,11 @@ public class PublicGuildsFragment extends BaseMainFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstance) {
|
||||
super.onCreate(savedInstance);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Group;
|
||||
|
||||
|
|
@ -39,6 +40,11 @@ public class TavernFragment extends BaseMainFragment {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
|
|
@ -92,6 +93,11 @@ public class PartyFragment extends BaseMainFragment {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
private void updateGroupUI() {
|
||||
if (partyMemberListFragment != null) {
|
||||
partyMemberListFragment.setMemberList(group.members);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social.party;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
|
@ -48,6 +49,11 @@ public class PartyInviteFragment extends BaseFragment {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@OnClick(R.id.addInviteButton)
|
||||
public void addInviteField() {
|
||||
EditText editText = new EditText(getContext());
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social.party;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
|
@ -49,6 +50,11 @@ public class PartyMemberListFragment extends BaseFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.tasks;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand;
|
||||
import com.habitrpg.android.habitica.ui.menu.DividerItemDecoration;
|
||||
import com.habitrpg.android.habitica.ui.adapter.tasks.BaseTasksRecyclerViewAdapter;
|
||||
|
|
@ -86,6 +87,11 @@ public class TaskRecyclerViewFragment extends BaseFragment implements View.OnCli
|
|||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
LinearLayoutManager layoutManager = null;
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ 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.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.events.HabitScoreEvent;
|
||||
import com.habitrpg.android.habitica.events.TaskSaveEvent;
|
||||
import com.habitrpg.android.habitica.events.TaskTappedEvent;
|
||||
|
|
@ -124,6 +125,7 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi
|
|||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
|
||||
this.usesTabLayout = true;
|
||||
this.displayingTaskForm = false;
|
||||
super.onCreateView(inflater, container, savedInstanceState);
|
||||
|
|
@ -154,6 +156,11 @@ public class TasksFragment extends BaseMainFragment implements OnCheckedChangeLi
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectFragment(AppComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.menu_main_activity, menu);
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
package com.habitrpg.android.habitica.widget;
|
||||
|
||||
import com.habitrpg.android.habitica.APIHelper;
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
import com.habitrpg.android.habitica.HostConfig;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity;
|
||||
import com.habitrpg.android.habitica.ui.activities.PrefsActivity;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.raizlabs.android.dbflow.sql.language.Update;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
|
|
@ -17,6 +19,8 @@ import android.os.IBinder;
|
|||
import android.util.Log;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* The service that should update the simple widget
|
||||
*
|
||||
|
|
@ -26,30 +30,30 @@ import android.widget.RemoteViews;
|
|||
public class UpdateWidgetService extends Service implements HabitRPGUserCallback.OnUserReceived {
|
||||
private static final String LOG = ".simplewidget.service";
|
||||
private AppWidgetManager appWidgetManager;
|
||||
private APIHelper apiHelper;
|
||||
|
||||
@Inject
|
||||
public APIHelper apiHelper;
|
||||
|
||||
public UpdateWidgetService() {
|
||||
super();
|
||||
((HabiticaApplication)getApplication()).getComponent().inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onStartCommand(final Intent intent, int flags, int startId) {
|
||||
Log.i(LOG, "Service onStart Called");
|
||||
|
||||
this.appWidgetManager = AppWidgetManager.getInstance(this);
|
||||
int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
|
||||
ComponentName thisWidget = new ComponentName(this,
|
||||
SimpleWidget.class);
|
||||
int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
|
||||
Log.w(LOG, "From Intent" + String.valueOf(allWidgetIds.length));
|
||||
Log.w(LOG, "Direct" + String.valueOf(allWidgetIds2.length));
|
||||
|
||||
HostConfig hc = PrefsActivity.fromContext(this);
|
||||
if (hc != null && hc.getApi() != null && !hc.getApi().equals("") && hc.getUser() != null && !hc.getUser().equals("")) {
|
||||
this.apiHelper = new APIHelper(hc);
|
||||
if (apiHelper != null) {
|
||||
apiHelper.retrieveUser(true).subscribe(new HabitRPGUserCallback(this));
|
||||
for (int widgetId : allWidgetIds) {
|
||||
RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.simple_widget);
|
||||
appWidgetManager.updateAppWidget(widgetId, remoteViews);
|
||||
}
|
||||
} else {
|
||||
Log.w(LOG, "HostConfig is null");
|
||||
for (int widgetId : allWidgetIds) {
|
||||
RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.simple_widget);
|
||||
RemoteViews textConnect = new RemoteViews(this.getPackageName(), R.layout.simple_textview);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ import com.magicmicky.habitrpgwrapper.lib.models.Group;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Items;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Quest;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Status;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
|
||||
|
|
@ -25,6 +27,7 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import retrofit2.Call;
|
||||
import retrofit2.http.Body;
|
||||
import retrofit2.http.DELETE;
|
||||
import retrofit2.http.GET;
|
||||
|
|
@ -206,4 +209,8 @@ public interface ApiService {
|
|||
|
||||
@POST("groups/{gid}/quests/leave")
|
||||
Observable<Void> leaveQuest(@Path("gid") String groupId);
|
||||
|
||||
@POST("/iap/android/verify")
|
||||
Call<PurchaseValidationResult> validatePurchase(@Body PurchaseValidationRequest request);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
package com.magicmicky.habitrpgwrapper.lib.api;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult;
|
||||
|
||||
import retrofit2.Call;
|
||||
import retrofit2.http.Body;
|
||||
import retrofit2.http.POST;
|
||||
import retrofit2.http.Query;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Negue on 27.11.2015.
|
||||
*/
|
||||
public interface InAppPurchasesApiService {
|
||||
@POST("iap/android/verify")
|
||||
Call<PurchaseValidationResult> validatePurchase(@Query("_id") String id, @Query("apiToken") String apiToken, @Body PurchaseValidationRequest request);
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.magicmicky.habitrpgwrapper.lib.utils;
|
||||
|
||||
import com.google.gson.TypeAdapter;
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import com.google.gson.stream.JsonToken;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class BooleanAsIntAdapter extends TypeAdapter<Boolean> {
|
||||
|
||||
@Override
|
||||
public void write(JsonWriter out, Boolean value) throws IOException {
|
||||
if (value == null) {
|
||||
out.nullValue();
|
||||
} else {
|
||||
out.value(value);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean read(JsonReader in) throws IOException {
|
||||
JsonToken peek = in.peek();
|
||||
switch (peek) {
|
||||
case BOOLEAN:
|
||||
return in.nextBoolean();
|
||||
case NULL:
|
||||
in.nextNull();
|
||||
return null;
|
||||
case NUMBER:
|
||||
return in.nextInt() != 0;
|
||||
case STRING:
|
||||
return Boolean.parseBoolean(in.nextString());
|
||||
default:
|
||||
throw new IllegalStateException("Expected BOOLEAN or NUMBER but was " + peek);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue