diff --git a/app/src/main/java/com/kickstarter/ui/activities/DiscoveryActivity.java b/app/src/main/java/com/kickstarter/ui/activities/DiscoveryActivity.java index 64b2b3b55b..c201230c04 100644 --- a/app/src/main/java/com/kickstarter/ui/activities/DiscoveryActivity.java +++ b/app/src/main/java/com/kickstarter/ui/activities/DiscoveryActivity.java @@ -5,6 +5,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; +import android.support.design.widget.TabLayout; import android.support.v4.view.GravityCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; @@ -95,6 +96,7 @@ protected void onCreate(final @Nullable Bundle savedInstanceState) { this.sortViewPager.setAdapter(this.pagerAdapter); this.sortTabLayout.setupWithViewPager(this.sortViewPager); + addTabSelectedListenerToTabLayout(); this.viewModel.outputs.creatorDashboardButtonIsGone() .compose(bindToLifecycle()) @@ -182,6 +184,23 @@ protected void onCreate(final @Nullable Bundle savedInstanceState) { return this.discoveryLayout; } + private void addTabSelectedListenerToTabLayout() { + this.sortTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(final TabLayout.Tab tab) { + + } + @Override + public void onTabUnselected(final TabLayout.Tab tab) { + + } + @Override + public void onTabReselected(final TabLayout.Tab tab) { + DiscoveryActivity.this.pagerAdapter.scrollToTop(tab.getPosition()); + } + }); + } + private void startLoginToutActivity() { final Intent intent = new Intent(this, LoginToutActivity.class) .putExtra(IntentKey.LOGIN_REASON, LoginReason.DEFAULT); diff --git a/app/src/main/java/com/kickstarter/ui/adapters/DiscoveryPagerAdapter.java b/app/src/main/java/com/kickstarter/ui/adapters/DiscoveryPagerAdapter.java index d8bbb377a4..0d8b84bc1a 100644 --- a/app/src/main/java/com/kickstarter/ui/adapters/DiscoveryPagerAdapter.java +++ b/app/src/main/java/com/kickstarter/ui/adapters/DiscoveryPagerAdapter.java @@ -103,4 +103,15 @@ public void clearPages(final @NonNull List pages) { }) .subscribe(DiscoveryFragment::clearPage); } + + public void scrollToTop(final int position) { + Observable.from(this.fragments) + .filter(DiscoveryFragment::isInstantiated) + .filter(DiscoveryFragment::isAttached) + .filter(frag -> { + final int fragmentPosition = frag.getArguments().getInt(ArgumentsKey.DISCOVERY_SORT_POSITION); + return position == fragmentPosition; + }) + .subscribe(DiscoveryFragment::scrollToTop); + } } diff --git a/app/src/main/java/com/kickstarter/ui/fragments/DiscoveryFragment.java b/app/src/main/java/com/kickstarter/ui/fragments/DiscoveryFragment.java index d44d51eefe..d02e52d074 100644 --- a/app/src/main/java/com/kickstarter/ui/fragments/DiscoveryFragment.java +++ b/app/src/main/java/com/kickstarter/ui/fragments/DiscoveryFragment.java @@ -203,4 +203,8 @@ public void updateParams(final @NonNull DiscoveryParams params) { public void clearPage() { this.viewModel.inputs.clearPage(); } + + public void scrollToTop() { + this.recyclerView.smoothScrollToPosition(0); + } } diff --git a/app/src/main/java/com/kickstarter/viewmodels/DiscoveryFragmentViewModel.java b/app/src/main/java/com/kickstarter/viewmodels/DiscoveryFragmentViewModel.java index 91b30749c2..dde3c3318d 100644 --- a/app/src/main/java/com/kickstarter/viewmodels/DiscoveryFragmentViewModel.java +++ b/app/src/main/java/com/kickstarter/viewmodels/DiscoveryFragmentViewModel.java @@ -249,7 +249,6 @@ private void saveLastSeenActivityId(final @Nullable Activity activity) { private final PublishSubject paramsFromActivity = PublishSubject.create(); private final PublishSubject projectCardClicked = PublishSubject.create(); private final PublishSubject> rootCategories = PublishSubject.create(); - private final PublishSubject startHeartAnimation = PublishSubject.create(); private final BehaviorSubject activity = BehaviorSubject.create(); private final BehaviorSubject heartContainerClicked = BehaviorSubject.create(); @@ -260,6 +259,7 @@ private void saveLastSeenActivityId(final @Nullable Activity activity) { private final BehaviorSubject shouldShowOnboardingView = BehaviorSubject.create(); private final Observable> startProjectActivity; private final Observable startUpdateActivity; + private final BehaviorSubject startHeartAnimation = BehaviorSubject.create(); public final Inputs inputs = this; public final Outputs outputs = this;