correct events for fragments

This commit is contained in:
Phillip Thelen 2015-11-19 21:38:21 +01:00
parent aa79010ea0
commit 2dddc93c39
12 changed files with 670 additions and 29 deletions

View file

@ -81,7 +81,7 @@
<activity
android:name=".TaskFormActivity"
android:theme="@style/AppThemeWithActionBarBlackText"
android:parentActivityName=".TaskActivity">
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".TaskActivity" />
@ -89,7 +89,7 @@
<activity
android:name=".TavernActivity"
android:label="@string/title_activity_tavern"
android:parentActivityName=".TaskActivity">
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".TaskActivity" />
@ -97,7 +97,7 @@
<activity
android:name=".PartyActivity"
android:label="@string/title_activity_party"
android:parentActivityName=".TaskActivity">
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".TaskActivity" />
@ -105,10 +105,10 @@
<activity
android:name=".GemPurchaseActivity"
android:label="@string/title_activity_gem_purchase"
android:parentActivityName=".TaskActivity">
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".TaskActivity" />
android:value=".MainActivity" />
</activity>
<activity android:name="com.facebook.FacebookActivity"

View file

@ -1,5 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/fab.menu"
app:layout_behavior="com.habitrpg.android.habitica.ui.helpers.FloatingActionMenuBehavior"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="16dp"
android:layout_marginRight="8dp"
fab:menu_fab_size="normal"
fab:menu_labels_paddingTop="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingBottom="8dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_colorNormal="@color/brand"
fab:menu_colorPressed="@color/brand_400"
fab:menu_colorRipple="#FFFFFF"
fab:menu_animationDelayPerItem="50"
fab:menu_icon="@drawable/fab_add"
fab:menu_buttonSpacing="2dp">
<com.github.clans.fab.FloatingActionButton
android:id="@+id/fab.new.habit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fab:fab_colorNormal="@color/brand"
fab:fab_colorPressed="@color/brand_400"
fab:fab_colorRipple="#FFFFFF"
fab:fab_shadowColor="#000"
fab:fab_elevationCompat="6dp"
android:src="@drawable/fab_add"
fab:fab_size="mini"
fab:fab_label="New Habit" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/fab.new.daily"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fab:fab_colorNormal="@color/brand"
fab:fab_colorPressed="@color/brand_400"
fab:fab_colorRipple="#FFFFFF"
fab:fab_shadowColor="#000"
fab:fab_elevationCompat="6dp"
android:src="@drawable/fab_add"
fab:fab_size="mini"
fab:fab_label="New Daily" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/fab.new.todo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fab:fab_colorNormal="@color/brand"
fab:fab_colorPressed="@color/brand_400"
fab:fab_colorRipple="#FFFFFF"
fab:fab_shadowColor="#000"
fab:fab_elevationCompat="6dp"
android:src="@drawable/fab_add"
fab:fab_size="mini"
fab:fab_label="New Todo" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/fab.new.reward"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fab:fab_colorNormal="@color/brand"
fab:fab_colorPressed="@color/brand_400"
fab:fab_colorRipple="#FFFFFF"
fab:fab_shadowColor="#000"
fab:fab_elevationCompat="6dp"
android:src="@drawable/fab_add"
fab:fab_size="mini"
fab:fab_label="New Reward" />
</com.github.clans.fab.FloatingActionMenu>
</RelativeLayout>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tavern.framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View file

@ -6,12 +6,13 @@
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_filter_list"
android:title="filter"
android:title="@string/filter"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_reload"
android:icon="@drawable/ic_refresh_white"
android:title="@string/action_refresh"
android:orderInCategory="103"
app:showAsAction="ifRoom"
/>

View file

@ -173,4 +173,7 @@
<string name="faint_penalty_body">You lost a Level, your Gold, and a piece of Equipment, but you can get them all back with hard work! Good luck--you\'ll do great.</string>
<string name="faint_header">You ran out of Health!</string>
<string name="faint_button"><![CDATA[Refill Health & Try Again]]></string>
<string name="filter">Filter</string>
</resources>

View file

