From 445d1781d716f86b6fafb13c1085bcac8709fc12 Mon Sep 17 00:00:00 2001 From: Negue Date: Thu, 1 Dec 2016 21:48:24 +0100 Subject: [PATCH] challenge detail activity --- Habitica/AndroidManifest.xml | 11 +- .../res/layout/activity_challenge_detail.xml | 207 ++++++++++++++++++ Habitica/res/layout/challenge_item.xml | 84 +++---- Habitica/res/values/strings.xml | 1 + .../habitica/components/AppComponent.java | 3 + .../activities/ChallengeDetailActivity.java | 76 +++++++ .../social/ChallengesListViewAdapter.java | 6 +- .../ui/fragments/BaseMainFragment.java | 13 +- .../ChallengeTaskRecyclerViewFragment.java | 18 +- .../challenges/ChallengeTasksFragment.java | 8 +- .../ChallengesOverviewFragment.java | 13 +- .../viewHolders/tasks/BaseTaskViewHolder.java | 14 +- .../tasks/ChecklistedViewHolder.java | 7 + .../ui/viewHolders/tasks/HabitViewHolder.java | 8 + .../viewHolders/tasks/RewardViewHolder.java | 6 + .../habitrpgwrapper/lib/api/ApiService.java | 3 + 16 files changed, 422 insertions(+), 56 deletions(-) create mode 100644 Habitica/res/layout/activity_challenge_detail.xml create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 68e82b5d1..e0eda724b 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -18,6 +18,7 @@ + + + + - diff --git a/Habitica/res/layout/activity_challenge_detail.xml b/Habitica/res/layout/activity_challenge_detail.xml new file mode 100644 index 000000000..94c60cfd4 --- /dev/null +++ b/Habitica/res/layout/activity_challenge_detail.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/challenge_item.xml b/Habitica/res/layout/challenge_item.xml index ef58ef30b..af3d43063 100644 --- a/Habitica/res/layout/challenge_item.xml +++ b/Habitica/res/layout/challenge_item.xml @@ -2,9 +2,9 @@ + + - + @@ -47,58 +53,60 @@ android:layout_weight="0.5" android:gravity="right"> - + android:layout_height="20dp" + android:src="@drawable/ic_people_black_24dp" /> + android:paddingStart="5dp" + android:text="0" /> - + android:weightSum="1.0"> - - - + android:layout_weight="0.5" + android:gravity="end"> + + + + + + - - \ No newline at end of file diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 0fd5c40ec..2f7322eff 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -437,4 +437,5 @@ To start, which parts of your life do you want to improve? Audio Theme Change Habitica\'s Audio Theme by + Challenge Details diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java index 63c225acc..5396a0f51 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java @@ -7,6 +7,7 @@ import com.habitrpg.android.habitica.modules.ApiModule; import com.habitrpg.android.habitica.modules.AppModule; import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; import com.habitrpg.android.habitica.ui.activities.AboutActivity; +import com.habitrpg.android.habitica.ui.activities.ChallengeDetailActivity; import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity; import com.habitrpg.android.habitica.ui.activities.FullProfileActivity; import com.habitrpg.android.habitica.ui.activities.GroupFormActivity; @@ -196,4 +197,6 @@ public interface AppComponent { void inject(ChallengeTasksFragment challengeTasksFragment); void inject(ChallengeTaskRecyclerViewFragment challengeTaskRecyclerViewFragment); + + void inject(ChallengeDetailActivity challengeDetailActivity); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java new file mode 100644 index 000000000..e756c0fcc --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java @@ -0,0 +1,76 @@ +package com.habitrpg.android.habitica.ui.activities; + +import android.os.Bundle; +import android.support.design.widget.TabLayout; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.widget.Toolbar; + +import com.habitrpg.android.habitica.APIHelper; +import com.habitrpg.android.habitica.HabiticaApplication; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.components.AppComponent; +import com.habitrpg.android.habitica.ui.adapter.social.ChallengesListViewAdapter.ChallengeViewHolder; +import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeTasksFragment; + +import javax.inject.Inject; + +import butterknife.BindView; + +public class ChallengeDetailActivity extends BaseActivity { + + public static String CHALLENGE_ID = "CHALLENGE_ID"; + + @BindView(R.id.detail_tabs) + TabLayout detail_tabs; + + @BindView(R.id.toolbar) + Toolbar toolbar; + + @Inject + public APIHelper apiHelper; + + private ChallengeViewHolder challengeViewHolder; + + @Override + protected int getLayoutResId() { + return R.layout.activity_challenge_detail; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setupToolbar(toolbar); + + getSupportActionBar().setTitle(R.string.challenge_details); + + Bundle extras = getIntent().getExtras(); + + String challengeId = extras.getString(CHALLENGE_ID); + + ChallengeTasksFragment fragment = new ChallengeTasksFragment(); + fragment.setTabLayout(detail_tabs); + fragment.setUser(HabiticaApplication.User); + fragment.setChallengeId(challengeId); + + if (getSupportFragmentManager().getFragments() == null) { + getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, fragment).commitAllowingStateLoss(); + } else { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out, android.R.anim.fade_in, android.R.anim.fade_out); + transaction.replace(R.id.fragment_container, fragment).addToBackStack(null).commitAllowingStateLoss(); + } + + apiHelper.apiService.getChallenge(challengeId) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(challenge -> challengeViewHolder.bind(challenge), throwable -> { + }); + + challengeViewHolder = new ChallengeViewHolder(findViewById(R.id.challenge_header)); + } + + @Override + protected void injectActivity(AppComponent component) { + component.inject(this); + } +} 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 596d5d9d7..0f4885b7c 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 @@ -51,10 +51,13 @@ public class ChallengesListViewAdapter extends RecyclerView.Adapter { - - public ChallengeHabitsRecyclerViewAdapter(String taskType, TagsHelper tagsHelper, int layoutResource, Context newContext, String userID, SortTasksCallback sortCallback) { super(taskType, tagsHelper, layoutResource, newContext, userID, sortCallback); } @@ -172,7 +170,9 @@ public class ChallengeTaskRecyclerViewFragment extends BaseFragment { @Override public HabitViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new HabitViewHolder(getContentView(parent)); + HabitViewHolder habitViewHolder = new HabitViewHolder(getContentView(parent)); + habitViewHolder.setDisabled(true); + return habitViewHolder; } } @@ -194,7 +194,9 @@ public class ChallengeTaskRecyclerViewFragment extends BaseFragment { @Override public DailyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new DailyViewHolder(getContentView(parent), dailyResetOffset); + DailyViewHolder dailyViewHolder = new DailyViewHolder(getContentView(parent), dailyResetOffset); + dailyViewHolder.setDisabled(true); + return dailyViewHolder; } } @@ -212,7 +214,9 @@ public class ChallengeTaskRecyclerViewFragment extends BaseFragment { @Override public TodoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new TodoViewHolder(getContentView(parent)); + TodoViewHolder todoViewHolder = new TodoViewHolder(getContentView(parent)); + todoViewHolder.setDisabled(true); + return todoViewHolder; } } @@ -229,7 +233,9 @@ public class ChallengeTaskRecyclerViewFragment extends BaseFragment { @Override public RewardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new RewardViewHolder(getContentView(parent)); + RewardViewHolder rewardViewHolder = new RewardViewHolder(getContentView(parent)); + rewardViewHolder.setDisabled(true); + return rewardViewHolder; } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeTasksFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeTasksFragment.java index 243550fae..515888675 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeTasksFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeTasksFragment.java @@ -86,13 +86,13 @@ public class ChallengeTasksFragment extends BaseMainFragment { public CharSequence getPageTitle(int position) { switch (position) { case 0: - return activity.getString(R.string.habits); + return getContext().getString(R.string.habits); case 1: - return activity.getString(R.string.dailies); + return getContext().getString(R.string.dailies); case 2: - return activity.getString(R.string.todos); + return getContext().getString(R.string.todos); case 3: - return activity.getString(R.string.rewards); + return getContext().getString(R.string.rewards); } return ""; } 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 8e08824b5..4e4aee35d 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 @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.ui.fragments.social.challenges; +import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; @@ -11,6 +12,8 @@ import android.view.ViewGroup; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.components.AppComponent; import com.habitrpg.android.habitica.events.commands.ShowChallengeTasksCommand; +import com.habitrpg.android.habitica.ui.activities.ChallengeDetailActivity; +import com.habitrpg.android.habitica.ui.activities.FullProfileActivity; import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; import org.greenrobot.eventbus.Subscribe; @@ -88,9 +91,13 @@ public class ChallengesOverviewFragment extends BaseMainFragment { @Subscribe public void onEvent(ShowChallengeTasksCommand cmd){ - ChallengeTasksFragment fragment = new ChallengeTasksFragment(); - fragment.setChallengeId(cmd.challengeId); - activity.displayFragment(fragment); + Bundle bundle = new Bundle(); + bundle.putString(ChallengeDetailActivity.CHALLENGE_ID, cmd.challengeId); + + Intent intent = new Intent(activity, ChallengeDetailActivity.class); + intent.putExtras(bundle); + intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + startActivity(intent); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.java index 07f5c87df..9a203311d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.java @@ -37,6 +37,8 @@ public class BaseTaskViewHolder extends RecyclerView.ViewHolder implements View. @BindColor(R.color.task_gray) int taskGray; + boolean disabled; + public BaseTaskViewHolder(View itemView) { super(itemView); @@ -92,7 +94,7 @@ public class BaseTaskViewHolder extends RecyclerView.ViewHolder implements View. @Override public void onClick(View v) { - if (v != itemView) { + if (v != itemView || isDisabled()) { return; } @@ -105,4 +107,14 @@ public class BaseTaskViewHolder extends RecyclerView.ViewHolder implements View. public boolean canContainMarkdown() { return true; } + + public boolean isDisabled() { + return disabled; + } + + public void setDisabled(boolean disabled) { + this.disabled = disabled; + + itemView.setEnabled(!disabled); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.java index 00249d292..ad61bee2e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.java @@ -163,4 +163,11 @@ public abstract class ChecklistedViewHolder extends BaseTaskViewHolder implement } } } + + @Override + public void setDisabled(boolean disabled) { + super.setDisabled(disabled); + + this.checkbox.setEnabled(!disabled); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.java index a52fe97ca..68ecb94f4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.java @@ -68,4 +68,12 @@ public class HabitViewHolder extends BaseTaskViewHolder { event.habit = task; EventBus.getDefault().post(event); } + + @Override + public void setDisabled(boolean disabled) { + super.setDisabled(disabled); + + this.btnPlus.setEnabled(!disabled); + this.btnMinus.setEnabled(!disabled); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.java index b53d54f28..ed38676f6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.java @@ -90,5 +90,11 @@ public class RewardViewHolder extends BaseTaskViewHolder { } } + @Override + public void setDisabled(boolean disabled) { + super.setDisabled(disabled); + + this.rewardButton.setEnabled(!disabled); + } } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java index b90a98064..13b9d9628 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java @@ -267,6 +267,9 @@ public interface ApiService { @GET("tasks/challenge/{challengeId}") Observable getChallengeTasks(@Path("challengeId") String challengeId); + @GET("challenges/{challengeId}") + Observable getChallenge(@Path("challengeId") String challengeId); + //DEBUG: These calls only work on a local development server @POST("debug/add-ten-gems")