Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,10 @@ fun Uri.isBackingDetailsUri(webEndpoint: String): Boolean {
return isKickstarterUri(webEndpoint) && PROJECT_BACKING_DETAILS_URL.matcher(path()).matches()
}

fun Uri.isPMOrderEditUri(webEndpoint: String): Boolean {
return isKickstarterUri(webEndpoint) && PM_ORDER_EDIT_CHECKOUT_PATTERN.matcher(path()).matches()
}

fun Uri.hasSecretRewardToken(): Boolean {
return this.getQueryParameter("secret_reward_token")?.isNotEmpty() == true
}
Expand Down Expand Up @@ -330,3 +334,8 @@ private val MAIN_PAGE_OPEN_BUTTON_QUERYPARAMS = Pattern.compile(
private val PROJECT_BACKING_DETAILS_URL = Pattern.compile(
"\\A\\/projects(\\/[a-zA-Z0-9_-]+)?\\/[a-zA-Z0-9_-]+\\/backing\\/details\\z"
)

// /projects/:creator_param/:project_param/order_edits/:order_edit_id/checkout
private val PM_ORDER_EDIT_CHECKOUT_PATTERN = Pattern.compile(
"\\A\\/projects(\\/[a-zA-Z0-9_-]+)?\\/[a-zA-Z0-9_-]+\\/order_edits\\/[a-zA-Z0-9_-]+\\/checkout\\z"
)
1 change: 1 addition & 0 deletions app/src/main/java/com/kickstarter/ui/IntentKey.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ object IntentKey {
const val SURVEY_RESPONSE = "com.kickstarter.kickstarter.survey_response"
const val NOTIFICATION_SURVEY_RESPONSE = "com.kickstarter.kickstarter.survey_response"
const val DEEPLINK_SURVEY_RESPONSE = "com.kickstarter.kickstarter.deeplink_survey_response"
const val DEEPLINK_PM_ORDER_EDIT = "com.kickstarter.kickstarter.deeplink_pm_order_edit"
const val NOTIFICATION_PLEDGE_REDEMPTION = "com.kickstarter.kickstarter.notification_pledge_redeption"
const val TOOLBAR_TITLE = "com.kickstarter.kickstarter.intent_toolbar_title"
const val TRACKING_CLIENT_TYPE_TAG = "com.kickstarter.kickstarter.intent_tracking_client_tag"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import com.kickstarter.ui.IntentKey
import com.kickstarter.ui.data.LoginReason
import com.kickstarter.ui.extensions.setUpConnectivityStatusCheck
import com.kickstarter.ui.extensions.startPreLaunchProjectActivity
import com.kickstarter.ui.extensions.startWebViewActivity
import com.kickstarter.viewmodels.DeepLinkViewModel
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
Expand Down Expand Up @@ -137,6 +138,19 @@ class DeepLinkActivity : AppCompatActivity() {
}
}.addToDisposable(disposables)

viewModel.outputs.startPMOrderEditWebview()
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
val uri = it.first
val isLoggedIn = it.second

if (isLoggedIn) {
startPMOrderEditActivity(uri.toString())
} else {
startLoginForPMOrderEdit(uri.toString())
}
}.addToDisposable(disposables)

statsigClient.updateExperimentUser()
}

Expand Down Expand Up @@ -237,6 +251,19 @@ class DeepLinkActivity : AppCompatActivity() {
finish()
}

private fun startLoginForPMOrderEdit(url: String) {
val intent = Intent(this, LoginToutActivity::class.java)
.putExtra(IntentKey.LOGIN_REASON, LoginReason.DEFAULT)
.putExtra(IntentKey.DEEPLINK_PM_ORDER_EDIT, url)
startActivityForResult(intent, ActivityRequestCodes.LOGIN_FLOW)
}

private fun startPMOrderEditActivity(url: String) {
ApplicationUtils.startNewDiscoveryActivity(this)
startWebViewActivity(url, getString(R.string.fpo_review_edits))
finish()
}