@ -5,27 +5,65 @@ import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import butterknife.ButterKnife;
import de.greenrobot.event.EventBus;
/**
* Created by admin on 18/11/15.
*/
public abstract class BaseFragment extends Fragment {
public MainActivity activity;
public TabLayout tabLayout;
APIHelper mAPIHelper;
protected HabitRPGUser user;
public boolean usesTabLayout;
public void setUser(HabitRPGUser user) { this.user = user; }
public void updateUserData(HabitRPGUser user) { this.user = user; }
public void setTabLayout(TabLayout tabLayout) {}
public void setTabLayout(TabLayout tabLayout) {
this.tabLayout = tabLayout;
}
public void setActivity(MainActivity activity) {this.activity = activity; }
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.activity = (MainActivity) getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (this.usesTabLayout) {
tabLayout.setVisibility(View.VISIBLE);
} else {
tabLayout.setVisibility(View.GONE);
}
// Receive Events
EventBus.getDefault().register(this);
setHasOptionsMenu(true);
return null;
}
@Override
public void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
}

View file

@ -7,6 +7,7 @@ import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.TabLayout;
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;
@ -135,6 +136,11 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
SetUserData();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
public void displayFragment(BaseFragment fragment) {
fragment.setArguments(getIntent().getExtras());
fragment.mAPIHelper = mAPIHelper;

View file

@ -31,7 +31,6 @@ import retrofit.client.Response;
*/
public class PartyFragment extends BaseFragment {
public TabLayout tabLayout;
public ViewPager viewPager;
private Group group;
private HashMap<Integer, Fragment> fragmentDictionary = new HashMap<>();
@ -42,7 +41,8 @@ public class PartyFragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
this.usesTabLayout = true;
super.onCreateView(inflater, container, savedInstanceState);
View v = inflater.inflate(R.layout.fragment_party, container, false);
viewPager = (ViewPager) v.findViewById(R.id.view_pager);
@ -88,12 +88,6 @@ public class PartyFragment extends BaseFragment {
return v;
}
@Override
public void setTabLayout(TabLayout tabLayout) {
this.tabLayout = tabLayout;
this.tabLayout.removeAllTabs();
}
public void setViewPagerAdapter() {
android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager();

View file

@ -681,7 +681,6 @@ public class TaskActivity extends AvatarActivityBase implements HabitRPGUserCall
@Override
public void onCheckedChanged(IDrawerItem iDrawerItem, CompoundButton compoundButton, boolean b) {
Tag t = (Tag) iDrawerItem.getTag();
Log.w("Tags", "onCheckedChanged" + compoundButton.isChecked() + " : " + b);
if (t != null) {
tagFilterMap.put(t.getId(), b);
filterChangedHandler.hit();

View file

@ -1,30 +1,79 @@
package com.habitrpg.android.habitica;
import android.content.DialogInterface;
import android.content.Intent;
import android.databinding.DataBindingUtil;
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.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;
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.databinding.ValueBarBinding;
import com.habitrpg.android.habitica.events.HabitScoreEvent;
import com.habitrpg.android.habitica.events.TaskLongPressedEvent;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.events.TaskTappedEvent;
import com.habitrpg.android.habitica.events.ToggledInnStateEvent;
import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand;
import com.habitrpg.android.habitica.events.commands.BuyRewardCommand;
import com.habitrpg.android.habitica.events.commands.CreateTagCommand;
import com.habitrpg.android.habitica.events.commands.FilterTasksByTagsCommand;
import com.habitrpg.android.habitica.events.commands.TaskCheckedCommand;
import com.habitrpg.android.habitica.helpers.TagsHelper;
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel;
import com.habitrpg.android.habitica.ui.EditTextDrawer;
import com.habitrpg.android.habitica.ui.adapter.HabitItemRecyclerViewAdapter;
import com.habitrpg.android.habitica.ui.adapter.IReceiveNewEntries;
import com.habitrpg.android.habitica.ui.fragments.TaskRecyclerViewFragment;
import com.habitrpg.android.habitica.ui.helpers.Debounce;
import com.habitrpg.android.habitica.userpicture.UserPicture;
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.tasks.ItemData;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.DrawerBuilder;
import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener;
import com.mikepenz.materialdrawer.model.SectionDrawerItem;
import com.mikepenz.materialdrawer.model.SwitchDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
import com.raizlabs.android.dbflow.runtime.FlowContentObserver;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import de.greenrobot.event.EventBus;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
@ -32,13 +81,22 @@ import retrofit.client.Response;
/**
* Created by admin on 18/11/15.
*/
public class TasksFragment extends BaseFragment {
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;
public TabLayout tabLayout;
public ViewPager viewPager;
Drawer filterDrawer;
private MaterialDialog faintDialog;
FloatingActionMenu floatingMenu;
Map<Integer, TaskRecyclerViewFragment> ViewFragmentsDictionary = new HashMap<>();
private TagsHelper tagsHelper;
@ -49,18 +107,44 @@ public class TasksFragment extends BaseFragment {
contentCache = new ContentCache(mAPIHelper.apiService);
}
@Override
public void setTabLayout(TabLayout tabLayout) {
this.tabLayout = tabLayout;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
this.usesTabLayout = true;
super.onCreateView(inflater, container, savedInstanceState);
View v = inflater.inflate(R.layout.fragment_tasks, container, false);
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);
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);
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);
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);
reward_fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openNewTaskActivity("reward");
}
});
filterDrawer = new DrawerBuilder()
.withActivity(activity)
@ -76,6 +160,30 @@ public class TasksFragment extends BaseFragment {
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_main_activity, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (id) {
case R.id.action_search:
filterDrawer.openDrawer();
return true;
case R.id.action_reload:
mAPIHelper.retrieveUser(new HabitRPGUserCallback(activity));
return true;
}
return super.onOptionsItemSelected(item);
}
public void loadTaskLists() {
android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager();
@ -199,6 +307,7 @@ public class TasksFragment extends BaseFragment {
public void updateUserData(HabitRPGUser user) {
super.updateUserData(user);
if (this.user != null) {
FillTagFilterDrawer(user.getTags());
TaskRecyclerViewFragment fragment = ViewFragmentsDictionary.get(2);
if (fragment != null) {
HabitItemRecyclerViewAdapter adapter =(HabitItemRecyclerViewAdapter)fragment.mAdapter;
@ -206,4 +315,352 @@ public class TasksFragment extends BaseFragment {
}
}
}
@Override
public void onTaskDataReceived(TaskDirectionData data) {
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);
}
}
}
@Override
public void onTaskScoringFailed() {
}
private void openNewTaskActivity(String type) {
Bundle bundle = new Bundle();
bundle.putString("type", type);
bundle.putStringArrayList("tagsId", new ArrayList<String>(this.tagsHelper.getTags()));
Intent intent = new Intent(activity, TaskFormActivity.class);
intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, TASK_CREATED_RESULT);
}
// 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();
mAPIHelper.apiService.createTag(t, new Callback<List<Tag>>() {
@Override
public void success(List<Tag> tags, Response response) {
FillTagFilterDrawer(tags);
}
@Override
public void failure(RetrofitError error) {
showSnackbar("Error: " + error.getMessage(), SnackbarDisplayType.FAILURE);
}
});
}
public void onEvent(TaskTappedEvent event) {
if (event.Task.type.equals("reward"))
return;
Bundle bundle = new Bundle();
bundle.putString("type", event.Task.getType());
bundle.putString("taskId", event.Task.getId());
bundle.putStringArrayList("tagsId", new ArrayList<String>(this.tagsHelper.getTags()));
Intent intent = new Intent(activity, TaskFormActivity.class);
intent.putExtras(bundle);
startActivityForResult(intent, TASK_UPDATED_RESULT);
}
public void onEvent(TaskLongPressedEvent event) {
}
public void onEvent(TaskCheckedCommand event) {
mAPIHelper.updateTaskDirection(event.Task.getId(), event.Task.getCompleted() ? TaskDirection.down : TaskDirection.up, new TaskScoringCallback(this, event.Task.getId()));
}
public void onEvent(HabitScoreEvent event) {
mAPIHelper.updateTaskDirection(event.Habit.getId(), event.Up ? TaskDirection.up : TaskDirection.down, new TaskScoringCallback(this, event.Habit.getId()));
}
public void onEvent(AddNewTaskCommand event) {
openNewTaskActivity(event.ClassType.toLowerCase());
}
public void onEvent(final BuyRewardCommand event) {
final String rewardKey = event.Reward.getId();
if (user.getStats().getGp() < event.Reward.getValue()) {
showSnackbar("Not enough Gold", SnackbarDisplayType.FAILURE);
return;
}
if (event.Reward.specialTag == "item") {
if (rewardKey.equals("potion")) {
int currentHp = user.getStats().getHp().intValue();
int maxHp = user.getStats().getMaxHealth();
if(currentHp == maxHp) {
showSnackbar("You don't need to buy an health potion", SnackbarDisplayType.FAILURE);
return;
}
}
mAPIHelper.apiService.buyItem(event.Reward.getId(), new Callback<Void>() {
@Override
public void success(Void aVoid, Response response) {
switch (rewardKey) {
case "potion":
double newHp = Math.min(user.getStats().getMaxHealth(), user.getStats().getHp() + 15);
user.getStats().setHp(newHp);
break;
default:
// TODO Add bought item to the avatar
break;
}
showSnackbar("Buy Reward Successful " + event.Reward.getText());
}
@Override
public void failure(RetrofitError error) {
showSnackbar("Buy Reward Error " + event.Reward.getText(), SnackbarDisplayType.FAILURE);
}
});
} else {
// user created Rewards
mAPIHelper.updateTaskDirection(rewardKey, TaskDirection.down, new TaskScoringCallback(this, rewardKey));
}
}
public void onEvent(final TaskSaveEvent event) {
Task task = (Task) event.task;
Log.d("tags", "Task saving");
if (event.created) {
this.mAPIHelper.createNewTask(task, new TaskCreationCallback());
updateTags(event.task.getTags());
} else {
this.mAPIHelper.updateTask(task, new TaskUpdateCallback());
}
}
public void onEvent(ToggledInnStateEvent event) {
user.getPreferences().setSleep(event.Inn);
}
//endregion Events
private void notifyUser(double xp, double hp, double gold,
int lvl, double delta) {
StringBuilder message = new StringBuilder();
SnackbarDisplayType displayType = SnackbarDisplayType.NORMAL;
if (lvl > user.getStats().getLvl()) {
displayLevelUpDialog(lvl);
this.mAPIHelper.retrieveUser(new HabitRPGUserCallback(activity));
user.getStats().setLvl((int) lvl);
showSnackbar(message.toString());
} else {
com.magicmicky.habitrpgwrapper.lib.models.Stats stats = user.getStats();
if (xp > stats.getExp()) {
message.append(" + ").append(round(xp - stats.getExp(), 2)).append(" XP");
user.getStats().setExp(xp);
}
if (hp != stats.getHp()) {
displayType = SnackbarDisplayType.FAILURE;
message.append(" - ").append(round(stats.getHp() - hp, 2)).append(" HP");
user.getStats().setHp(hp);
}
if (gold > stats.getGp()) {
message.append(" + ").append(round(gold - stats.getGp(), 2)).append(" GP");
stats.setGp(gold);
} else if (gold < stats.getGp()) {
displayType = SnackbarDisplayType.FAILURE;
message.append(" - ").append(round(stats.getGp() - gold, 2)).append(" GP");
stats.setGp(gold);
}
showSnackbar(message.toString(), displayType);
}
}
static public Double round(Double value, int n) {
return (Math.round(value * Math.pow(10, n))) / (Math.pow(10, n));
}
private void displayDeathDialogIfNeeded() {
if (user.getStats().getHp() > 0) {
return;
}
if (this.faintDialog == null) {
this.faintDialog = new MaterialDialog.Builder(activity)
.title(R.string.faint_header)
.customView(R.layout.faint_dialog, true)
.positiveText(R.string.faint_button)
.positiveColorRes(R.color.worse_100)
.dismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
faintDialog = null;
mAPIHelper.reviveUser(new HabitRPGUserCallback(activity));
}
})
.cancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
faintDialog = null;
}
})
.build();
View customView = this.faintDialog.getCustomView();
if (customView != null) {
View hpBarView = customView.findViewById(R.id.hpBar);
ValueBarBinding hpBar = DataBindingUtil.bind(hpBarView);
hpBar.setPartyMembers(true);
AvatarWithBarsViewModel.setHpBarData(hpBar, user.getStats(), activity);
ImageView avatarView = (ImageView)customView.findViewById(R.id.avatarView);
UserPicture userPicture = new UserPicture(user, activity, false, false);
userPicture.setPictureOn(avatarView);
}
this.faintDialog.show();
}
}
private void displayLevelUpDialog(int level) {
SuppressedModals suppressedModals = user.getPreferences().getSuppressModals();
if (suppressedModals != null) {
if (suppressedModals.getLevelUp()) {
return;
}
}
MaterialDialog dialog = new MaterialDialog.Builder(activity)
.title(R.string.levelup_header)
.customView(R.layout.levelup_dialog, true)
.positiveText(R.string.levelup_button)
.positiveColorRes(R.color.brand_100)
.build();
View customView = dialog.getCustomView();
if (customView != null) {
TextView detailView = (TextView)customView.findViewById(R.id.levelupDetail);
detailView.setText(this.getString(R.string.levelup_detail, level));
ImageView avatarView = (ImageView)customView.findViewById(R.id.avatarView);
UserPicture userPicture = new UserPicture(user, activity, false, false);
userPicture.setPictureOn(avatarView);
}
dialog.show();
}
public void FillTagFilterDrawer(List<Tag> tagList) {
filterDrawer.removeAllItems();
filterDrawer.addItems(
new SectionDrawerItem().withName("Filter by Tag"),
new EditTextDrawer()
);
for (Tag t : tagList) {
filterDrawer.addItem(new SwitchDrawerItem()
.withName(t.getName())
.withTag(t)
.withDescription("" + t.getTasks().size())
.withOnCheckedChangeListener(this)
);
}
}
private Debounce filterChangedHandler = new Debounce(1500, 1000) {
@Override
public void execute() {
ArrayList<String> tagList = new ArrayList<>();
for (Map.Entry<String, Boolean> f : tagFilterMap.entrySet()) {
if (f.getValue()) {
tagList.add(f.getKey());
}
}
tagsHelper.setTags(tagList);
EventBus.getDefault().post(new FilterTasksByTagsCommand());
}
};
private HashMap<String, Boolean> tagFilterMap = new HashMap<>();
/*
Updates concerned tags.
*/
public void updateTags(List<TaskTag> tags) {
Log.d("tags", "Updating tags");
List<IDrawerItem> filters = filterDrawer.getDrawerItems();
for (IDrawerItem filter : filters) {
if (filter instanceof SwitchDrawerItem) {
SwitchDrawerItem currentfilter = (SwitchDrawerItem) filter;
Log.v("tags", "Tag " + currentfilter.getName());
String tagId = ((Tag) currentfilter.getTag()).getId();
for (TaskTag tag : tags) {
Tag currentTag = tag.getTag();
if (tagId != null && currentTag != null && tagId.equals(currentTag.getId())) {
currentfilter.withDescription("" + (currentTag.getTasks().size() + 1));
filterDrawer.updateItem(currentfilter);
}
}
}
}
}
@Override
public void onCheckedChanged(IDrawerItem iDrawerItem, CompoundButton compoundButton, boolean b) {
Tag t = (Tag) iDrawerItem.getTag();
if (t != null) {
tagFilterMap.put(t.getId(), b);
filterChangedHandler.hit();
showSnackbar(t.getName() + " : " + b);
}
}
}

