From 6271f5303b1e783fd5b6528e27bb8a2938bb554a Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 22 May 2017 14:10:20 +0200 Subject: [PATCH] display party members --- .../res/layout/fragment_party_memberlist.xml | 11 ---- .../habitica/HabiticaBaseApplication.java | 4 +- .../habitica/data/SocialRepository.java | 3 +- .../implementation/SocialRepositoryImpl.java | 10 +++- .../data/local/SocialLocalRepository.java | 3 + .../RealmSocialLocalRepository.java | 10 ++++ .../habitica/ui/activities/BaseActivity.java | 7 +++ .../habitica/ui/activities/MainActivity.java | 14 ----- .../ui/activities/SkillMemberActivity.java | 21 +++---- .../PartyMemberRecyclerViewAdapter.java | 26 ++++----- .../preferences/PreferencesFragment.java | 10 +--- .../fragments/social/party/PartyFragment.java | 26 ++++----- .../social/party/PartyMemberListFragment.java | 58 ++++++++++--------- 13 files changed, 97 insertions(+), 106 deletions(-) delete mode 100644 Habitica/res/layout/fragment_party_memberlist.xml 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); - } - }