display party members

This commit is contained in:
Phillip Thelen 2017-05-22 14:10:20 +02:00
parent c62227fc97
commit 6271f5303b
13 changed files with 97 additions and 106 deletions

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarSize="3dp"
android:scrollbarThumbVertical="@color/md_grey_500"
android:scrollbars="vertical" />

View file

@ -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);

View file

@ -45,7 +45,8 @@ public interface SocialRepository extends BaseRepository {
Observable<PostChatMessageResult> postPrivateMessage(String recipientId, String message);
Observable<List<User>> getGroupMembers(String id, boolean includeAllPublicFields);
Observable<RealmResults<User>> getGroupMembers(String id);
Observable<List<User>> retrieveGroupMembers(String id, boolean includeAllPublicFields);
Observable<Void> inviteToGroup(String id, Map<String, Object> inviteData);

View file

@ -160,8 +160,14 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl<SocialLocalReposito
}
@Override
public Observable<List<User>> getGroupMembers(String id, boolean includeAllPublicFields) {
return apiClient.getGroupMembers(id, includeAllPublicFields);
public Observable<RealmResults<User>> getGroupMembers(String id) {
return localRepository.getGroupMembers(id);
}
@Override
public Observable<List<User>> retrieveGroupMembers(String id, boolean includeAllPublicFields) {
return apiClient.getGroupMembers(id, includeAllPublicFields)
.doOnNext(localRepository::save);
}
@Override

View file

@ -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<RealmResults<ChatMessage>> getGroupChat(String groupId);
void deleteMessage(String id);
Observable<RealmResults<User>> getGroupMembers(String partyId);
}

View file

@ -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<RealmResults<User>> getGroupMembers(String partyId) {
return realm.where(User.class)
.equalTo("party.id", partyId)
.findAllAsync()
.asObservable()
.filter(RealmResults::isLoaded);
}
private Observable<ChatMessage> getMessage(String id) {
return realm.where(ChatMessage.class).equalTo("id", id)
.findAllAsync()

View file

@ -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();
}

View file

@ -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 {

View file

@ -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

View file

@ -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<PartyMemberRecyclerViewAdapter.MemberViewHolder> {
public class PartyMemberRecyclerViewAdapter extends RealmRecyclerViewAdapter<User, PartyMemberRecyclerViewAdapter.MemberViewHolder> {
public Context context;
private List<User> memberList;
private Context context;
private boolean isMemberSelection;
public void setMemberList(List<User> memberList, boolean isMemberSelection) {
this.memberList = memberList;
public PartyMemberRecyclerViewAdapter(@Nullable OrderedRealmCollection<User> 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<PartyMe
@Override
public void onBindViewHolder(MemberViewHolder holder, int position) {
holder.bind(memberList.get(position));
}
@Override
public int getItemCount() {
return memberList == null ? 0 : memberList.size();
if (getData() != null) {
holder.bind(getData().get(position));
}
}
class MemberViewHolder extends RecyclerView.ViewHolder {
@ -80,7 +78,7 @@ public class PartyMemberRecyclerViewAdapter extends RecyclerView.Adapter<PartyMe
Resources resources;
public MemberViewHolder(View itemView) {
MemberViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);

View file

@ -191,14 +191,8 @@ public class PreferencesFragment extends BasePreferencesFragment implements
.subscribe(habitRPGUser -> {
}, 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);

View file

@ -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;
}

View file

@ -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<User> members;
private PartyMemberRecyclerViewAdapter viewAdapter;
RecyclerView recyclerView;
private PartyMemberRecyclerViewAdapter adapter;
private View view;
public void configure(@Nullable Context ctx, @Nullable List<User> 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<User> members) {
this.members = members;
viewAdapter.setMemberList(members, false);
}
}