Skip to content

Commit 8cc01e7

Browse files
leighdouglasArkariang
authored andcommitted
MBL-1876: Firebase crashes Caused by android.os.TransactionTooLargeException (#2171)
(cherry picked from commit f63ea03)
1 parent 2fef312 commit 8cc01e7

15 files changed

+145
-107
lines changed

app/src/main/java/com/kickstarter/libs/utils/extensions/ProjectExt.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -312,13 +312,14 @@ fun Project.reduce(): Project {
312312
* The end goal is to reduce to the bare minimum the amount of memory required to be serialized on Intents
313313
* when presenting screens in order to avoid `android.os.TransactionTooLargeException`
314314
*/
315-
fun Project.reduceToPreLaunchProject(): Project {
315+
fun Project.reduceProjectPayload(): Project {
316316
val web = Web.builder()
317317
.project(this.webProjectUrl())
318318
.build()
319319

320320
return Project.Builder()
321321
.id(this.id())
322+
.canComment(this.canComment())
322323
.slug(this.slug())
323324
.name(this.name())
324325
.creator(this.creator())
@@ -331,9 +332,14 @@ fun Project.reduceToPreLaunchProject(): Project {
331332
.currentCurrency(this.currentCurrency())
332333
.sendThirdPartyEvents(this.sendThirdPartyEvents())
333334
.isStarred(this.isStarred())
335+
.isBacking(this.isBacking())
334336
.currency(this.currency())
335337
.currencySymbol(this.currencySymbol())
336338
.currencyTrailingCode(this.currencyTrailingCode())
337339
.urls(Urls.builder().web(web).build())
340+
.isInPostCampaignPledgingPhase(this.isInPostCampaignPledgingPhase())
341+
.postCampaignPledgingEnabled(this.postCampaignPledgingEnabled())
342+
.sendThirdPartyEvents(this.sendThirdPartyEvents())
343+
.state(this.state())
338344
.build()
339345
}

app/src/main/java/com/kickstarter/ui/activities/CommentsActivity.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.kickstarter.libs.utils.TransitionUtils
1717
import com.kickstarter.libs.utils.UrlUtils
1818
import com.kickstarter.libs.utils.extensions.addToDisposable
1919
import com.kickstarter.libs.utils.extensions.getEnvironment
20+
import com.kickstarter.libs.utils.extensions.reduceProjectPayload
2021
import com.kickstarter.libs.utils.extensions.showAlertDialog
2122
import com.kickstarter.libs.utils.extensions.toVisibility
2223
import com.kickstarter.models.Comment
@@ -302,8 +303,9 @@ class CommentsActivity :
302303
* // TODO: https://kickstarter.atlassian.net/browse/NT-1955
303304
*/
304305
private fun startThreadActivity(commentData: CommentCardData, openKeyboard: Boolean, projectUpdateId: String? = null) {
306+
val reducedProject = commentData.project?.reduceProjectPayload()
305307
val threadIntent = Intent(this, ThreadActivity::class.java).apply {
306-
putExtra(IntentKey.COMMENT_CARD_DATA, commentData)
308+
putExtra(IntentKey.COMMENT_CARD_DATA, commentData.toBuilder().project(reducedProject).build())
307309
putExtra(IntentKey.REPLY_EXPAND, openKeyboard)
308310
putExtra(IntentKey.UPDATE_POST_ID, projectUpdateId)
309311
}
@@ -315,8 +317,9 @@ class CommentsActivity :
315317
}
316318

317319
private fun startThreadActivityFromDeepLink(commentData: CommentCardData, projectUpdateId: String? = null) {
320+
val reducedProject = commentData.project?.reduceProjectPayload()
318321
val threadIntent = Intent(this, ThreadActivity::class.java).apply {
319-
putExtra(IntentKey.COMMENT_CARD_DATA, commentData)
322+
putExtra(IntentKey.COMMENT_CARD_DATA, commentData.toBuilder().project(reducedProject).build())
320323
putExtra(IntentKey.REPLY_EXPAND, false)
321324
putExtra(IntentKey.REPLY_SCROLL_BOTTOM, true)
322325
putExtra(IntentKey.UPDATE_POST_ID, projectUpdateId)

app/src/main/java/com/kickstarter/ui/activities/PreLaunchProjectPageActivity.kt

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.kickstarter.ui.activities
22

3-
import android.app.Activity
43
import android.content.Intent
54
import android.os.Build
65
import android.os.Bundle
@@ -16,14 +15,13 @@ import com.kickstarter.libs.KSString
1615
import com.kickstarter.libs.featureflag.FlagKey
1716
import com.kickstarter.libs.utils.ViewUtils
1817
import com.kickstarter.libs.utils.extensions.addToDisposable
19-
import com.kickstarter.libs.utils.extensions.getCreatorBioWebViewActivityIntent
2018
import com.kickstarter.libs.utils.extensions.getEnvironment
21-
import com.kickstarter.models.Project
2219
import com.kickstarter.ui.IntentKey
2320
import com.kickstarter.ui.SharedPreferenceKey
2421
import com.kickstarter.ui.activities.compose.PreLaunchProjectPageScreen
2522
import com.kickstarter.ui.compose.designsystem.KickstarterApp
2623
import com.kickstarter.ui.data.LoginReason
24+
import com.kickstarter.ui.extensions.startCreatorBioWebViewActivity
2725
import com.kickstarter.viewmodels.projectpage.PrelaunchProjectViewModel
2826
import io.reactivex.android.schedulers.AndroidSchedulers
2927
import io.reactivex.disposables.CompositeDisposable
@@ -144,11 +142,6 @@ class PreLaunchProjectPageActivity : ComponentActivity() {
144142
startActivityForResult(intent, ActivityRequestCodes.LOGIN_FLOW)
145143
}
146144

147-
fun Activity.startCreatorBioWebViewActivity(project: Project) {
148-
startActivity(Intent().getCreatorBioWebViewActivityIntent(this, project))
149-
overridePendingTransition(R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
150-
}
151-
152145
@Override
153146
override fun onDestroy() {
154147
compositeDisposable.clear()

app/src/main/java/com/kickstarter/ui/activities/ProjectPageActivity.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import com.kickstarter.libs.utils.ViewUtils
5858
import com.kickstarter.libs.utils.extensions.addToDisposable
5959
import com.kickstarter.libs.utils.extensions.getEnvironment
6060
import com.kickstarter.libs.utils.extensions.getPaymentSheetConfiguration
61+
import com.kickstarter.libs.utils.extensions.reduceProjectPayload
6162
import com.kickstarter.libs.utils.extensions.showLatePledgeFlow
6263
import com.kickstarter.libs.utils.extensions.toVisibility
6364
import com.kickstarter.models.Project
@@ -1065,7 +1066,7 @@ class ProjectPageActivity :
10651066
if (clearFragmentBackStack() || (projectData.project().showLatePledgeFlow() && fFLatePledge)) {
10661067
startActivity(
10671068
Intent(this, ThanksActivity::class.java)
1068-
.putExtra(IntentKey.PROJECT, projectData.project())
1069+
.putExtra(IntentKey.PROJECT, projectData.project().reduceProjectPayload())
10691070
.putExtra(IntentKey.CHECKOUT_DATA, checkoutData)
10701071
.putExtra(IntentKey.PLEDGE_DATA, pledgeData)
10711072
)
@@ -1135,7 +1136,7 @@ class ProjectPageActivity :
11351136
startActivity(
11361137
Intent(this, MessagesActivity::class.java)
11371138
.putExtra(IntentKey.MESSAGE_SCREEN_SOURCE_CONTEXT, MessagePreviousScreenType.PROJECT_PAGE)
1138-
.putExtra(IntentKey.PROJECT, project)
1139+
.putExtra(IntentKey.PROJECT, project.reduceProjectPayload())
11391140
.putExtra(IntentKey.BACKING, project.backing())
11401141
)
11411142
}

app/src/main/java/com/kickstarter/ui/extensions/ActivityExt.kt

+8-6
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import com.kickstarter.libs.utils.extensions.getReportProjectActivityIntent
3131
import com.kickstarter.libs.utils.extensions.getRootCommentsActivityIntent
3232
import com.kickstarter.libs.utils.extensions.getUpdatesActivityIntent
3333
import com.kickstarter.libs.utils.extensions.getVideoActivityIntent
34-
import com.kickstarter.libs.utils.extensions.reduceToPreLaunchProject
34+
import com.kickstarter.libs.utils.extensions.reduceProjectPayload
3535
import com.kickstarter.libs.utils.extensions.withData
3636
import com.kickstarter.models.Project
3737
import com.kickstarter.models.chrome.ChromeTabsHelperActivity
@@ -168,8 +168,9 @@ fun Activity.startPledgeRedemption(project: Project) {
168168
* @param commentableId -> specific for deeplinking to a concrete thread
169169
*/
170170
fun Activity.startRootCommentsActivity(projectData: ProjectData, commentableId: String? = null) {
171+
val reducedProject = projectData.project().reduceProjectPayload()
171172
startActivity(
172-
Intent().getRootCommentsActivityIntent(this, projectData, commentableId)
173+
Intent().getRootCommentsActivityIntent(this, projectData.toBuilder().project(reducedProject).build(), commentableId)
173174
)
174175

175176
this.let {
@@ -185,12 +186,12 @@ fun Activity.startReportProjectActivity(
185186
project: Project,
186187
startForResult: ActivityResultLauncher<Intent>
187188
) {
188-
startForResult.launch(Intent().getReportProjectActivityIntent(this, project = project))
189+
startForResult.launch(Intent().getReportProjectActivityIntent(this, project = project.reduceProjectPayload()))
189190
overridePendingTransition(R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
190191
}
191192

192193
fun Activity.startCreatorBioWebViewActivity(project: Project) {
193-
startActivity(Intent().getCreatorBioWebViewActivityIntent(this, project))
194+
startActivity(Intent().getCreatorBioWebViewActivityIntent(this, project.reduceProjectPayload()))
194195
overridePendingTransition(R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
195196
}
196197

@@ -235,7 +236,8 @@ fun Activity.startUpdatesActivity(
235236
* @param projectAndData
236237
*/
237238
fun Activity.startProjectUpdatesActivity(projectAndData: ProjectData) {
238-
startActivity(Intent().getProjectUpdatesActivityIntent(this, projectAndData))
239+
val reducedProject = projectAndData.project().reduceProjectPayload()
240+
startActivity(Intent().getProjectUpdatesActivityIntent(this, projectAndData.toBuilder().project(reducedProject).build()))
239241
overridePendingTransition(R.anim.slide_in_right, R.anim.fade_out_slide_out_left)
240242
}
241243

@@ -259,7 +261,7 @@ fun Activity.startPreLaunchProjectActivity(uri: Uri, project: Project, previousS
259261
val intent = Intent().getPreLaunchProjectActivity(
260262
this,
261263
project.slug(),
262-
project.reduceToPreLaunchProject()
264+
project.reduceProjectPayload()
263265
)
264266
// Pass full deeplink for attribution tracking purposes when launching from deeplink
265267
intent.setData(uri)

app/src/main/java/com/kickstarter/ui/fragments/projectpage/FrequentlyAskedQuestionFragment.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.kickstarter.libs.MessagePreviousScreenType
1818
import com.kickstarter.libs.SimpleDividerItemDecoration
1919
import com.kickstarter.libs.utils.extensions.addToDisposable
2020
import com.kickstarter.libs.utils.extensions.getEnvironment
21+
import com.kickstarter.libs.utils.extensions.reduceProjectPayload
2122
import com.kickstarter.models.Project
2223
import com.kickstarter.ui.ArgumentsKey
2324
import com.kickstarter.ui.IntentKey
@@ -120,7 +121,7 @@ class FrequentlyAskedQuestionFragment : Fragment(), Configure {
120121
startActivity(
121122
Intent(requireContext(), MessagesActivity::class.java)
122123
.putExtra(IntentKey.MESSAGE_SCREEN_SOURCE_CONTEXT, MessagePreviousScreenType.CREATOR_BIO_MODAL)
123-
.putExtra(IntentKey.PROJECT, project)
124+
.putExtra(IntentKey.PROJECT, project.reduceProjectPayload())
124125
.putExtra(IntentKey.BACKING, project.backing())
125126
)
126127
}

app/src/test/java/com/kickstarter/libs/utils/extensions/ProjectExtTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ class ProjectExtTest : KSRobolectricTestCase() {
389389
val user = UserFactory.germanUser().toBuilder().chosenCurrency("CAD").build()
390390
val deadline = DateTime(DateTimeZone.UTC).plusDays(10)
391391
val project = ProjectFactory.project().toBuilder().watchesCount(10).isStarred(true).creator(user).build()
392-
val reducedProject = project.reduceToPreLaunchProject().toBuilder().deadline(deadline).build()
392+
val reducedProject = project.reduceProjectPayload().toBuilder().deadline(deadline).build()
393393

394394
assertEquals(project.id(), reducedProject.id())
395395
assertEquals(project.name(), reducedProject.name())

0 commit comments

Comments
 (0)