Cleanup some code
This commit is contained in:
parent
4333999b85
commit
4b12e977c0
@ -34,6 +34,7 @@ import exh.debug.DebugToggles
|
|||||||
import exh.log.CrashlyticsPrinter
|
import exh.log.CrashlyticsPrinter
|
||||||
import exh.log.EHDebugModeOverlay
|
import exh.log.EHDebugModeOverlay
|
||||||
import exh.log.EHLogLevel
|
import exh.log.EHLogLevel
|
||||||
|
import exh.syDebugVersion
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.RealmConfiguration
|
import io.realm.RealmConfiguration
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@ -183,7 +184,7 @@ open class App : Application(), LifecycleObserver {
|
|||||||
.Builder(logFolder.absolutePath)
|
.Builder(logFolder.absolutePath)
|
||||||
.fileNameGenerator(object : DateFileNameGenerator() {
|
.fileNameGenerator(object : DateFileNameGenerator() {
|
||||||
override fun generateFileName(logLevel: Int, timestamp: Long): String {
|
override fun generateFileName(logLevel: Int, timestamp: Long): String {
|
||||||
return super.generateFileName(logLevel, timestamp) + "-${BuildConfig.BUILD_TYPE}"
|
return super.generateFileName(logLevel, timestamp) + "-${BuildConfig.BUILD_TYPE}.log"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.cleanStrategy(FileLastModifiedCleanStrategy(7.days.inMilliseconds.longValue))
|
.cleanStrategy(FileLastModifiedCleanStrategy(7.days.inMilliseconds.longValue))
|
||||||
@ -201,6 +202,17 @@ open class App : Application(), LifecycleObserver {
|
|||||||
)
|
)
|
||||||
|
|
||||||
XLog.d("Application booting...")
|
XLog.d("Application booting...")
|
||||||
|
XLog.nst().d(
|
||||||
|
"App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.FLAVOR}, ${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE})\n" +
|
||||||
|
"Preview build: $syDebugVersion\n" +
|
||||||
|
"Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}) \n" +
|
||||||
|
"Android build ID: ${Build.DISPLAY}\n" +
|
||||||
|
"Device brand: ${Build.BRAND}\n" +
|
||||||
|
"Device manufacturer: ${Build.MANUFACTURER}\n" +
|
||||||
|
"Device name: ${Build.DEVICE}\n" +
|
||||||
|
"Device model: ${Build.MODEL}\n" +
|
||||||
|
"Device product name: ${Build.PRODUCT}"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// EXH
|
// EXH
|
||||||
|
@ -31,7 +31,7 @@ import rx.Observable
|
|||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
@ExperimentalSerializationApi
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
class MangaPlus(delegate: HttpSource, val context: Context) :
|
class MangaPlus(delegate: HttpSource, val context: Context) :
|
||||||
DelegatedHttpSource(delegate),
|
DelegatedHttpSource(delegate),
|
||||||
ConfigurableSource {
|
ConfigurableSource {
|
||||||
|
@ -23,22 +23,20 @@ import kotlinx.android.synthetic.main.migration_bottom_sheet.mig_categories
|
|||||||
import kotlinx.android.synthetic.main.migration_bottom_sheet.mig_chapters
|
import kotlinx.android.synthetic.main.migration_bottom_sheet.mig_chapters
|
||||||
import kotlinx.android.synthetic.main.migration_bottom_sheet.mig_tracking
|
import kotlinx.android.synthetic.main.migration_bottom_sheet.mig_tracking
|
||||||
import kotlinx.android.synthetic.main.migration_bottom_sheet.use_smart_search
|
import kotlinx.android.synthetic.main.migration_bottom_sheet.use_smart_search
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
import reactivecircus.flowbinding.android.view.clicks
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
class MigrationBottomSheetDialog(
|
class MigrationBottomSheetDialog(activity: Activity, theme: Int, private val listener: StartMigrationListener) : BottomSheetDialog(activity, theme) {
|
||||||
activity: Activity,
|
|
||||||
theme: Int,
|
|
||||||
private val listener:
|
|
||||||
StartMigrationListener
|
|
||||||
) :
|
|
||||||
BottomSheetDialog(
|
|
||||||
activity,
|
|
||||||
theme
|
|
||||||
) {
|
|
||||||
/**
|
/**
|
||||||
* Preferences helper.
|
* Preferences helper.
|
||||||
*/
|
*/
|
||||||
private val preferences by injectLazy<PreferencesHelper>()
|
private val preferences by injectLazy<PreferencesHelper>()
|
||||||
|
private val scope = CoroutineScope(Job() + Dispatchers.Main)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// Use activity theme for this layout
|
// Use activity theme for this layout
|
||||||
@ -61,7 +59,7 @@ class MigrationBottomSheetDialog(
|
|||||||
|
|
||||||
initPreferences()
|
initPreferences()
|
||||||
|
|
||||||
fab.setOnClickListener {
|
fab.clicks().onEach {
|
||||||
preferences.skipPreMigration().set(skip_step.isChecked)
|
preferences.skipPreMigration().set(skip_step.isChecked)
|
||||||
listener.startMigration(
|
listener.startMigration(
|
||||||
if (use_smart_search.isChecked && extra_search_param_text.text.isNotBlank()) {
|
if (use_smart_search.isChecked && extra_search_param_text.text.isNotBlank()) {
|
||||||
@ -69,7 +67,7 @@ class MigrationBottomSheetDialog(
|
|||||||
} else null
|
} else null
|
||||||
)
|
)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}.launchIn(scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -9,9 +9,11 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.bluelinelabs.conductor.Router
|
import com.bluelinelabs.conductor.Router
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||||
|
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
@ -19,17 +21,23 @@ import eu.kanade.tachiyomi.databinding.PreMigrationControllerBinding
|
|||||||
import eu.kanade.tachiyomi.source.SourceManager
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
||||||
|
import eu.kanade.tachiyomi.ui.base.controller.FabController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationListController
|
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationListController
|
||||||
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationProcedureConfig
|
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationProcedureConfig
|
||||||
import eu.kanade.tachiyomi.ui.main.offsetAppbarHeight
|
|
||||||
import eu.kanade.tachiyomi.util.view.shrinkOnScroll
|
import eu.kanade.tachiyomi.util.view.shrinkOnScroll
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
import reactivecircus.flowbinding.android.view.clicks
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
class PreMigrationController(bundle: Bundle? = null) :
|
class PreMigrationController(bundle: Bundle? = null) :
|
||||||
BaseController<PreMigrationControllerBinding>(bundle),
|
BaseController<PreMigrationControllerBinding>(bundle),
|
||||||
FlexibleAdapter
|
FlexibleAdapter.OnItemClickListener,
|
||||||
.OnItemClickListener,
|
FabController,
|
||||||
StartMigrationListener {
|
StartMigrationListener {
|
||||||
private val sourceManager: SourceManager by injectLazy()
|
private val sourceManager: SourceManager by injectLazy()
|
||||||
private val prefs: PreferencesHelper by injectLazy()
|
private val prefs: PreferencesHelper by injectLazy()
|
||||||
@ -38,7 +46,10 @@ class PreMigrationController(bundle: Bundle? = null) :
|
|||||||
|
|
||||||
private val config: LongArray = args.getLongArray(MANGA_IDS_EXTRA) ?: LongArray(0)
|
private val config: LongArray = args.getLongArray(MANGA_IDS_EXTRA) ?: LongArray(0)
|
||||||
|
|
||||||
private var showingOptions = false
|
val scope = CoroutineScope(Job() + Dispatchers.Main)
|
||||||
|
|
||||||
|
private var actionFab: ExtendedFloatingActionButton? = null
|
||||||
|
private var actionFabScrollListener: RecyclerView.OnScrollListener? = null
|
||||||
|
|
||||||
private var dialog: BottomSheetDialog? = null
|
private var dialog: BottomSheetDialog? = null
|
||||||
|
|
||||||
@ -64,9 +75,15 @@ class PreMigrationController(bundle: Bundle? = null) :
|
|||||||
ourAdapter.isHandleDragEnabled = true
|
ourAdapter.isHandleDragEnabled = true
|
||||||
dialog = null
|
dialog = null
|
||||||
|
|
||||||
binding.fab.shrinkOnScroll(binding.recycler)
|
actionFabScrollListener = actionFab?.shrinkOnScroll(binding.recycler)
|
||||||
|
}
|
||||||
|
|
||||||
binding.fab.setOnClickListener {
|
override fun configureFab(fab: ExtendedFloatingActionButton) {
|
||||||
|
actionFab = fab
|
||||||
|
fab.setText(R.string.action_migrate)
|
||||||
|
fab.setIconResource(R.drawable.ic_arrow_forward_24dp)
|
||||||
|
fab.clicks()
|
||||||
|
.onEach {
|
||||||
if (dialog?.isShowing != true) {
|
if (dialog?.isShowing != true) {
|
||||||
dialog = MigrationBottomSheetDialog(activity!!, R.style.SheetDialog, this)
|
dialog = MigrationBottomSheetDialog(activity!!, R.style.SheetDialog, this)
|
||||||
dialog?.show()
|
dialog?.show()
|
||||||
@ -80,8 +97,12 @@ class PreMigrationController(bundle: Bundle? = null) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.fab.shrinkOnScroll(binding.recycler)
|
.launchIn(scope)
|
||||||
binding.fab.offsetAppbarHeight(activity!!)
|
}
|
||||||
|
|
||||||
|
override fun cleanupFab(fab: ExtendedFloatingActionButton) {
|
||||||
|
actionFabScrollListener?.let { binding.recycler.removeOnScrollListener(it) }
|
||||||
|
actionFab = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun startMigration(extraParam: String?) {
|
override fun startMigration(extraParam: String?) {
|
||||||
@ -127,20 +148,12 @@ class PreMigrationController(bundle: Bundle? = null) :
|
|||||||
private fun getEnabledSources(): List<HttpSource> {
|
private fun getEnabledSources(): List<HttpSource> {
|
||||||
val languages = prefs.enabledLanguages().get()
|
val languages = prefs.enabledLanguages().get()
|
||||||
val sourcesSaved = prefs.migrationSources().get().split("/")
|
val sourcesSaved = prefs.migrationSources().get().split("/")
|
||||||
var sources = sourceManager.getVisibleCatalogueSources()
|
val sources = sourceManager.getVisibleCatalogueSources()
|
||||||
.filterIsInstance<HttpSource>()
|
.filterIsInstance<HttpSource>()
|
||||||
.filter { it.lang in languages }
|
.filter { it.lang in languages }
|
||||||
.sortedBy { "(${it.lang}) ${it.name}" }
|
.sortedBy { "(${it.lang}) ${it.name}" }
|
||||||
sources =
|
|
||||||
sources.filter { isEnabled(it.id.toString()) }.sortedBy {
|
|
||||||
sourcesSaved.indexOf(
|
|
||||||
it.id
|
|
||||||
.toString()
|
|
||||||
)
|
|
||||||
} +
|
|
||||||
sources.filterNot { isEnabled(it.id.toString()) }
|
|
||||||
|
|
||||||
return sources
|
return sources.filter { isEnabled(it.id.toString()) }.sortedBy { sourcesSaved.indexOf(it.id.toString()) } + sources.filterNot { isEnabled(it.id.toString()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isEnabled(id: String): Boolean {
|
fun isEnabled(id: String): Boolean {
|
||||||
|
@ -33,8 +33,13 @@ import kotlinx.android.synthetic.main.migration_process_item.migration_manga_car
|
|||||||
import kotlinx.android.synthetic.main.migration_process_item.migration_manga_card_to
|
import kotlinx.android.synthetic.main.migration_process_item.migration_manga_card_to
|
||||||
import kotlinx.android.synthetic.main.migration_process_item.migration_menu
|
import kotlinx.android.synthetic.main.migration_process_item.migration_menu
|
||||||
import kotlinx.android.synthetic.main.migration_process_item.skip_manga
|
import kotlinx.android.synthetic.main.migration_process_item.skip_manga
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import reactivecircus.flowbinding.android.view.clicks
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
@ -47,6 +52,7 @@ class MigrationProcessHolder(
|
|||||||
private val sourceManager: SourceManager by injectLazy()
|
private val sourceManager: SourceManager by injectLazy()
|
||||||
private var item: MigrationProcessItem? = null
|
private var item: MigrationProcessItem? = null
|
||||||
private val gson: Gson by injectLazy()
|
private val gson: Gson by injectLazy()
|
||||||
|
private val scope = CoroutineScope(Job() + Dispatchers.Main)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// We need to post a Runnable to show the popup to make sure that the PopupMenu is
|
// We need to post a Runnable to show the popup to make sure that the PopupMenu is
|
||||||
@ -80,14 +86,15 @@ class MigrationProcessHolder(
|
|||||||
if (manga != null) {
|
if (manga != null) {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
migration_manga_card_from.attachManga(manga, source)
|
migration_manga_card_from.attachManga(manga, source)
|
||||||
migration_manga_card_from.setOnClickListener {
|
migration_manga_card_from.clicks()
|
||||||
|
.onEach {
|
||||||
adapter.controller.router.pushController(
|
adapter.controller.router.pushController(
|
||||||
MangaController(
|
MangaController(
|
||||||
manga,
|
manga,
|
||||||
true
|
true
|
||||||
).withFadeTransaction()
|
).withFadeTransaction()
|
||||||
)
|
)
|
||||||
}
|
}.launchIn(scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*launchUI {
|
/*launchUI {
|
||||||
@ -115,13 +122,14 @@ class MigrationProcessHolder(
|
|||||||
}
|
}
|
||||||
if (searchResult != null && resultSource != null) {
|
if (searchResult != null && resultSource != null) {
|
||||||
migration_manga_card_to.attachManga(searchResult, resultSource)
|
migration_manga_card_to.attachManga(searchResult, resultSource)
|
||||||
migration_manga_card_to.setOnClickListener {
|
migration_manga_card_to.clicks()
|
||||||
|
.onEach {
|
||||||
adapter.controller.router.pushController(
|
adapter.controller.router.pushController(
|
||||||
MangaController(
|
MangaController(
|
||||||
searchResult, true
|
searchResult, true
|
||||||
).withFadeTransaction()
|
).withFadeTransaction()
|
||||||
)
|
)
|
||||||
}
|
}.launchIn(scope)
|
||||||
} else {
|
} else {
|
||||||
migration_manga_card_to.loading_group.isVisible = false
|
migration_manga_card_to.loading_group.isVisible = false
|
||||||
migration_manga_card_to.title.text = view.context.applicationContext
|
migration_manga_card_to.title.text = view.context.applicationContext
|
||||||
@ -143,7 +151,7 @@ class MigrationProcessHolder(
|
|||||||
manga_chapters.text = ""
|
manga_chapters.text = ""
|
||||||
manga_chapters.isVisible = false
|
manga_chapters.isVisible = false
|
||||||
manga_last_chapter_label.text = ""
|
manga_last_chapter_label.text = ""
|
||||||
migration_manga_card_to.setOnClickListener(null)
|
migration_manga_card_to.clicks()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun View.attachManga(manga: Manga, source: Source) {
|
private fun View.attachManga(manga: Manga, source: Source) {
|
||||||
|
@ -32,6 +32,7 @@ import kotlinx.coroutines.flow.filter
|
|||||||
import kotlinx.coroutines.flow.filterIsInstance
|
import kotlinx.coroutines.flow.filterIsInstance
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
import reactivecircus.flowbinding.android.view.clicks
|
||||||
import reactivecircus.flowbinding.appcompat.QueryTextEvent
|
import reactivecircus.flowbinding.appcompat.QueryTextEvent
|
||||||
import reactivecircus.flowbinding.appcompat.queryTextEvents
|
import reactivecircus.flowbinding.appcompat.queryTextEvents
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
@ -245,7 +246,9 @@ open class IndexController :
|
|||||||
filterSheet?.setOnShowListener { actionFab?.isVisible = false }
|
filterSheet?.setOnShowListener { actionFab?.isVisible = false }
|
||||||
filterSheet?.setOnDismissListener { actionFab?.isVisible = true }
|
filterSheet?.setOnDismissListener { actionFab?.isVisible = true }
|
||||||
|
|
||||||
actionFab?.setOnClickListener { filterSheet?.show() }
|
actionFab?.clicks()
|
||||||
|
?.onEach { filterSheet?.show() }
|
||||||
|
?.launchIn(scope)
|
||||||
|
|
||||||
actionFab?.isVisible = true
|
actionFab?.isVisible = true
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,9 @@ import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_genres_tags
|
|||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_cover
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_cover
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_tags
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_tags
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.title
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.title
|
||||||
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
import reactivecircus.flowbinding.android.view.clicks
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
@ -131,16 +134,19 @@ class EditMangaDialog : DialogController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
view.manga_genres_tags.clearFocus()
|
view.manga_genres_tags.clearFocus()
|
||||||
view.cover_layout.setOnClickListener {
|
view.cover_layout.clicks()
|
||||||
infoController.changeCover()
|
.onEach { infoController.changeCover() }
|
||||||
}
|
.launchIn(infoController.scope)
|
||||||
view.reset_tags.setOnClickListener { resetTags() }
|
view.reset_tags.clicks()
|
||||||
|
.onEach { resetTags() }
|
||||||
|
.launchIn(infoController.scope)
|
||||||
view.reset_cover.isVisible = !isLocal
|
view.reset_cover.isVisible = !isLocal
|
||||||
view.reset_cover.setOnClickListener {
|
view.reset_cover.clicks()
|
||||||
|
.onEach {
|
||||||
view.context.toast(R.string.cover_reset_toast)
|
view.context.toast(R.string.cover_reset_toast)
|
||||||
customCoverUri = null
|
customCoverUri = null
|
||||||
willResetCover = true
|
willResetCover = true
|
||||||
}
|
}.launchIn(infoController.scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resetTags() {
|
private fun resetTags() {
|
||||||
@ -198,7 +204,7 @@ class EditMangaDialog : DialogController {
|
|||||||
chipIcon?.setTint(context.getResourceColor(R.attr.colorAccent))
|
chipIcon?.setTint(context.getResourceColor(R.attr.colorAccent))
|
||||||
textStartPadding = 0F
|
textStartPadding = 0F
|
||||||
|
|
||||||
setOnClickListener {
|
clicks().onEach {
|
||||||
MaterialDialog(context)
|
MaterialDialog(context)
|
||||||
.title(R.string.add_tag)
|
.title(R.string.add_tag)
|
||||||
.input(inputType = InputType.TYPE_CLASS_TEXT)
|
.input(inputType = InputType.TYPE_CLASS_TEXT)
|
||||||
@ -210,7 +216,7 @@ class EditMangaDialog : DialogController {
|
|||||||
}
|
}
|
||||||
.negativeButton(android.R.string.cancel)
|
.negativeButton(android.R.string.cancel)
|
||||||
.show()
|
.show()
|
||||||
}
|
}.launchIn(infoController.scope)
|
||||||
}
|
}
|
||||||
addView(addTagChip)
|
addView(addTagChip)
|
||||||
}
|
}
|
||||||
|
@ -20,17 +20,4 @@
|
|||||||
|
|
||||||
</androidx.recyclerview.widget.RecyclerView>
|
</androidx.recyclerview.widget.RecyclerView>
|
||||||
|
|
||||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
|
||||||
android:id="@+id/fab"
|
|
||||||
style="@style/Theme.Widget.FAB"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:src="@drawable/ic_arrow_forward_24dp"
|
|
||||||
android:text="@string/action_migrate"
|
|
||||||
app:icon="@drawable/ic_arrow_forward_24dp"
|
|
||||||
app:layout_anchor="@id/recycler"
|
|
||||||
app:layout_anchorGravity="bottom|right|end"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
x
Reference in New Issue
Block a user