diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index a2800297a..0bf60f924 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -170,6 +170,15 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
+
+
+
+
+
+
+
+
diff --git a/Habitica/res/drawable/exp_progress.xml b/Habitica/res/drawable/exp_progress.xml
new file mode 100644
index 000000000..3cdc424d6
--- /dev/null
+++ b/Habitica/res/drawable/exp_progress.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/drawable/hp_progress.xml b/Habitica/res/drawable/hp_progress.xml
new file mode 100644
index 000000000..541d378f2
--- /dev/null
+++ b/Habitica/res/drawable/hp_progress.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/drawable/mp_progress.xml b/Habitica/res/drawable/mp_progress.xml
new file mode 100644
index 000000000..4936c0975
--- /dev/null
+++ b/Habitica/res/drawable/mp_progress.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/drawable/widget_background.xml b/Habitica/res/drawable/widget_background.xml
new file mode 100644
index 000000000..c617bca2d
--- /dev/null
+++ b/Habitica/res/drawable/widget_background.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/widget_avatar_stats.xml b/Habitica/res/layout/widget_avatar_stats.xml
new file mode 100644
index 000000000..c4623f7ff
--- /dev/null
+++ b/Habitica/res/layout/widget_avatar_stats.xml
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml
index 74827ffd9..7c449349a 100644
--- a/Habitica/res/values/colors.xml
+++ b/Habitica/res/values/colors.xml
@@ -100,4 +100,6 @@
#fff0ad4e
#ffd9534f
+ #c8432874
+
diff --git a/Habitica/res/values/dimens.xml b/Habitica/res/values/dimens.xml
index 8d7327927..24fcffd16 100644
--- a/Habitica/res/values/dimens.xml
+++ b/Habitica/res/values/dimens.xml
@@ -17,6 +17,7 @@
15dp
5dp
+ 2dp
5dp
140dp
147dp
@@ -77,4 +78,5 @@
5dp
7dp
40dp
+ 13dp
\ No newline at end of file
diff --git a/Habitica/res/xml/avatar_widget_info.xml b/Habitica/res/xml/avatar_widget_info.xml
new file mode 100644
index 000000000..c2a678663
--- /dev/null
+++ b/Habitica/res/xml/avatar_widget_info.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/Habitica/res/xml/widget_info.xml b/Habitica/res/xml/widget_info.xml
deleted file mode 100644
index f9be3f9d6..000000000
--- a/Habitica/res/xml/widget_info.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java
index 7369fba79..63d12c879 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java
@@ -17,8 +17,6 @@ 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;
@@ -68,13 +66,12 @@ import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
-import android.os.Build;
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.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
@@ -82,11 +79,9 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLHandshakeException;
import okhttp3.Interceptor;
import okhttp3.MediaType;
@@ -95,8 +90,6 @@ import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
-import okio.Buffer;
-import retrofit2.Call;
import retrofit2.Converter;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.HttpException;
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
index 41996eac5..1392be208 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
@@ -53,7 +53,7 @@ import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragme
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 com.habitrpg.android.habitica.widget.AvatarStatsWidgetService;
import javax.inject.Singleton;
@@ -62,7 +62,7 @@ import dagger.Component;
@Singleton
@Component(modules = {AppModule.class, ApiModule.class})
public interface AppComponent {
- void inject(UpdateWidgetService target);
+ void inject(AvatarStatsWidgetService target);
void inject(ClassSelectionActivity classSelectionActivity);
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.java
index 8d5005b8d..55c18f293 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.java
@@ -117,18 +117,15 @@ public class AvatarWithBarsViewModel implements View.OnClickListener {
switch (stats.get_class()) {
case warrior:
drawable = ResourcesCompat.getDrawable(res, R.drawable.ic_header_warrior, null);
-
break;
case rogue:
drawable = ResourcesCompat.getDrawable(res, R.drawable.ic_header_rogue, null);
break;
case wizard:
drawable = ResourcesCompat.getDrawable(res, R.drawable.ic_header_mage, null);
-
break;
case healer:
drawable = ResourcesCompat.getDrawable(res, R.drawable.ic_header_healer, null);
-
break;
case base:
default:
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
index a2978fc9b..713771be6 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
@@ -46,6 +46,7 @@ import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils;
import com.habitrpg.android.habitica.ui.helpers.UiUtils;
import com.habitrpg.android.habitica.ui.menu.MainDrawerBuilder;
import com.habitrpg.android.habitica.userpicture.BitmapUtils;
+import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider;
import com.magicmicky.habitrpgwrapper.lib.api.MaintenanceApiService;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.Preferences;
@@ -97,6 +98,8 @@ import org.solovyev.android.checkout.Checkout;
import android.app.AlarmManager;
import android.app.PendingIntent;
+import android.appwidget.AppWidgetManager;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -286,6 +289,20 @@ public class MainActivity extends BaseActivity implements Action1, Ha
}
}
+ @Override
+ protected void onPause() {
+ updateWidgets(AvatarStatsWidgetProvider.class);
+ super.onPause();
+ }
+
+ private void updateWidgets(Class widgetClass) {
+ Intent intent = new Intent(this,widgetClass);
+ intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
+ int ids[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), widgetClass));
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
+ sendBroadcast(intent);
+ }
+
private void setupCheckout() {
checkout = Checkout.forActivity(this, HabiticaApplication.getInstance(this).getCheckout());
checkout.start();
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.java
new file mode 100644
index 000000000..c73be3831
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.java
@@ -0,0 +1,105 @@
+package com.habitrpg.android.habitica.widget;
+
+import com.habitrpg.android.habitica.R;
+
+import android.annotation.TargetApi;
+import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProvider;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.RemoteViews;
+
+public class AvatarStatsWidgetProvider extends AppWidgetProvider {
+ private static final String LOG = AvatarStatsWidgetProvider.class.getName();
+
+ /**
+ * Returns number of cells needed for given size of the widget.
+ * see http://stackoverflow.com/questions/14270138/dynamically-adjusting-widgets-content-and-layout-to-the-size-the-user-defined-t
+ *
+ * @param size Widget size in dp.
+ * @return Size in number of cells.
+ */
+ private static int getCellsForSize(int size) {
+ int n = 2;
+ while (70 * n - 30 < size) {
+ ++n;
+ }
+ return n - 1;
+ }
+
+ @Override
+ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
+ // Get all ids
+ ComponentName thisWidget = new ComponentName(context,
+ AvatarStatsWidgetProvider.class);
+ int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
+
+ if (Build.VERSION.SDK_INT >= 16) {
+ for (int widgetId : allWidgetIds) {
+ Bundle options = appWidgetManager.getAppWidgetOptions(widgetId);
+ appWidgetManager.partiallyUpdateAppWidget(widgetId,
+ configureRemoteViews(context, options));
+ }
+ }
+
+ // Build the intent to call the service
+ Intent intent = new Intent(context.getApplicationContext(),
+ AvatarStatsWidgetService.class);
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
+
+ context.startService(intent);
+ }
+
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
+ @Override
+ public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
+ Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);
+
+ appWidgetManager.partiallyUpdateAppWidget(appWidgetId,
+ configureRemoteViews(context, options));
+
+ super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId,
+ newOptions);
+
+ }
+
+ /**
+ * Determine appropriate view based on width provided.
+ * see http://stackoverflow.com/questions/14270138/dynamically-adjusting-widgets-content-and-layout-to-the-size-the-user-defined-t
+ */
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
+ private RemoteViews configureRemoteViews(Context context, Bundle options) {
+
+ int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
+ int minHeight = options
+ .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
+
+ // First find out rows and columns based on width provided.
+ int rows = getCellsForSize(minHeight);
+ int columns = getCellsForSize(minWidth);
+ RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
+ R.layout.widget_avatar_stats);
+
+ if (columns > 3) {
+ remoteViews.setViewVisibility(R.id.avatar_view, View.VISIBLE);
+ } else {
+ remoteViews.setViewVisibility(R.id.avatar_view, View.GONE);
+ }
+
+ if (rows > 1) {
+ remoteViews.setViewVisibility(R.id.mp_wrapper, View.VISIBLE);
+ remoteViews.setViewVisibility(R.id.detail_info_view, View.VISIBLE);
+ } else {
+ remoteViews.setViewVisibility(R.id.mp_wrapper, View.GONE);
+ remoteViews.setViewVisibility(R.id.detail_info_view, View.GONE);
+ }
+
+ return remoteViews;
+
+ }
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetService.java
new file mode 100644
index 000000000..a767aa6dc
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetService.java
@@ -0,0 +1,122 @@
+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.AvatarView;
+import com.habitrpg.android.habitica.ui.activities.MainActivity;
+import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
+import com.magicmicky.habitrpgwrapper.lib.models.Stats;
+import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction;
+import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener;
+import com.raizlabs.android.dbflow.sql.builder.Condition;
+import com.raizlabs.android.dbflow.sql.language.Select;
+
+import android.app.PendingIntent;
+import android.app.Service;
+import android.appwidget.AppWidgetManager;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.os.IBinder;
+import android.util.Log;
+import android.view.View;
+import android.widget.RemoteViews;
+
+import javax.inject.Inject;
+
+/**
+ * The service that should update the simple widget
+ *
+ * @see com.habitrpg.android.habitica.widget.SimpleWidget
+ * Created by Mickael on 01/11/13.
+ */
+public class AvatarStatsWidgetService extends Service {
+ private static final String LOG = ".avatarwidget.service";
+ @Inject
+ public HostConfig hostConfig;
+ private AppWidgetManager appWidgetManager;
+
+
+ @Override
+ public int onStartCommand(final Intent intent, int flags, int startId) {
+ HabiticaApplication application = (HabiticaApplication) getApplication();
+ application.getComponent().inject(this);
+ this.appWidgetManager = AppWidgetManager.getInstance(this);
+
+ new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).async().querySingle(userTransactionListener);
+
+ stopSelf();
+
+ return START_STICKY;
+ }
+
+ private TransactionListener userTransactionListener = new TransactionListener() {
+ @Override
+ public void onResultReceived(HabitRPGUser habitRPGUser) {
+ updateData(habitRPGUser);
+ }
+
+ @Override
+ public boolean onReady(BaseTransaction baseTransaction) {
+ return true;
+ }
+
+ @Override
+ public boolean hasResult(BaseTransaction baseTransaction, HabitRPGUser habitRPGUser) {
+ return true;
+ }
+ };
+
+ private void updateData(HabitRPGUser user) {
+ if (user == null || user.getStats() == null) {
+ return;
+ }
+ Stats stats = user.getStats();
+ ComponentName thisWidget = new ComponentName(this, AvatarStatsWidgetProvider.class);
+ int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
+ String healthValueString = "" + stats.getHp().intValue() + "/" + stats.getMaxHealth();
+ String expValueString = "" + stats.getExp().intValue() + "/" + stats.getToNextLevel();
+ String mpValueString = "" + stats.getMp().intValue() + "/" + stats.getMaxMP();
+
+ RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.widget_avatar_stats);
+
+ remoteViews.setTextViewText(R.id.TV_hp_value, healthValueString);
+ remoteViews.setTextViewText(R.id.exp_TV_value, expValueString);
+ remoteViews.setTextViewText(R.id.mp_TV_value, mpValueString);
+
+ remoteViews.setProgressBar(R.id.hp_bar, stats.getMaxHealth(), stats.getHp().intValue(), false);
+ remoteViews.setProgressBar(R.id.exp_bar, stats.getToNextLevel(), stats.getExp().intValue(), false);
+ remoteViews.setProgressBar(R.id.mp_bar, stats.getMaxMP(), stats.getMp().intValue(), false);
+ remoteViews.setViewVisibility(R.id.mp_wrapper, (stats.get_class() == null || stats.getLvl() < 10 || user.getPreferences().getDisableClasses()) ? View.GONE : View.VISIBLE);
+
+ int gp = (stats.getGp().intValue());
+ int sp = (int) ((stats.getGp() - gp) * 100);
+ remoteViews.setTextViewText(R.id.gold_tv, String.valueOf(gp));
+ remoteViews.setTextViewText(R.id.silver_tv, String.valueOf(sp));
+ remoteViews.setTextViewText(R.id.gems_tv, String.valueOf((int)(user.getBalance() * 4)));
+ remoteViews.setTextViewText(R.id.lvl_tv, getString(R.string.user_level, user.getStats().getLvl()));
+
+ AvatarView avatarView = new AvatarView(this, true, true, true);;
+ avatarView.setUser(user);
+ avatarView.onAvatarImageReady(bitmap -> {
+ Log.e("AVATAR BITMAP", bitmap.toString());
+ remoteViews.setImageViewBitmap(R.id.avatar_view, bitmap);
+ appWidgetManager.partiallyUpdateAppWidget(allWidgetIds, remoteViews);
+ });
+ Log.e("AVATAR THING", "BLA");
+
+ //If user click on life and xp: open the app
+ Intent openAppIntent = new Intent(this.getApplicationContext(), MainActivity.class);
+ PendingIntent openApp = PendingIntent.getActivity(this, 0, openAppIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ remoteViews.setOnClickPendingIntent(R.id.widget_main_view, openApp);
+ appWidgetManager.partiallyUpdateAppWidget(allWidgetIds, remoteViews);
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/SimpleWidget.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/SimpleWidget.java
index 681a72c00..005f978bd 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/SimpleWidget.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/SimpleWidget.java
@@ -43,9 +43,17 @@ public class SimpleWidget extends AppWidgetProvider {
ComponentName thisWidget = new ComponentName(context,
SimpleWidget.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
+
+ if (Build.VERSION.SDK_INT >= 16) {
+ for (int widgetId : allWidgetIds) {
+ Bundle options = appWidgetManager.getAppWidgetOptions(widgetId);
+ appWidgetManager.updateAppWidget(widgetId,
+ getRemoteViews(context, options));
+ }
+ }
// Build the intent to call the service
Intent intent = new Intent(context.getApplicationContext(),
- UpdateWidgetService.class);
+ AvatarStatsWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
// Update the widgets via the service
@@ -58,12 +66,8 @@ public class SimpleWidget extends AppWidgetProvider {
Log.v(LOG, "onAppWidgetOptionChanged call");
Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);
- int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
- int minHeight = options
- .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
-
appWidgetManager.updateAppWidget(appWidgetId,
- getRemoteViews(context, minWidth, minHeight));
+ getRemoteViews(context, options));
super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId,
newOptions);
@@ -74,8 +78,13 @@ public class SimpleWidget extends AppWidgetProvider {
* Determine appropriate view based on width provided.
* see http://stackoverflow.com/questions/14270138/dynamically-adjusting-widgets-content-and-layout-to-the-size-the-user-defined-t
*/
- private RemoteViews getRemoteViews(Context context, int minWidth,
- int minHeight) {
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
+ private RemoteViews getRemoteViews(Context context, Bundle options) {
+
+ int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
+ int minHeight = options
+ .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
+
// First find out rows and columns based on width provided.
int rows = getCellsForSize(minHeight);
int columns = getCellsForSize(minWidth);
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/UpdateWidgetService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/UpdateWidgetService.java
deleted file mode 100644
index 4d48dad35..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/UpdateWidgetService.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.habitrpg.android.habitica.widget;
-
-import com.habitrpg.android.habitica.APIHelper;
-import com.habitrpg.android.habitica.HabiticaApplication;
-import com.habitrpg.android.habitica.R;
-import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
-import com.habitrpg.android.habitica.ui.activities.MainActivity;
-import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
-
-import android.app.PendingIntent;
-import android.app.Service;
-import android.appwidget.AppWidgetManager;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.os.IBinder;
-import android.widget.RemoteViews;
-
-import javax.inject.Inject;
-
-/**
- * The service that should update the simple widget
- *
- * @see com.habitrpg.android.habitica.widget.SimpleWidget
- * Created by Mickael on 01/11/13.
- */
-public class UpdateWidgetService extends Service implements HabitRPGUserCallback.OnUserReceived {
- private static final String LOG = ".simplewidget.service";
- @Inject
- public APIHelper apiHelper;
- private AppWidgetManager appWidgetManager;
-
- public UpdateWidgetService() {
- super();
- ((HabiticaApplication) getApplication()).getComponent().inject(this);
- }
-
- @Override
- public int onStartCommand(final Intent intent, int flags, int startId) {
- 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);
-
- 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 {
- for (int widgetId : allWidgetIds) {
- RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.simple_widget);
- RemoteViews textConnect = new RemoteViews(this.getPackageName(), R.layout.simple_textview);
- textConnect.setTextViewText(R.id.TV_simple_textview, getString(R.string.please_connect));
- remoteViews.removeAllViews(R.id.LL_header);
- remoteViews.addView(R.id.LL_header, textConnect);
-
-
- Intent clickIntent = new Intent(this.getApplicationContext(), SimpleWidget.class);
- clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
- clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
- PendingIntent updateIntent = PendingIntent.getBroadcast(this, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
- remoteViews.setOnClickPendingIntent(R.id.BT_refresh, updateIntent);
-
- Intent openAppIntent = new Intent(this.getApplicationContext(), MainActivity.class);
- PendingIntent openApp = PendingIntent.getActivity(this, 0, openAppIntent, PendingIntent.FLAG_UPDATE_CURRENT);
- remoteViews.setOnClickPendingIntent(R.id.widget_main_view, openApp);
- appWidgetManager.updateAppWidget(widgetId, remoteViews);
-
- }
- }
- stopSelf();
-
- return START_STICKY;
- }
-
- private void updateData(HabitRPGUser user, AppWidgetManager appWidgetManager) {
- ComponentName thisWidget = new ComponentName(this, SimpleWidget.class);
- int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
- for (int widgetId : allWidgetIds) {
- RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.simple_widget);
- remoteViews.setTextViewText(R.id.TV_HP, "" + user.getStats().getHp().intValue() + "/" + (int) user.getStats().getMaxHealth() + " " + this.getString(R.string.HP_default));
- remoteViews.setTextViewText(R.id.TV_XP, "" + user.getStats().getExp().intValue() + "/" + (int) user.getStats().getToNextLevel() + " " + this.getString(R.string.XP_default));
- //remoteViews.setImageViewBitmap(R.id.IMG_ProfilePicture, dealWithUserPicture(user,this));
- remoteViews.setProgressBar(R.id.V_HPBar, (int) user.getStats().getMaxHealth(), user.getStats().getHp().intValue(), false);
- remoteViews.setProgressBar(R.id.V_XPBar, (int) user.getStats().getToNextLevel(), user.getStats().getExp().intValue(), false);
-
- // If user click on refresh: refresh
- Intent clickIntent = new Intent(this.getApplicationContext(), SimpleWidget.class);
- clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
- clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
- PendingIntent updateIntent = PendingIntent.getBroadcast(this, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
- remoteViews.setOnClickPendingIntent(R.id.BT_refresh, updateIntent);
-
- //If user click on life and xp: open the app
- Intent openAppIntent = new Intent(this.getApplicationContext(), MainActivity.class);
- PendingIntent openApp = PendingIntent.getActivity(this, 0, openAppIntent, PendingIntent.FLAG_UPDATE_CURRENT);
- remoteViews.setOnClickPendingIntent(R.id.LL_header, openApp);
- remoteViews.setOnClickPendingIntent(R.id.IMG_ProfilePicture, openApp);
-
- appWidgetManager.updateAppWidget(widgetId, remoteViews);
- }
-
-
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
-
- @Override
- public void onUserReceived(HabitRPGUser user) {
- this.updateData(user, appWidgetManager);
-
- }
-}