Skip to content

Commit ca8b5b1

Browse files
Add serializable compat methods
1 parent 3b5afa8 commit ca8b5b1

21 files changed

+108
-61
lines changed

app/src/main/java/org/wikipedia/descriptions/DescriptionEditActivity.kt

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.wikipedia.analytics.eventplatform.ABTest.Companion.GROUP_1
1212
import org.wikipedia.analytics.eventplatform.MachineGeneratedArticleDescriptionsAnalyticsHelper
1313
import org.wikipedia.auth.AccountUtil
1414
import org.wikipedia.extensions.parcelableExtra
15+
import org.wikipedia.extensions.serializableExtra
1516
import org.wikipedia.history.HistoryEntry
1617
import org.wikipedia.page.ExclusiveBottomSheetPresenter
1718
import org.wikipedia.page.PageActivity
@@ -35,7 +36,7 @@ class DescriptionEditActivity : SingleFragmentActivity<DescriptionEditFragment>(
3536

3637
override fun onCreate(savedInstanceState: Bundle?) {
3738
super.onCreate(savedInstanceState)
38-
val action = intent.getSerializableExtra(Constants.INTENT_EXTRA_ACTION) as Action
39+
val action = intent.serializableExtra<Action>(Constants.INTENT_EXTRA_ACTION)!!
3940
val pageTitle = intent.parcelableExtra<PageTitle>(Constants.ARG_TITLE)!!
4041

4142
MachineGeneratedArticleDescriptionsAnalyticsHelper.isUserInExperiment = (ReleaseUtil.isPreBetaRelease && AccountUtil.isLoggedIn &&
@@ -52,15 +53,14 @@ class DescriptionEditActivity : SingleFragmentActivity<DescriptionEditFragment>(
5253
}
5354

5455
public override fun createFragment(): DescriptionEditFragment {
55-
val invokeSource = intent.getSerializableExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE) as InvokeSource
56-
val action = intent.getSerializableExtra(Constants.INTENT_EXTRA_ACTION) as Action
57-
val title = intent.parcelableExtra<PageTitle>(Constants.ARG_TITLE)!!
58-
return DescriptionEditFragment.newInstance(title,
59-
intent.getStringExtra(EXTRA_HIGHLIGHT_TEXT),
60-
intent.parcelableExtra(EXTRA_SOURCE_SUMMARY),
61-
intent.parcelableExtra(EXTRA_TARGET_SUMMARY),
62-
action,
63-
invokeSource)
56+
return DescriptionEditFragment.newInstance(
57+
intent.parcelableExtra(Constants.ARG_TITLE)!!,
58+
intent.getStringExtra(EXTRA_HIGHLIGHT_TEXT),
59+
intent.parcelableExtra(EXTRA_SOURCE_SUMMARY),
60+
intent.parcelableExtra(EXTRA_TARGET_SUMMARY),
61+
intent.serializableExtra(Constants.INTENT_EXTRA_ACTION)!!,
62+
intent.serializableExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE)!!
63+
)
6464
}
6565

6666
override fun onBackPressed() {
@@ -84,11 +84,10 @@ class DescriptionEditActivity : SingleFragmentActivity<DescriptionEditFragment>(
8484
ExclusiveBottomSheetPresenter.show(supportFragmentManager,
8585
ImagePreviewDialog.newInstance(summary, action))
8686
} else {
87+
val invokeSource = intent.serializableExtra<InvokeSource>(Constants.INTENT_EXTRA_INVOKE_SOURCE)
88+
val source = if (invokeSource === InvokeSource.PAGE_ACTIVITY) HistoryEntry.SOURCE_EDIT_DESCRIPTION else HistoryEntry.SOURCE_SUGGESTED_EDITS
8789
ExclusiveBottomSheetPresenter.show(supportFragmentManager,
88-
LinkPreviewDialog.newInstance(HistoryEntry(summary.pageTitle,
89-
if (intent.hasExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE) && intent.getSerializableExtra
90-
(Constants.INTENT_EXTRA_INVOKE_SOURCE) === InvokeSource.PAGE_ACTIVITY)
91-
HistoryEntry.SOURCE_EDIT_DESCRIPTION else HistoryEntry.SOURCE_SUGGESTED_EDITS), null))
90+
LinkPreviewDialog.newInstance(HistoryEntry(summary.pageTitle, source), null))
9291
}
9392
}
9493