override fun onDestroy() {
disposables.clear()
super.onDestroy()
Expand Down
18 changes: 18 additions & 0 deletions app/src/main/java/com/kickstarter/viewmodels/DeepLinkViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import com.kickstarter.libs.utils.extensions.isKSDomain
import com.kickstarter.libs.utils.extensions.isMainPage
import com.kickstarter.libs.utils.extensions.isNotNull
import com.kickstarter.libs.utils.extensions.isNull
import com.kickstarter.libs.utils.extensions.isPMOrderEditUri
import com.kickstarter.libs.utils.extensions.isProjectCommentUri
import com.kickstarter.libs.utils.extensions.isProjectPreviewUri
import com.kickstarter.libs.utils.extensions.isProjectSaveUri
Expand Down Expand Up @@ -77,6 +78,8 @@ interface DeepLinkViewModel {

fun startProjectSurvey(): Observable<Pair<Uri, Boolean>>

fun startPMOrderEditWebview(): Observable<Pair<Uri, Boolean>>

/** Emits a Project and RefTag pair when we should start the [com.kickstarter.ui.activities.PreLaunchProjectPageActivity]. */
fun startPreLaunchProjectActivity(): Observable<Pair<Uri, Project>>
}
Expand All @@ -93,6 +96,8 @@ interface DeepLinkViewModel {
private val startProjectActivityWithCheckout = BehaviorSubject.create<Uri>()
private val startProjectActivityToSave = BehaviorSubject.create<Uri>()
private val startProjectSurvey = BehaviorSubject.create<Pair<Uri, Boolean>>()

private val startPMOrderEditWebview = BehaviorSubject.create<Pair<Uri, Boolean>>()
private val updateUserPreferences = BehaviorSubject.create<Boolean>()
private val finishDeeplinkActivity = BehaviorSubject.create<Unit>()
private val apolloClient = requireNotNull(environment.apolloClientV2())
Expand Down Expand Up @@ -262,6 +267,16 @@ interface DeepLinkViewModel {
startProjectSurvey.onNext(it)
}.addToDisposable(disposables)

uriFromIntent
.filter { it.isPMOrderEditUri(webEndpoint) }
.map { appendRefTagIfNone(it) }
.withLatestFrom(this.currentUser.isLoggedIn) { url, isLoggedIn ->
return@withLatestFrom Pair(url, isLoggedIn)
}
.subscribe {
startPMOrderEditWebview.onNext(it)
}.addToDisposable(disposables)

currentUser.observable()
.filter { it.isPresent() }
.map { it.getValue() }
Expand Down Expand Up @@ -316,6 +331,7 @@ interface DeepLinkViewModel {
.filter { !it.isRewardFulfilledDl() }
.filter { !it.isEmailDomain() }
.filter { !it.isProjectSurveyUri(webEndpoint) }
.filter { !it.isPMOrderEditUri(webEndpoint) }

Observable.merge(projectPreview, unsupportedDeepLink)
.map { obj: Uri -> obj.toString() }
Expand Down Expand Up @@ -395,6 +411,8 @@ interface DeepLinkViewModel {

override fun startProjectSurvey(): Observable<Pair<Uri, Boolean>> = startProjectSurvey

override fun startPMOrderEditWebview(): Observable<Pair<Uri, Boolean>> = startPMOrderEditWebview

override fun startPreLaunchProjectActivity(): Observable<Pair<Uri, Project>> = startPreLaunchProjectActivity
}

Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,6 @@
<!-- FPO's for PPO v2 -->
<string name="fpo_the_creator_has_not_collected_your_address_please_contact_them_to_resolve_the_issue" formatted="false">The creator has not collected your address. Please contact them to resolve the issue.</string>

<!-- FPO's for order edit -->
<string name="fpo_review_edits" formatted="false">Review edits made to your order</string>
</resources>
Loading