diff --git a/Habitica/res/layout/fragment_party_memberlist.xml b/Habitica/res/layout/fragment_party_memberlist.xml
deleted file mode 100644
index 666b9f08f..000000000
--- a/Habitica/res/layout/fragment_party_memberlist.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java
index dd852fae3..b72dffb61 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java
@@ -108,8 +108,6 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication {
context.startActivity(intent);
}
- // region SQLite overrides
-
public static AppComponent getComponent() {
return component;
}
@@ -135,7 +133,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication {
Amplitude.getInstance().initialize(this, getString(R.string.amplitude_app_id)).enableForegroundTracking(this);
Identify identify = new Identify().setOnce("androidStore", BuildConfig.STORE);
Amplitude.getInstance().identify(identify);
- } catch (Resources.NotFoundException e) {
+ } catch (Resources.NotFoundException ignored) {
}
}
Fresco.initialize(this);
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.java
index 2537a90fd..41e69792a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.java
@@ -45,7 +45,8 @@ public interface SocialRepository extends BaseRepository {
Observable postPrivateMessage(String recipientId, String message);
- Observable> getGroupMembers(String id, boolean includeAllPublicFields);
+ Observable> getGroupMembers(String id);
+ Observable> retrieveGroupMembers(String id, boolean includeAllPublicFields);
Observable inviteToGroup(String id, Map inviteData);
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.java
index a90878724..2da048df1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.java
@@ -160,8 +160,14 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl> getGroupMembers(String id, boolean includeAllPublicFields) {
- return apiClient.getGroupMembers(id, includeAllPublicFields);
+ public Observable> getGroupMembers(String id) {
+ return localRepository.getGroupMembers(id);
+ }
+
+ @Override
+ public Observable> retrieveGroupMembers(String id, boolean includeAllPublicFields) {
+ return apiClient.getGroupMembers(id, includeAllPublicFields)
+ .doOnNext(localRepository::save);
}
@Override
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/SocialLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/SocialLocalRepository.java
index f184f52f3..778883d74 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/SocialLocalRepository.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/SocialLocalRepository.java
@@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.data.local;
import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.models.social.ChatMessage;
import com.habitrpg.android.habitica.models.social.Group;
+import com.habitrpg.android.habitica.models.user.User;
import java.util.List;
@@ -21,4 +22,6 @@ public interface SocialLocalRepository extends BaseLocalRepository {
Observable> getGroupChat(String groupId);
void deleteMessage(String id);
+
+ Observable> getGroupMembers(String partyId);
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.java
index bf2f0967a..4b7cd7d82 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.java
@@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.data.local.implementation;
import com.habitrpg.android.habitica.data.local.SocialLocalRepository;
import com.habitrpg.android.habitica.models.social.ChatMessage;
import com.habitrpg.android.habitica.models.social.Group;
+import com.habitrpg.android.habitica.models.user.User;
import java.util.List;
@@ -71,6 +72,15 @@ public class RealmSocialLocalRepository extends RealmBaseLocalRepository impleme
getMessage(id).first().subscribe(chatMessage -> realm.executeTransaction(realm1 -> chatMessage.deleteFromRealm()), throwable -> {});
}
+ @Override
+ public Observable> getGroupMembers(String partyId) {
+ return realm.where(User.class)
+ .equalTo("party.id", partyId)
+ .findAllAsync()
+ .asObservable()
+ .filter(RealmResults::isLoaded);
+ }
+
private Observable getMessage(String id) {
return realm.where(ChatMessage.class).equalTo("id", id)
.findAllAsync()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.java
index 2e6d66209..b02ae78e9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.java
@@ -14,6 +14,8 @@ import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.HabiticaBaseApplication;
import com.habitrpg.android.habitica.components.AppComponent;
+import org.greenrobot.eventbus.EventBus;
+
import butterknife.ButterKnife;
import rx.subscriptions.CompositeSubscription;
@@ -59,6 +61,11 @@ public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
destroyed = true;
+
+ if (EventBus.getDefault().isRegistered(this)) {
+ EventBus.getDefault().unregister(this);
+ }
+
if (compositeSubscription != null && !compositeSubscription.isUnsubscribed()) {
compositeSubscription.unsubscribe();
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
index a930c3c70..0c6ac7ed1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
@@ -339,19 +339,6 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria
sendBroadcast(intent);
}
-
- private void saveLoginInformation() {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- SharedPreferences.Editor editor = prefs.edit();
- boolean ans = editor.putString(getString(R.string.SP_username), user.getAuthentication().getLocalAuthentication().getUsername())
- .putString(getString(R.string.SP_email), user.getAuthentication().getLocalAuthentication().getEmail())
- .commit();
-
- if (!ans) {
- Log.e("SHARED PREFERENCES", "Shared Preferences Username and Email error");
- }
- }
-
@SuppressLint("ObsoleteSdkInt")
public void displayFragment(BaseMainFragment fragment) {
if (this.activeFragment != null && fragment.getClass() == this.activeFragment.getClass()) {
@@ -391,7 +378,6 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria
runOnUiThread(() -> {
updateHeader();
updateSidebar();
- saveLoginInformation();
if (activeFragment != null) {
activeFragment.updateUserData(user);
} else {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.java
index df9130ce7..656da0bae 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.java
@@ -9,6 +9,7 @@ import android.support.v7.widget.RecyclerView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.ApiClient;
+import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.events.commands.SelectMemberCommand;
import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter;
@@ -25,7 +26,7 @@ public class SkillMemberActivity extends BaseActivity {
private PartyMemberRecyclerViewAdapter viewAdapter;
@Inject
- public ApiClient apiClient;
+ public SocialRepository socialRepository;
@Override
protected int getLayoutResId() {
@@ -47,25 +48,19 @@ public class SkillMemberActivity extends BaseActivity {
private void loadMemberList() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
- viewAdapter = new PartyMemberRecyclerViewAdapter();
- viewAdapter.context = this;
+ viewAdapter = new PartyMemberRecyclerViewAdapter(null, true, this, true);
recyclerView.setAdapter(viewAdapter);
- apiClient.getGroup("party")
+ socialRepository.getGroup("party")
.subscribe(group -> {
if (group == null) {
return;
}
- apiClient.getGroupMembers(group.id, true)
- .subscribe(members -> {
- viewAdapter.setMemberList(members, true);
- },
- throwable -> {
- });
- },
- throwable -> {
- });
+ socialRepository.getGroupMembers(group.id)
+ .subscribe(members -> viewAdapter.updateData(members),
+ throwable -> {});
+ }, throwable -> {});
}
@Subscribe
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PartyMemberRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PartyMemberRecyclerViewAdapter.java
index e05f08bbe..c42fd3e01 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PartyMemberRecyclerViewAdapter.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PartyMemberRecyclerViewAdapter.java
@@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.ui.adapter.social;
import android.content.Context;
import android.content.res.Resources;
+import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
@@ -24,21 +25,21 @@ import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
+import io.realm.OrderedRealmCollection;
+import io.realm.RealmRecyclerViewAdapter;
-public class PartyMemberRecyclerViewAdapter extends RecyclerView.Adapter {
+public class PartyMemberRecyclerViewAdapter extends RealmRecyclerViewAdapter {
- public Context context;
- private List memberList;
+ private Context context;
private boolean isMemberSelection;
- public void setMemberList(List memberList, boolean isMemberSelection) {
- this.memberList = memberList;
+ public PartyMemberRecyclerViewAdapter(@Nullable OrderedRealmCollection data, boolean autoUpdate, Context context, boolean isMemberSelection) {
+ super(data, autoUpdate);
+ this.context = context;
this.isMemberSelection = isMemberSelection;
- this.notifyDataSetChanged();
}
-
@Override
public MemberViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@@ -50,12 +51,9 @@ public class PartyMemberRecyclerViewAdapter extends RecyclerView.Adapter {
}, throwable -> {
});
-
- Preferences preferences = user.getPreferences();
- preferences.setLanguage(languageHelper.getLanguageCode());
- apiClient.setLanguageCode(preferences.getLanguage());
- apiClient.getContent()
- .subscribe(contentResult -> {
- }, throwable -> {
- });
+ apiClient.setLanguageCode(languageHelper.getLanguageCode());
+ apiClient.getContent().subscribe(contentResult -> {}, throwable -> {});
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
Intent intent = new Intent(getActivity(), MainActivity.class);
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java
index 931e276f7..7e1bffff1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java
@@ -67,12 +67,18 @@ public class PartyFragment extends BaseMainFragment {
// Get the full group data
if (userHasParty()) {
- compositeSubscription.add(socialRepository.getGroup(user.getParty().getId())
- .subscribe(group -> {
- PartyFragment.this.group = group;
- updateGroupUI();
- }, RxErrorHandler.handleEmptyError()));
- socialRepository.retrieveGroup("party").subscribe(group1 -> {}, RxErrorHandler.handleEmptyError());
+ if (user != null) {
+ compositeSubscription.add(socialRepository.getGroup(user.getParty().getId())
+ .subscribe(group -> {
+ PartyFragment.this.group = group;
+ updateGroupUI();
+ }, RxErrorHandler.handleEmptyError()));
+ }
+ socialRepository.retrieveGroup("party")
+ .flatMap(group1 -> socialRepository.retrieveGroupMembers(group1.id, true))
+ .subscribe(members -> {
+ members.size();
+ }, RxErrorHandler.handleEmptyError());
}
setViewPagerAdapter();
@@ -119,7 +125,7 @@ public class PartyFragment extends BaseMainFragment {
}
if (partyMemberListFragment != null && group != null) {
- partyMemberListFragment.setMemberList(group.members);
+ partyMemberListFragment.setPartyId(group.id);
}
if (groupInformationFragment != null) {
@@ -298,12 +304,6 @@ public class PartyFragment extends BaseMainFragment {
}
case 2: {
partyMemberListFragment = new PartyMemberListFragment();
- if (group != null) {
- partyMemberListFragment.configure(activity, group.members);
-
- } else {
- partyMemberListFragment.configure(activity, null);
- }
fragment = partyMemberListFragment;
break;
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java
index 1a7e6cc6c..78d9887d3 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java
@@ -11,11 +11,12 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
-import com.habitrpg.android.habitica.models.user.User;
+import com.habitrpg.android.habitica.data.SocialRepository;
+import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
-import java.util.List;
+import javax.inject.Inject;
import butterknife.BindView;
@@ -24,25 +25,21 @@ import butterknife.BindView;
*/
public class PartyMemberListFragment extends BaseFragment {
+ @Inject
+ SocialRepository socialRepository;
+
@BindView(R.id.recyclerView)
- RecyclerView mRecyclerView;
- private Context ctx;
- private List members;
- private PartyMemberRecyclerViewAdapter viewAdapter;
+ RecyclerView recyclerView;
+ private PartyMemberRecyclerViewAdapter adapter;
private View view;
-
- public void configure(@Nullable Context ctx, @Nullable List members) {
- this.ctx = ctx;
- this.members = members;
-
- }
+ private String partyId;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- if (view == null)
- view = inflater.inflate(R.layout.fragment_party_memberlist, container, false);
-
+ if (view == null) {
+ view = inflater.inflate(R.layout.fragment_recyclerview, container, false);
+ }
return view;
}
@@ -55,19 +52,26 @@ public class PartyMemberListFragment extends BaseFragment {
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx));
- viewAdapter = new PartyMemberRecyclerViewAdapter();
- viewAdapter.context = this.ctx;
- mRecyclerView.setAdapter(viewAdapter);
+ recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+ adapter = new PartyMemberRecyclerViewAdapter(null, true, getContext(), true);
+ recyclerView.setAdapter(adapter);
- if (members != null) {
- setMemberList(members);
+ getUsers();
+ }
+
+ public void setPartyId(String id) {
+ this.partyId = id;
+ getUsers();
+ }
+
+ private void getUsers() {
+ if (partyId == null) {
+ return;
}
+ socialRepository.getGroupMembers(partyId).first().subscribe(users -> {
+ if (adapter != null) {
+ adapter.updateData(users);
+ }
+ }, RxErrorHandler.handleEmptyError());
}
-
- public void setMemberList(List members) {
- this.members = members;
- viewAdapter.setMemberList(members, false);
- }
-
}