From 687c915bb45acb0b57ab8a2f51e5ab702ddb4b9a Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 23 Nov 2015 11:44:55 +0100 Subject: [PATCH] better back handling for fragments --- Habitica/AndroidManifest.xml | 18 +- Habitica/res/layout/activity_main.xml | 2 +- Habitica/res/layout/activity_party.xml | 79 -- Habitica/res/layout/activity_tasks.xml | 171 ---- Habitica/res/layout/activity_tavern.xml | 45 - Habitica/res/layout/value_bar.xml | 4 +- .../android/habitica/AvatarActivityBase.java | 125 --- .../android/habitica/BaseFragment.java | 7 +- .../android/habitica/LoginActivity.java | 3 +- .../android/habitica/MainActivity.java | 13 +- .../android/habitica/PartyActivity.java | 196 ----- .../android/habitica/TaskActivity.java | 782 ------------------ .../android/habitica/TavernActivity.java | 132 --- .../android/habitica/TavernFragment.java | 6 + .../habitica/ui/MainDrawerBuilder.java | 19 +- .../habitica/widget/UpdateWidgetService.java | 6 +- 16 files changed, 39 insertions(+), 1569 deletions(-) delete mode 100644 Habitica/res/layout/activity_party.xml delete mode 100644 Habitica/res/layout/activity_tasks.xml delete mode 100644 Habitica/res/layout/activity_tavern.xml delete mode 100644 Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java delete mode 100644 Habitica/src/com/habitrpg/android/habitica/PartyActivity.java delete mode 100644 Habitica/src/com/habitrpg/android/habitica/TaskActivity.java delete mode 100644 Habitica/src/com/habitrpg/android/habitica/TavernActivity.java diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 76d459508..377cca52e 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -84,23 +84,7 @@ android:parentActivityName=".MainActivity"> - - - - - - + android:value=".MainActivity" /> + tools:context=".MainActivity"> - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Habitica/res/layout/activity_tasks.xml b/Habitica/res/layout/activity_tasks.xml deleted file mode 100644 index b8fb3b740..000000000 --- a/Habitica/res/layout/activity_tasks.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Habitica/res/layout/activity_tavern.xml b/Habitica/res/layout/activity_tavern.xml deleted file mode 100644 index 2048ca7c0..000000000 --- a/Habitica/res/layout/activity_tavern.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Habitica/res/layout/value_bar.xml b/Habitica/res/layout/value_bar.xml index 47a2f85d4..4a8936e29 100644 --- a/Habitica/res/layout/value_bar.xml +++ b/Habitica/res/layout/value_bar.xml @@ -42,14 +42,14 @@ android:orientation="horizontal"> + android:scaleType="center" + android:contentDescription="Bar Icon" /> userTransactionListener = new TransactionListener() { @@ -238,4 +232,9 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU public void onUserFail() { } + + public void setActiveFragment(BaseFragment fragment) { + this.activeFragment = fragment; + this.drawer.setSelectionAtPosition(this.activeFragment.fragmentSidebarPosition, false); + } } diff --git a/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java b/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java deleted file mode 100644 index f5300e5b6..000000000 --- a/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java +++ /dev/null @@ -1,196 +0,0 @@ -package com.habitrpg.android.habitica; - -import android.os.Bundle; -import android.support.design.widget.AppBarLayout; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentPagerAdapter; - -import com.habitrpg.android.habitica.events.commands.CreateTagCommand; -import com.habitrpg.android.habitica.prefs.PrefsActivity; -import com.habitrpg.android.habitica.ui.MainDrawerBuilder; -import com.habitrpg.android.habitica.ui.fragments.ChatListFragment; -import com.habitrpg.android.habitica.ui.fragments.PartyInformationFragment; -import com.habitrpg.android.habitica.ui.fragments.PartyMemberListFragment; -import com.magicmicky.habitrpgwrapper.lib.models.Group; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.QuestContent; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; - -import java.util.HashMap; - -import butterknife.InjectView; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - -public class PartyActivity extends AvatarActivityBase implements AppBarLayout.OnOffsetChangedListener { - - @InjectView(R.id.appbar) - AppBarLayout appBarLayout; - - private APIHelper mAPIHelper; - - private Group group; - - @Override - protected int getLayoutRes() { - return R.layout.activity_party; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setViewPagerAdapter(); - - this.hostConfig = PrefsActivity.fromContext(this); - User = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle(); - - mAPIHelper = new APIHelper(this, hostConfig); - - if (User == null) - return; - - updateUserAvatars(); - updateSidebar(); - final ContentCache contentCache = new ContentCache(mAPIHelper.apiService); - - - // Get the full group data - mAPIHelper.apiService.getGroup("party", new Callback() { - @Override - public void success(Group group, Response response) { - PartyActivity.this.group = group; - - if (partyMemberListFragment != null) { - partyMemberListFragment.setMemberList(group.members); - } - - if (partyInformationFragment != null) { - partyInformationFragment.setGroup(group); - } - - if (group != null && group.quest != null && !group.quest.key.isEmpty()) { - contentCache.GetQuestContent(group.quest.key, new ContentCache.QuestContentCallback() { - @Override - public void GotQuest(QuestContent content) { - partyInformationFragment.setQuestContent(content); - } - }); - } - } - - @Override - public void failure(RetrofitError error) { - - } - }); - - } - - @Override - protected void onResume() { - super.onResume(); - appBarLayout.addOnOffsetChangedListener(this); - } - - @Override - protected void onPause() { - super.onPause(); - appBarLayout.removeOnOffsetChangedListener(this); - } - - private HashMap fragmentDictionary = new HashMap<>(); - - private PartyMemberListFragment partyMemberListFragment; - private PartyInformationFragment partyInformationFragment; - - - public void setViewPagerAdapter() { - android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); - - viewPager.setAdapter(new FragmentPagerAdapter(fragmentManager) { - - @Override - public Fragment getItem(int position) { - - Fragment fragment; - - switch (position) { - case 0: { - fragment = partyInformationFragment = new PartyInformationFragment(group); - break; - } - case 1: { - fragment = new ChatListFragment(PartyActivity.this, "party", mAPIHelper, User, false); - break; - } - case 2: { - fragment = partyMemberListFragment = new PartyMemberListFragment(PartyActivity.this, group); - break; - } - default: - fragment = new Fragment(); - } - - fragmentDictionary.put(position, fragment); - - return fragment; - } - - @Override - public int getCount() { - return 3; - } - - @Override - public CharSequence getPageTitle(int position) { - switch (position) { - case 0: - return "Party"; - case 1: - return "Chat"; - case 2: - return "Members"; - } - return ""; - } - }); - - - detail_tabs.setupWithViewPager(viewPager); - } - - - private void updateUserAvatars() { - avatarInHeader.updateData(User); - } - - //region Events - - // until there is a party event - public void onEvent(CreateTagCommand event) { - - } - - @Override - public void onOffsetChanged(AppBarLayout appBarLayout, int i) { - Fragment fragment = fragmentDictionary.get(viewPager.getCurrentItem()); - - if (!(fragment instanceof ChatListFragment)) - return; - - ChatListFragment chatFragment = (ChatListFragment) fragment; - - // Disable Refresh if Header is collapsed - - if (i == 0) { - chatFragment.setRefreshEnabled(true); - } else { - chatFragment.setRefreshEnabled(false); - } - } - - //endregion Events -} diff --git a/Habitica/src/com/habitrpg/android/habitica/TaskActivity.java b/Habitica/src/com/habitrpg/android/habitica/TaskActivity.java deleted file mode 100644 index 58903ee60..000000000 --- a/Habitica/src/com/habitrpg/android/habitica/TaskActivity.java +++ /dev/null @@ -1,782 +0,0 @@ -package com.habitrpg.android.habitica; - -import android.content.DialogInterface; -import android.content.Intent; -import android.databinding.DataBindingUtil; -import android.graphics.Color; -import android.os.Bundle; -import android.support.design.widget.Snackbar; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.content.ContextCompat; -import android.util.Log; -import android.view.Gravity; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.CompoundButton; -import android.widget.ImageView; -import android.widget.TextView; - -import com.afollestad.materialdialogs.MaterialDialog; -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.commands.BuyRewardCommand; -import com.habitrpg.android.habitica.events.HabitScoreEvent; -import com.habitrpg.android.habitica.events.commands.TaskCheckedCommand; -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.CreateTagCommand; -import com.habitrpg.android.habitica.events.commands.FilterTasksByTagsCommand; -import com.habitrpg.android.habitica.helpers.TagsHelper; -import com.habitrpg.android.habitica.prefs.PrefsActivity; -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.model.SectionDrawerItem; -import com.mikepenz.materialdrawer.model.SwitchDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; -import com.raizlabs.android.dbflow.runtime.FlowContentObserver; -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 com.raizlabs.android.dbflow.structure.BaseModel; -import com.raizlabs.android.dbflow.structure.Model; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import butterknife.InjectView; -import butterknife.OnClick; -import de.greenrobot.event.EventBus; -import retrofit.Callback; -import retrofit.RetrofitError; -import retrofit.client.Response; - - - -public class TaskActivity extends AvatarActivityBase implements HabitRPGUserCallback.OnUserReceived, - TaskScoringCallback.OnTaskScored, FlowContentObserver.OnSpecificModelStateChangedListener, - OnCheckedChangeListener { - - public enum SnackbarDisplayType { - NORMAL, FAILURE, DROP - } - - static final int TASK_CREATED_RESULT = 1; - static final int TASK_UPDATED_RESULT = 2; - - Drawer filterDrawer; - - Map ViewFragmentsDictionary = new HashMap<>(); - - APIHelper mAPIHelper; - - @InjectView(R.id.fab_menu) - FloatingActionMenu floatingMenu; - - FlowContentObserver observer; - - private TagsHelper tagsHelper; - - private ContentCache contentCache; - - private MaterialDialog faintDialog; - - @Override - protected int getLayoutRes() { - return R.layout.activity_tasks; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - this.hostConfig = PrefsActivity.fromContext(this); - if (hostConfig == null || hostConfig.getApi() == null || hostConfig.getApi().equals("") || hostConfig.getUser() == null || hostConfig.getUser().equals("")) { - startActivity(new Intent(this, LoginActivity.class)); - finish(); - return; - } - - - filterDrawer = new DrawerBuilder() - .withActivity(this) - .withDrawerGravity(Gravity.RIGHT) - .withCloseOnClick(false) - .append(drawer); - - viewPager.setCurrentItem(0); - - new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).async().querySingle(userTransactionListener); - this.observer = new FlowContentObserver(); - this.observer.registerForContentChanges(this.getApplicationContext(), HabitRPGUser.class); - - this.observer.addSpecificModelChangeListener(this); - - this.tagsHelper = new TagsHelper(); - } - - @Override - protected void onResume() { - super.onResume(); - - if (mAPIHelper == null) { - this.mAPIHelper = new APIHelper(this, hostConfig); - - mAPIHelper.retrieveUser(new HabitRPGUserCallback(this)); - - contentCache = new ContentCache(mAPIHelper.apiService); - } - SetUserData(); - } - - @Override - protected void onDestroy() { - if (observer != null) { - this.observer.unregisterForContentChanges(this.getApplicationContext()); - } - EventBus.getDefault().unregister(this); - - super.onDestroy(); - } - - // region onClick for the FAB Menu - - @OnClick(R.id.fab_new_habit) - public void onNewHabit(View view) { - openNewTaskActivity("habit"); - } - - @OnClick(R.id.fab_new_daily) - public void onNewDaily(View view) { - openNewTaskActivity("daily"); - } - - @OnClick(R.id.fab_new_todo) - public void onNewTodo(View view) { - openNewTaskActivity("todo"); - } - - @OnClick(R.id.fab_new_reward) - public void onNewReward(View view) { - openNewTaskActivity("reward"); - } - - - private void openNewTaskActivity(String type) { - Bundle bundle = new Bundle(); - bundle.putString("type", type); - bundle.putStringArrayList("tagsId", new ArrayList(this.tagsHelper.getTags())); - - Intent intent = new Intent(this, 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(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(); - } - - //region Events - - public void onEvent(CreateTagCommand event) { - Tag t = new Tag(); - t.setName(event.tagName); - t.save(); - - mAPIHelper.apiService.createTag(t, new Callback>() { - @Override - public void success(List 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(this.tagsHelper.getTags())); - Intent intent = new Intent(this, 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() { - - @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); - - updateHeader(); - - 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); - - updateUserAvatars(); - } - - //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(this)); - 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); - - updateUserAvatars(); - } - } - - static public Double round(Double value, int n) { - return (Math.round(value * Math.pow(10, n))) / (Math.pow(10, n)); - } - - public void loadTaskLists() { - android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); - - viewPager.setAdapter(new FragmentPagerAdapter(fragmentManager) { - - int oldPosition = -1; - - @Override - public Fragment getItem(int position) { - int layoutOfType; - TaskRecyclerViewFragment fragment; - HabitItemRecyclerViewAdapter adapter; - - switch (position) { - case 0: - layoutOfType = R.layout.habit_item_card; - fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Task.TYPE_HABIT, TaskActivity.this.tagsHelper, layoutOfType, HabitItemRecyclerViewAdapter.HabitViewHolder.class, TaskActivity.this), Task.TYPE_HABIT); - - break; - case 1: - layoutOfType = R.layout.daily_item_card; - adapter = new HabitItemRecyclerViewAdapter(Task.TYPE_DAILY, TaskActivity.this.tagsHelper, layoutOfType, HabitItemRecyclerViewAdapter.DailyViewHolder.class, TaskActivity.this); - if (User != null) { - adapter.dailyResetOffset = User.getPreferences().getDayStart(); - } - fragment = TaskRecyclerViewFragment.newInstance(adapter, Task.TYPE_DAILY); - break; - case 3: - layoutOfType = R.layout.reward_item_card; - adapter = new HabitItemRecyclerViewAdapter(Task.TYPE_REWARD, TaskActivity.this.tagsHelper, - layoutOfType, HabitItemRecyclerViewAdapter.RewardViewHolder.class, TaskActivity.this, - new HabitItemRecyclerViewAdapter.IAdditionalEntries() { - @Override - public void GetAdditionalEntries(final IReceiveNewEntries callBack) { - - // request buyable gear - mAPIHelper.apiService.getInventoryBuyableGear(new Callback>() { - @Override - public void success(List itemDatas, Response response) { - - // get itemdata list - ArrayList itemKeys = new ArrayList(); - for (ItemData item : itemDatas) { - itemKeys.add(item.key); - } - itemKeys.add("potion"); - - contentCache.GetItemDataList(itemKeys, new ContentCache.GotContentEntryCallback>() { - @Override - public void GotObject(List obj) { - ArrayList buyableItems = new ArrayList(); - - for (ItemData item : obj) { - Task reward = new Task(); - reward.text = item.text; - reward.notes = item.notes; - reward.value = item.value; - reward.setType("reward"); - reward.specialTag = "item"; - reward.setId(item.key); - - buyableItems.add(reward); - } - - callBack.GotAdditionalItems(buyableItems); - - } - }); - - - } - - @Override - public void failure(RetrofitError error) { - - } - }); - - } - }); - - - fragment = TaskRecyclerViewFragment.newInstance(adapter, Task.TYPE_REWARD); - break; - default: - layoutOfType = R.layout.todo_item_card; - fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Task.TYPE_TODO, TaskActivity.this.tagsHelper, layoutOfType, HabitItemRecyclerViewAdapter.TodoViewHolder.class, TaskActivity.this), Task.TYPE_TODO); - } - - ViewFragmentsDictionary.put(position, fragment); - - return fragment; - } - - @Override - public int getCount() { - return 4; - } - - @Override - public CharSequence getPageTitle(int position) { - switch (position) { - case 0: - return "Habits"; - case 1: - return "Dailies"; - case 2: - return "Todos"; - case 3: - return "Rewards"; - } - return ""; - } - }); - - - detail_tabs.setupWithViewPager(viewPager); - - } - - - public int adjustAlpha(int color, float factor) { - int alpha = Math.round(Color.alpha(color) * factor); - int red = Color.red(color); - int green = Color.green(color); - int blue = Color.blue(color); - return Color.argb(alpha, red, green, blue); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_main_activity, menu); - return true; - } - - @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(this)); - return true; - } - - return super.onOptionsItemSelected(item); - } - - private void updateUserAvatars() { - avatarInHeader.updateData(User); - } - - private void updateHeader() { - updateUserAvatars(); - setTitle(User.getProfile().getName()); - - android.support.v7.app.ActionBarDrawerToggle actionBarDrawerToggle = drawer.getActionBarDrawerToggle(); - - if (actionBarDrawerToggle != null) { - actionBarDrawerToggle.setDrawerIndicatorEnabled(true); - } - } - - @Override - public void onUserReceived(HabitRPGUser user) { - } - - @Override - public void onUserFail() { - - } - - @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() { - - } - - @Override - public void onModelStateChanged(Class aClass, BaseModel.Action action, String s, String s1) { - if (aClass != HabitRPGUser.class) - return; - - - new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).async().querySingle(userTransactionListener); - Log.d("db", "received notif"); -// SetUserData(); - } - - private boolean taskListAlreadyAdded; - - private void SetUserData() { - if (User != null) { - runOnUiThread(new Runnable() { - @Override - public void run() { - if (!taskListAlreadyAdded) { - taskListAlreadyAdded = true; - loadTaskLists(); - FillTagFilterDrawer(User.getTags()); - } - TaskRecyclerViewFragment fragment = ViewFragmentsDictionary.get(2); - if (fragment != null) { - HabitItemRecyclerViewAdapter adapter =(HabitItemRecyclerViewAdapter)fragment.mAdapter; - adapter.dailyResetOffset = User.getPreferences().getDayStart(); - } - updateHeader(); - updateSidebar(); - displayDeathDialogIfNeeded(); - } - }); - } - } - - // Filter Tags - - public void FillTagFilterDrawer(List 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) - ); - } - } - - /* - Updates concerned tags. - */ - public void updateTags(List tags) { - Log.d("tags", "Updating tags"); - List 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); - } - } - } - } - - } - - // A Filter was checked - - private Debounce filterChangedHandler = new Debounce(1500, 1000) { - @Override - public void execute() { - ArrayList tagList = new ArrayList<>(); - - for (Map.Entry f : tagFilterMap.entrySet()) { - if (f.getValue()) { - tagList.add(f.getKey()); - } - } - tagsHelper.setTags(tagList); - EventBus.getDefault().post(new FilterTasksByTagsCommand()); - } - }; - - - private HashMap tagFilterMap = new HashMap<>(); - - @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); - } - } - - private TransactionListener userTransactionListener = new TransactionListener() { - @Override - public void onResultReceived(HabitRPGUser habitRPGUser) { - User = habitRPGUser; - SetUserData(); - } - - @Override - public boolean onReady(BaseTransaction baseTransaction) { - return true; - } - - @Override - public boolean hasResult(BaseTransaction baseTransaction, HabitRPGUser habitRPGUser) { - return true; - } - }; - - private void displayLevelUpDialog(int level) { - SuppressedModals suppressedModals = User.getPreferences().getSuppressModals(); - if (suppressedModals != null) { - if (suppressedModals.getLevelUp()) { - return; - } - } - - MaterialDialog dialog = new MaterialDialog.Builder(this) - .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, this, false, false); - userPicture.setPictureOn(avatarView); - } - - dialog.show(); - } - - private void displayDeathDialogIfNeeded() { - - if (User.getStats().getHp() > 0) { - return; - } - - if (this.faintDialog == null) { - final TaskActivity activity = this; - this.faintDialog = new MaterialDialog.Builder(this) - .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(), this); - - ImageView avatarView = (ImageView)customView.findViewById(R.id.avatarView); - UserPicture userPicture = new UserPicture(User, this, false, false); - userPicture.setPictureOn(avatarView); - } - - this.faintDialog.show(); - } - - } -} \ No newline at end of file diff --git a/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java b/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java deleted file mode 100644 index ba775d52b..000000000 --- a/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.habitrpg.android.habitica; - -import android.graphics.Bitmap; -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.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.view.MenuItem; -import android.view.ViewGroup; - -import com.habitrpg.android.habitica.events.ToggledInnStateEvent; -import com.habitrpg.android.habitica.prefs.PrefsActivity; -import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel; -import com.habitrpg.android.habitica.ui.MainDrawerBuilder; -import com.habitrpg.android.habitica.ui.fragments.ChatListFragment; -import com.habitrpg.android.habitica.userpicture.UserPicture; -import com.habitrpg.android.habitica.userpicture.UserPictureRunnable; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.mikepenz.materialdrawer.AccountHeader; -import com.mikepenz.materialdrawer.Drawer; -import com.mikepenz.materialdrawer.model.ProfileDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; - -import butterknife.ButterKnife; -import butterknife.InjectView; -import de.greenrobot.event.EventBus; - -public class TavernActivity extends AppCompatActivity { - - @InjectView(R.id.toolbar) - Toolbar toolbar; - - @InjectView(R.id.avatar) - ViewGroup avatarHeader; - - private AvatarWithBarsViewModel avatarInHeader; - private APIHelper mAPIHelper; - private HabitRPGUser User; - - private AccountHeader accountHeader; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_tavern); - - ButterKnife.inject(this); - - setSupportActionBar(toolbar); - - // Receive Events - EventBus.getDefault().register(this); - - ActionBar actionBar = getSupportActionBar(); - - if (actionBar != null) { - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setDisplayShowHomeEnabled(false); - actionBar.setDisplayShowTitleEnabled(true); - actionBar.setDisplayUseLogoEnabled(false); - actionBar.setHomeButtonEnabled(false); - - toolbar.setTitleTextColor(this.getResources().getColor(R.color.white)); - } - - accountHeader = MainDrawerBuilder.CreateDefaultAccountHeader(this).build(); - - - avatarInHeader = new AvatarWithBarsViewModel(this, avatarHeader); - - HostConfig hostConfig = PrefsActivity.fromContext(this); - User = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle(); - - avatarInHeader.updateData(User); - updateSidebar(); - - mAPIHelper = new APIHelper(this, hostConfig); - - setFragment(new ChatListFragment(this, "habitrpg", mAPIHelper, User, true)); - } - - private void updateSidebar() { - final IProfile profile = accountHeader.getProfiles().get(0); - if (User.getAuthentication() != null) { - if (User.getAuthentication().getLocalAuthentication() != null) { - profile.withEmail(User.getAuthentication().getLocalAuthentication().getEmail()); - } - } profile.withName(User.getProfile().getName()); - new UserPicture(User, this, true, false).setPictureWithRunnable(new UserPictureRunnable() { - public void run(Bitmap avatar) { - profile.withIcon(avatar); - accountHeader.updateProfile(profile); - } - }); - accountHeader.updateProfile(profile); - } - - // This could be moved into an abstract BaseActivity - // class for being re-used by several instances - protected void setFragment(Fragment fragment) { - FragmentManager fragmentManager = getSupportFragmentManager(); - FragmentTransaction fragmentTransaction = - fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.tavern_framelayout, fragment); - fragmentTransaction.commit(); - } - - public void onEvent(ToggledInnStateEvent evt) { - avatarInHeader.updateData(User); - } - - @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(); - - //noinspection SimplifiableIfStatement - if (id == android.R.id.home) { - finish(); - return true; - } - - return super.onOptionsItemSelected(item); - } -} diff --git a/Habitica/src/com/habitrpg/android/habitica/TavernFragment.java b/Habitica/src/com/habitrpg/android/habitica/TavernFragment.java index efd35f13c..eac2ad2d7 100644 --- a/Habitica/src/com/habitrpg/android/habitica/TavernFragment.java +++ b/Habitica/src/com/habitrpg/android/habitica/TavernFragment.java @@ -10,6 +10,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.habitrpg.android.habitica.events.commands.CreateTagCommand; import com.habitrpg.android.habitica.helpers.TagsHelper; import com.habitrpg.android.habitica.ui.fragments.ChatListFragment; import com.mikepenz.materialdrawer.DrawerBuilder; @@ -37,4 +38,9 @@ public class TavernFragment extends BaseFragment { fragmentTransaction.replace(R.id.tavern_framelayout, fragment); fragmentTransaction.commit(); } + + //we don't have custom tavern events right now. + public void onEvent(CreateTagCommand event) { + + } } diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java index d9314ade3..598d74b39 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java @@ -10,11 +10,8 @@ import com.habitrpg.android.habitica.BaseFragment; import com.habitrpg.android.habitica.GemPurchaseActivity; import com.habitrpg.android.habitica.MainActivity; import com.habitrpg.android.habitica.PartyFragment; -import com.habitrpg.android.habitica.TaskActivity; -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; @@ -100,9 +97,8 @@ public class MainDrawerBuilder { .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { @Override public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { - // do something with the clicked item :D - BaseFragment fragment = null; + Class newActivityClass = null; switch (drawerItem.getIdentifier()) { case SIDEBAR_TASKS: { @@ -117,12 +113,25 @@ public class MainDrawerBuilder { fragment = new TavernFragment(); break; } + case SIDEBAR_SETTINGS: { + newActivityClass = PrefsActivity.class; + break; + } + case SIDEBAR_ABOUT: { + newActivityClass = AboutActivity.class; + break; + } } if (fragment != null) { + fragment.fragmentSidebarPosition = position; activity.displayFragment(fragment); return false; } + if (newActivityClass != null) { + activity.startActivity(new Intent(activity, newActivityClass)); + return false; + } return true; diff --git a/Habitica/src/com/habitrpg/android/habitica/widget/UpdateWidgetService.java b/Habitica/src/com/habitrpg/android/habitica/widget/UpdateWidgetService.java index d51924aa8..bcdc57f6d 100644 --- a/Habitica/src/com/habitrpg/android/habitica/widget/UpdateWidgetService.java +++ b/Habitica/src/com/habitrpg/android/habitica/widget/UpdateWidgetService.java @@ -11,7 +11,7 @@ import android.widget.RemoteViews; import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.HostConfig; -import com.habitrpg.android.habitica.TaskActivity; +import com.habitrpg.android.habitica.MainActivity; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; import com.habitrpg.android.habitica.prefs.PrefsActivity; @@ -64,7 +64,7 @@ public class UpdateWidgetService extends Service implements HabitRPGUserCallback PendingIntent updateIntent = PendingIntent.getBroadcast(this, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.BT_refresh, updateIntent); - Intent openAppIntent = new Intent(this.getApplicationContext(), TaskActivity.class); + 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); @@ -95,7 +95,7 @@ public class UpdateWidgetService extends Service implements HabitRPGUserCallback remoteViews.setOnClickPendingIntent(R.id.BT_refresh, updateIntent); //If user click on life and xp: open the app - Intent openAppIntent = new Intent(this.getApplicationContext(), TaskActivity.class); + 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);