diff --git a/app/src/main/java/androidx/drawerlayout/widget/FixedDrawerLayout.java b/app/src/main/java/androidx/drawerlayout/widget/FixedDrawerLayout.java deleted file mode 100644 index 559d8de0cd7..00000000000 --- a/app/src/main/java/androidx/drawerlayout/widget/FixedDrawerLayout.java +++ /dev/null @@ -1,38 +0,0 @@ -package androidx.drawerlayout.widget; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; - -public class FixedDrawerLayout extends DrawerLayout { - public FixedDrawerLayout(Context context) { - super(context); - } - - public FixedDrawerLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public FixedDrawerLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void setSlidingEnabled(boolean enable) { - if (enable) { - this.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); - } else { - this.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); - } - } - - // TODO: Remove this class when Google updates the Support library. - // This solves an intermittent crash when using DrawerLayout. - // https://code.google.com/p/android/issues/detail?id=77926 - @Override - boolean isContentView(View child) { - if (child == null) { - return false; - } - return super.isContentView(child); - } -} diff --git a/app/src/main/java/androidx/drawerlayout/widget/FixedDrawerLayout.kt b/app/src/main/java/androidx/drawerlayout/widget/FixedDrawerLayout.kt new file mode 100644 index 00000000000..32655b6f5c5 --- /dev/null +++ b/app/src/main/java/androidx/drawerlayout/widget/FixedDrawerLayout.kt @@ -0,0 +1,26 @@ +package androidx.drawerlayout.widget + +import android.content.Context +import android.util.AttributeSet +import android.view.View + +class FixedDrawerLayout(context: Context, attrs: AttributeSet? = null) : DrawerLayout(context, attrs) { + + fun setSlidingEnabled(enable: Boolean) { + if (enable) { + this.setDrawerLockMode(LOCK_MODE_UNLOCKED) + } else { + this.setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED) + } + } + + // TODO: Remove this class when Google updates the Support library. + // This solves an intermittent crash when using DrawerLayout. + // https://issuetracker.google.com/issues/37007884 + override fun isContentView(child: View?): Boolean { + if (child == null) { + return false + } + return super.isContentView(child) + } +} diff --git a/app/src/main/java/org/wikipedia/feed/FeedFragment.kt b/app/src/main/java/org/wikipedia/feed/FeedFragment.kt index 7e63b48e12a..bd645854217 100644 --- a/app/src/main/java/org/wikipedia/feed/FeedFragment.kt +++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.kt @@ -40,7 +40,6 @@ import org.wikipedia.settings.Prefs import org.wikipedia.settings.SettingsActivity import org.wikipedia.settings.languages.WikipediaLanguagesActivity import org.wikipedia.util.FeedbackUtil -import org.wikipedia.util.ResourceUtil import org.wikipedia.util.UriUtil class FeedFragment : Fragment(), BackPressedHandler { @@ -95,7 +94,6 @@ class FeedFragment : Fragment(), BackPressedHandler { feedAdapter = FeedAdapter(coordinator, feedCallback) binding.feedView.adapter = feedAdapter binding.feedView.addOnScrollListener(feedScrollListener) - binding.swipeRefreshLayout.setColorSchemeResources(ResourceUtil.getThemedAttributeId(requireContext(), R.attr.progressive_color)) binding.swipeRefreshLayout.setOnRefreshListener { refresh() } binding.customizeButton.setOnClickListener { showConfigureActivity(-1) } coordinator.setFeedUpdateListener(object : FeedUpdateListener { diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.kt b/app/src/main/java/org/wikipedia/page/PageFragment.kt index ca7ff27ddeb..20fe7e69270 100644 --- a/app/src/main/java/org/wikipedia/page/PageFragment.kt +++ b/app/src/main/java/org/wikipedia/page/PageFragment.kt @@ -196,7 +196,6 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi _binding = FragmentPageBinding.inflate(inflater, container, false) webView = binding.pageWebView initWebViewListeners() - binding.pageRefreshContainer.setColorSchemeResources(ResourceUtil.getThemedAttributeId(requireContext(), R.attr.progressive_color)) binding.pageRefreshContainer.scrollableChild = webView binding.pageRefreshContainer.setOnRefreshListener(pageRefreshListener) val swipeOffset = DimenUtil.getContentTopOffsetPx(requireActivity()) + REFRESH_SPINNER_ADDITIONAL_OFFSET diff --git a/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.kt b/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.kt index 70bb2490f91..b93bf385886 100644 --- a/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.kt +++ b/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.kt @@ -292,7 +292,6 @@ class ReadingListFragment : Fragment(), MenuProvider, ReadingListItemActionsDial } private fun setSwipeRefreshView() { - binding.readingListSwipeRefresh.setColorSchemeResources(ResourceUtil.getThemedAttributeId(requireContext(), R.attr.progressive_color)) binding.readingListSwipeRefresh.setOnRefreshListener { ReadingListsFragment.refreshSync(this, binding.readingListSwipeRefresh) } if (RemoteConfig.config.disableReadingListSync) { binding.readingListSwipeRefresh.isEnabled = false diff --git a/app/src/main/java/org/wikipedia/readinglist/ReadingListsFragment.kt b/app/src/main/java/org/wikipedia/readinglist/ReadingListsFragment.kt index 9d629401f35..123cd67d40a 100644 --- a/app/src/main/java/org/wikipedia/readinglist/ReadingListsFragment.kt +++ b/app/src/main/java/org/wikipedia/readinglist/ReadingListsFragment.kt @@ -106,7 +106,6 @@ class ReadingListsFragment : Fragment(), SortReadingListsDialog.Callback, Readin binding.recyclerView.adapter = adapter binding.recyclerView.addItemDecoration(DrawableItemDecoration(requireContext(), R.attr.list_divider)) setUpScrollListener() - binding.swipeRefreshLayout.setColorSchemeResources(ResourceUtil.getThemedAttributeId(requireContext(), R.attr.progressive_color)) binding.swipeRefreshLayout.setOnRefreshListener { refreshSync(this, binding.swipeRefreshLayout) } if (RemoteConfig.config.disableReadingListSync) { binding.swipeRefreshLayout.isEnabled = false diff --git a/app/src/main/java/org/wikipedia/suggestededits/SuggestedEditsTasksFragment.kt b/app/src/main/java/org/wikipedia/suggestededits/SuggestedEditsTasksFragment.kt index 832e9a2dce3..1191cb440d0 100644 --- a/app/src/main/java/org/wikipedia/suggestededits/SuggestedEditsTasksFragment.kt +++ b/app/src/main/java/org/wikipedia/suggestededits/SuggestedEditsTasksFragment.kt @@ -133,7 +133,6 @@ class SuggestedEditsTasksFragment : Fragment() { FeedbackUtil.showAndroidAppEditingFAQ(requireContext()) } - binding.swipeRefreshLayout.setColorSchemeResources(ResourceUtil.getThemedAttributeId(requireContext(), R.attr.progressive_color)) binding.swipeRefreshLayout.setOnRefreshListener { refreshContents() } binding.errorView.retryClickListener = View.OnClickListener { refreshContents() } diff --git a/app/src/main/java/org/wikipedia/talk/TalkTopicActivity.kt b/app/src/main/java/org/wikipedia/talk/TalkTopicActivity.kt index 029a1a4b667..09b6f559865 100644 --- a/app/src/main/java/org/wikipedia/talk/TalkTopicActivity.kt +++ b/app/src/main/java/org/wikipedia/talk/TalkTopicActivity.kt @@ -40,7 +40,6 @@ import org.wikipedia.util.DeviceUtil import org.wikipedia.util.FeedbackUtil import org.wikipedia.util.L10nUtil import org.wikipedia.util.Resource -import org.wikipedia.util.ResourceUtil import org.wikipedia.util.ShareUtil import org.wikipedia.util.StringUtil import org.wikipedia.util.UriUtil @@ -101,7 +100,6 @@ class TalkTopicActivity : BaseActivity() { L10nUtil.setConditionalLayoutDirection(binding.talkRecyclerView, viewModel.pageTitle.wikiSite.languageCode) L10nUtil.setConditionalLayoutDirection(binding.talkErrorView, viewModel.pageTitle.wikiSite.languageCode) - binding.talkRefreshView.setColorSchemeResources(ResourceUtil.getThemedAttributeId(this, R.attr.progressive_color)) ViewUtil.getTitleViewFromToolbar(binding.toolbar)?.let { it.movementMethod = linkMovementMethod diff --git a/app/src/main/java/org/wikipedia/talk/TalkTopicsActivity.kt b/app/src/main/java/org/wikipedia/talk/TalkTopicsActivity.kt index d26248c0c1c..1889a183730 100644 --- a/app/src/main/java/org/wikipedia/talk/TalkTopicsActivity.kt +++ b/app/src/main/java/org/wikipedia/talk/TalkTopicsActivity.kt @@ -186,7 +186,6 @@ class TalkTopicsActivity : BaseActivity(), WatchlistExpiryDialog.Callback { resetViews() viewModel.loadTopics() } - binding.talkRefreshView.setColorSchemeResources(ResourceUtil.getThemedAttributeId(this, R.attr.progressive_color)) invokeSource = intent.getSerializableExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE) as Constants.InvokeSource diff --git a/app/src/main/java/org/wikipedia/views/SwipeRefreshLayoutWithScroll.kt b/app/src/main/java/org/wikipedia/views/WikiSwipeRefreshLayout.kt similarity index 52% rename from app/src/main/java/org/wikipedia/views/SwipeRefreshLayoutWithScroll.kt rename to app/src/main/java/org/wikipedia/views/WikiSwipeRefreshLayout.kt index cf698307fd5..814f2fc1713 100644 --- a/app/src/main/java/org/wikipedia/views/SwipeRefreshLayoutWithScroll.kt +++ b/app/src/main/java/org/wikipedia/views/WikiSwipeRefreshLayout.kt @@ -4,14 +4,20 @@ import android.content.Context import android.util.AttributeSet import android.view.View import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import org.wikipedia.R +import org.wikipedia.util.ResourceUtil -class SwipeRefreshLayoutWithScroll constructor(context: Context, attrs: AttributeSet?) : SwipeRefreshLayout(context, attrs) { +open class WikiSwipeRefreshLayout(context: Context, attrs: AttributeSet?) : SwipeRefreshLayout(context, attrs) { var scrollableChild: View? = null + init { + setColorSchemeResources(ResourceUtil.getThemedAttributeId(context, R.attr.progressive_color)) + } + override fun canChildScrollUp(): Boolean { return if (scrollableChild == null) { - false + super.canChildScrollUp() } else scrollableChild!!.scrollY > 0 } } diff --git a/app/src/main/java/org/wikipedia/watchlist/WatchlistFragment.kt b/app/src/main/java/org/wikipedia/watchlist/WatchlistFragment.kt index b3bf7be2e3d..e06b141a718 100644 --- a/app/src/main/java/org/wikipedia/watchlist/WatchlistFragment.kt +++ b/app/src/main/java/org/wikipedia/watchlist/WatchlistFragment.kt @@ -80,7 +80,6 @@ class WatchlistFragment : Fragment(), WatchlistItemView.Callback, MenuProvider { super.onViewCreated(view, savedInstanceState) requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) - binding.watchlistRefreshView.setColorSchemeResources(ResourceUtil.getThemedAttributeId(requireContext(), R.attr.progressive_color)) binding.watchlistRefreshView.setOnRefreshListener { viewModel.fetchWatchlist(actionMode == null) } binding.watchlistErrorView.retryClickListener = View.OnClickListener { viewModel.fetchWatchlist(actionMode == null) } diff --git a/app/src/main/res/layout/activity_edit_history.xml b/app/src/main/res/layout/activity_edit_history.xml index b99f4ebbabf..e32ec606857 100644 --- a/app/src/main/res/layout/activity_edit_history.xml +++ b/app/src/main/res/layout/activity_edit_history.xml @@ -35,7 +35,7 @@ android:layout_height="0dp" android:layout_weight="1"> - @@ -88,7 +88,7 @@ - + diff --git a/app/src/main/res/layout/activity_insert_media.xml b/app/src/main/res/layout/activity_insert_media.xml index 14446c0404c..46d83f883bb 100644 --- a/app/src/main/res/layout/activity_insert_media.xml +++ b/app/src/main/res/layout/activity_insert_media.xml @@ -136,7 +136,7 @@ android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> - @@ -147,7 +147,7 @@ android:layout_height="match_parent" android:scrollbars="vertical"/> - + - - + diff --git a/app/src/main/res/layout/activity_talk_topic.xml b/app/src/main/res/layout/activity_talk_topic.xml index 5fb07e54f73..fb3caebea43 100644 --- a/app/src/main/res/layout/activity_talk_topic.xml +++ b/app/src/main/res/layout/activity_talk_topic.xml @@ -1,5 +1,5 @@ - - + diff --git a/app/src/main/res/layout/activity_talk_topics.xml b/app/src/main/res/layout/activity_talk_topics.xml index c0b0a047bf6..29763eade5b 100644 --- a/app/src/main/res/layout/activity_talk_topics.xml +++ b/app/src/main/res/layout/activity_talk_topics.xml @@ -1,5 +1,5 @@ - - + diff --git a/app/src/main/res/layout/activity_user_contrib.xml b/app/src/main/res/layout/activity_user_contrib.xml index 4191c171208..0e7bc6cd40f 100644 --- a/app/src/main/res/layout/activity_user_contrib.xml +++ b/app/src/main/res/layout/activity_user_contrib.xml @@ -24,7 +24,7 @@ android:layout_height="0dp" android:layout_weight="1"> - @@ -41,7 +41,7 @@ - + diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml index 4dc91524184..c97d4b0419c 100644 --- a/app/src/main/res/layout/fragment_feed.xml +++ b/app/src/main/res/layout/fragment_feed.xml @@ -1,5 +1,5 @@ - - + diff --git a/app/src/main/res/layout/fragment_file_page.xml b/app/src/main/res/layout/fragment_file_page.xml index c155ec131dd..05f5086b0ff 100644 --- a/app/src/main/res/layout/fragment_file_page.xml +++ b/app/src/main/res/layout/fragment_file_page.xml @@ -1,5 +1,5 @@ - @@ -35,4 +35,4 @@ android:background="?attr/paper_color"/> - + diff --git a/app/src/main/res/layout/fragment_page.xml b/app/src/main/res/layout/fragment_page.xml index 5728445defb..8274f87bd7e 100644 --- a/app/src/main/res/layout/fragment_page.xml +++ b/app/src/main/res/layout/fragment_page.xml @@ -1,5 +1,5 @@ - - + diff --git a/app/src/main/res/layout/fragment_reading_list.xml b/app/src/main/res/layout/fragment_reading_list.xml index cfeadcd9342..75441ecbbae 100644 --- a/app/src/main/res/layout/fragment_reading_list.xml +++ b/app/src/main/res/layout/fragment_reading_list.xml @@ -40,7 +40,7 @@ - - + diff --git a/app/src/main/res/layout/fragment_reading_lists.xml b/app/src/main/res/layout/fragment_reading_lists.xml index 4607138d108..aaea1ec6782 100644 --- a/app/src/main/res/layout/fragment_reading_lists.xml +++ b/app/src/main/res/layout/fragment_reading_lists.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_suggested_edits_recent_edits.xml b/app/src/main/res/layout/fragment_suggested_edits_recent_edits.xml index 84a39b19143..32e8aa99820 100644 --- a/app/src/main/res/layout/fragment_suggested_edits_recent_edits.xml +++ b/app/src/main/res/layout/fragment_suggested_edits_recent_edits.xml @@ -9,7 +9,7 @@ android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> - - + diff --git a/app/src/main/res/layout/fragment_suggested_edits_tasks.xml b/app/src/main/res/layout/fragment_suggested_edits_tasks.xml index 88a6f5350c6..16488dbfd9a 100644 --- a/app/src/main/res/layout/fragment_suggested_edits_tasks.xml +++ b/app/src/main/res/layout/fragment_suggested_edits_tasks.xml @@ -1,6 +1,5 @@ - - - + diff --git a/app/src/main/res/layout/fragment_watchlist.xml b/app/src/main/res/layout/fragment_watchlist.xml index 48d2fe97755..2a0eb577c07 100644 --- a/app/src/main/res/layout/fragment_watchlist.xml +++ b/app/src/main/res/layout/fragment_watchlist.xml @@ -1,5 +1,5 @@ - - + diff --git a/app/src/test/java/org/wikipedia/test/ImmediateExecutor.java b/app/src/test/java/org/wikipedia/test/ImmediateExecutor.java deleted file mode 100644 index 96560accd87..00000000000 --- a/app/src/test/java/org/wikipedia/test/ImmediateExecutor.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.wikipedia.test; - -import androidx.annotation.NonNull; - -import java.util.concurrent.Executor; - -public class ImmediateExecutor implements Executor { - @Override - public void execute(@NonNull Runnable runnable) { - runnable.run(); - } -} diff --git a/app/src/test/java/org/wikipedia/test/ImmediateExecutorService.java b/app/src/test/java/org/wikipedia/test/ImmediateExecutorService.java deleted file mode 100644 index 4181af20314..00000000000 --- a/app/src/test/java/org/wikipedia/test/ImmediateExecutorService.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.wikipedia.test; - -import androidx.annotation.NonNull; - -import java.util.List; -import java.util.concurrent.AbstractExecutorService; -import java.util.concurrent.TimeUnit; - -public final class ImmediateExecutorService extends AbstractExecutorService { - @Override public void shutdown() { - throw new UnsupportedOperationException(); - } - - @NonNull @Override public List shutdownNow() { - throw new UnsupportedOperationException(); - } - - @Override public boolean isShutdown() { - throw new UnsupportedOperationException(); - } - - @Override public boolean isTerminated() { - throw new UnsupportedOperationException(); - } - - @Override public boolean awaitTermination(long l, @NonNull TimeUnit timeUnit) { - throw new UnsupportedOperationException(); - } - - @Override public void execute(@NonNull Runnable runnable) { - runnable.run(); - } -} diff --git a/app/src/test/java/org/wikipedia/test/ImmediateExecutorService.kt b/app/src/test/java/org/wikipedia/test/ImmediateExecutorService.kt new file mode 100644 index 00000000000..e36c43b42f3 --- /dev/null +++ b/app/src/test/java/org/wikipedia/test/ImmediateExecutorService.kt @@ -0,0 +1,31 @@ +package org.wikipedia.test + +import java.lang.UnsupportedOperationException +import java.util.concurrent.AbstractExecutorService +import java.util.concurrent.TimeUnit + +class ImmediateExecutorService : AbstractExecutorService() { + override fun shutdown() { + throw UnsupportedOperationException() + } + + override fun shutdownNow(): MutableList { + throw UnsupportedOperationException() + } + + override fun isShutdown(): Boolean { + throw UnsupportedOperationException() + } + + override fun isTerminated(): Boolean { + throw UnsupportedOperationException() + } + + override fun awaitTermination(l: Long, timeUnit: TimeUnit): Boolean { + throw UnsupportedOperationException() + } + + override fun execute(runnable: Runnable) { + runnable.run() + } +} diff --git a/app/src/test/java/org/wikipedia/test/TestFileUtil.java b/app/src/test/java/org/wikipedia/test/TestFileUtil.java deleted file mode 100644 index a250a790552..00000000000 --- a/app/src/test/java/org/wikipedia/test/TestFileUtil.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.wikipedia.test; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; - -public final class TestFileUtil { - private static final String RAW_DIR = "src/test/res/raw/"; - - public static String readRawFile(String basename) throws IOException { - // TODO: Use Files.readString() once it is available in the Android SDK. - return new String(Files.readAllBytes(Paths.get(RAW_DIR + basename)), - StandardCharsets.UTF_8); - } - - private TestFileUtil() { } -} diff --git a/app/src/test/java/org/wikipedia/test/TestFileUtil.kt b/app/src/test/java/org/wikipedia/test/TestFileUtil.kt new file mode 100644 index 00000000000..5ad6e310d2d --- /dev/null +++ b/app/src/test/java/org/wikipedia/test/TestFileUtil.kt @@ -0,0 +1,18 @@ +package org.wikipedia.test + +import java.io.IOException +import java.nio.charset.StandardCharsets +import java.nio.file.Files +import java.nio.file.Paths + +object TestFileUtil { + private const val RAW_DIR = "src/test/res/raw/" + + @Throws(IOException::class) + fun readRawFile(basename: String?): String { + return String( + Files.readAllBytes(Paths.get(RAW_DIR + basename)), + StandardCharsets.UTF_8 + ) + } +} diff --git a/app/src/test/java/org/wikipedia/test/TestParcelUtil.java b/app/src/test/java/org/wikipedia/test/TestParcelUtil.java deleted file mode 100644 index e1cbd7ab563..00000000000 --- a/app/src/test/java/org/wikipedia/test/TestParcelUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.wikipedia.test; - -import android.os.Parcel; -import android.os.Parcelable; - -import androidx.annotation.NonNull; - -import org.wikipedia.page.PageTitle; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; - -public final class TestParcelUtil { - public static void test(PageTitle title) throws Throwable { - Parcel parcel = parcel(title); - parcel.setDataPosition(0); - PageTitle title2 = (PageTitle) unparcel(parcel, PageTitle.class); - assertThat(title.getText(), is(title2.getText())); - assertThat(title.namespace(), is(title2.namespace())); - assertThat(title.getUri(), is(title2.getUri())); - } - - public static void test(Parcelable parcelable) throws Throwable { - Parcel parcel = parcel(parcelable); - - parcel.setDataPosition(0); - Parcelable unparceled = unparcel(parcel, parcelable.getClass()); - - assertThat(parcelable, is(unparceled)); - } - - @NonNull private static Parcelable unparcel(@NonNull Parcel parcel, - Class clazz) throws Throwable { - Parcelable.Creator creator = (Parcelable.Creator) clazz.getField("CREATOR").get(null); - return (Parcelable) creator.createFromParcel(parcel); - } - - @NonNull private static Parcel parcel(@NonNull Parcelable parcelable) { - Parcel parcel = Parcel.obtain(); - parcelable.writeToParcel(parcel, 0); - return parcel; - } - - private TestParcelUtil() { } -} diff --git a/app/src/test/java/org/wikipedia/test/TestParcelUtil.kt b/app/src/test/java/org/wikipedia/test/TestParcelUtil.kt new file mode 100644 index 00000000000..0780559df45 --- /dev/null +++ b/app/src/test/java/org/wikipedia/test/TestParcelUtil.kt @@ -0,0 +1,47 @@ +package org.wikipedia.test + +import android.os.Parcel +import android.os.Parcelable +import org.hamcrest.MatcherAssert +import org.hamcrest.Matchers +import org.wikipedia.page.Namespace +import org.wikipedia.page.PageTitle + +object TestParcelUtil { + @Throws(Throwable::class) + fun test(title: PageTitle) { + + val parcel = parcel(title) + parcel.setDataPosition(0) + + val title2 = unparcel(parcel, PageTitle::class.java) as PageTitle + + MatcherAssert.assertThat(title.text, Matchers.equalTo(title2.text)) + MatcherAssert.assertThat(title.namespace(), Matchers.equalTo(title2.namespace())) + + MatcherAssert.assertThat(title.uri, Matchers.equalTo(title2.uri)) + } + + @Throws(Throwable::class) + fun test(parcelable: Parcelable) { + + val parcel = parcel(parcelable) + + parcel.setDataPosition(0) + val unparceled = unparcel(parcel, parcelable.javaClass) + + MatcherAssert.assertThat(parcelable, Matchers.equalTo(unparceled)) + } + + @Throws(Throwable::class) + private fun unparcel(parcel: Parcel, clazz: Class): Parcelable { + val creator = clazz.getField("CREATOR").get(null) as Parcelable.Creator<*> + return creator.createFromParcel(parcel) as Parcelable + } + + private fun parcel(parcelable: Parcelable): Parcel { + val parcel = Parcel.obtain() + parcelable.writeToParcel(parcel, 0) + return parcel + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3c61b7ddc97..4309720f044 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ coreKtx = "1.15.0" desugar_jdk_libs = "2.1.3" drawerlayout = "1.2.0" espressoVersion = "3.6.1" -firebaseMessagingVersion = "24.0.3" +firebaseMessagingVersion = "24.1.0" flexbox = "3.0.0" fragmentKtx = "1.8.5" glideVersion = "4.16.0" @@ -39,7 +39,7 @@ photoview = "1.0.2" preferenceKtx = "1.2.1" recyclerview = "1.3.2" retrofitVersion = "2.11.0" -robolectric = "4.13" +robolectric = "4.14" roomVersion = "2.6.1" swiperefreshlayout = "1.1.0" uiautomator = "2.3.0"