View file

@ -0,0 +1,40 @@
package com.habitrpg.android.habitica;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.habitrpg.android.habitica.helpers.TagsHelper;
import com.habitrpg.android.habitica.ui.fragments.ChatListFragment;
import com.mikepenz.materialdrawer.DrawerBuilder;
/**
* Created by viirus on 19/11/15.
*/
public class TavernFragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View v = inflater.inflate(R.layout.fragment_tavern, container, false);
setFragment(new ChatListFragment(activity, "habitrpg", mAPIHelper, user, true));
return v;
}
protected void setFragment(Fragment fragment) {
FragmentManager fragmentManager = getChildFragmentManager();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.tavern_framelayout, fragment);
fragmentTransaction.commit();
}
}

View file

@ -15,6 +15,7 @@ import com.habitrpg.android.habitica.PartyActivity;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.TasksFragment;
import com.habitrpg.android.habitica.TavernActivity;
import com.habitrpg.android.habitica.TavernFragment;
import com.habitrpg.android.habitica.prefs.PrefsActivity;
import com.mikepenz.materialdrawer.AccountHeader;
import com.mikepenz.materialdrawer.AccountHeaderBuilder;
@ -112,6 +113,10 @@ public class MainDrawerBuilder {
fragment = new PartyFragment();
break;
}
case SIDEBAR_TAVERN: {
fragment = new TavernFragment();
break;
}
}
if (fragment != null) {