From bb87392eef87ccfb192d972e8a0a2984ef0d8bbf Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Tue, 4 Aug 2020 19:32:36 -0400 Subject: [PATCH] Code cleanup --- .../process/MigrationListController.kt | 4 - .../main/java/exh/eh/EHentaiUpdateHelper.kt | 52 ++++++------ .../main/java/exh/eh/EHentaiUpdateWorker.kt | 10 +-- .../java/exh/favorites/FavoritesSyncHelper.kt | 2 +- app/src/main/java/exh/hitomi/HitomiNozomi.kt | 2 +- .../main/java/exh/log/EHDebugModeOverlay.kt | 2 +- .../metadata/metadata/base/FlatMetadata.kt | 4 +- .../metadata/base/RaisedSearchMetadata.kt | 3 +- app/src/main/java/exh/search/SearchEngine.kt | 4 +- .../java/exh/smartsearch/SmartSearchEngine.kt | 2 +- .../main/java/exh/uconfig/EHConfigurator.kt | 2 +- .../java/exh/ui/batchadd/BatchAddPresenter.kt | 8 +- .../exh/ui/captcha/BrowserActionActivity.kt | 26 +++--- .../exh/ui/intercept/InterceptActivity.kt | 8 +- .../main/java/exh/ui/login/LoginController.kt | 66 ++++++++-------- .../ui/smartsearch/SmartSearchController.kt | 10 +-- .../ui/smartsearch/SmartSearchPresenter.kt | 13 ++- app/src/main/java/exh/util/ViewExtensions.kt | 79 ------------------- 18 files changed, 107 insertions(+), 190 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt index 6c182b4d2..c4361ec5e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt @@ -460,10 +460,6 @@ class MigrationListController(bundle: Bundle? = null) : return true } - override fun onDestroyView(view: View) { - super.onDestroyView(view) - } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.migration_list, menu) } diff --git a/app/src/main/java/exh/eh/EHentaiUpdateHelper.kt b/app/src/main/java/exh/eh/EHentaiUpdateHelper.kt index d575ec92e..7ff7498b8 100644 --- a/app/src/main/java/exh/eh/EHentaiUpdateHelper.kt +++ b/app/src/main/java/exh/eh/EHentaiUpdateHelper.kt @@ -93,32 +93,36 @@ class EHentaiUpdateHelper(context: Context) { val newLastPageRead = chainsAsChapters.maxBy { it.last_page_read }?.last_page_read - if (existing != null) { - existing.read = existing.read || chapter.read - existing.last_page_read = existing.last_page_read.coerceAtLeast(chapter.last_page_read) - if (newLastPageRead != null && existing.last_page_read <= 0) { - existing.last_page_read = newLastPageRead - } - existing.bookmark = existing.bookmark || chapter.bookmark - curChapters - } else if (chapter.date_upload > 0) { // Ignore chapters using the old system - new = true - curChapters + ChapterImpl().apply { - manga_id = accepted.manga.id - url = chapter.url - name = chapter.name - read = chapter.read - bookmark = chapter.bookmark - - last_page_read = chapter.last_page_read - if (newLastPageRead != null && last_page_read <= 0) { - last_page_read = newLastPageRead + when { + existing != null -> { + existing.read = existing.read || chapter.read + existing.last_page_read = existing.last_page_read.coerceAtLeast(chapter.last_page_read) + if (newLastPageRead != null && existing.last_page_read <= 0) { + existing.last_page_read = newLastPageRead } - - date_fetch = chapter.date_fetch - date_upload = chapter.date_upload + existing.bookmark = existing.bookmark || chapter.bookmark + curChapters } - } else curChapters + chapter.date_upload > 0 -> { // Ignore chapters using the old system + new = true + curChapters + ChapterImpl().apply { + manga_id = accepted.manga.id + url = chapter.url + name = chapter.name + read = chapter.read + bookmark = chapter.bookmark + + last_page_read = chapter.last_page_read + if (newLastPageRead != null && last_page_read <= 0) { + last_page_read = newLastPageRead + } + + date_fetch = chapter.date_fetch + date_upload = chapter.date_upload + } + } + else -> curChapters + } } .filter { it.date_upload > 0 } // Ignore chapters using the old system (filter after to prevent dupes from insert) .sortedBy { it.date_upload } diff --git a/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt b/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt index 4588370dc..b041226f3 100644 --- a/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt +++ b/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt @@ -127,7 +127,7 @@ class EHentaiUpdateWorker : JobService(), CoroutineScope { return true } - suspend fun startUpdating() { + private suspend fun startUpdating() { logger.d("Update job started!") val startTime = System.currentTimeMillis() @@ -254,7 +254,7 @@ class EHentaiUpdateWorker : JobService(), CoroutineScope { } // New, current - suspend fun updateEntryAndGetChapters(manga: Manga): Pair, List> { + private suspend fun updateEntryAndGetChapters(manga: Manga): Pair, List> { val source = sourceManager.get(manga.source) as? EHentai ?: throw GalleryNotUpdatedException(false, IllegalStateException("Missing EH-based source (${manga.source})!")) @@ -339,12 +339,12 @@ class EHentaiUpdateWorker : JobService(), CoroutineScope { fun launchBackgroundTest(context: Context): String { val jobScheduler = context.jobScheduler - if (jobScheduler.schedule(context.testBackgroundJobInfo()) == JobScheduler.RESULT_FAILURE) { + return if (jobScheduler.schedule(context.testBackgroundJobInfo()) == JobScheduler.RESULT_FAILURE) { logger.e("Failed to schedule background test job!") - return "Failed" + "Failed" } else { logger.d("Successfully scheduled background test job!") - return "Success" + "Success" } } diff --git a/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt b/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt index 0ae1f4630..08767e448 100644 --- a/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt +++ b/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt @@ -53,7 +53,7 @@ class FavoritesSyncHelper(val context: Context) { private val logger = XLog.tag("EHFavSync").build() - val status = BehaviorSubject.create(FavoritesSyncStatus.Idle(context)) + val status: BehaviorSubject = BehaviorSubject.create(FavoritesSyncStatus.Idle(context)) @Synchronized fun runSync() { diff --git a/app/src/main/java/exh/hitomi/HitomiNozomi.kt b/app/src/main/java/exh/hitomi/HitomiNozomi.kt index 90b728907..fb60e770f 100644 --- a/app/src/main/java/exh/hitomi/HitomiNozomi.kt +++ b/app/src/main/java/exh/hitomi/HitomiNozomi.kt @@ -112,7 +112,7 @@ class HitomiNozomi( private fun BSearch(field: String, key: ByteArray, node: Node?): Single { fun compareByteArrays(dv1: ByteArray, dv2: ByteArray): Int { - val top = Math.min(dv1.size, dv2.size) + val top = dv1.size.coerceAtMost(dv2.size) for (i in 0 until top) { val dv1i = dv1[i].toInt() and 0xFF val dv2i = dv2[i].toInt() and 0xFF diff --git a/app/src/main/java/exh/log/EHDebugModeOverlay.kt b/app/src/main/java/exh/log/EHDebugModeOverlay.kt index 91ede5246..046f5e19e 100644 --- a/app/src/main/java/exh/log/EHDebugModeOverlay.kt +++ b/app/src/main/java/exh/log/EHDebugModeOverlay.kt @@ -50,7 +50,7 @@ class EHDebugModeOverlay(private val context: Context) : OverlayModule(n return view } - fun buildInfo() = + private fun buildInfo() = """ ===[ ${context.getString(R.string.app_name)} ]===
Build type: ${BuildConfig.BUILD_TYPE}
diff --git a/app/src/main/java/exh/metadata/metadata/base/FlatMetadata.kt b/app/src/main/java/exh/metadata/metadata/base/FlatMetadata.kt index 42c97129f..8a21f0db8 100644 --- a/app/src/main/java/exh/metadata/metadata/base/FlatMetadata.kt +++ b/app/src/main/java/exh/metadata/metadata/base/FlatMetadata.kt @@ -16,7 +16,7 @@ data class FlatMetadata( ) { inline fun raise(): T = raise(T::class) - fun raise(clazz: KClass) = + fun raise(clazz: KClass): T = RaisedSearchMetadata.raiseFlattenGson .fromJson(metadata.extra, clazz.java).apply { fillBaseFields(this@FlatMetadata) @@ -84,7 +84,7 @@ private fun preparedOperationFromSingle(single: Single): PreparedOperatio } } -fun DatabaseHelper.insertFlatMetadata(flatMetadata: FlatMetadata) = Completable.fromCallable { +fun DatabaseHelper.insertFlatMetadata(flatMetadata: FlatMetadata): Completable = Completable.fromCallable { require(flatMetadata.metadata.mangaId != -1L) inTransaction { diff --git a/app/src/main/java/exh/metadata/metadata/base/RaisedSearchMetadata.kt b/app/src/main/java/exh/metadata/metadata/base/RaisedSearchMetadata.kt index efc6e2e58..d800c0033 100644 --- a/app/src/main/java/exh/metadata/metadata/base/RaisedSearchMetadata.kt +++ b/app/src/main/java/exh/metadata/metadata/base/RaisedSearchMetadata.kt @@ -1,6 +1,7 @@ package exh.metadata.metadata.base import android.content.Context +import com.google.gson.Gson import com.google.gson.GsonBuilder import eu.kanade.tachiyomi.source.model.SManga import exh.metadata.forEach @@ -121,7 +122,7 @@ abstract class RaisedSearchMetadata { (this).filter { it.type != TAG_TYPE_VIRTUAL } .joinToString { (if (it.namespace != null) "${it.namespace}: " else "") + it.name } - val raiseFlattenGson = GsonBuilder().create() + val raiseFlattenGson: Gson = GsonBuilder().create() fun titleDelegate(type: Int) = object : ReadWriteProperty { /** diff --git a/app/src/main/java/exh/search/SearchEngine.kt b/app/src/main/java/exh/search/SearchEngine.kt index 161af8806..1ddaa5f63 100755 --- a/app/src/main/java/exh/search/SearchEngine.kt +++ b/app/src/main/java/exh/search/SearchEngine.kt @@ -7,7 +7,7 @@ import exh.metadata.sql.tables.SearchTitleTable class SearchEngine { private val queryCache = mutableMapOf>() - private fun textToSubQueries( + fun textToSubQueries( namespace: String?, component: Text? ): Pair>? { @@ -69,7 +69,7 @@ class SearchEngine { val include = mutableListOf>>() val exclude = mutableListOf>>() - for (component in q) { + q.forEach { component -> val query = if (component is Text) { textToSubQueries(null, component) } else if (component is Namespace) { diff --git a/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt b/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt index d147e4b6a..fa0670395 100644 --- a/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt +++ b/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt @@ -18,7 +18,7 @@ import uy.kohesive.injekt.injectLazy class SmartSearchEngine( parentContext: CoroutineContext, - val extraSearchParams: String? = null + private val extraSearchParams: String? = null ) : CoroutineScope { override val coroutineContext: CoroutineContext = parentContext + Job() + Dispatchers.Default diff --git a/app/src/main/java/exh/uconfig/EHConfigurator.kt b/app/src/main/java/exh/uconfig/EHConfigurator.kt index ae4e5b18d..ac6d53be5 100644 --- a/app/src/main/java/exh/uconfig/EHConfigurator.kt +++ b/app/src/main/java/exh/uconfig/EHConfigurator.kt @@ -85,7 +85,7 @@ class EHConfigurator(val context: Context) { configure(exhSource, hathPerks) } - fun configure(source: EHentai, hathPerks: EHHathPerksResponse) { + private fun configure(source: EHentai, hathPerks: EHHathPerksResponse) { // Delete old app profiles val scanReq = source.requestWithCreds().url(source.uconfigUrl).build() val resp = configuratorClient.newCall(scanReq).execute().asJsoup() diff --git a/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt b/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt index 65466229c..82e3a1344 100644 --- a/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt +++ b/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt @@ -30,13 +30,13 @@ class BatchAddPresenter : BasePresenter() { testedGalleries = if (regex.containsMatchIn(galleries)) { regex.findAll(galleries).map { galleryKeys -> - val LinkParts = galleryKeys.value.split(".") - val Link = "${if (Injekt.get().enableExhentai().get()) { + val linkParts = galleryKeys.value.split(".") + val link = "${if (Injekt.get().enableExhentai().get()) { "https://exhentai.org/g/" } else { "https://e-hentai.org/g/" - }}${LinkParts[0]}/${LinkParts[1].replace(":", "")}" - Link + }}${linkParts[0]}/${linkParts[1].replace(":", "")}" + link }.joinToString(separator = "\n") } else { galleries diff --git a/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt b/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt index 3d22f1ac3..e37af34ed 100644 --- a/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt +++ b/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt @@ -22,6 +22,7 @@ import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.online.HttpSource +import eu.kanade.tachiyomi.util.system.setDefaultSettings import exh.source.DelegatedHttpSource import exh.util.melt import java.io.Serializable @@ -33,7 +34,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.Request -import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import rx.Observable import rx.Single import rx.schedulers.Schedulers @@ -81,7 +82,7 @@ class BrowserActionActivity : AppCompatActivity() { val url: String? = intent.getStringExtra(URL_EXTRA) val actionName = intent.getStringExtra(ACTION_NAME_EXTRA) - @Suppress("NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE") + @Suppress("NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE", "UNCHECKED_CAST") val verifyComplete = if (source != null) { source::verifyComplete!! } else intent.getSerializableExtra(VERIFY_LAMBDA_EXTRA) as? (String) -> Boolean @@ -106,8 +107,7 @@ class BrowserActionActivity : AppCompatActivity() { cm.setCookie(url, cookieString) } - webview.settings.javaScriptEnabled = true - webview.settings.domStorageEnabled = true + webview.setDefaultSettings() headers.entries.find { it.key.equals("user-agent", true) }?.let { webview.settings.userAgentString = it.value } @@ -277,7 +277,7 @@ class BrowserActionActivity : AppCompatActivity() { } } - fun performRecognize(url: String): Single { + private fun performRecognize(url: String): Single { return credentialsObservable.flatMap { token -> httpClient.newCall( Request.Builder() @@ -304,7 +304,11 @@ class BrowserActionActivity : AppCompatActivity() { .addFormDataPart( "audio.mp3", "audio.mp3", - RequestBody.create("audio/mp3".toMediaTypeOrNull(), audioFile) + audioFile.toRequestBody( + "audio/mp3".toMediaTypeOrNull(), + 0, + audioFile.size + ) ) .build() ) @@ -315,7 +319,7 @@ class BrowserActionActivity : AppCompatActivity() { }.toSingle() } - fun doStageCheckbox(loopId: String) { + private fun doStageCheckbox(loopId: String) { if (loopId != currentLoopId) return webview.evaluateJavascript( @@ -346,7 +350,7 @@ class BrowserActionActivity : AppCompatActivity() { ) } - fun getAudioButtonLocation(loopId: String) { + private fun getAudioButtonLocation(loopId: String) { webview.evaluateJavascript( """ (function() { @@ -381,7 +385,7 @@ class BrowserActionActivity : AppCompatActivity() { ) } - fun doStageDownloadAudio(loopId: String) { + private fun doStageDownloadAudio(loopId: String) { webview.evaluateJavascript( """ (function() { @@ -409,7 +413,7 @@ class BrowserActionActivity : AppCompatActivity() { ) } - fun typeResult(loopId: String, result: String) { + private fun typeResult(loopId: String, result: String) { webview.evaluateJavascript( """ (function() { @@ -478,7 +482,7 @@ class BrowserActionActivity : AppCompatActivity() { } } - fun runValidateCaptcha(loopId: String) { + private fun runValidateCaptcha(loopId: String) { if (loopId != validateCurrentLoopId) return webview.evaluateJavascript( diff --git a/app/src/main/java/exh/ui/intercept/InterceptActivity.kt b/app/src/main/java/exh/ui/intercept/InterceptActivity.kt index 07d3a86fb..637f8a4d2 100755 --- a/app/src/main/java/exh/ui/intercept/InterceptActivity.kt +++ b/app/src/main/java/exh/ui/intercept/InterceptActivity.kt @@ -93,13 +93,13 @@ class InterceptActivity : BaseActivity() { private val galleryAdder = GalleryAdder() - val status = BehaviorSubject.create(InterceptResult.Idle()) + val status: BehaviorSubject = BehaviorSubject.create(InterceptResult.Idle) @Synchronized fun loadGallery(gallery: String) { // Do not load gallery if already loading if (status.value is InterceptResult.Idle) { - status.onNext(InterceptResult.Loading()) + status.onNext(InterceptResult.Loading) // Load gallery async thread { @@ -119,8 +119,8 @@ class InterceptActivity : BaseActivity() { } sealed class InterceptResult { - class Idle : InterceptResult() - class Loading : InterceptResult() + object Idle : InterceptResult() + object Loading : InterceptResult() data class Success(val mangaId: Long) : InterceptResult() data class Failure(val reason: String) : InterceptResult() } diff --git a/app/src/main/java/exh/ui/login/LoginController.kt b/app/src/main/java/exh/ui/login/LoginController.kt index 0f53522b9..f476fb764 100755 --- a/app/src/main/java/exh/ui/login/LoginController.kt +++ b/app/src/main/java/exh/ui/login/LoginController.kt @@ -13,6 +13,7 @@ import eu.kanade.tachiyomi.databinding.EhActivityLoginBinding import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.base.controller.NucleusController import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.setDefaultSettings import exh.uconfig.WarnConfigureDialogController import java.net.HttpCookie import timber.log.Timber @@ -39,53 +40,50 @@ class LoginController : NucleusController? = - CookieManager.getInstance().getCookie(url)?.let { - it.split("; ").flatMap { + private fun getCookies(url: String): List? = + CookieManager.getInstance().getCookie(url)?.let { cookie -> + cookie.split("; ").flatMap { HttpCookie.parse(it) } } diff --git a/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt b/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt index b33a8dbe8..94e5f6c2e 100644 --- a/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt +++ b/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt @@ -13,18 +13,14 @@ import eu.kanade.tachiyomi.ui.browse.source.SourceController import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.util.system.toast -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy -class SmartSearchController(bundle: Bundle? = null) : NucleusController(), CoroutineScope { - override val coroutineContext = Job() + Dispatchers.Main - +class SmartSearchController(bundle: Bundle? = null) : NucleusController() { private val sourceManager: SourceManager by injectLazy() private val source = sourceManager.get(bundle?.getLong(ARG_SOURCE_ID, -1) ?: -1) as? CatalogueSource @@ -55,7 +51,7 @@ class SmartSearchController(bundle: Bundle? = null) : NucleusController(), CoroutineScope { + BasePresenter() { - override val coroutineContext = Job() + Dispatchers.Main + val scope = CoroutineScope(Job() + Dispatchers.Main) val smartSearchChannel = Channel() - private val smartSearchEngine = SmartSearchEngine(coroutineContext) + private val smartSearchEngine = SmartSearchEngine(scope.coroutineContext) override fun onCreate(savedState: Bundle?) { super.onCreate(savedState) if (source != null && config != null) { - launch(Dispatchers.Default) { + scope.launch(Dispatchers.Default) { val result = try { val resultManga = smartSearchEngine.smartSearch(source, config.origTitle) if (resultManga != null) { @@ -53,11 +52,9 @@ class SmartSearchPresenter(private val source: CatalogueSource?, private val con override fun onDestroy() { super.onDestroy() - cancel() + scope.cancel() } - data class SearchEntry(val manga: SManga, val dist: Double) - sealed class SearchResults { data class Found(val manga: Manga) : SearchResults() object NotFound : SearchResults() diff --git a/app/src/main/java/exh/util/ViewExtensions.kt b/app/src/main/java/exh/util/ViewExtensions.kt index fba5be301..4fabc1cb2 100644 --- a/app/src/main/java/exh/util/ViewExtensions.kt +++ b/app/src/main/java/exh/util/ViewExtensions.kt @@ -2,9 +2,7 @@ package exh.util import android.content.Context import android.view.View -import android.view.ViewGroup import android.view.WindowInsets -import android.widget.FrameLayout import androidx.annotation.Px import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup @@ -14,65 +12,6 @@ import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_LIGHT import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_NORMAL import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_WEAK -inline val View.marginTop: Int - get() = (layoutParams as? ViewGroup.MarginLayoutParams)?.topMargin ?: 0 - -inline val View.marginBottom: Int - get() = (layoutParams as? ViewGroup.MarginLayoutParams)?.bottomMargin ?: 0 - -inline val View.marginRight: Int - get() = (layoutParams as? ViewGroup.MarginLayoutParams)?.rightMargin ?: 0 - -inline val View.marginLeft: Int - get() = (layoutParams as? ViewGroup.MarginLayoutParams)?.leftMargin ?: 0 - -fun View.doOnApplyWindowInsets(f: (View, WindowInsets, ViewPaddingState) -> Unit) { - // Create a snapshot of the view's padding state - val paddingState = createStateForView(this) - setOnApplyWindowInsetsListener { v, insets -> - f(v, insets, paddingState) - insets - } - requestApplyInsetsWhenAttached() -} - -object ControllerViewWindowInsetsListener : View.OnApplyWindowInsetsListener { - override fun onApplyWindowInsets(v: View, insets: WindowInsets): WindowInsets { - v.updateLayoutParams { - val attrsArray = intArrayOf(android.R.attr.actionBarSize) - val array = v.context.obtainStyledAttributes(attrsArray) - topMargin = insets.systemWindowInsetTop + array.getDimensionPixelSize(0, 0) - array.recycle() - } - return insets - } -} - -fun View.requestApplyInsetsWhenAttached() { - if (isAttachedToWindow) { - requestApplyInsets() - } else { - addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { - override fun onViewAttachedToWindow(v: View) { - v.requestApplyInsets() - } - - override fun onViewDetachedFromWindow(v: View) = Unit - }) - } -} - -inline fun View.updateLayoutParams(block: T.() -> Unit) { - val params = layoutParams as T - block(params) - layoutParams = params -} - -fun View.applyWindowInsetsForController() { - setOnApplyWindowInsetsListener(ControllerViewWindowInsetsListener) - requestApplyInsetsWhenAttached() -} - inline fun View.updatePaddingRelative( @Px start: Int = paddingStart, @Px top: Int = paddingTop, @@ -82,24 +21,6 @@ inline fun View.updatePaddingRelative( setPaddingRelative(start, top, end, bottom) } -private fun createStateForView(view: View) = ViewPaddingState( - view.paddingLeft, - view.paddingTop, - view.paddingRight, - view.paddingBottom, - view.paddingStart, - view.paddingEnd -) - -data class ViewPaddingState( - val left: Int, - val top: Int, - val right: Int, - val bottom: Int, - val start: Int, - val end: Int -) - object RecyclerWindowInsetsListener : View.OnApplyWindowInsetsListener { override fun onApplyWindowInsets(v: View, insets: WindowInsets): WindowInsets { v.updatePaddingRelative(bottom = insets.systemWindowInsetBottom)