77package com.michaelfotiads.xkcdreader.ui
88
99import android.graphics.PorterDuff
10- import android.graphics.drawable.Drawable
1110import android.os.Bundle
1211import android.text.InputType
12+ import android.view.Gravity
1313import android.view.Menu
1414import android.view.MenuItem
1515import androidx.appcompat.app.AppCompatActivity
@@ -24,6 +24,7 @@ import com.michaelfotiads.xkcdreader.ui.model.UiComicStrip
2424import com.michaelfotiads.xkcdreader.ui.viewmodel.MainViewModel
2525import com.michaelfotiads.xkcdreader.ui.viewmodel.MainViewModelFactory
2626import com.stfalcon.frescoimageviewer.ImageViewer
27+ import com.yarolegovich.lovelydialog.LovelyInfoDialog
2728import com.yarolegovich.lovelydialog.LovelyTextInputDialog
2829import com.yuyakaido.android.cardstackview.CardStackView
2930import com.yuyakaido.android.cardstackview.SwipeDirection
@@ -33,6 +34,7 @@ import dagger.android.DispatchingAndroidInjector
3334import dagger.android.support.HasSupportFragmentInjector
3435import es.dmoral.toasty.Toasty
3536import kotlinx.android.synthetic.main.activity_main.card_stack_view
37+ import kotlinx.android.synthetic.main.activity_main.view_flipper
3638import timber.log.Timber
3739import java.util.UUID
3840import javax.inject.Inject
@@ -49,6 +51,11 @@ class MainActivity : AppCompatActivity(), HasSupportFragmentInjector {
4951 private lateinit var viewModel: MainViewModel
5052 private lateinit var adapter: StripAdapter
5153
54+ companion object {
55+ private const val INDEX_PROGRESS = 0
56+ private const val INDEX_CONTENT = 1
57+ }
58+
5259 override fun onCreate (savedInstanceState : Bundle ? ) {
5360 AndroidInjection .inject(this )
5461 super .onCreate(savedInstanceState)
@@ -94,37 +101,51 @@ class MainActivity : AppCompatActivity(), HasSupportFragmentInjector {
94101 viewModel.showSearch()
95102 true
96103 }
104+ R .id.menu_item_about -> {
105+ showAboutDialog()
106+ true
107+ }
97108 else -> super .onOptionsItemSelected(item)
98109 }
99110 }
100111
101- private fun showSearch (maxStripIndex : Int ) {
102- val icon: Drawable = ContextCompat .getDrawable(this , R .drawable.ic_search_black_24dp)!!
103- icon.mutate()
104- icon.setColorFilter(ContextCompat .getColor(this @MainActivity, R .color.white),
105- PorterDuff .Mode .SRC_ATOP )
112+ private fun showAboutDialog () {
113+ LovelyInfoDialog (this )
114+ .setTopColorRes(R .color.primary_dark)
115+ .setIcon(R .drawable.ic_info_outline_black_24dp)
116+ .setIconTintColor(ContextCompat .getColor(this , R .color.white))
117+ .setMessageGravity(Gravity .CENTER_HORIZONTAL )
118+ .setTitle(R .string.info_title)
119+ .setMessage(R .string.info_message)
120+ .show()
121+ }
106122
123+ private fun showSearch (maxStripIndex : Int ) {
107124 LovelyTextInputDialog (this )
108125 .setTopColorRes(R .color.primary_dark)
109- .setIcon(icon)
126+ .setIcon(R .drawable.ic_search_black_24dp)
127+ .setIconTintColor(ContextCompat .getColor(this , R .color.white))
110128 .setMessage(getString(R .string.dialog_search_title))
111129 .setHint(getString(R .string.dialog_search_hint, maxStripIndex.toString()))
112130 .setInputType(InputType .TYPE_CLASS_NUMBER or InputType .TYPE_NUMBER_FLAG_SIGNED )
113- .setConfirmButton(android.R .string.ok) {
114- it.isNotBlank().run {
115- val stripNumber = it.toInt()
116- if (stripNumber in 1 .. maxStripIndex) {
117- viewModel.setSearchParameter(stripNumber)
118- } else {
119- Toasty .error(
120- this @MainActivity,
121- getString(R .string.message_page_not_found)).show()
122- }
123- }
124- }
131+ .setConfirmButtonColor(ContextCompat .getColor(this , R .color.secondary_text))
132+ .setConfirmButton(android.R .string.ok) { processSearchQuery(it, maxStripIndex) }
125133 .show()
126134 }
127135
136+ private fun processSearchQuery (it : String? , maxStripIndex : Int ) {
137+ if (! it.isNullOrBlank()) {
138+ val stripNumber = it!! .toInt()
139+ if (stripNumber in 1 .. maxStripIndex) {
140+ viewModel.setSearchParameter(stripNumber)
141+ } else {
142+ Toasty .error(
143+ this @MainActivity,
144+ getString(R .string.message_page_not_found)).show()
145+ }
146+ }
147+ }
148+
128149 private fun resetAndLoadData () {
129150 Toasty .info(this , getString(R .string.message_reset_data)).show()
130151 viewModel.resetData()
@@ -183,18 +204,21 @@ class MainActivity : AppCompatActivity(), HasSupportFragmentInjector {
183204 Timber .d(" Resetting adapter data" )
184205 adapter.clear()
185206 adapter.notifyDataSetChanged()
207+ view_flipper.displayedChild = INDEX_PROGRESS
186208 }
187209 }
188210
189211 private fun onResult (comicStrip : UiComicStrip ) {
190212 Timber .d(" Loaded item with ID ${comicStrip.number} " )
213+ view_flipper.displayedChild = INDEX_CONTENT
191214 adapter.add(comicStrip)
192215 Timber .d(" Adapter has ${adapter.count} items" )
193216 viewModel.loadAdditionalData(adapter.count)
194217 }
195218
196219 private fun onError (uiError : UiError ? ) {
197220 uiError?.let {
221+ view_flipper.displayedChild = INDEX_CONTENT
198222 Toasty .error(this , getString(uiError.messageResId)).show()
199223 viewModel.clearError()
200224 }
0 commit comments