app/src/main/java/org/wikipedia/descriptions/DescriptionEditFragment.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import org.wikipedia.dataclient.mwapi.MwServiceError
3838
import org.wikipedia.dataclient.okhttp.OkHttpConnectionFactory
3939
import org.wikipedia.dataclient.wikidata.EntityPostResponse
4040
import org.wikipedia.extensions.parcelable
41+
import org.wikipedia.extensions.serializable
4142
import org.wikipedia.language.AppLanguageLookUpTable
4243
import org.wikipedia.login.LoginActivity
4344
import org.wikipedia.notifications.AnonymousNotificationHelper
@@ -122,12 +123,13 @@ class DescriptionEditFragment : Fragment() {
122123

123124
override fun onCreate(savedInstanceState: Bundle?) {
124125
super.onCreate(savedInstanceState)
125-
pageTitle = requireArguments().parcelable(Constants.ARG_TITLE)!!
126-
highlightText = requireArguments().getString(ARG_HIGHLIGHT_TEXT)
127-
action = requireArguments().getSerializable(ARG_ACTION) as DescriptionEditActivity.Action
128-
invokeSource = requireArguments().getSerializable(Constants.INTENT_EXTRA_INVOKE_SOURCE) as InvokeSource
129-
sourceSummary = requireArguments().parcelable(ARG_SOURCE_SUMMARY)
130-
targetSummary = requireArguments().parcelable(ARG_TARGET_SUMMARY)
126+
val arguments = requireArguments()
127+
pageTitle = arguments.parcelable(Constants.ARG_TITLE)!!
128+
highlightText = arguments.getString(ARG_HIGHLIGHT_TEXT)
129+
action = arguments.serializable(ARG_ACTION)!!
130+
invokeSource = arguments.serializable(Constants.INTENT_EXTRA_INVOKE_SOURCE)!!
131+
sourceSummary = arguments.parcelable(ARG_SOURCE_SUMMARY)
132+
targetSummary = arguments.parcelable(ARG_TARGET_SUMMARY)
131133
EditAttemptStepEvent.logInit(pageTitle, EditAttemptStepEvent.INTERFACE_OTHER)
132134
}
133135

app/src/main/java/org/wikipedia/extensions/Bundle.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.wikipedia.extensions
22

3+
import android.os.Build
34
import android.os.Bundle
45
import android.os.Parcelable
56
import androidx.core.os.BundleCompat
7+
import java.io.Serializable
8+
import kotlin.reflect.safeCast
69

710
inline fun <reified T : Parcelable> Bundle.parcelable(key: String?): T? {
811
return BundleCompat.getParcelable(this, key, T::class.java)
@@ -11,3 +14,16 @@ inline fun <reified T : Parcelable> Bundle.parcelable(key: String?): T? {
1114
inline fun <reified T : Parcelable> Bundle.parcelableArrayList(key: String?): ArrayList<T>? {
1215
return BundleCompat.getParcelableArrayList(this, key, T::class.java)
1316
}
17+
18+
inline fun <reified T : Serializable> Bundle.serializable(key: String?): T? {
19+
return getSerializable(this, key, T::class.java)
20+
}
21+
22+
fun <T : Serializable> getSerializable(bundle: Bundle, key: String?, clazz: Class<T>): T? {
23+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
24+
bundle.getSerializable(key, clazz)
25+
} else {
26+
@Suppress("DEPRECATION")
27+
clazz.kotlin.safeCast(bundle.getSerializable(key))
28+
}
29+
}
Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,25 @@
11
package org.wikipedia.extensions
22

33
import android.content.Intent
4+
import android.os.Build
45
import android.os.Parcelable
56
import androidx.core.content.IntentCompat
7+
import java.io.Serializable
8+
import kotlin.reflect.safeCast
69

7-
inline fun <reified T : Parcelable> Intent.parcelableExtra(key: String?): T? {
8-
return IntentCompat.getParcelableExtra(this, key, T::class.java)
10+
inline fun <reified T : Parcelable> Intent.parcelableExtra(name: String?): T? {
11+
return IntentCompat.getParcelableExtra(this, name, T::class.java)
12+
}
13+
14+
inline fun <reified T : Serializable> Intent.serializableExtra(name: String?): T? {
15+
return getSerializableExtra(this, name, T::class.java)
16+
}
17+
18+
fun <T : Serializable> getSerializableExtra(intent: Intent, name: String?, clazz: Class<T>): T? {
19+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
20+
intent.getSerializableExtra(name, clazz)
21+
} else {
22+
@Suppress("DEPRECATION")
23+
clazz.kotlin.safeCast(intent.getSerializableExtra(name))
24+
}
925
}

app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import org.wikipedia.Constants.InvokeSource
77
import org.wikipedia.activity.SingleFragmentActivity
88
import org.wikipedia.dataclient.WikiSite
99
import org.wikipedia.extensions.parcelableExtra
10+
import org.wikipedia.extensions.serializableExtra
1011

1112
class OnThisDayActivity : SingleFragmentActivity<OnThisDayFragment>() {
1213

1314
override fun createFragment(): OnThisDayFragment {
1415
return OnThisDayFragment.newInstance(intent.getIntExtra(EXTRA_AGE, 0),
1516
intent.parcelableExtra(Constants.ARG_WIKISITE)!!,
1617
intent.getIntExtra(EXTRA_YEAR, -1),
17-
intent.getSerializableExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE) as InvokeSource)
18+
intent.serializableExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE)!!)
1819
}
1920

