diff --git a/Habitica/res/anim/clockwise_rotate.xml b/Habitica/res/anim/clockwise_rotate.xml
new file mode 100644
index 000000000..84c5476dc
--- /dev/null
+++ b/Habitica/res/anim/clockwise_rotate.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/refresh_actionview.xml b/Habitica/res/layout/refresh_actionview.xml
new file mode 100644
index 000000000..94905ec38
--- /dev/null
+++ b/Habitica/res/layout/refresh_actionview.xml
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/Habitica/res/menu/menu_main_activity.xml b/Habitica/res/menu/menu_main_activity.xml
index 0840f12fe..18980d284 100644
--- a/Habitica/res/menu/menu_main_activity.xml
+++ b/Habitica/res/menu/menu_main_activity.xml
@@ -15,6 +15,7 @@
android:title="@string/action_refresh"
android:orderInCategory="103"
app:showAsAction="ifRoom"
+ android:actionViewClass="android.widget.ImageButton"
/>
diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TasksFragment.java b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TasksFragment.java
index 329f9ba8c..a2ac39ee7 100644
--- a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TasksFragment.java
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TasksFragment.java
@@ -1,5 +1,6 @@
package com.habitrpg.android.habitica.ui.fragments;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.databinding.DataBindingUtil;
@@ -18,6 +19,8 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
@@ -88,6 +91,8 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
public ViewPager viewPager;
Drawer filterDrawer;
+ MenuItem refreshItem;
+
private MaterialDialog faintDialog;
FloatingActionMenu floatingMenu;
@@ -178,13 +183,28 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
filterDrawer.openDrawer();
return true;
case R.id.action_reload:
- mAPIHelper.retrieveUser(new HabitRPGUserCallback(activity));
+ refreshItem = item;
+ refresh();
return true;
}
return super.onOptionsItemSelected(item);
}
+ public void refresh() {
+ /* Attach a rotating ImageView to the refresh item as an ActionView */
+ LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ ImageView iv = (ImageView) inflater.inflate(R.layout.refresh_actionview, null);
+
+ Animation rotation = AnimationUtils.loadAnimation(getActivity(), R.anim.clockwise_rotate);
+ rotation.setRepeatCount(Animation.INFINITE);
+ iv.startAnimation(rotation);
+
+ refreshItem.setActionView(iv);
+
+ mAPIHelper.retrieveUser(new HabitRPGUserCallback(activity));
+ }
+
public void loadTaskLists() {
android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager();
@@ -307,6 +327,10 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
public void updateUserData(HabitRPGUser user) {
super.updateUserData(user);
+ if (refreshItem != null) {
+ refreshItem.getActionView().clearAnimation();
+ refreshItem.setActionView(null);
+ }
if (this.user != null) {
FillTagFilterDrawer(user.getTags());
TaskRecyclerViewFragment fragment = ViewFragmentsDictionary.get(2);