Skip to content

Commit

Permalink
NTV-203: Project Page v2 Feature Flag (#1414)
Browse files Browse the repository at this point in the history
  • Loading branch information
leighdouglas committed Sep 29, 2021
1 parent d472757 commit 38bb841
Show file tree
Hide file tree
Showing 28 changed files with 548 additions and 96 deletions.
4 changes: 2 additions & 2 deletions app/src/main/java/com/kickstarter/ApplicationModule.java
Expand Up @@ -549,8 +549,8 @@ static Logout provideLogout(final @NonNull CookieManager cookieManager, final @N
@Singleton
@NonNull
static PushNotifications providePushNotifications(final @ApplicationContext @NonNull Context context,
final @NonNull ApiClientType client) {
return new PushNotifications(context, client);
final @NonNull ApiClientType client, final @NonNull ExperimentsClientType experimentsClientType) {
return new PushNotifications(context, client, experimentsClientType);
}

@Provides
Expand Down
12 changes: 9 additions & 3 deletions app/src/main/java/com/kickstarter/libs/PushNotifications.java
Expand Up @@ -19,10 +19,12 @@
import androidx.core.content.ContextCompat;

import com.kickstarter.R;
import com.kickstarter.libs.models.OptimizelyFeature;
import com.kickstarter.libs.qualifiers.ApplicationContext;
import com.kickstarter.libs.transformations.CircleTransformation;
import com.kickstarter.libs.transformations.CropSquareTransformation;
import com.kickstarter.libs.utils.ObjectUtils;
import com.kickstarter.libs.utils.extensions.IntentExtKt;
import com.kickstarter.models.MessageThread;
import com.kickstarter.models.SurveyResponse;
import com.kickstarter.models.Update;
Expand All @@ -35,6 +37,7 @@
import com.kickstarter.ui.activities.ActivityFeedActivity;
import com.kickstarter.ui.activities.MessagesActivity;
import com.kickstarter.ui.activities.ProjectActivity;
import com.kickstarter.ui.activities.ProjectPageActivity;
import com.kickstarter.ui.activities.SurveyResponseActivity;
import com.kickstarter.ui.activities.UpdateActivity;
import com.squareup.picasso.Picasso;
Expand Down Expand Up @@ -71,16 +74,18 @@ public final class PushNotifications {

private final @ApplicationContext Context context;
private final ApiClientType client;
private final ExperimentsClientType experimentsClientType;

private final PublishSubject<PushNotificationEnvelope> notifications = PublishSubject.create();
private final CompositeSubscription subscriptions = new CompositeSubscription();

@VisibleForTesting
public Intent messageThreadIntent;

public PushNotifications(final @ApplicationContext @NonNull Context context, final @NonNull ApiClientType client) {
public PushNotifications(final @ApplicationContext @NonNull Context context, final @NonNull ApiClientType client, final @NonNull ExperimentsClientType experimentsClientType) {
this.context = context;
this.client = client;
this.experimentsClientType = experimentsClientType;
}

public void initialize() {
Expand Down Expand Up @@ -377,7 +382,7 @@ private void displayNotificationFromUpdateActivity(final @NonNull PushNotificati
private @NonNull PendingIntent projectUpdateContentIntent(final @NonNull PushNotificationEnvelope envelope,
final @NonNull Update update, final @NonNull String projectParam) {

final Intent projectIntent = new Intent(this.context, ProjectActivity.class)
final Intent projectIntent = IntentExtKt.getProjectIntent(new Intent(), this.context, this.experimentsClientType.isFeatureEnabled(OptimizelyFeature.Key.PROJECT_PAGE_V2))
.putExtra(IntentKey.PROJECT_PARAM, projectParam)
.putExtra(IntentKey.REF_TAG, RefTag.push());

Expand Down Expand Up @@ -489,7 +494,8 @@ private void displayNotificationFromUpdateActivity(final @NonNull PushNotificati
}

private @NonNull Intent projectIntent(final @NonNull PushNotificationEnvelope envelope, final @NonNull String projectParam) {
return new Intent(this.context, ProjectActivity.class)
final Intent intent = new Intent(this.context, this.experimentsClientType.isFeatureEnabled(OptimizelyFeature.Key.PROJECT_PAGE_V2) ? ProjectPageActivity.class : ProjectActivity.class);
return intent
.putExtra(IntentKey.PROJECT_PARAM, projectParam)
.putExtra(IntentKey.PUSH_NOTIFICATION_ENVELOPE, envelope)
.putExtra(IntentKey.REF_TAG, RefTag.push());
Expand Down
Expand Up @@ -2,6 +2,7 @@ package com.kickstarter.libs.models

class OptimizelyFeature {
enum class Key(val key: String) {
LIGHTS_ON("android_lights_on")
LIGHTS_ON("android_lights_on"),
PROJECT_PAGE_V2("android_project_page_v2")
}
}
@@ -0,0 +1,10 @@
package com.kickstarter.libs.utils.extensions

import android.content.Context
import android.content.Intent
import com.kickstarter.ui.activities.ProjectActivity
import com.kickstarter.ui.activities.ProjectPageActivity

fun Intent.getProjectIntent(context: Context, isFfEnabled: Boolean): Intent {
return this.setClass(context, if (isFfEnabled) ProjectPageActivity::class.java else ProjectActivity::class.java)
}
Expand Up @@ -15,6 +15,7 @@ import com.kickstarter.libs.qualifiers.RequiresActivityViewModel
import com.kickstarter.libs.rx.transformers.Transformers
import com.kickstarter.libs.utils.ApplicationUtils
import com.kickstarter.libs.utils.ObjectUtils
import com.kickstarter.libs.utils.extensions.getProjectIntent
import com.kickstarter.models.Activity
import com.kickstarter.models.ErroredBacking
import com.kickstarter.models.Project
Expand Down Expand Up @@ -88,12 +89,12 @@ class ActivityFeedActivity : BaseActivity<ActivityFeedViewModel.ViewModel>() {
viewModel.outputs.goToProject()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.subscribe { startProjectActivity(it) }
.subscribe { startProjectActivity(it.first, it.second) }

viewModel.outputs.startFixPledge()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.subscribe { startFixPledge(it) }
.subscribe { startFixPledge(it.first, it.second) }

viewModel.outputs.startUpdateActivity()
.compose(bindToLifecycle())
Expand Down Expand Up @@ -149,16 +150,16 @@ class ActivityFeedActivity : BaseActivity<ActivityFeedViewModel.ViewModel>() {
startActivityForResult(intent, ActivityRequestCodes.LOGIN_FLOW)
}

private fun startFixPledge(projectSlug: String) {
val intent = Intent(this, ProjectActivity::class.java)
private fun startFixPledge(projectSlug: String, isProjectPageEnabled: Boolean) {
val intent = Intent().getProjectIntent(this, isProjectPageEnabled)
.putExtra(IntentKey.PROJECT_PARAM, projectSlug)
.putExtra(IntentKey.EXPAND_PLEDGE_SHEET, true)
.putExtra(IntentKey.REF_TAG, RefTag.activity())
startActivityWithTransition(intent, R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
}

private fun startProjectActivity(project: Project) {
val intent = Intent(this, ProjectActivity::class.java)
private fun startProjectActivity(project: Project, isProjectPageEnabled: Boolean) {
val intent = Intent().getProjectIntent(this, isProjectPageEnabled)
.putExtra(IntentKey.PROJECT, project)
.putExtra(IntentKey.REF_TAG, RefTag.activity())
startActivityWithTransition(intent, R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
Expand Down
Expand Up @@ -14,6 +14,7 @@ import com.kickstarter.libs.rx.transformers.Transformers.observeForUI
import com.kickstarter.libs.transformations.CircleTransformation
import com.kickstarter.libs.utils.ApplicationUtils
import com.kickstarter.libs.utils.ViewUtils
import com.kickstarter.libs.utils.extensions.getProjectIntent
import com.kickstarter.models.Project
import com.kickstarter.ui.IntentKey
import com.kickstarter.ui.adapters.ProfileAdapter
Expand Down Expand Up @@ -116,7 +117,7 @@ class ProfileActivity : BaseActivity<ProfileViewModel.ViewModel>() {
this.viewModel.outputs.startProjectActivity()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe { this.startProjectActivity(it) }
.subscribe { this.startProjectActivity(it.first, it.second) }

this.viewModel.outputs.userNameTextViewText()
.compose(bindToLifecycle())
Expand Down Expand Up @@ -160,8 +161,8 @@ class ProfileActivity : BaseActivity<ProfileViewModel.ViewModel>() {
startActivityWithTransition(intent, R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
}

private fun startProjectActivity(project: Project) {
val intent = Intent(this, ProjectActivity::class.java)
private fun startProjectActivity(project: Project, isProjectPageEnabled: Boolean) {
val intent = Intent().getProjectIntent(this, isProjectPageEnabled)
.putExtra(IntentKey.PROJECT, project)
startActivityWithTransition(intent, R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
}
Expand Down
Expand Up @@ -545,6 +545,10 @@ class ProjectPageActivity :
}
}

override fun onBackPressed() {
super.onBackPressed()
}

private fun rewardsFragment() = supportFragmentManager.findFragmentById(R.id.fragment_rewards) as RewardsFragment?

private fun rewardsSheetGuideline(): Int = resources.getDimensionPixelSize(R.dimen.reward_fragment_guideline_constraint_end)
Expand Down
Expand Up @@ -2,7 +2,6 @@ package com.kickstarter.ui.activities

import android.content.Intent
import android.os.Bundle
import android.util.Pair
import androidx.recyclerview.widget.LinearLayoutManager
import com.jakewharton.rxbinding.support.v7.widget.RecyclerViewScrollEvent
import com.jakewharton.rxbinding.support.v7.widget.RxRecyclerView
Expand All @@ -13,6 +12,7 @@ import com.kickstarter.libs.RecyclerViewPaginator
import com.kickstarter.libs.RefTag
import com.kickstarter.libs.qualifiers.RequiresActivityViewModel
import com.kickstarter.libs.utils.InputUtils
import com.kickstarter.libs.utils.extensions.getProjectIntent
import com.kickstarter.models.Project
import com.kickstarter.ui.IntentKey
import com.kickstarter.ui.adapters.SearchAdapter
Expand Down Expand Up @@ -59,10 +59,10 @@ class SearchActivity : BaseActivity<SearchViewModel.ViewModel>(), SearchAdapter.
.subscribe { startProjectActivity(it) }
}

private fun startProjectActivity(projectAndRefTag: Pair<Project, RefTag>) {
val intent = Intent(this, ProjectActivity::class.java)
.putExtra(IntentKey.PROJECT, projectAndRefTag.first)
.putExtra(IntentKey.REF_TAG, projectAndRefTag.second)
private fun startProjectActivity(projectAndRefTagAndIsFfEnabled: Triple<Project, RefTag, Boolean>) {
val intent = Intent().getProjectIntent(this, projectAndRefTagAndIsFfEnabled.third)
.putExtra(IntentKey.PROJECT, projectAndRefTagAndIsFfEnabled.first)
.putExtra(IntentKey.REF_TAG, projectAndRefTagAndIsFfEnabled.second)
startActivity(intent)
overridePendingTransition(R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
}
Expand Down
Expand Up @@ -3,7 +3,6 @@ package com.kickstarter.ui.activities
import android.content.DialogInterface
import android.content.Intent
import android.os.Bundle
import android.util.Pair
import androidx.appcompat.app.AlertDialog
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
Expand All @@ -14,6 +13,7 @@ import com.kickstarter.libs.KSString
import com.kickstarter.libs.RefTag
import com.kickstarter.libs.qualifiers.RequiresActivityViewModel
import com.kickstarter.libs.rx.transformers.Transformers
import com.kickstarter.libs.utils.extensions.getProjectIntent
import com.kickstarter.models.Project
import com.kickstarter.services.DiscoveryParams
import com.kickstarter.ui.IntentKey
Expand Down Expand Up @@ -129,10 +129,10 @@ class ThanksActivity : BaseActivity<ThanksViewModel.ViewModel>() {
startActivity(intent)
}

private fun startProjectActivity(projectAndRefTag: Pair<Project, RefTag>) {
val intent = Intent(this, ProjectActivity::class.java)
.putExtra(IntentKey.PROJECT, projectAndRefTag.first)
.putExtra(IntentKey.REF_TAG, projectAndRefTag.second)
private fun startProjectActivity(projectAndRefTagAndIsFfEnabled: Triple<Project, RefTag, Boolean>) {
val intent = Intent().getProjectIntent(this, projectAndRefTagAndIsFfEnabled.third)
.putExtra(IntentKey.PROJECT, projectAndRefTagAndIsFfEnabled.first)
.putExtra(IntentKey.REF_TAG, projectAndRefTagAndIsFfEnabled.second)
startActivityWithTransition(intent, R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
}
}
Expand Up @@ -15,6 +15,7 @@ import com.kickstarter.libs.rx.transformers.Transformers.observeForUI
import com.kickstarter.libs.utils.ApplicationUtils
import com.kickstarter.libs.utils.NumberUtils
import com.kickstarter.libs.utils.TransitionUtils
import com.kickstarter.libs.utils.extensions.getProjectIntent
import com.kickstarter.libs.utils.extensions.isProjectUpdateCommentsUri
import com.kickstarter.libs.utils.extensions.isProjectUpdateUri
import com.kickstarter.libs.utils.extensions.isProjectUri
Expand Down Expand Up @@ -101,7 +102,7 @@ class UpdateActivity : BaseActivity<UpdateViewModel.ViewModel?>(), KSWebView.Del
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe { uriAndRefTag ->
startProjectActivity(uriAndRefTag.first, uriAndRefTag.second)
startProjectActivity(uriAndRefTag.first, uriAndRefTag.second, uriAndRefTag.third)
}

viewModel.outputs.startShareIntent()
Expand Down Expand Up @@ -180,8 +181,8 @@ class UpdateActivity : BaseActivity<UpdateViewModel.ViewModel?>(), KSWebView.Del
startActivityWithTransition(intent, R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
}

private fun startProjectActivity(uri: Uri, refTag: RefTag) {
val intent = Intent(this, ProjectActivity::class.java)
private fun startProjectActivity(uri: Uri, refTag: RefTag, isProjectPageEnabled: Boolean) {
val intent = Intent().getProjectIntent(this, isProjectPageEnabled)
.setData(uri)
.putExtra(IntentKey.REF_TAG, refTag)
startActivityWithTransition(intent, R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
Expand Down
Expand Up @@ -22,6 +22,7 @@ import com.kickstarter.libs.qualifiers.RequiresFragmentViewModel
import com.kickstarter.libs.rx.transformers.Transformers
import com.kickstarter.libs.utils.AnimationUtils.crossFadeAndReverse
import com.kickstarter.libs.utils.TransitionUtils
import com.kickstarter.libs.utils.extensions.getProjectIntent
import com.kickstarter.models.Activity
import com.kickstarter.models.Category
import com.kickstarter.models.Project
Expand All @@ -31,7 +32,6 @@ import com.kickstarter.ui.IntentKey
import com.kickstarter.ui.activities.ActivityFeedActivity
import com.kickstarter.ui.activities.EditorialActivity
import com.kickstarter.ui.activities.LoginToutActivity
import com.kickstarter.ui.activities.ProjectActivity
import com.kickstarter.ui.activities.UpdateActivity
import com.kickstarter.ui.adapters.DiscoveryAdapter
import com.kickstarter.ui.data.Editorial
Expand Down Expand Up @@ -124,7 +124,7 @@ class DiscoveryFragment : BaseFragment<DiscoveryFragmentViewModel.ViewModel>() {
this.viewModel.outputs.startProjectActivity()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.subscribe { startProjectActivity(it.first, it.second) }
.subscribe { startProjectActivity(it.first, it.second, it.third) }

this.viewModel.outputs.showLoginTout()
.compose(bindToLifecycle())
Expand Down Expand Up @@ -210,12 +210,12 @@ class DiscoveryFragment : BaseFragment<DiscoveryFragmentViewModel.ViewModel>() {
}
}

private fun startProjectActivity(project: Project, refTag: RefTag) {
val intent = Intent(activity, ProjectActivity::class.java)
.putExtra(IntentKey.PROJECT, project)
.putExtra(IntentKey.REF_TAG, refTag)
startActivity(intent)
private fun startProjectActivity(project: Project, refTag: RefTag, isProjectPageEnabled: Boolean) {
context?.let {
val intent = Intent().getProjectIntent(it, isProjectPageEnabled)
.putExtra(IntentKey.PROJECT, project)
.putExtra(IntentKey.REF_TAG, refTag)
startActivity(intent)
TransitionUtils.transition(it, TransitionUtils.slideInFromRight())
}
}
Expand Down
Expand Up @@ -9,10 +9,10 @@ import com.kickstarter.libs.rx.transformers.Transformers
import com.kickstarter.libs.utils.ObjectUtils
import com.kickstarter.libs.utils.ProjectUtils
import com.kickstarter.libs.utils.ViewUtils
import com.kickstarter.libs.utils.extensions.getProjectIntent
import com.kickstarter.models.Project
import com.kickstarter.ui.IntentKey
import com.kickstarter.ui.activities.MessageThreadsActivity
import com.kickstarter.ui.activities.ProjectActivity
import com.kickstarter.ui.adapters.data.ProjectDashboardData
import com.kickstarter.viewmodels.CreatorDashboardHeaderHolderViewModel

Expand Down Expand Up @@ -72,7 +72,7 @@ class CreatorDashboardHeaderViewHolder(
viewModel.outputs.startProjectActivity()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.subscribe { startProjectActivity(it.first, it.second) }
.subscribe { startProjectActivity(it.first, it.second, it.third) }
viewModel.outputs.viewProjectButtonIsGone()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
Expand Down Expand Up @@ -124,8 +124,8 @@ class CreatorDashboardHeaderViewHolder(
context().startActivity(intent)
}

private fun startProjectActivity(project: Project, refTag: RefTag) {
val intent = Intent(context(), ProjectActivity::class.java)
private fun startProjectActivity(project: Project, refTag: RefTag, isProjectPageEnabled: Boolean) {
val intent = Intent().getProjectIntent(context(), isProjectPageEnabled)
.putExtra(IntentKey.PROJECT, project)
.putExtra(IntentKey.REF_TAG, refTag)
context().startActivity(intent)
Expand Down

0 comments on commit 38bb841

Please sign in to comment.