From 086da0d23cdbb238c35622053568361802ebd2bc Mon Sep 17 00:00:00 2001 From: Zakhar Timoshenko Date: Sun, 16 Jul 2023 00:57:49 +0300 Subject: [PATCH] Replace `!!` with `checkNotNull` --- .../data/updater/app/AppUpdateNotifier.kt | 2 +- .../data/updater/app/AppUpdateService.kt | 5 +--- .../database/DatabaseUpdateNotifier.kt | 2 +- .../updater/database/DatabaseUpdateService.kt | 4 ++- .../ui/base/controller/DialogController.kt | 16 +++++----- .../ui/base/controller/NucleusController.kt | 2 +- .../presenter/NucleusConductorDelegate.kt | 2 +- .../ui/favourite/FavouriteOptionsDialog.kt | 2 +- .../ui/favourite/FavouritesController.kt | 8 ++--- .../ui/favourite/FavouritesPresenter.kt | 2 +- .../xtimms/ridebus/ui/main/MainActivity.kt | 2 +- .../ui/main/WhatsNewDialogController.kt | 4 +-- .../main/welcome/WelcomeDialogController.kt | 4 +-- .../xtimms/ridebus/ui/more/AboutController.kt | 6 ++-- .../xtimms/ridebus/ui/more/MoreController.kt | 2 +- .../ui/more/UpdateDialogControllers.kt | 30 +++++++++---------- .../ridebus/ui/more/map/MapStopsDialog.kt | 10 +++---- .../ridebus/ui/routes/RouteController.kt | 4 +-- .../ridebus/ui/routes/RoutesSettingsSheet.kt | 4 +-- .../ui/routes/RoutesTabbedController.kt | 10 +++---- .../ui/routes/details/AttentionDialog.kt | 2 +- .../routes/details/RouteDetailsController.kt | 10 +++---- .../routes/details/RouteDetailsPresenter.kt | 2 +- .../details/info/RouteInfoHeaderAdapter.kt | 2 +- .../details/stop/RouteStopsHeaderAdapter.kt | 2 +- .../ridebus/ui/schedule/ScheduleController.kt | 2 +- .../ui/schedule/ScheduleTabbedController.kt | 2 +- .../ridebus/ui/setting/SettingsController.kt | 4 +-- .../ui/setting/SettingsScheduleController.kt | 2 +- .../setting/search/SettingsSearchAdapter.kt | 2 +- .../ui/stops/details/RouteOnStopHolder.kt | 4 +-- .../stops/details/RoutesOnStopController.kt | 8 ++--- .../ui/stops/details/RoutesOnStopItem.kt | 2 +- .../java/org/xtimms/ridebus/util/Times.kt | 2 +- .../xtimms/ridebus/util/system/ContextExt.kt | 8 ++--- .../ridebus/widget/ExtendedNavigationView.kt | 2 +- .../preference/ThemesPreferenceAdapter.kt | 2 +- .../widget/sheet/TabbedBottomSheetDialog.kt | 2 +- ...ller.xml => routes_on_stop_controller.xml} | 4 +-- ...route_item.xml => routes_on_stop_item.xml} | 0 40 files changed, 92 insertions(+), 93 deletions(-) rename app/src/main/res/layout/{stops_route_controller.xml => routes_on_stop_controller.xml} (94%) rename app/src/main/res/layout/{stops_route_item.xml => routes_on_stop_item.xml} (100%) diff --git a/app/src/main/java/org/xtimms/ridebus/data/updater/app/AppUpdateNotifier.kt b/app/src/main/java/org/xtimms/ridebus/data/updater/app/AppUpdateNotifier.kt index 2ee21d6..618156e 100644 --- a/app/src/main/java/org/xtimms/ridebus/data/updater/app/AppUpdateNotifier.kt +++ b/app/src/main/java/org/xtimms/ridebus/data/updater/app/AppUpdateNotifier.kt @@ -68,7 +68,7 @@ internal class AppUpdateNotifier(private val context: Context) { addAction( R.drawable.ic_close, context.getString(R.string.action_cancel), - NotificationReceiver.cancelUpdateDownloadPendingBroadcast(context), + NotificationReceiver.cancelUpdateDownloadPendingBroadcast(context) ) } notificationBuilder.show() diff --git a/app/src/main/java/org/xtimms/ridebus/data/updater/app/AppUpdateService.kt b/app/src/main/java/org/xtimms/ridebus/data/updater/app/AppUpdateService.kt index 9277792..129b0be 100644 --- a/app/src/main/java/org/xtimms/ridebus/data/updater/app/AppUpdateService.kt +++ b/app/src/main/java/org/xtimms/ridebus/data/updater/app/AppUpdateService.kt @@ -13,7 +13,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.launch -import logcat.LogPriority import okhttp3.internal.http2.ErrorCode import okhttp3.internal.http2.StreamResetException import org.xtimms.ridebus.BuildConfig @@ -24,12 +23,10 @@ import org.xtimms.ridebus.network.NetworkHelper import org.xtimms.ridebus.network.ProgressListener import org.xtimms.ridebus.network.await import org.xtimms.ridebus.network.newCallWithProgress -import org.xtimms.ridebus.util.lang.launchIO import org.xtimms.ridebus.util.storage.getUriCompat import org.xtimms.ridebus.util.storage.saveTo import org.xtimms.ridebus.util.system.acquireWakeLock import org.xtimms.ridebus.util.system.isServiceRunning -import org.xtimms.ridebus.util.system.logcat import uy.kohesive.injekt.injectLazy import java.io.File @@ -117,7 +114,7 @@ class AppUpdateService : Service() { notifier.onDownloadFinished(apkFile.getUriCompat(this)) } catch (e: Exception) { val shouldCancel = e is CancellationException || - (e is StreamResetException && e.errorCode == ErrorCode.CANCEL) + (e is StreamResetException && e.errorCode == ErrorCode.CANCEL) if (shouldCancel) { notifier.cancel() } else { diff --git a/app/src/main/java/org/xtimms/ridebus/data/updater/database/DatabaseUpdateNotifier.kt b/app/src/main/java/org/xtimms/ridebus/data/updater/database/DatabaseUpdateNotifier.kt index 5bda709..a6f68bc 100644 --- a/app/src/main/java/org/xtimms/ridebus/data/updater/database/DatabaseUpdateNotifier.kt +++ b/app/src/main/java/org/xtimms/ridebus/data/updater/database/DatabaseUpdateNotifier.kt @@ -90,7 +90,7 @@ class DatabaseUpdateNotifier(private val context: Context) { addAction( R.drawable.ic_close, context.getString(R.string.action_cancel), - NotificationReceiver.cancelUpdateDownloadPendingBroadcast(context), + NotificationReceiver.cancelUpdateDownloadPendingBroadcast(context) ) } notificationBuilder.show() diff --git a/app/src/main/java/org/xtimms/ridebus/data/updater/database/DatabaseUpdateService.kt b/app/src/main/java/org/xtimms/ridebus/data/updater/database/DatabaseUpdateService.kt index e928f41..8ffd070 100644 --- a/app/src/main/java/org/xtimms/ridebus/data/updater/database/DatabaseUpdateService.kt +++ b/app/src/main/java/org/xtimms/ridebus/data/updater/database/DatabaseUpdateService.kt @@ -127,12 +127,14 @@ class DatabaseUpdateService : Service() { notifier.onDownloadFinished(title) } catch (e: Exception) { val shouldCancel = e is CancellationException || - (e is StreamResetException && e.errorCode == ErrorCode.CANCEL) + (e is StreamResetException && e.errorCode == ErrorCode.CANCEL) if (shouldCancel) { notifier.cancel() } else { notifier.onDownloadError(url, version) } + } finally { + database.openHelper.writableDatabase.endTransaction() } } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/base/controller/DialogController.kt b/app/src/main/java/org/xtimms/ridebus/ui/base/controller/DialogController.kt index 183cc4e..4dace15 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/base/controller/DialogController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/base/controller/DialogController.kt @@ -37,12 +37,12 @@ abstract class DialogController : Controller { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedViewState: Bundle?): View { dialog = onCreateDialog(savedViewState) - dialog!!.setOwnerActivity(activity!!) - dialog!!.setOnDismissListener { dismissDialog() } + checkNotNull(dialog).setOwnerActivity(checkNotNull(activity)) + checkNotNull(dialog).setOnDismissListener { dismissDialog() } if (savedViewState != null) { val dialogState = savedViewState.getBundle(SAVED_DIALOG_STATE_TAG) if (dialogState != null) { - dialog!!.onRestoreInstanceState(dialogState) + checkNotNull(dialog).onRestoreInstanceState(dialogState) } } return View(activity) // stub view @@ -50,24 +50,24 @@ abstract class DialogController : Controller { override fun onSaveViewState(view: View, outState: Bundle) { super.onSaveViewState(view, outState) - val dialogState = dialog!!.onSaveInstanceState() + val dialogState = checkNotNull(dialog).onSaveInstanceState() outState.putBundle(SAVED_DIALOG_STATE_TAG, dialogState) } override fun onAttach(view: View) { super.onAttach(view) - dialog!!.show() + checkNotNull(dialog).show() } override fun onDetach(view: View) { super.onDetach(view) - dialog!!.hide() + checkNotNull(dialog).hide() } override fun onDestroyView(view: View) { super.onDestroyView(view) - dialog!!.setOnDismissListener(null) - dialog!!.dismiss() + checkNotNull(dialog).setOnDismissListener(null) + checkNotNull(dialog).dismiss() dialog = null } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/base/controller/NucleusController.kt b/app/src/main/java/org/xtimms/ridebus/ui/base/controller/NucleusController.kt index 84691f0..30a53c3 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/base/controller/NucleusController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/base/controller/NucleusController.kt @@ -15,7 +15,7 @@ abstract class NucleusController>(val bundle: private val delegate = NucleusConductorDelegate(this) val presenter: P - get() = delegate.presenter!! + get() = checkNotNull(delegate.presenter) init { addLifecycleListener(NucleusConductorLifecycleListener(delegate)) diff --git a/app/src/main/java/org/xtimms/ridebus/ui/base/presenter/NucleusConductorDelegate.kt b/app/src/main/java/org/xtimms/ridebus/ui/base/presenter/NucleusConductorDelegate.kt index 6e7febe..4cf8e66 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/base/presenter/NucleusConductorDelegate.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/base/presenter/NucleusConductorDelegate.kt @@ -10,7 +10,7 @@ class NucleusConductorDelegate

>(private val factory: PresenterF get() { if (field == null) { field = factory.createPresenter() - field!!.create(bundle) + checkNotNull(field).create(bundle) bundle = null } return field diff --git a/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouriteOptionsDialog.kt b/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouriteOptionsDialog.kt index aa57ca3..abae984 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouriteOptionsDialog.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouriteOptionsDialog.kt @@ -16,7 +16,7 @@ class FavouriteOptionsDialog(bundle: Bundle? = null) : DialogController(bundle) } override fun onCreateDialog(savedViewState: Bundle?): Dialog { - return MaterialAlertDialogBuilder(activity!!) + return MaterialAlertDialogBuilder(checkNotNull(activity)) .setTitle(favourite) .setItems(items.map { it.first }.toTypedArray()) { dialog, which -> items[which].second() diff --git a/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouritesController.kt b/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouritesController.kt index c54b7ad..ba8457c 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouritesController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouritesController.kt @@ -90,7 +90,7 @@ class FavouritesController : override fun onPinClick(position: Int) { val item = adapter?.getItem(position) as? FavouriteItem ?: return - toggleFavouritePin(item.route!!) + toggleFavouritePin(checkNotNull(item.route)) } override fun onItemClick(view: View, position: Int): Boolean { @@ -105,11 +105,11 @@ class FavouritesController : val isPinned = item.header?.type?.equals(FavouritesPresenter.PINNED_KEY) ?: false val items = mutableListOf( - activity.getString(if (isPinned) R.string.action_unpin else R.string.action_pin) to { toggleFavouritePin(item.route!!) }, - activity.getString(R.string.action_remove) to { removeFavouriteItem(item.route!!) } + activity.getString(if (isPinned) R.string.action_unpin else R.string.action_pin) to { toggleFavouritePin(checkNotNull(item.route)) }, + activity.getString(R.string.action_remove) to { removeFavouriteItem(checkNotNull(item.route)) } ) - FavouriteOptionsDialog(item.route!!.title, items).showDialog(router) + FavouriteOptionsDialog(checkNotNull(item.route).title, items).showDialog(router) } private fun toggleFavouritePin(favourite: Route) { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouritesPresenter.kt b/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouritesPresenter.kt index d123776..aebe85c 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouritesPresenter.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/favourite/FavouritesPresenter.kt @@ -48,7 +48,7 @@ class FavouritesPresenter( val byType = favourites.sortedWith(object : Comparator { override fun compare(o1: Route?, o2: Route?): Int { - return extractInt(o1!!) - extractInt(o2!!) + return extractInt(checkNotNull(o1)) - extractInt(checkNotNull(o2)) } fun extractInt(s: Route): Int { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/main/MainActivity.kt b/app/src/main/java/org/xtimms/ridebus/ui/main/MainActivity.kt index 1c98056..f912122 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/main/MainActivity.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/main/MainActivity.kt @@ -467,7 +467,7 @@ class MainActivity : BaseActivity() { } private val nav: NavigationBarView - get() = binding.bottomNav ?: binding.sideNav!! + get() = binding.bottomNav ?: checkNotNull(binding.sideNav) private fun setNavLabelVisibility() { if (preferences.bottomBarLabels().get()) { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/main/WhatsNewDialogController.kt b/app/src/main/java/org/xtimms/ridebus/ui/main/WhatsNewDialogController.kt index f763d22..c021857 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/main/WhatsNewDialogController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/main/WhatsNewDialogController.kt @@ -12,8 +12,8 @@ import org.xtimms.ridebus.ui.base.controller.openInBrowser class WhatsNewDialogController(bundle: Bundle? = null) : DialogController(bundle) { override fun onCreateDialog(savedViewState: Bundle?): Dialog { - return MaterialAlertDialogBuilder(activity!!) - .setTitle(activity!!.getString(R.string.updated_version, BuildConfig.VERSION_NAME)) + return MaterialAlertDialogBuilder(checkNotNull(activity)) + .setTitle(checkNotNull(activity).getString(R.string.updated_version, BuildConfig.VERSION_NAME)) .setPositiveButton(android.R.string.ok, null) .setNeutralButton(R.string.whats_new) { _, _ -> openInBrowser(RELEASE_URL) diff --git a/app/src/main/java/org/xtimms/ridebus/ui/main/welcome/WelcomeDialogController.kt b/app/src/main/java/org/xtimms/ridebus/ui/main/welcome/WelcomeDialogController.kt index 10c77ce..a9ca024 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/main/welcome/WelcomeDialogController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/main/welcome/WelcomeDialogController.kt @@ -21,14 +21,14 @@ class WelcomeDialogController : private var binding: WelcomeDialogControllerBinding? = null override fun onCreateDialog(savedViewState: Bundle?): Dialog { - binding = WelcomeDialogControllerBinding.inflate(activity!!.layoutInflater) + binding = WelcomeDialogControllerBinding.inflate(checkNotNull(activity).layoutInflater) adapter = CityAdapter(this) binding?.recyclerView?.layoutManager = LinearLayoutManager(view?.context) binding?.recyclerView?.adapter = adapter - return RideBusFullscreenDialog(activity!!, binding!!.root).apply { + return RideBusFullscreenDialog(checkNotNull(activity), checkNotNull(binding).root).apply { val typedValue = TypedValue() val theme = context.theme theme.resolveAttribute(android.R.attr.colorBackground, typedValue, true) diff --git a/app/src/main/java/org/xtimms/ridebus/ui/more/AboutController.kt b/app/src/main/java/org/xtimms/ridebus/ui/more/AboutController.kt index 2c16ccb..2b687b1 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/more/AboutController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/more/AboutController.kt @@ -110,11 +110,11 @@ class AboutController : SettingsController(), NoAppBarElevationController { private fun checkVersion() { if (activity == null) return - activity!!.toast(R.string.update_check_look_for_updates) + checkNotNull(activity).toast(R.string.update_check_look_for_updates) launchNow { try { - when (val result = updateChecker.checkForUpdate(activity!!, isUserPrompt = true)) { + when (val result = updateChecker.checkForUpdate(checkNotNull(activity), isUserPrompt = true)) { is AppUpdateResult.NewUpdate -> { NewUpdateDialogController(result).showDialog(router) } @@ -142,7 +142,7 @@ class AboutController : SettingsController(), NoAppBarElevationController { ) outputDf.timeZone = TimeZone.getDefault() - buildTime!!.toDateTimestampString(dateFormat) + checkNotNull(buildTime).toDateTimestampString(dateFormat) } catch (e: Exception) { BuildConfig.BUILD_TIME } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/more/MoreController.kt b/app/src/main/java/org/xtimms/ridebus/ui/more/MoreController.kt index b51edee..72d7c5c 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/more/MoreController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/more/MoreController.kt @@ -42,7 +42,7 @@ class MoreController : onChange { newValue -> val checked = newValue as Boolean - DatabaseUpdateJob.setupTask(activity!!, checked) + DatabaseUpdateJob.setupTask(checkNotNull(activity), checked) true } } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/more/UpdateDialogControllers.kt b/app/src/main/java/org/xtimms/ridebus/ui/more/UpdateDialogControllers.kt index bd2bc05..10dfded 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/more/UpdateDialogControllers.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/more/UpdateDialogControllers.kt @@ -30,12 +30,12 @@ class NewUpdateDialogController(bundle: Bundle? = null) : DialogController(bundl ) override fun onCreateDialog(savedViewState: Bundle?): Dialog { - val releaseBody = args.getString(BODY_KEY)!! + val releaseBody = checkNotNull(args.getString(BODY_KEY)) .replace("""---(\R|.)*Checksums(\R|.)*""".toRegex(), "") - val info = Markwon.create(activity!!).toMarkdown(releaseBody) + val info = Markwon.create(checkNotNull(activity)).toMarkdown(releaseBody) return MaterialAlertDialogBuilder( - activity!!, + checkNotNull(activity), materialR.style.ThemeOverlay_Material3_MaterialAlertDialog_Centered ) .setTitle(R.string.update_check_notification_update_available) @@ -44,12 +44,12 @@ class NewUpdateDialogController(bundle: Bundle? = null) : DialogController(bundl .setPositiveButton(R.string.update_check_confirm) { _, _ -> applicationContext?.let { context -> // Start download - val url = args.getString(DOWNLOAD_URL_KEY)!! + val url = checkNotNull(args.getString(DOWNLOAD_URL_KEY)) AppUpdateService.start(context, url) } } .setNeutralButton(R.string.update_check_open) { _, _ -> - openInBrowser(args.getString(RELEASE_URL_KEY)!!) + openInBrowser(checkNotNull(args.getString(RELEASE_URL_KEY))) } .setNeutralButton(R.string.action_postpone) { _, _ -> dialog?.dismiss() @@ -81,18 +81,18 @@ class NewScheduleDialogController(bundle: Bundle? = null) : DialogController(bun ) override fun onCreateDialog(savedViewState: Bundle?): Dialog { - val infoBody = args.getString(NEW_SCHEDULE_BODY_KEY)!! - val version = args.getString(NEW_SCHEDULE_VERSION_KEY)!! + val infoBody = checkNotNull(args.getString(NEW_SCHEDULE_BODY_KEY)) + val version = checkNotNull(args.getString(NEW_SCHEDULE_VERSION_KEY)) val message = buildString { - append(activity!!.getString(R.string.new_version_s, version)) + append(checkNotNull(activity).getString(R.string.new_version_s, version)) appendLine() appendLine() append(infoBody) } return MaterialAlertDialogBuilder( - activity!!, + checkNotNull(activity), materialR.style.ThemeOverlay_Material3_MaterialAlertDialog_Centered ) .setTitle(R.string.update_check_notification_database_update_available) @@ -101,8 +101,8 @@ class NewScheduleDialogController(bundle: Bundle? = null) : DialogController(bun .setPositiveButton(R.string.update_check_confirm) { _, _ -> applicationContext?.let { context -> // Start download - val url = args.getString(NEW_SCHEDULE_DOWNLOAD_URL_KEY)!! - val version = args.getString(NEW_SCHEDULE_VERSION_KEY)!! + val url = checkNotNull(args.getString(NEW_SCHEDULE_DOWNLOAD_URL_KEY)) + val version = checkNotNull(args.getString(NEW_SCHEDULE_VERSION_KEY)) DatabaseUpdateService.start(context, url, title = infoBody, version = version) } } @@ -134,10 +134,10 @@ class CriticalDatabaseUpdateDialogController(bundle: Bundle? = null) : DialogCon ) override fun onCreateDialog(savedViewState: Bundle?): Dialog { - val infoBody = args.getString(CRITICAL_DATABASE_UPDATE_BODY_KEY)!! + val infoBody = checkNotNull(args.getString(CRITICAL_DATABASE_UPDATE_BODY_KEY)) return MaterialAlertDialogBuilder( - activity!!, + checkNotNull(activity), materialR.style.ThemeOverlay_Material3_MaterialAlertDialog_Centered ) .setTitle(R.string.critical_database_update_title) @@ -146,8 +146,8 @@ class CriticalDatabaseUpdateDialogController(bundle: Bundle? = null) : DialogCon .setPositiveButton(R.string.update_check_confirm) { _, _ -> applicationContext?.let { context -> // Start download - val url = args.getString(CRITICAL_DATABASE_UPDATE_DOWNLOAD_URL_KEY)!! - val version = args.getString(CRITICAL_DATABASE_UPDATE_VERSION_KEY)!! + val url = checkNotNull(args.getString(CRITICAL_DATABASE_UPDATE_DOWNLOAD_URL_KEY)) + val version = checkNotNull(args.getString(CRITICAL_DATABASE_UPDATE_VERSION_KEY)) DatabaseUpdateService.start(context, url, title = infoBody, version = version) } } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/more/map/MapStopsDialog.kt b/app/src/main/java/org/xtimms/ridebus/ui/more/map/MapStopsDialog.kt index f66b401..2868e81 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/more/map/MapStopsDialog.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/more/map/MapStopsDialog.kt @@ -34,9 +34,9 @@ class MapStopsDialog : private val points = mutableListOf() override fun onCreateDialog(savedViewState: Bundle?): Dialog { - binding = MapStopsDialogBinding.inflate(activity!!.layoutInflater) + binding = MapStopsDialogBinding.inflate(checkNotNull(activity).layoutInflater) - MapKitFactory.initialize(activity!!) + MapKitFactory.initialize(checkNotNull(activity)) val cityPoint = db.cityDao().getCityCoordinates(preferences.city().get().toInt()).map { Point( @@ -80,14 +80,14 @@ class MapStopsDialog : ) map?.mapObjects?.addCollection()?.addPlacemarks( points, - ImageProvider.fromResource(activity!!, R.drawable.ic_stop_bitmap), + ImageProvider.fromResource(checkNotNull(activity), R.drawable.ic_stop_bitmap), IconStyle() ) } - binding?.mapView?.map?.isNightModeEnabled = activity!!.isNightMode() + binding?.mapView?.map?.isNightModeEnabled = checkNotNull(activity).isNightMode() - return RideBusFullscreenDialog(activity!!, binding!!.root).apply { + return RideBusFullscreenDialog(checkNotNull(activity), checkNotNull(binding).root).apply { val typedValue = TypedValue() val theme = context.theme theme.resolveAttribute(android.R.attr.colorBackground, typedValue, true) diff --git a/app/src/main/java/org/xtimms/ridebus/ui/routes/RouteController.kt b/app/src/main/java/org/xtimms/ridebus/ui/routes/RouteController.kt index 7ff87fb..cef982c 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/routes/RouteController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/routes/RouteController.kt @@ -63,7 +63,7 @@ class RouteController : override fun createBinding(inflater: LayoutInflater) = TransportControllerBinding.inflate(inflater) override fun createPresenter(): RoutePresenter { - return RoutePresenter(transportType!!) + return RoutePresenter(checkNotNull(transportType)) } override fun onViewCreated(view: View) { @@ -141,7 +141,7 @@ class RouteController : override fun onItemClick(position: Int) { val route = (adapter?.getItem(position) as? RouteItem)?.route?.routeId ?: return - parentController!!.router.pushController(RouteDetailsController(route).withFadeTransaction()) + checkNotNull(parentController).router.pushController(RouteDetailsController(route).withFadeTransaction()) } override fun onUpdateEmptyView(size: Int) { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/routes/RoutesSettingsSheet.kt b/app/src/main/java/org/xtimms/ridebus/ui/routes/RoutesSettingsSheet.kt index c2793d2..97a3a4d 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/routes/RoutesSettingsSheet.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/routes/RoutesSettingsSheet.kt @@ -13,12 +13,12 @@ import uy.kohesive.injekt.injectLazy class RoutesSettingsSheet( router: Router, onGroupClickListener: (ExtendedNavigationView.Group) -> Unit -) : TabbedBottomSheetDialog(router.activity!!) { +) : TabbedBottomSheetDialog(checkNotNull(router.activity)) { private val display: Display init { - display = Display(router.activity!!) + display = Display(checkNotNull(router.activity)) display.onGroupClicked = onGroupClickListener } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/routes/RoutesTabbedController.kt b/app/src/main/java/org/xtimms/ridebus/ui/routes/RoutesTabbedController.kt index 68fbcc8..d2a4998 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/routes/RoutesTabbedController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/routes/RoutesTabbedController.kt @@ -53,7 +53,7 @@ class RoutesTabbedController : } override fun getTitle(): String { - return resources!!.getString(R.string.title_routes) + return checkNotNull(resources).getString(R.string.title_routes) } override fun createBinding(inflater: LayoutInflater) = PagerControllerBinding.inflate(inflater) @@ -68,7 +68,7 @@ class RoutesTabbedController : } override fun onDestroyView(view: View) { - if (!activity!!.isChangingConfigurations) { + if (!checkNotNull(activity).isChangingConfigurations) { binding.pager.adapter = null } (activity as? MainActivity)?.binding?.tabs?.setupWithViewPager(null) @@ -119,11 +119,11 @@ class RoutesTabbedController : private fun checkDatabaseFromServer() { if (activity == null) return - activity!!.toast(R.string.update_check_look_for_updates) + checkNotNull(activity).toast(R.string.update_check_look_for_updates) launchNow { try { - when (val result = updateChecker.checkForUpdate(activity!!, isUserPrompt = true)) { + when (val result = updateChecker.checkForUpdate(checkNotNull(activity), isUserPrompt = true)) { is DatabaseUpdateResult.NewUpdate -> { NewScheduleDialogController(result).showDialog(router) } @@ -151,7 +151,7 @@ class RoutesTabbedController : 4 -> R.string.label_tram else -> R.string.unknown } - }.map { resources!!.getString(it) } + }.map { checkNotNull(resources).getString(it) } override fun getCount(): Int { return typesOfTransport.size diff --git a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/AttentionDialog.kt b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/AttentionDialog.kt index 167e13f..72e61d1 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/AttentionDialog.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/AttentionDialog.kt @@ -16,7 +16,7 @@ class AttentionDialog(bundle: Bundle? = null) : DialogController(bundle) { } override fun onCreateDialog(savedViewState: Bundle?): Dialog { - return MaterialAlertDialogBuilder(activity!!, com.google.android.material.R.style.ThemeOverlay_Material3_MaterialAlertDialog_Centered) + return MaterialAlertDialogBuilder(checkNotNull(activity), com.google.android.material.R.style.ThemeOverlay_Material3_MaterialAlertDialog_Centered) .setIcon(activity?.getDrawable(R.drawable.ic_dissatisfied)) .setTitle(activity?.getString(R.string.attention_title)) .setMessage(activity?.getString(R.string.attention_message)) diff --git a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/RouteDetailsController.kt b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/RouteDetailsController.kt index b272277..1b6c09b 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/RouteDetailsController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/RouteDetailsController.kt @@ -95,7 +95,7 @@ class RouteDetailsController : } override fun getTitle(): String { - return "${resources!!.getString(R.string.label_route)} №${route?.number}" + return "${checkNotNull(resources).getString(R.string.label_route)} №${route?.number}" } override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) { @@ -116,7 +116,7 @@ class RouteDetailsController : override fun createPresenter(): RouteDetailsPresenter { return RouteDetailsPresenter( - route!! + checkNotNull(route) ) } @@ -189,7 +189,7 @@ class RouteDetailsController : // Controller may actually already be destroyed by the time this gets run if (!isAttached) return - val scrolledList = binding.fullRecycler ?: binding.infoRecycler!! + val scrolledList = binding.fullRecycler ?: checkNotNull(binding.infoRecycler) (activity as? MainActivity)?.binding?.appbar?.titleTextAlpha = when { // Specific alpha provided alpha != null -> alpha @@ -217,7 +217,7 @@ class RouteDetailsController : override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.action_favourite -> addToFavourites(route!!) + R.id.action_favourite -> addToFavourites(checkNotNull(route)) R.id.action_report -> report() } return super.onOptionsItemSelected(item) @@ -243,7 +243,7 @@ class RouteDetailsController : private fun report() { val intent = Intent(Intent.ACTION_SENDTO) - intent.putExtra(Intent.EXTRA_SUBJECT, resources!!.getString(R.string.email_subject)) + intent.putExtra(Intent.EXTRA_SUBJECT, checkNotNull(resources).getString(R.string.email_subject)) intent.data = Uri.parse(BuildConfig.DEVELOPER_EMAIL) try { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/RouteDetailsPresenter.kt b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/RouteDetailsPresenter.kt index bbdbd7f..e48916c 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/RouteDetailsPresenter.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/RouteDetailsPresenter.kt @@ -63,7 +63,7 @@ class RouteDetailsPresenter( private fun getTimes(typeDay: Int?, stopId: Int): Single { return Single.fromCallable { - db.scheduleDao().getArrivalTime(typeDay!!, route.routeId, stopId) + db.scheduleDao().getArrivalTime(checkNotNull(typeDay), route.routeId, stopId) .map { it.arrivalTime } }.subscribeOn(Schedulers.io()) .map { Times(it) } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/info/RouteInfoHeaderAdapter.kt b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/info/RouteInfoHeaderAdapter.kt index 12c4984..0b5455f 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/info/RouteInfoHeaderAdapter.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/info/RouteInfoHeaderAdapter.kt @@ -131,7 +131,7 @@ class RouteInfoHeaderAdapter( } drivingSession = - drivingRouter!!.requestRoutes(requestPoints, drivingOptions, vehicleOptions, this) + checkNotNull(drivingRouter).requestRoutes(requestPoints, drivingOptions, vehicleOptions, this) } else { constraintSet.clone(constraintLayout) constraintSet.connect( diff --git a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/stop/RouteStopsHeaderAdapter.kt b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/stop/RouteStopsHeaderAdapter.kt index 86f1b25..e360b6e 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/routes/details/stop/RouteStopsHeaderAdapter.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/routes/details/stop/RouteStopsHeaderAdapter.kt @@ -40,7 +40,7 @@ class RouteStopsHeaderAdapter( binding.stopsLabel.text = if (numStops == null) { view.context.getString(R.string.information_no_stops_on_route) } else { - view.context.resources.getQuantityString(R.plurals.route_num_stops, numStops!!, numStops) + view.context.resources.getQuantityString(R.plurals.route_num_stops, checkNotNull(numStops), numStops) } } } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/schedule/ScheduleController.kt b/app/src/main/java/org/xtimms/ridebus/ui/schedule/ScheduleController.kt index daacd11..815de58 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/schedule/ScheduleController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/schedule/ScheduleController.kt @@ -63,7 +63,7 @@ class ScheduleController : override fun createBinding(inflater: LayoutInflater) = ScheduleControllerBinding.inflate(inflater) override fun createPresenter(): SchedulePresenter { - return SchedulePresenter(typeDay!!, route!!, stop!!, db) + return SchedulePresenter(checkNotNull(typeDay), checkNotNull(route), checkNotNull(stop), db) } override fun onViewCreated(view: View) { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/schedule/ScheduleTabbedController.kt b/app/src/main/java/org/xtimms/ridebus/ui/schedule/ScheduleTabbedController.kt index d5ea8d5..d61adca 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/schedule/ScheduleTabbedController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/schedule/ScheduleTabbedController.kt @@ -116,7 +116,7 @@ class ScheduleTabbedController : 7 -> R.string.label_everyday else -> R.string.unknown } - }.map { resources!!.getString(it) } + }.map { checkNotNull(resources).getString(it) } override fun getCount(): Int { return typesOfDay.size diff --git a/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsController.kt b/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsController.kt index 59af72b..563f799 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsController.kt @@ -91,10 +91,10 @@ abstract class SettingsController : PreferenceController() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { val tv = TypedValue() - activity!!.theme.resolveAttribute(androidx.preference.R.attr.preferenceTheme, tv, true) + checkNotNull(activity).theme.resolveAttribute(androidx.preference.R.attr.preferenceTheme, tv, true) themedContext = ContextThemeWrapper(activity, tv.resourceId) - val screen = preferenceManager.createPreferenceScreen(themedContext!!) + val screen = preferenceManager.createPreferenceScreen(checkNotNull(themedContext)) preferenceScreen = screen setupPreferenceScreen(screen) } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsScheduleController.kt b/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsScheduleController.kt index 08a6b3d..8bcb676 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsScheduleController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsScheduleController.kt @@ -33,7 +33,7 @@ class SettingsScheduleController : SettingsController() { onChange { newValue -> val checked = newValue as Boolean - DatabaseUpdateJob.setupTask(activity!!, checked) + DatabaseUpdateJob.setupTask(checkNotNull(activity), checked) true } } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/setting/search/SettingsSearchAdapter.kt b/app/src/main/java/org/xtimms/ridebus/ui/setting/search/SettingsSearchAdapter.kt index c792e14..6a26fee 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/setting/search/SettingsSearchAdapter.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/setting/search/SettingsSearchAdapter.kt @@ -40,7 +40,7 @@ class SettingsSearchAdapter(val controller: SettingsSearchController) : override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) - bundle = savedInstanceState.getBundle(HOLDER_BUNDLE_KEY)!! + bundle = checkNotNull(savedInstanceState.getBundle(HOLDER_BUNDLE_KEY)) } /** diff --git a/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RouteOnStopHolder.kt b/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RouteOnStopHolder.kt index 95574d2..5e1b051 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RouteOnStopHolder.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RouteOnStopHolder.kt @@ -4,12 +4,12 @@ import android.view.View import androidx.core.content.ContextCompat import eu.davidea.viewholders.FlexibleViewHolder import org.xtimms.ridebus.R -import org.xtimms.ridebus.databinding.StopsRouteItemBinding +import org.xtimms.ridebus.databinding.RoutesOnStopItemBinding class RouteOnStopHolder(view: View, val adapter: RoutesOnStopAdapter) : FlexibleViewHolder(view, adapter) { - private val binding = StopsRouteItemBinding.bind(view) + private val binding = RoutesOnStopItemBinding.bind(view) init { binding.holder.setOnClickListener { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RoutesOnStopController.kt b/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RoutesOnStopController.kt index 226b437..1d062f5 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RoutesOnStopController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RoutesOnStopController.kt @@ -15,7 +15,7 @@ import logcat.LogPriority import org.xtimms.ridebus.R import org.xtimms.ridebus.data.database.RideBusDatabase import org.xtimms.ridebus.data.database.entity.Stop -import org.xtimms.ridebus.databinding.StopsRouteControllerBinding +import org.xtimms.ridebus.databinding.RoutesOnStopControllerBinding import org.xtimms.ridebus.ui.base.controller.NoAppBarElevationController import org.xtimms.ridebus.ui.base.controller.NucleusController import org.xtimms.ridebus.ui.base.controller.withFadeTransaction @@ -27,7 +27,7 @@ import java.text.SimpleDateFormat import java.util.* class RoutesOnStopController : - NucleusController, + NucleusController, NoAppBarElevationController, FlexibleAdapter.OnItemClickListener, RoutesOnStopAdapter.OnItemClickListener { @@ -65,12 +65,12 @@ class RoutesOnStopController : return "${stop?.direction}" } - override fun createBinding(inflater: LayoutInflater) = StopsRouteControllerBinding.inflate( + override fun createBinding(inflater: LayoutInflater) = RoutesOnStopControllerBinding.inflate( inflater ) override fun createPresenter(): RouteOnStopPresenter { - return RouteOnStopPresenter(stop!!) + return RouteOnStopPresenter(checkNotNull(stop)) } override fun onViewCreated(view: View) { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RoutesOnStopItem.kt b/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RoutesOnStopItem.kt index 34f8794..5aee4f4 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RoutesOnStopItem.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/stops/details/RoutesOnStopItem.kt @@ -13,7 +13,7 @@ class RoutesOnStopItem(val route: Route, val times: Times) : AbstractFlexibleItem() { override fun getLayoutRes(): Int { - return R.layout.stops_route_item + return R.layout.routes_on_stop_item } override fun createViewHolder(view: View, adapter: FlexibleAdapter>): RouteOnStopHolder { diff --git a/app/src/main/java/org/xtimms/ridebus/util/Times.kt b/app/src/main/java/org/xtimms/ridebus/util/Times.kt index 865cd9d..38b031f 100644 --- a/app/src/main/java/org/xtimms/ridebus/util/Times.kt +++ b/app/src/main/java/org/xtimms/ridebus/util/Times.kt @@ -4,7 +4,7 @@ import java.util.* class Times(times: List) { - private val data = TreeSet(times.map { Time(it!!) }) + private val data = TreeSet(times.map { Time(checkNotNull(it)) }) fun closest(time: Time): Time? { return data.ceiling(time) diff --git a/app/src/main/java/org/xtimms/ridebus/util/system/ContextExt.kt b/app/src/main/java/org/xtimms/ridebus/util/system/ContextExt.kt index c6ad986..96749bb 100644 --- a/app/src/main/java/org/xtimms/ridebus/util/system/ContextExt.kt +++ b/app/src/main/java/org/xtimms/ridebus/util/system/ContextExt.kt @@ -81,7 +81,7 @@ fun Context.copyToClipboard(label: String, content: String) { if (content.isBlank()) return try { - val clipboard = getSystemService()!! + val clipboard = checkNotNull(getSystemService()) clipboard.setPrimaryClip(ClipData.newPlainText(label, content)) toast(getString(R.string.copied_to_clipboard, content.truncateCenter(50))) @@ -153,13 +153,13 @@ val Int.dpToPx: Int get() = (this * Resources.getSystem().displayMetrics.density).toInt() val Context.notificationManager: NotificationManager - get() = getSystemService()!! + get() = checkNotNull(getSystemService()) val Context.powerManager: PowerManager - get() = getSystemService()!! + get() = checkNotNull(getSystemService()) val Context.inputMethodManager: InputMethodManager - get() = getSystemService()!! + get() = checkNotNull(getSystemService()) val Resources.isLTR get() = configuration.layoutDirection == View.LAYOUT_DIRECTION_LTR diff --git a/app/src/main/java/org/xtimms/ridebus/widget/ExtendedNavigationView.kt b/app/src/main/java/org/xtimms/ridebus/widget/ExtendedNavigationView.kt index 9eccc45..5fbcf56 100644 --- a/app/src/main/java/org/xtimms/ridebus/widget/ExtendedNavigationView.kt +++ b/app/src/main/java/org/xtimms/ridebus/widget/ExtendedNavigationView.kt @@ -96,7 +96,7 @@ open class ExtendedNavigationView @JvmOverloads constructor( resId: Int, @AttrRes colorAttrRes: Int = com.google.android.material.R.attr.colorPrimary ): Drawable { - return AppCompatResources.getDrawable(context, resId)!!.apply { + return checkNotNull(AppCompatResources.getDrawable(context, resId)).apply { setTint( context.getResourceColor( if (enabled) colorAttrRes else com.google.android.material.R.attr.colorControlNormal diff --git a/app/src/main/java/org/xtimms/ridebus/widget/preference/ThemesPreferenceAdapter.kt b/app/src/main/java/org/xtimms/ridebus/widget/preference/ThemesPreferenceAdapter.kt index af37125..1dbd1eb 100644 --- a/app/src/main/java/org/xtimms/ridebus/widget/preference/ThemesPreferenceAdapter.kt +++ b/app/src/main/java/org/xtimms/ridebus/widget/preference/ThemesPreferenceAdapter.kt @@ -62,7 +62,7 @@ class ThemesPreferenceAdapter(private val clickListener: OnItemClickListener) : private val unselectedColor = view.context.getResourceColor(android.R.attr.textColorHint) fun bind(appTheme: PreferenceValues.AppTheme) { - binding.name.text = view.context.getString(appTheme.titleResId!!) + binding.name.text = view.context.getString(checkNotNull(appTheme.titleResId)) val isSelected = preferences.appTheme().get() == appTheme binding.themeCard.isChecked = isSelected diff --git a/app/src/main/java/org/xtimms/ridebus/widget/sheet/TabbedBottomSheetDialog.kt b/app/src/main/java/org/xtimms/ridebus/widget/sheet/TabbedBottomSheetDialog.kt index 442561f..19685f9 100644 --- a/app/src/main/java/org/xtimms/ridebus/widget/sheet/TabbedBottomSheetDialog.kt +++ b/app/src/main/java/org/xtimms/ridebus/widget/sheet/TabbedBottomSheetDialog.kt @@ -38,7 +38,7 @@ abstract class TabbedBottomSheetDialog(private val activity: Activity) : } override fun getPageTitle(position: Int): CharSequence { - return activity.resources!!.getString(getTabTitles()[position]) + return checkNotNull(activity.resources).getString(getTabTitles()[position]) } } } diff --git a/app/src/main/res/layout/stops_route_controller.xml b/app/src/main/res/layout/routes_on_stop_controller.xml similarity index 94% rename from app/src/main/res/layout/stops_route_controller.xml rename to app/src/main/res/layout/routes_on_stop_controller.xml index 14d4517..1ac0f97 100644 --- a/app/src/main/res/layout/stops_route_controller.xml +++ b/app/src/main/res/layout/routes_on_stop_controller.xml @@ -53,11 +53,11 @@ android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="0dp" + android:clipToPadding="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/header" - tools:listitem="@layout/stops_route_item" /> + app:layout_constraintTop_toBottomOf="@+id/header" />