diff --git a/Habitica/res/layout/dialog_challenge_filter.xml b/Habitica/res/layout/dialog_challenge_filter.xml index 4c98db44f..fc1e607c6 100644 --- a/Habitica/res/layout/dialog_challenge_filter.xml +++ b/Habitica/res/layout/dialog_challenge_filter.xml @@ -85,7 +85,8 @@ android:layout_height="wrap_content" android:checked="true" android:text="@string/owned" - android:textColor="@color/textColorLight"/> + android:textColor="@color/textColorLight" + android:paddingLeft="8dp" /> + android:textColor="@color/textColorLight" + android:paddingLeft="8dp"/> \ No newline at end of file diff --git a/Habitica/res/layout/dialog_challenge_filter_group_item.xml b/Habitica/res/layout/dialog_challenge_filter_group_item.xml index 6088a6a45..bd497420a 100644 --- a/Habitica/res/layout/dialog_challenge_filter_group_item.xml +++ b/Habitica/res/layout/dialog_challenge_filter_group_item.xml @@ -1,22 +1,10 @@ - - - - - - - - \ No newline at end of file + android:checked="true" + android:layout_height="wrap_content" + android:paddingTop="8dp" + android:paddingBottom="8dp" + android:paddingLeft="8dp"/> \ No newline at end of file diff --git a/Habitica/res/layout/fragment_group_info.xml b/Habitica/res/layout/fragment_group_info.xml index f6425e452..65f1bf4c8 100644 --- a/Habitica/res/layout/fragment_group_info.xml +++ b/Habitica/res/layout/fragment_group_info.xml @@ -282,7 +282,7 @@ android:layout_height="wrap_content" android:orientation="vertical" style="?android:buttonBarStyle" - android:visibility="@{group.quest.active? View.VISIBLE : View.GONE}"> + android:visibility="@{group.quest.active ? View.VISIBLE : View.GONE}"> getTasksOrder() { - HashMap map = new HashMap(); + HashMap map = new HashMap<>(); if (!dailyList.isEmpty()) { map.put(TASK_ORDER_DAILYS, dailyList.split(",")); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.java index f0c45d868..355f7fc6c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.java @@ -14,6 +14,8 @@ import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.commands.ShowChallengeDetailActivityCommand; import com.habitrpg.android.habitica.events.commands.ShowChallengeDetailDialogCommand; import com.habitrpg.android.habitica.models.social.Challenge; +import com.habitrpg.android.habitica.models.social.Group; +import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions; import net.pherth.android.emoji_library.EmojiParser; import net.pherth.android.emoji_library.EmojiTextView; @@ -23,15 +25,19 @@ import org.greenrobot.eventbus.EventBus; import butterknife.BindView; import butterknife.ButterKnife; import io.realm.OrderedRealmCollection; +import io.realm.RealmQuery; import io.realm.RealmRecyclerViewAdapter; public class ChallengesListViewAdapter extends RealmRecyclerViewAdapter { private boolean viewUserChallengesOnly; + private OrderedRealmCollection unfilteredData; + private final String userId; - public ChallengesListViewAdapter(@Nullable OrderedRealmCollection data, boolean autoUpdate, boolean viewUserChallengesOnly) { + public ChallengesListViewAdapter(@Nullable OrderedRealmCollection data, boolean autoUpdate, boolean viewUserChallengesOnly, String userId) { super(data, autoUpdate); this.viewUserChallengesOnly = viewUserChallengesOnly; + this.userId = userId; } @Override @@ -44,7 +50,42 @@ public class ChallengesListViewAdapter extends RealmRecyclerViewAdapter data) { + super.updateData(data); + unfilteredData = data; + } + + public void filter(ChallengeFilterOptions filterOptions) { + if (unfilteredData == null) { + return; + } + + RealmQuery query = unfilteredData.where(); + + if (filterOptions.showByGroups != null && filterOptions.showByGroups.size() > 0) { + String[] groupIds = new String[filterOptions.showByGroups.size()]; + int index = 0; + for (Group group : filterOptions.showByGroups) { + groupIds[index] = group.id; + index += 1; + } + query = query.in("groupId", groupIds); + } + + if (filterOptions.showOwned != filterOptions.notOwned) { + if (filterOptions.showOwned) { + query = query.equalTo("leaderId", userId); + } else { + query = query.notEqualTo("leaderId", userId); + } + } + + this.updateData(query.findAll()); } public static class ChallengeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengesFilterRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengesFilterRecyclerViewAdapter.java index 5d46d29c1..148cddd38 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengesFilterRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengesFilterRecyclerViewAdapter.java @@ -14,6 +14,7 @@ import com.habitrpg.android.habitica.models.social.Group; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; import butterknife.BindView; import butterknife.ButterKnife; @@ -65,7 +66,7 @@ public class ChallengesFilterRecyclerViewAdapter extends RecyclerView.Adapter groupsToCheck){ for (ChallengeViewHolder h : holderList) { - h.checkbox.setChecked($.find(groupsToCheck, g -> h.group.id == g.id).isPresent()); + h.checkbox.setChecked($.find(groupsToCheck, g -> h.group.id.equals(g.id)).isPresent()); } } public List getCheckedEntries(){ @@ -84,9 +85,6 @@ public class ChallengesFilterRecyclerViewAdapter extends RecyclerView.Adapter challengesViewed, + public void bind(AlertDialog.Builder builder, List challengesViewed, ChallengeFilterOptions currentFilter, Action1 selectedGroupsCallback) { - this.dialog = dialog; - this.dialog.setButton(Dialog.BUTTON_POSITIVE, context.getString(R.string.done), (dialog1, which) -> doneClicked()); + builder = builder + .setPositiveButton(context.getString(R.string.done), (dialog1, which) -> doneClicked()); + this.dialog = builder.show(); this.challengesViewed = challengesViewed; this.currentFilter = currentFilter; this.selectedGroupsCallback = selectedGroupsCallback; - fillChallengeGroups(); if(currentFilter != null ){ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java index 372522f13..7fd67a9f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java @@ -19,12 +19,14 @@ import com.habitrpg.android.habitica.components.AppComponent; import com.habitrpg.android.habitica.data.ChallengeRepository; import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.models.social.Challenge; +import com.habitrpg.android.habitica.modules.AppModule; import com.habitrpg.android.habitica.ui.activities.CreateChallengeActivity; import com.habitrpg.android.habitica.ui.adapter.social.ChallengesListViewAdapter; import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; import com.habitrpg.android.habitica.ui.helpers.RecyclerViewEmptySupport; import javax.inject.Inject; +import javax.inject.Named; import butterknife.BindView; import butterknife.ButterKnife; @@ -35,6 +37,9 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr @Inject ChallengeRepository challengeRepository; + @Inject + @Named(AppModule.NAMED_USER_ID) + String userId; @BindView(R.id.refresh_layout) SwipeRefreshLayout swipeRefreshLayout; @@ -45,11 +50,6 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr private ChallengesListViewAdapter challengeAdapter; private boolean viewUserChallengesOnly; - private boolean withFilter; - - public void setWithFilter(boolean withFilter){ - this.withFilter = withFilter; - } public void setViewUserChallengesOnly(boolean only) { this.viewUserChallengesOnly = only; @@ -58,7 +58,7 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr private RealmResults challenges; - private ChallengeFilterOptions lastFilterOptions; + private ChallengeFilterOptions filterOptions; @Override public void onDestroy() { @@ -73,7 +73,7 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr View v = inflater.inflate(R.layout.fragment_challengeslist, container, false); unbinder = ButterKnife.bind(this, v); - challengeAdapter = new ChallengesListViewAdapter(null, true, viewUserChallengesOnly); + challengeAdapter = new ChallengesListViewAdapter(null, true, viewUserChallengesOnly, userId); swipeRefreshLayout.setOnRefreshListener(this); @@ -119,7 +119,7 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr fetchOnlineChallenges(); } this.challenges = challenges; - challengeAdapter.updateData(challenges); + challengeAdapter.updateUnfilteredData(challenges); }, RxErrorHandler.handleEmptyError()); } @@ -148,8 +148,14 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr private void showFilterDialog() { ChallengeFilterDialogHolder.showDialog(getActivity(), challenges, - lastFilterOptions, - filterOptions -> this.lastFilterOptions = filterOptions); + filterOptions, this::changeFilter); + } + + private void changeFilter(ChallengeFilterOptions challengeFilterOptions) { + filterOptions = challengeFilterOptions; + if (challengeAdapter != null) { + challengeAdapter.filter(filterOptions); + } } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java index bff1cff6f..a475155c5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java @@ -46,7 +46,6 @@ public class ChallengesOverviewFragment extends BaseMainFragment { userChallengesFragment = new ChallengeListFragment(); userChallengesFragment.setUser(this.user); userChallengesFragment.setViewUserChallengesOnly(true); - userChallengesFragment.setWithFilter(true); availableChallengesFragment = new ChallengeListFragment(); availableChallengesFragment.setUser(this.user); 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 1f82e3032..e90359ee3 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 @@ -135,7 +135,7 @@ public class PartyFragment extends BaseMainFragment { } if (group != null && group.quest != null && group.quest.key != null && !group.quest.key.isEmpty()) { - inventoryRepository.getQuestContent(group.quest.key).subscribe(content -> { + inventoryRepository.getQuestContent(group.quest.key).first().subscribe(content -> { if (groupInformationFragment != null) { groupInformationFragment.setQuestContent(content); }