diff --git a/Habitica/res/layout/activity_main.xml b/Habitica/res/layout/activity_main.xml
index 25fe539e8..921cc77e5 100644
--- a/Habitica/res/layout/activity_main.xml
+++ b/Habitica/res/layout/activity_main.xml
@@ -75,5 +75,17 @@
app:tabIndicatorColor="@android:color/white"
app:tabMode="fixed" />
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/floating_menu_tasks.xml b/Habitica/res/layout/floating_menu_tasks.xml
new file mode 100644
index 000000000..d8c070660
--- /dev/null
+++ b/Habitica/res/layout/floating_menu_tasks.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Habitica/res/layout/fragment_tasks.xml b/Habitica/res/layout/fragment_tasks.xml
index 6326b5c45..996b71a56 100644
--- a/Habitica/res/layout/fragment_tasks.xml
+++ b/Habitica/res/layout/fragment_tasks.xml
@@ -1,98 +1,10 @@
+ android:layout_height="match_parent">
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
index 28d8a0b3a..4a00826c1 100644
--- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
+++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
@@ -4,11 +4,15 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
+import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
+import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.TextView;
import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.core.CrashlyticsCore;
@@ -49,8 +53,15 @@ import retrofit.client.Response;
*/
public class MainActivity extends InstabugAppCompatActivity implements HabitRPGUserCallback.OnUserReceived {
+ public enum SnackbarDisplayType {
+ NORMAL, FAILURE, DROP
+ }
+
BaseFragment activeFragment;
+ @InjectView(R.id.floating_menu_wrapper)
+ FrameLayout floatingMenuWrapper;
+
@InjectView(R.id.toolbar)
Toolbar toolbar;
@@ -152,6 +163,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
fragment.setUser(user);
fragment.setActivity(this);
fragment.setTabLayout(detail_tabs);
+ fragment.setFloatingMenuWrapper(floatingMenuWrapper);
if (getSupportFragmentManager().getFragments() == null) {
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, fragment).commit();
@@ -248,4 +260,24 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
super.onBackPressed();
}
}
+
+ public void showSnackbar(String content) {
+ showSnackbar(content, SnackbarDisplayType.NORMAL);
+ }
+
+ public void showSnackbar(String content, SnackbarDisplayType displayType) {
+ Snackbar snackbar = Snackbar.make(floatingMenuWrapper, content, Snackbar.LENGTH_LONG);
+ View snackbarView = snackbar.getView();
+
+ if (displayType == SnackbarDisplayType.FAILURE) {
+
+ //change Snackbar's background color;
+ snackbarView.setBackgroundColor(ContextCompat.getColor(this, R.color.worse_10));
+ } else if (displayType == SnackbarDisplayType.DROP) {
+ TextView tv = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);
+ tv.setMaxLines(5);
+ snackbarView.setBackgroundColor(ContextCompat.getColor(this, R.color.best_10));
+ }
+ snackbar.show();
+ }
}
diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/BaseFragment.java b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/BaseFragment.java
index 6c904bb51..e2bd5fa2e 100644
--- a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/BaseFragment.java
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/BaseFragment.java
@@ -2,17 +2,24 @@ package com.habitrpg.android.habitica.ui.fragments;
import android.content.Context;
import android.os.Bundle;
+import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.TextView;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.MainActivity;
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.callbacks.TaskScoringCallback;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
+import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener;
import butterknife.ButterKnife;
import de.greenrobot.event.EventBus;
@@ -27,6 +34,7 @@ public abstract class BaseFragment extends Fragment {
public MainActivity activity;
public TabLayout tabLayout;
+ public FrameLayout floatingMenuWrapper;
public APIHelper mAPIHelper;
protected HabitRPGUser user;
public boolean usesTabLayout;
@@ -44,6 +52,10 @@ public abstract class BaseFragment extends Fragment {
this.tabLayout = tabLayout;
}
+ public void setFloatingMenuWrapper(FrameLayout view) {
+ this.floatingMenuWrapper = view;
+ }
+
public void setActivity(MainActivity activity) {
this.activity = activity;
}
@@ -66,6 +78,10 @@ public abstract class BaseFragment extends Fragment {
}
}
+ if (floatingMenuWrapper != null) {
+ floatingMenuWrapper.removeAllViews();
+ }
+
// Receive Events
try {
EventBus.getDefault().register(this);
@@ -94,4 +110,6 @@ public abstract class BaseFragment extends Fragment {
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
+
+
}
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 a2ac39ee7..a073e7a8a 100644
--- a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TasksFragment.java
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TasksFragment.java
@@ -22,6 +22,7 @@ import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.CompoundButton;
+import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
@@ -81,10 +82,6 @@ import retrofit.client.Response;
public class TasksFragment extends BaseFragment implements TaskScoringCallback.OnTaskScored, OnCheckedChangeListener {
- public enum SnackbarDisplayType {
- NORMAL, FAILURE, DROP
- }
-
static final int TASK_CREATED_RESULT = 1;
static final int TASK_UPDATED_RESULT = 2;
@@ -116,29 +113,30 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
viewPager = (ViewPager) v.findViewById(R.id.view_pager);
- floatingMenu = (FloatingActionMenu) v.findViewById(R.id.fab_menu);
- FloatingActionButton habit_fab = (FloatingActionButton) v.findViewById(R.id.fab_new_habit);
+ FrameLayout frame = (FrameLayout) inflater.inflate(R.layout.floating_menu_tasks, floatingMenuWrapper, true);
+ floatingMenu = (FloatingActionMenu) frame.findViewById(R.id.fab_menu);
+ FloatingActionButton habit_fab = (FloatingActionButton) floatingMenu.findViewById(R.id.fab_new_habit);
habit_fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openNewTaskActivity("habit");
}
});
- FloatingActionButton daily_fab = (FloatingActionButton) v.findViewById(R.id.fab_new_daily);
+ FloatingActionButton daily_fab = (FloatingActionButton) floatingMenu.findViewById(R.id.fab_new_daily);
daily_fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openNewTaskActivity("daily");
}
});
- FloatingActionButton todo_fab = (FloatingActionButton) v.findViewById(R.id.fab_new_todo);
+ FloatingActionButton todo_fab = (FloatingActionButton) floatingMenu.findViewById(R.id.fab_new_todo);
todo_fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openNewTaskActivity("todo");
}
});
- FloatingActionButton reward_fab = (FloatingActionButton) v.findViewById(R.id.fab_new_reward);
+ FloatingActionButton reward_fab = (FloatingActionButton) floatingMenu.findViewById(R.id.fab_new_reward);
reward_fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -352,7 +350,7 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
notifyUser(data.getExp(), data.getHp(), data.getGp(), data.getLvl(), data.getDelta());
if (data.get_tmp() != null) {
if (data.get_tmp().getDrop() != null) {
- showSnackbar(data.get_tmp().getDrop().getDialog(), SnackbarDisplayType.DROP);
+ activity.showSnackbar(data.get_tmp().getDrop().getDialog(), MainActivity.SnackbarDisplayType.DROP);
}
}
}
@@ -377,32 +375,14 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
// endregion
- private void showSnackbar(String content) {
- showSnackbar(content, SnackbarDisplayType.NORMAL);
- }
- private void showSnackbar(String content, SnackbarDisplayType displayType) {
- Snackbar snackbar = Snackbar.make(floatingMenu, content, Snackbar.LENGTH_LONG);
- View snackbarView = snackbar.getView();
-
- if (displayType == SnackbarDisplayType.FAILURE) {
-
- //change Snackbar's background color;
- snackbarView.setBackgroundColor(ContextCompat.getColor(activity, R.color.worse_10));
- } else if (displayType == SnackbarDisplayType.DROP) {
- TextView tv = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);
- tv.setMaxLines(5);
- snackbarView.setBackgroundColor(ContextCompat.getColor(activity, R.color.best_10));
- }
- snackbar.show();
- }
//region Events
public void onEvent(CreateTagCommand event) {
Tag t = new Tag();
t.setName(event.tagName);
- t.save();
+ t.async().save();
mAPIHelper.apiService.createTag(t, new Callback>() {
@Override
@@ -412,7 +392,7 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
@Override
public void failure(RetrofitError error) {
- showSnackbar("Error: " + error.getMessage(), SnackbarDisplayType.FAILURE);
+ activity.showSnackbar("Error: " + error.getMessage(), MainActivity.SnackbarDisplayType.FAILURE);
}
});
}
@@ -449,7 +429,7 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
final String rewardKey = event.Reward.getId();
if (user.getStats().getGp() < event.Reward.getValue()) {
- showSnackbar("Not enough Gold", SnackbarDisplayType.FAILURE);
+ activity.showSnackbar("Not enough Gold", MainActivity.SnackbarDisplayType.FAILURE);
return;
}
@@ -459,7 +439,7 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
int maxHp = user.getStats().getMaxHealth();
if (currentHp == maxHp) {
- showSnackbar("You don't need to buy an health potion", SnackbarDisplayType.FAILURE);
+ activity.showSnackbar("You don't need to buy an health potion", MainActivity.SnackbarDisplayType.FAILURE);
return;
}
}
@@ -482,12 +462,12 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
break;
}
- showSnackbar("Buy Reward Successful " + event.Reward.getText());
+ activity.showSnackbar("Buy Reward Successful " + event.Reward.getText());
}
@Override
public void failure(RetrofitError error) {
- showSnackbar("Buy Reward Error " + event.Reward.getText(), SnackbarDisplayType.FAILURE);
+ activity.showSnackbar("Buy Reward Error " + event.Reward.getText(), MainActivity.SnackbarDisplayType.FAILURE);
}
});
} else {
@@ -517,13 +497,13 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
private void notifyUser(double xp, double hp, double gold,
int lvl, double delta) {
StringBuilder message = new StringBuilder();
- SnackbarDisplayType displayType = SnackbarDisplayType.NORMAL;
+ MainActivity.SnackbarDisplayType displayType = MainActivity.SnackbarDisplayType.NORMAL;
if (lvl > user.getStats().getLvl()) {
displayLevelUpDialog(lvl);
this.mAPIHelper.retrieveUser(new HabitRPGUserCallback(activity));
user.getStats().setLvl((int) lvl);
- showSnackbar(message.toString());
+ activity.showSnackbar(message.toString());
} else {
com.magicmicky.habitrpgwrapper.lib.models.Stats stats = user.getStats();
@@ -532,7 +512,7 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
user.getStats().setExp(xp);
}
if (hp != stats.getHp()) {
- displayType = SnackbarDisplayType.FAILURE;
+ displayType = MainActivity.SnackbarDisplayType.FAILURE;
message.append(" - ").append(round(stats.getHp() - hp, 2)).append(" HP");
user.getStats().setHp(hp);
}
@@ -540,11 +520,11 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
message.append(" + ").append(round(gold - stats.getGp(), 2)).append(" GP");
stats.setGp(gold);
} else if (gold < stats.getGp()) {
- displayType = SnackbarDisplayType.FAILURE;
+ displayType = MainActivity.SnackbarDisplayType.FAILURE;
message.append(" - ").append(round(stats.getGp() - gold, 2)).append(" GP");
stats.setGp(gold);
}
- showSnackbar(message.toString(), displayType);
+ activity.showSnackbar(message.toString(), displayType);
}
}
@@ -691,7 +671,6 @@ public class TasksFragment extends BaseFragment implements TaskScoringCallback.O
if (t != null) {
tagFilterMap.put(t.getId(), b);
filterChangedHandler.hit();
- showSnackbar(t.getName() + " : " + b);
}
}