2021
companion object {

app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.wikipedia.dataclient.ServiceFactory
2626
import org.wikipedia.dataclient.WikiSite
2727
import org.wikipedia.dataclient.page.PageSummary
2828
import org.wikipedia.extensions.parcelable
29+
import org.wikipedia.extensions.serializable
2930
import org.wikipedia.util.DateUtil
3031
import org.wikipedia.util.ResourceUtil
3132
import org.wikipedia.util.log.L
@@ -49,15 +50,15 @@ class OnThisDayFragment : Fragment(), CustomDatePicker.Callback {
4950
private var onThisDay: OnThisDay? = null
5051

5152
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
52-
5353
_binding = FragmentOnThisDayBinding.inflate(inflater, container, false)
5454

5555
val topDecorationDp = 24
56-
val age = requireArguments().getInt(OnThisDayActivity.EXTRA_AGE, 0)
57-
wiki = requireArguments().parcelable(Constants.ARG_WIKISITE)!!
58-
invokeSource = requireArguments().getSerializable(Constants.INTENT_EXTRA_INVOKE_SOURCE) as InvokeSource
56+
val arguments = requireArguments()
57+
val age = arguments.getInt(OnThisDayActivity.EXTRA_AGE, 0)
58+
wiki = arguments.parcelable(Constants.ARG_WIKISITE)!!
59+
invokeSource = arguments.serializable(Constants.INTENT_EXTRA_INVOKE_SOURCE)!!
5960
date = DateUtil.getDefaultDateFor(age)
60-
yearOnCardView = requireArguments().getInt(OnThisDayActivity.EXTRA_YEAR, -1)
61+
yearOnCardView = arguments.getInt(OnThisDayActivity.EXTRA_YEAR, -1)
6162
setUpToolbar()
6263
binding.eventsRecycler.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
6364
binding.eventsRecycler.addItemDecoration(HeaderMarginItemDecoration(topDecorationDp, 0))

app/src/main/java/org/wikipedia/gallery/GalleryActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import org.wikipedia.dataclient.ServiceFactory
3838
import org.wikipedia.dataclient.WikiSite
3939
import org.wikipedia.descriptions.DescriptionEditActivity
4040
import org.wikipedia.extensions.parcelableExtra
41+
import org.wikipedia.extensions.serializableExtra
4142
import org.wikipedia.history.HistoryEntry
4243
import org.wikipedia.page.ExclusiveBottomSheetPresenter
4344
import org.wikipedia.page.LinkMovementMethodExt
@@ -93,7 +94,7 @@ class GalleryActivity : BaseActivity(), LinkPreviewDialog.Callback, GalleryItemF
9394

9495
private val requestAddCaptionLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
9596
if (it.resultCode == RESULT_OK) {
96-
val action = it.data?.getSerializableExtra(Constants.INTENT_EXTRA_ACTION) as DescriptionEditActivity.Action?
97+
val action = it.data?.serializableExtra<DescriptionEditActivity.Action>(Constants.INTENT_EXTRA_ACTION)
9798
SuggestedEditsSnackbars.show(this, action, true, targetLanguageCode, false)
9899
layOutGalleryDescription(currentItem)
99100
setResult(ACTIVITY_RESULT_IMAGE_CAPTION_ADDED)

app/src/main/java/org/wikipedia/page/PageActivity.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import org.wikipedia.edit.EditSectionActivity
3737
import org.wikipedia.events.ArticleSavedOrDeletedEvent
3838
import org.wikipedia.events.ChangeTextSizeEvent
3939
import org.wikipedia.extensions.parcelableExtra
40+
import org.wikipedia.extensions.serializableExtra
4041
import org.wikipedia.gallery.GalleryActivity
4142
import org.wikipedia.history.HistoryEntry
4243
import org.wikipedia.language.LangLinksActivity
@@ -124,11 +125,8 @@ class PageActivity : BaseActivity(), PageFragment.Callback, LinkPreviewDialog.Ca
124125
private val requestSuggestedEditsLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
125126
if (it.resultCode == RESULT_OK || it.resultCode == DescriptionEditSuccessActivity.RESULT_OK_FROM_EDIT_SUCCESS) {
126127
pageFragment.refreshPage()
127-
val data = it.data
128128
val editLanguage = pageFragment.leadImageEditLang.orEmpty().ifEmpty { app.languageState.appLanguageCode }
129-
val action = if (data != null && data.hasExtra(Constants.INTENT_EXTRA_ACTION))
130-
data.getSerializableExtra(Constants.INTENT_EXTRA_ACTION) as DescriptionEditActivity.Action?
131-
else null
129+
val action = it.data?.serializableExtra<DescriptionEditActivity.Action>(Constants.INTENT_EXTRA_ACTION)
132130

133131
SuggestedEditsSnackbars.show(this, action, it.resultCode != DescriptionEditSuccessActivity.RESULT_OK_FROM_EDIT_SUCCESS,
134132
editLanguage, action !== DescriptionEditActivity.Action.ADD_DESCRIPTION && action !== DescriptionEditActivity.Action.TRANSLATE_DESCRIPTION) {

app/src/main/java/org/wikipedia/random/RandomActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.wikipedia.Constants.InvokeSource
88
import org.wikipedia.activity.SingleFragmentActivity
99
import org.wikipedia.dataclient.WikiSite
1010
import org.wikipedia.extensions.parcelableExtra
11+
import org.wikipedia.extensions.serializableExtra
1112

1213
class RandomActivity : SingleFragmentActivity<RandomFragment>() {
1314

@@ -28,6 +29,6 @@ class RandomActivity : SingleFragmentActivity<RandomFragment>() {
2829

2930
public override fun createFragment(): RandomFragment {
3031
return RandomFragment.newInstance(intent.parcelableExtra(Constants.ARG_WIKISITE)!!,
31-
intent.getSerializableExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE) as InvokeSource)
32+
intent.serializableExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE)!!)
3233
}
3334
}

app/src/main/java/org/wikipedia/readinglist/AddToReadingListDialog.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.wikipedia.R
2222
import org.wikipedia.database.AppDatabase
2323
import org.wikipedia.databinding.DialogAddToReadingListBinding
2424
import org.wikipedia.extensions.parcelableArrayList
25+
import org.wikipedia.extensions.serializable
2526
import org.wikipedia.page.ExtendedBottomSheetDialogFragment
2627
import org.wikipedia.page.PageTitle
2728
import org.wikipedia.readinglist.ReadingListTitleDialog.readingListTitleDialog
@@ -49,9 +50,10 @@ open class AddToReadingListDialog : ExtendedBottomSheetDialogFragment() {
4950

5051
override fun onCreate(savedInstanceState: Bundle?) {
5152
super.onCreate(savedInstanceState)
52-
titles = requireArguments().parcelableArrayList(PAGE_TITLE_LIST)!!
53-
invokeSource = requireArguments().getSerializable(Constants.INTENT_EXTRA_INVOKE_SOURCE) as InvokeSource
54-
showDefaultList = requireArguments().getBoolean(SHOW_DEFAULT_LIST)
53+
val arguments = requireArguments()
54+
titles = arguments.parcelableArrayList(PAGE_TITLE_LIST)!!
55+
invokeSource = arguments.serializable(Constants.INTENT_EXTRA_INVOKE_SOURCE)!!
56+
showDefaultList = arguments.getBoolean(SHOW_DEFAULT_LIST)
5557
adapter = ReadingListAdapter()
5658
}
5759

0 commit comments

Comments
 (0)