diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index 7d55f9bd5..ebac87b19 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -92,6 +92,14 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="com.habitrpg.android.habitica.MainActivity" />
+
+
+
diff --git a/Habitica/res/layout/activity_main.xml b/Habitica/res/layout/activity_main.xml
index 93c18f899..c79c63703 100644
--- a/Habitica/res/layout/activity_main.xml
+++ b/Habitica/res/layout/activity_main.xml
@@ -24,7 +24,6 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
-
+ app:tabMode="fixed" />
diff --git a/Habitica/res/layout/activity_party.xml b/Habitica/res/layout/activity_party.xml
new file mode 100644
index 000000000..f2a0c6a0a
--- /dev/null
+++ b/Habitica/res/layout/activity_party.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/activity_tavern.xml b/Habitica/res/layout/activity_tavern.xml
index 1584eccd8..87f07fa79 100644
--- a/Habitica/res/layout/activity_tavern.xml
+++ b/Habitica/res/layout/activity_tavern.xml
@@ -33,20 +33,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />
-
-
-
-
-
+ android:layout_height="match_parent" />
diff --git a/Habitica/res/layout/fragment_chatlist.xml b/Habitica/res/layout/fragment_chatlist.xml
new file mode 100644
index 000000000..d0a4bd5c0
--- /dev/null
+++ b/Habitica/res/layout/fragment_chatlist.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 6d8e336c8..7410d2ed6 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -147,5 +147,5 @@
Saturday
Sunday
Tavern
-
+ Party
\ No newline at end of file
diff --git a/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java b/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java
new file mode 100644
index 000000000..723221dee
--- /dev/null
+++ b/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java
@@ -0,0 +1,105 @@
+package com.habitrpg.android.habitica;
+
+import android.os.Bundle;
+import android.support.design.widget.CollapsingToolbarLayout;
+import android.support.design.widget.TabLayout;
+import android.support.v4.view.ViewPager;
+import android.support.v7.app.ActionBar;
+import android.support.v7.widget.Toolbar;
+import android.view.View;
+import android.widget.TextView;
+
+import com.crashlytics.android.Crashlytics;
+import com.crashlytics.android.core.CrashlyticsCore;
+import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel;
+import com.instabug.wrapper.support.activity.InstabugAppCompatActivity;
+import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
+import com.mikepenz.materialdrawer.Drawer;
+
+import butterknife.ButterKnife;
+import butterknife.InjectView;
+import de.greenrobot.event.EventBus;
+import io.fabric.sdk.android.Fabric;
+
+/**
+ * Created by Negue on 14.09.2015.
+ */
+public abstract class AvatarActivityBase extends InstabugAppCompatActivity {
+
+ //region View Elements
+ @InjectView(R.id.viewpager)
+ ViewPager viewPager;
+
+ @InjectView(R.id.toolbar)
+ Toolbar toolbar;
+
+ @InjectView(R.id.detail_tabs)
+ TabLayout detail_tabs;
+
+ @InjectView(R.id.avatar_with_bars)
+ View avatar_with_bars;
+
+ @InjectView(R.id.collapsing_toolbar)
+ CollapsingToolbarLayout collapsingToolbarLayout;
+
+ TextView titleTextView;
+
+ Drawer drawer;
+ //endregion
+
+ protected HostConfig hostConfig;
+ protected HabitRPGUser User;
+
+ AvatarWithBarsViewModel avatarInHeader;
+
+ protected abstract int getLayoutRes();
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(getLayoutRes());
+
+ // Inject Controls
+ ButterKnife.inject(this);
+
+ // Receive Events
+ EventBus.getDefault().register(this);
+
+ // Initialize Crashlytics
+ Crashlytics crashlytics = new Crashlytics.Builder()
+ .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
+ .build();
+ Fabric.with(this, crashlytics);
+
+ if (toolbar != null) {
+ setSupportActionBar(toolbar);
+
+ ActionBar actionBar = getSupportActionBar();
+
+ if (actionBar != null) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setDisplayShowHomeEnabled(false);
+ actionBar.setDisplayShowTitleEnabled(true);
+ actionBar.setDisplayUseLogoEnabled(false);
+ actionBar.setHomeButtonEnabled(false);
+ }
+
+ toolbar.setPadding(0, getResources().getDimensionPixelSize(R.dimen.tool_bar_top_padding), 0, 0);
+ }
+
+ viewPager.setBackgroundColor(getResources().getColor(R.color.white));
+
+ avatarInHeader = new AvatarWithBarsViewModel(this, avatar_with_bars);
+
+
+ titleTextView = new TextView(this);
+ titleTextView.setTextAppearance(this, android.R.style.TextAppearance_Material_Widget_ActionBar_Title_Inverse);
+ titleTextView.setPadding(0,16,0,0);
+ toolbar.addView(titleTextView);
+ }
+
+ protected void setTitle(String text){
+ titleTextView.setText(text);
+ }
+}
diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
index 72c6d5e44..9e0b09b37 100644
--- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
+++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
@@ -4,20 +4,14 @@ import android.content.Intent;
import android.graphics.Color;
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.view.ViewPager;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CompoundButton;
-import com.crashlytics.android.Crashlytics;
-import com.crashlytics.android.core.CrashlyticsCore;
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
import com.habitrpg.android.habitica.callbacks.TaskCreationCallback;
import com.habitrpg.android.habitica.callbacks.TaskScoringCallback;
@@ -33,13 +27,11 @@ import com.habitrpg.android.habitica.events.ToggledInnStateEvent;
import com.habitrpg.android.habitica.events.commands.CreateTagCommand;
import com.habitrpg.android.habitica.events.commands.FilterTasksByTagsCommand;
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.MainDrawerBuilder;
import com.habitrpg.android.habitica.ui.adapter.HabitItemRecyclerViewAdapter;
import com.habitrpg.android.habitica.ui.fragments.TaskRecyclerViewFragment;
import com.habitrpg.android.habitica.ui.helpers.Debounce;
-import com.instabug.wrapper.support.activity.InstabugAppCompatActivity;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
@@ -63,15 +55,12 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import butterknife.ButterKnife;
-import butterknife.InjectView;
import de.greenrobot.event.EventBus;
-import io.fabric.sdk.android.Fabric;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
-public class MainActivity extends InstabugAppCompatActivity implements HabitRPGUserCallback.OnUserReceived,
+public class MainActivity extends AvatarActivityBase implements HabitRPGUserCallback.OnUserReceived,
TaskScoringCallback.OnTaskScored, FlowContentObserver.OnSpecificModelStateChangedListener,
TaskCreationCallback.OnHabitCreated, TaskUpdateCallback.OnHabitUpdated,
Callback>, OnCheckedChangeListener {
@@ -79,54 +68,22 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
static final int TASK_CREATED_RESULT = 1;
static final int TASK_UPDATED_RESULT = 2;
- //region View Elements
- @InjectView(R.id.viewpager)
- ViewPager materialViewPager;
-
- @InjectView(R.id.toolbar)
- Toolbar toolbar;
-
- @InjectView(R.id.detail_tabs)
- TabLayout detail_tabs;
-
- @InjectView(R.id.avatar_with_bars)
- View avatar_with_bars;
-
- Drawer drawer;
-
Drawer filterDrawer;
- //endregion
Map ViewFragmentsDictionary = new HashMap<>();
- List TaskList = new ArrayList<>();
-
- private HostConfig hostConfig;
APIHelper mAPIHelper;
- // just to test the view
- private HabitRPGUser User;
-
- AvatarWithBarsViewModel avatarInHeader;
-
FlowContentObserver observer;
+ @Override
+ protected int getLayoutRes() {
+ return R.layout.activity_main;
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- // Inject Controls
- ButterKnife.inject(this);
-
- // Receive Events
- EventBus.getDefault().register(this);
-
- // Initialize Crashlytics
- Crashlytics crashlytics = new Crashlytics.Builder()
- .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
- .build();
- Fabric.with(this, crashlytics);
this.hostConfig = PrefsActivity.fromContext(this);
if (hostConfig == null || hostConfig.getApi() == null || hostConfig.getApi().equals("") || hostConfig.getUser() == null || hostConfig.getUser().equals("")) {
@@ -135,45 +92,17 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
return;
}
- if (toolbar != null) {
- setSupportActionBar(toolbar);
-
- ActionBar actionBar = getSupportActionBar();
-
- if (actionBar != null) {
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowHomeEnabled(false);
- actionBar.setDisplayShowTitleEnabled(true);
- actionBar.setDisplayUseLogoEnabled(false);
- actionBar.setHomeButtonEnabled(false);
- }
-
- toolbar.setPadding(0, getResources().getDimensionPixelSize(R.dimen.tool_bar_top_padding), 0, 0);
- }
-
- materialViewPager.setBackgroundColor(getResources().getColor(R.color.white));
-
- View mPagerRootView = materialViewPager.getRootView();
-
- //View avatarHeaderView = mPagerRootView.findViewById(R.id.avatar_with_bars_layout);
-
- avatarInHeader = new AvatarWithBarsViewModel(this, avatar_with_bars);
-
drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar)
.withSelectedItem(0)
.build();
- final android.content.Context context = getApplicationContext();
-
filterDrawer = new DrawerBuilder()
.withActivity(this)
.withDrawerGravity(Gravity.RIGHT)
.withCloseOnClick(false)
.append(drawer);
- materialViewPager.setOffscreenPageLimit(6);
-
- materialViewPager.setCurrentItem(0);
+ viewPager.setCurrentItem(0);
User = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle();
this.observer = new FlowContentObserver();
@@ -181,16 +110,9 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
this.observer.addSpecificModelChangeListener(this);
- try {
- hasItemData = new Select().from(ItemData.class).querySingle() != null;
- } catch (Exception e) {
-
- }
SetUserData();
}
- private boolean hasItemData = false;
-
@Override
protected void onResume() {
super.onResume();
@@ -217,7 +139,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
}
private void showSnackbar(String content, boolean negative) {
- Fragment f = ViewFragmentsDictionary.get(materialViewPager.getCurrentItem());
+ Fragment f = ViewFragmentsDictionary.get(viewPager.getCurrentItem());
Snackbar snackbar = Snackbar.make(f.getView().findViewById(R.id.fab), content, Snackbar.LENGTH_LONG);
@@ -396,7 +318,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
public void loadTaskLists() {
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
- materialViewPager.setAdapter(new FragmentPagerAdapter(fragmentManager) {
+ viewPager.setAdapter(new FragmentPagerAdapter(fragmentManager) {
int oldPosition = -1;
@@ -405,8 +327,6 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
int layoutOfType;
TaskRecyclerViewFragment fragment;
- String fragmentkey = "Recycler$" + position;
-
switch (position) {
case 0:
layoutOfType = R.layout.habit_item_card;
@@ -453,7 +373,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
});
- detail_tabs.setupWithViewPager(materialViewPager);
+ detail_tabs.setupWithViewPager(viewPager);
}
@@ -498,7 +418,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
private void updateHeader() {
updateUserAvatars();
- toolbar.setTitle(User.getProfile().getName() + " - Lv" + User.getStats().getLvl());
+ setTitle(User.getProfile().getName() + " - Lv" + User.getStats().getLvl());
android.support.v7.app.ActionBarDrawerToggle actionBarDrawerToggle = drawer.getActionBarDrawerToggle();
@@ -576,8 +496,6 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
private boolean taskListAlreadyAdded;
- private boolean getContentCalled = false;
-
private void SetUserData() {
if (User != null) {
runOnUiThread(new Runnable() {
@@ -640,7 +558,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
private Debounce filterChangedHandler = new Debounce(1500, 1000) {
@Override
public void execute() {
- ArrayList tagList = new ArrayList();
+ ArrayList tagList = new ArrayList<>();
for (Map.Entry f : tagFilterMap.entrySet()) {
if (f.getValue()) {
diff --git a/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java b/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java
new file mode 100644
index 000000000..e818471a0
--- /dev/null
+++ b/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java
@@ -0,0 +1,143 @@
+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.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
+import com.raizlabs.android.dbflow.sql.builder.Condition;
+import com.raizlabs.android.dbflow.sql.language.Select;
+
+import java.util.HashMap;
+
+import butterknife.InjectView;
+
+public class PartyActivity extends AvatarActivityBase implements AppBarLayout.OnOffsetChangedListener {
+
+ @InjectView(R.id.appbar)
+ AppBarLayout appBarLayout;
+
+ private APIHelper mAPIHelper;
+
+ @Override
+ protected int getLayoutRes() {
+ return R.layout.activity_party;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar)
+ .withSelectedItem(0)
+ .build();
+
+ 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);
+
+
+ updateUserAvatars();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ appBarLayout.addOnOffsetChangedListener(this);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ appBarLayout.removeOnOffsetChangedListener(this);
+ }
+
+ private HashMap fragmentDictionary = new HashMap<>();
+
+
+ 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 1:
+ fragment = new ChatListFragment(PartyActivity.this, "party", mAPIHelper, User, false);
+ 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/TavernActivity.java b/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java
index c439e6c38..279723658 100644
--- a/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java
+++ b/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java
@@ -1,49 +1,30 @@
package com.habitrpg.android.habitica;
-import android.graphics.Color;
import android.os.Bundle;
-import android.support.design.widget.Snackbar;
-import android.support.v4.widget.SwipeRefreshLayout;
+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.DefaultItemAnimator;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
-import android.view.View;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
-import android.view.animation.LayoutAnimationController;
import android.widget.LinearLayout;
import com.habitrpg.android.habitica.events.ToggledInnStateEvent;
-import com.habitrpg.android.habitica.events.commands.DeleteChatMessageCommand;
-import com.habitrpg.android.habitica.events.commands.FlagChatMessageCommand;
-import com.habitrpg.android.habitica.events.commands.SendNewGroupMessageCommand;
-import com.habitrpg.android.habitica.events.commands.ToggleInnCommand;
-import com.habitrpg.android.habitica.events.commands.ToggleLikeMessageCommand;
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.adapter.TavernRecyclerViewAdapter;
-import com.magicmicky.habitrpgwrapper.lib.models.ChatMessage;
+import com.habitrpg.android.habitica.ui.fragments.ChatListFragment;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
-import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult;
import com.mikepenz.materialdrawer.Drawer;
import com.raizlabs.android.dbflow.sql.builder.Condition;
import com.raizlabs.android.dbflow.sql.language.Select;
-import java.util.List;
-
import butterknife.ButterKnife;
import butterknife.InjectView;
import de.greenrobot.event.EventBus;
-import retrofit.Callback;
-import retrofit.RetrofitError;
-import retrofit.client.Response;
-public class TavernActivity extends AppCompatActivity implements Callback>, SwipeRefreshLayout.OnRefreshListener {
+public class TavernActivity extends AppCompatActivity {
@InjectView(R.id.toolbar)
Toolbar toolbar;
@@ -51,12 +32,6 @@ public class TavernActivity extends AppCompatActivity implements Callback() {
- @Override
- public void success(Void aVoid, Response response) {
- showSnackbar("Flagged message by " + cmd.chatMessage.user, false);
- }
-
- @Override
- public void failure(RetrofitError error) {
- showSnackbar("Failed to flag message by " + cmd.chatMessage.user, true);
- }
- });
- }
-
- public void onEvent(final ToggleLikeMessageCommand cmd){
- mAPIHelper.apiService.likeMessage(cmd.groupId, cmd.chatMessage.id, new Callback>() {
- @Override
- public void success(List aVoid, Response response) {
- }
-
- @Override
- public void failure(RetrofitError error) {
- showSnackbar("Failed to like message by " + cmd.chatMessage.user, true);
- }
- });
- }
-
- public void onEvent(final DeleteChatMessageCommand cmd) {
- mAPIHelper.apiService.deleteMessage(cmd.groupId, cmd.chatMessage.id, new Callback() {
- @Override
- public void success(Void aVoid, Response response) {
- if (currentChatMessages != null) {
- currentChatMessages.remove(cmd.chatMessage);
-
- TavernActivity.this.success(currentChatMessages, null);
- }
- }
-
- @Override
- public void failure(RetrofitError error) {
-
- }
- });
- }
-
- public void onEvent(SendNewGroupMessageCommand cmd) {
- mAPIHelper.apiService.postGroupChat(cmd.TargetGroupId, cmd.Message, new Callback() {
- @Override
- public void success(PostChatMessageResult msg, Response response) {
- if (currentChatMessages != null) {
- currentChatMessages.add(0, msg.message);
-
- TavernActivity.this.success(currentChatMessages, null);
- }
- }
-
- @Override
- public void failure(RetrofitError error) {
-
- }
- });
- }
-
- public void onEvent(ToggleInnCommand event) {
- mAPIHelper.toggleSleep(new Callback() {
- @Override
- public void success(Void aVoid, Response response) {
- ToggledInnStateEvent innState = new ToggledInnStateEvent();
- innState.Inn = !User.getPreferences().getSleep();
-
- User.getPreferences().setSleep(innState.Inn);
-
- avatarInHeader.UpdateData(User);
- EventBus.getDefault().post(innState);
- }
-
- @Override
- public void failure(RetrofitError error) {
-
- }
- });
+ public void onEvent(ToggledInnStateEvent evt){
+ avatarInHeader.UpdateData(User);
}
@Override
@@ -224,39 +109,4 @@ public class TavernActivity extends AppCompatActivity implements Callback currentChatMessages;
-
- @Override
- public void success(List chatMessages, Response response) {
- currentChatMessages = chatMessages;
-
- // filter flagged messages
- for (int i = chatMessages.size() - 1; i >= 0; i--) {
- ChatMessage msg = chatMessages.get(i);
-
- if(msg.flagCount >= 2){
- chatMessages.remove(msg);
- }
- }
-
- TavernRecyclerViewAdapter tavernAdapter = new TavernRecyclerViewAdapter(chatMessages, this, User.getId());
-
- //recyclerView.setHasFixedSize(true);
- recyclerView.setAdapter(tavernAdapter);
-
- swipeRefreshLayout.setRefreshing(false);
- }
-
- @Override
- public void failure(RetrofitError error) {
- showSnackbar(error.getMessage(), true);
- }
-
- @Override
- public void onRefresh() {
- swipeRefreshLayout.setRefreshing(true);
-
- mAPIHelper.apiService.listGroupChat("habitrpg", this);
- }
}
diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java
index 60ed3fec4..1e8c7898d 100644
--- a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java
@@ -8,6 +8,7 @@ import android.widget.AdapterView;
import com.habitrpg.android.habitica.AboutActivity;
import com.habitrpg.android.habitica.MainActivity;
+import com.habitrpg.android.habitica.PartyActivity;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.TavernActivity;
import com.habitrpg.android.habitica.prefs.PrefsActivity;
@@ -27,6 +28,7 @@ public class MainDrawerBuilder {
static final int SIDEBAR_TASKS = 1;
static final int SIDEBAR_TAVERN = 2;
+ static final int SIDEBAR_PARTY = 3;
static final int SIDEBAR_SETTINGS = 11;
static final int SIDEBAR_ABOUT = 12;
@@ -45,8 +47,8 @@ public class MainDrawerBuilder {
new SectionDrawerItem().withName(activity.getString(R.string.sidebar_section_social)),
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_tavern)).withIdentifier(SIDEBAR_TAVERN),
- /*new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_party)),
- new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_guilds)),
+ new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_party)).withIdentifier(SIDEBAR_PARTY),
+ /*new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_guilds)),
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_challenges)),
new SectionDrawerItem().withName(activity.getString(R.string.sidebar_section_inventory)),
@@ -77,6 +79,10 @@ public class MainDrawerBuilder {
selectedClass = TavernActivity.class;
break;
}
+ case SIDEBAR_PARTY: {
+ selectedClass = PartyActivity.class;
+ break;
+ }
case SIDEBAR_SETTINGS: {
selectedClass = PrefsActivity.class;
break;
diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/ChatListFragment.java b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/ChatListFragment.java
new file mode 100644
index 000000000..5a5735576
--- /dev/null
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/ChatListFragment.java
@@ -0,0 +1,239 @@
+package com.habitrpg.android.habitica.ui.fragments;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.design.widget.Snackbar;
+import android.support.v4.app.Fragment;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.habitrpg.android.habitica.APIHelper;
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.events.ToggledInnStateEvent;
+import com.habitrpg.android.habitica.events.commands.DeleteChatMessageCommand;
+import com.habitrpg.android.habitica.events.commands.FlagChatMessageCommand;
+import com.habitrpg.android.habitica.events.commands.SendNewGroupMessageCommand;
+import com.habitrpg.android.habitica.events.commands.ToggleInnCommand;
+import com.habitrpg.android.habitica.events.commands.ToggleLikeMessageCommand;
+import com.habitrpg.android.habitica.ui.adapter.TavernRecyclerViewAdapter;
+import com.magicmicky.habitrpgwrapper.lib.models.ChatMessage;
+import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
+import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult;
+
+import java.util.List;
+
+import butterknife.ButterKnife;
+import butterknife.InjectView;
+import de.greenrobot.event.EventBus;
+import retrofit.Callback;
+import retrofit.RetrofitError;
+import retrofit.client.Response;
+
+/**
+ * Created by Negue on 14.09.2015.
+ */
+public class ChatListFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener, Callback> {
+
+ private Context ctx;
+ private String groupId;
+ private APIHelper apiHelper;
+ private HabitRPGUser user;
+ private String userId;
+ private boolean isTavern;
+
+ public ChatListFragment(Context ctx, String groupId, APIHelper apiHelper, HabitRPGUser user, boolean isTavern){
+
+ this.ctx = ctx;
+ this.groupId = groupId;
+ this.apiHelper = apiHelper;
+ this.user = user;
+ this.userId = user.getId();
+ this.isTavern = isTavern;
+
+ // Receive Events
+ EventBus.getDefault().register(this);
+ }
+
+ private View view;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if (view == null)
+ view = inflater.inflate(R.layout.fragment_chatlist, container, false);
+
+ return view;
+ }
+
+ @InjectView(R.id.chat_list)
+ RecyclerView mRecyclerView;
+
+ @InjectView(R.id.chat_refresh_layout)
+ SwipeRefreshLayout swipeRefreshLayout;
+
+ LinearLayoutManager layoutManager;
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ ButterKnife.inject(this, view);
+
+ swipeRefreshLayout.setOnRefreshListener(this);
+
+
+ layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
+
+ if (layoutManager == null) {
+ layoutManager = new LinearLayoutManager(ctx);
+
+ mRecyclerView.setLayoutManager(layoutManager);
+ }
+
+ onRefresh();
+ }
+
+ public void setRefreshEnabled(boolean enable) {
+ if(swipeRefreshLayout != null){
+ swipeRefreshLayout.setEnabled(enable);
+ }
+ }
+
+ @Override
+ public void onRefresh() {
+ swipeRefreshLayout.setRefreshing(true);
+
+ apiHelper.apiService.listGroupChat(groupId, this);
+ }
+
+ private List currentChatMessages;
+
+ @Override
+ public void success(List chatMessages, Response response) {
+ currentChatMessages = chatMessages;
+
+ // filter flagged messages
+ for (int i = chatMessages.size() - 1; i >= 0; i--) {
+ ChatMessage msg = chatMessages.get(i);
+
+ if(msg.flagCount >= 2){
+ chatMessages.remove(msg);
+ }
+ }
+
+ TavernRecyclerViewAdapter tavernAdapter = new TavernRecyclerViewAdapter(chatMessages, ctx, userId);
+
+ mRecyclerView.setAdapter(tavernAdapter);
+
+ swipeRefreshLayout.setRefreshing(false);
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+
+ }
+
+
+ private void showSnackbar(String msg, boolean negative){
+ Snackbar snackbar = Snackbar.make(mRecyclerView, msg, Snackbar.LENGTH_LONG);
+
+ if (negative) {
+ View snackbarView = snackbar.getView();
+
+ //change Snackbar's background color;
+ snackbarView.setBackgroundColor(Color.RED);
+ }
+
+ snackbar.show();
+ }
+
+ public void onEvent(final FlagChatMessageCommand cmd){
+ apiHelper.apiService.flagMessage(cmd.groupId, cmd.chatMessage.id, new Callback() {
+ @Override
+ public void success(Void aVoid, Response response) {
+ showSnackbar("Flagged message by " + cmd.chatMessage.user, false);
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+ showSnackbar("Failed to flag message by " + cmd.chatMessage.user, true);
+ }
+ });
+ }
+
+ public void onEvent(final ToggleLikeMessageCommand cmd){
+ apiHelper.apiService.likeMessage(cmd.groupId, cmd.chatMessage.id, new Callback>() {
+ @Override
+ public void success(List aVoid, Response response) {
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+ showSnackbar("Failed to like message by " + cmd.chatMessage.user, true);
+ }
+ });
+ }
+
+ public void onEvent(final DeleteChatMessageCommand cmd) {
+ apiHelper.apiService.deleteMessage(cmd.groupId, cmd.chatMessage.id, new Callback() {
+ @Override
+ public void success(Void aVoid, Response response) {
+ if (currentChatMessages != null) {
+ currentChatMessages.remove(cmd.chatMessage);
+
+ ChatListFragment.this.success(currentChatMessages, null);
+ }
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+
+ }
+ });
+ }
+
+ public void onEvent(SendNewGroupMessageCommand cmd) {
+ apiHelper.apiService.postGroupChat(cmd.TargetGroupId, cmd.Message, new Callback() {
+ @Override
+ public void success(PostChatMessageResult msg, Response response) {
+ if (currentChatMessages != null) {
+ currentChatMessages.add(0, msg.message);
+
+ ChatListFragment.this.success(currentChatMessages, null);
+ }
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+
+ }
+ });
+ }
+
+ // If the ChatList is Tavern, we're able to toggle the sleep-mode
+ public void onEvent(ToggleInnCommand event) {
+ apiHelper.toggleSleep(new Callback() {
+ @Override
+ public void success(Void aVoid, Response response) {
+ ToggledInnStateEvent innState = new ToggledInnStateEvent();
+ innState.Inn = !user.getPreferences().getSleep();
+
+ user.getPreferences().setSleep(innState.Inn);
+
+ EventBus.getDefault().post(innState);
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+
+ }
+ });
+ }
+
+}