From 02c21230880f22f9fc8918e0cc0feaa9a95f3d12 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 25 Nov 2015 14:04:18 +0100 Subject: [PATCH] Rotate refresh icon when refreshing. Fixes #65 --- Habitica/res/anim/clockwise_rotate.xml | 8 ++++++ Habitica/res/layout/refresh_actionview.xml | 6 +++++ Habitica/res/menu/menu_main_activity.xml | 1 + .../habitica/ui/fragments/TasksFragment.java | 26 ++++++++++++++++++- 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 Habitica/res/anim/clockwise_rotate.xml create mode 100644 Habitica/res/layout/refresh_actionview.xml 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);