Skip to content

Commit 889b686

Browse files
author
Patrick Jackson
committed
search and details working
1 parent 53f4966 commit 889b686

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+893
-367
lines changed

android/src/main/AndroidManifest.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,19 @@
1111
android:label="@string/app_name"
1212
android:roundIcon="@mipmap/ic_launcher_round"
1313
android:supportsRtl="true"
14-
android:theme="@style/NameGameAppTheme">
14+
android:theme="@style/LibraryAppTheme">
1515
<activity
1616
android:name=".MainActivity"
1717
android:label="@string/app_name"
1818
android:screenOrientation="portrait"
19-
android:theme="@style/NameGameAppTheme">
19+
android:theme="@style/LibraryAppTheme">
2020
<intent-filter>
2121
<action android:name="android.intent.action.MAIN" />
2222

2323
<category android:name="android.intent.category.LAUNCHER" />
2424
</intent-filter>
2525
</activity>
26+
<activity android:name=".DetailsActivity"/>
2627
</application>
2728

2829
</manifest>

android/src/main/java/com/jackson/openlibrary/AndroidNavigator.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.jackson.openlibrary
22

33
import android.app.Activity
44
import android.app.Application
5+
import android.content.Intent
56
import android.os.Bundle
67
import androidx.appcompat.app.AppCompatActivity
78
import androidx.navigation.findNavController
@@ -26,11 +27,11 @@ class AndroidNavigator : Navigator, Application.ActivityLifecycleCallbacks {
2627
if (currentActivity == null) {
2728
cachedNavigationScreen = screen
2829
} else {
29-
val navController = currentActivity!!.findNavController(R.id.nav_host_fragment)
30+
// val navController = currentActivity!!.findNavController(R.id.nav_host_fragment)
3031
when (screen) {
31-
Screen.QUESTION -> navController.navigate(R.id.action_startScreen_to_questionScreen)
32-
Screen.GAME_COMPLETE -> navController.navigate(R.id.action_questionScreen_to_resultsFragment)
33-
Screen.START -> navController.navigate(R.id.startScreen)
32+
// Screen.QUESTION -> navController.navigate(R.id.action_startScreen_to_questionScreen)
33+
// Screen.GAME_COMPLETE -> navController.navigate(R.id.action_questionScreen_to_resultsFragment)
34+
Screen.BOOK_DETAILS -> currentActivity?.startActivity(Intent(currentActivity, DetailsActivity::class.java))
3435
// Screen.START -> navController.navigate(R.id.action_resultsFragment_to_startScreen)
3536
else -> throw IllegalArgumentException("Screen $screen is not handled in AndroidNavigator")
3637
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.jackson.openlibrary
2+
3+
import android.os.Bundle
4+
import android.os.Handler
5+
import android.view.MenuItem
6+
import android.view.MotionEvent
7+
import android.view.View
8+
import android.view.ViewConfiguration
9+
import androidx.appcompat.app.AppCompatActivity
10+
import androidx.fragment.app.Fragment
11+
import com.bumptech.glide.annotation.GlideModule
12+
import com.bumptech.glide.module.AppGlideModule
13+
import com.jackson.openlibrary.store.CompletedFragment
14+
import com.jackson.openlibrary.store.SearchFragment
15+
import com.jackson.openlibrary.store.ToReadFragment
16+
import com.willowtreeapps.hyperion.core.Hyperion
17+
import kotlinx.android.synthetic.main.activity_details.*
18+
import kotlinx.android.synthetic.main.app_bar_main.*
19+
import kotlinx.android.synthetic.main.activity_main.*
20+
import java.lang.IllegalArgumentException
21+
22+
class DetailsActivity : AppCompatActivity() {
23+
24+
interface IOnBackPressed {
25+
fun onBackPressed(): Boolean
26+
}
27+
28+
override fun onCreate(savedInstanceState: Bundle?) {
29+
super.onCreate(savedInstanceState)
30+
setContentView(R.layout.activity_details)
31+
setSupportActionBar(toolbar)
32+
}
33+
34+
override fun onBackPressed() {
35+
val navHostFragment =
36+
this.supportFragmentManager.findFragmentById(R.id.nav_host_fragment)
37+
val currentFragment = navHostFragment?.childFragmentManager?.fragments?.get(0)
38+
if (currentFragment is IOnBackPressed)
39+
(currentFragment as IOnBackPressed).onBackPressed()
40+
super.onBackPressed()
41+
}
42+
}

android/src/main/java/com/jackson/openlibrary/MainActivity.kt

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,28 @@ package com.jackson.openlibrary
22

33
import android.os.Bundle
44
import android.os.Handler
5+
import android.view.MenuItem
56
import android.view.MotionEvent
67
import android.view.View
78
import android.view.ViewConfiguration
89
import androidx.appcompat.app.AppCompatActivity
10+
import androidx.fragment.app.Fragment
911
import com.bumptech.glide.annotation.GlideModule
1012
import com.bumptech.glide.module.AppGlideModule
13+
import com.jackson.openlibrary.store.CompletedFragment
14+
import com.jackson.openlibrary.store.SearchFragment
15+
import com.jackson.openlibrary.store.ToReadFragment
1116
import com.willowtreeapps.hyperion.core.Hyperion
1217
import kotlinx.android.synthetic.main.app_bar_main.*
1318
import kotlinx.android.synthetic.main.activity_main.*
19+
import java.lang.IllegalArgumentException
1420

1521

1622
@GlideModule
1723
class MyAppGlideModule : AppGlideModule()
1824

1925
class MainActivity : AppCompatActivity() {
2026

21-
companion object {
22-
const val RECORD_REQUEST_CODE = 52
23-
}
24-
2527
interface IOnBackPressed {
2628
fun onBackPressed(): Boolean
2729
}
@@ -30,14 +32,31 @@ class MainActivity : AppCompatActivity() {
3032
super.onCreate(savedInstanceState)
3133
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.or(View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
3234
setContentView(R.layout.activity_main)
33-
scrimLayout.setOnInsetsCallback {
34-
rootContent.setPadding(0, -it.top, 0, 0)
35+
btmNavigation.setOnNavigationItemSelectedListener(::handleBtmNavTap)
36+
btmNavigation.selectedItemId = R.id.toRead
37+
}
38+
39+
private fun handleBtmNavTap(it: MenuItem): Boolean {
40+
val fragment: Fragment = when (it.itemId) {
41+
R.id.toRead -> {
42+
ToReadFragment()
43+
}
44+
R.id.completed -> {
45+
CompletedFragment()
46+
}
47+
R.id.search -> {
48+
SearchFragment()
49+
}
50+
else -> throw IllegalArgumentException("Unhandled itemId in BottomNav $it")
3551
}
36-
drawer_layout.setOnTouchListener(tripleTapDetector)
3752

53+
val fragTransaction = supportFragmentManager.beginTransaction()
54+
fragTransaction.replace(R.id.nav_host_fragment, fragment)
55+
fragTransaction.commit()
56+
57+
return true
3858
}
3959

40-
// override fun onSupportNavigateUp(): Boolean = Navigation.findNavController(this, R.id.nav_host_fragment).navigateUp()
4160

4261
override fun onBackPressed() {
4362
val navHostFragment =

android/src/main/java/com/jackson/openlibrary/store/BookAdapter.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.jackson.openlibrary.store
2+
3+
import android.view.LayoutInflater
4+
import android.view.View
5+
import android.view.ViewGroup
6+
import androidx.recyclerview.widget.RecyclerView
7+
import com.jackson.openlibrary.GlideApp
8+
import com.jackson.openlibrary.OpenLibraryApp
9+
import com.jackson.openlibrary.R
10+
import com.willowtreeapps.common.Actions
11+
import com.willowtreeapps.common.BookListItemViewState
12+
import kotlinx.android.synthetic.main.item_book.view.*
13+
14+
class BooksAdapter: RecyclerView.Adapter<BookViewHolder>() {
15+
private var data = listOf<BookListItemViewState>()
16+
17+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookViewHolder {
18+
return BookViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_book, parent, false))
19+
}
20+
21+
override fun getItemCount() = data.size
22+
23+
override fun onBindViewHolder(holder: BookViewHolder, position: Int) {
24+
holder.bind(data[position])
25+
}
26+
27+
fun setBooks(books: List<BookListItemViewState>) {
28+
data = books
29+
notifyDataSetChanged()
30+
}
31+
32+
}
33+
34+
class BookViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
35+
36+
fun bind(book: BookListItemViewState) {
37+
itemView.tvAuthor.text = book.author
38+
itemView.tvTitle.text = book.title
39+
GlideApp.with(itemView)
40+
.load(book.coverImageUrl)
41+
.into(itemView.ivBookCover)
42+
itemView.setOnClickListener { OpenLibraryApp.gameEngine().dispatch(Actions.BookSelected(book.id)) }
43+
}
44+
45+
}

android/src/main/java/com/jackson/openlibrary/store/StartFragment.kt renamed to android/src/main/java/com/jackson/openlibrary/store/CompletedFragment.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@ import android.view.View
66
import android.view.ViewGroup
77
import com.jackson.openlibrary.OpenLibraryApp
88
import com.jackson.openlibrary.R
9-
import com.willowtreeapps.common.ui.StartPresenter
10-
import com.willowtreeapps.common.ui.StartView
11-
import kotlinx.android.synthetic.main.fragment_start.*
9+
import com.willowtreeapps.common.ui.CompletedPresenter
10+
import com.willowtreeapps.common.ui.CompletedView
11+
import kotlinx.android.synthetic.main.fragment_to_read.*
1212
import kotlinx.coroutines.CoroutineScope
1313
import kotlinx.coroutines.Dispatchers
1414
import kotlin.coroutines.CoroutineContext
1515

16-
class StartFragment : BaseLibraryViewFragment<StartPresenter>(), CoroutineScope, StartView {
16+
class CompletedFragment : BaseLibraryViewFragment<CompletedPresenter>(), CoroutineScope, CompletedView {
1717

1818
override val coroutineContext: CoroutineContext
1919
get() = Dispatchers.Main
2020

21-
override lateinit var presenter: StartPresenter
21+
override lateinit var presenter: CompletedPresenter
2222

2323
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
24-
return inflater.inflate(R.layout.fragment_start, container, false)
24+
return inflater.inflate(R.layout.fragment_to_read, container, false)
2525
}
2626

2727
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.jackson.openlibrary.store
2+
3+
import android.os.Bundle
4+
import android.text.Editable
5+
import android.text.TextWatcher
6+
import android.view.LayoutInflater
7+
import android.view.View
8+
import android.view.ViewGroup
9+
import androidx.recyclerview.widget.LinearLayoutManager
10+
import com.jackson.openlibrary.GlideApp
11+
import com.jackson.openlibrary.OpenLibraryApp
12+
import com.jackson.openlibrary.R
13+
import com.willowtreeapps.common.BookListItemViewState
14+
import com.willowtreeapps.common.ui.*
15+
import kotlinx.android.synthetic.main.fragment_book_detail.*
16+
import kotlinx.android.synthetic.main.fragment_book_detail.view.*
17+
import kotlinx.android.synthetic.main.fragment_search.*
18+
import kotlinx.android.synthetic.main.fragment_to_read.loading_spinner
19+
import kotlinx.android.synthetic.main.fragment_to_read.txt_error
20+
import kotlinx.coroutines.CoroutineScope
21+
import kotlinx.coroutines.Dispatchers
22+
import kotlin.coroutines.CoroutineContext
23+
24+
class DetailsFragment : BaseLibraryViewFragment<DetailsPresenter>(), CoroutineScope, DetailsView {
25+
26+
override val coroutineContext: CoroutineContext
27+
get() = Dispatchers.Main
28+
29+
override lateinit var presenter: DetailsPresenter
30+
31+
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
32+
return inflater.inflate(R.layout.fragment_book_detail, container, false)
33+
}
34+
35+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
36+
btnToRead.setOnClickListener {
37+
presenter.toReadTapped()
38+
}
39+
btnCompleted.setOnClickListener {
40+
presenter.completedTapped()
41+
}
42+
}
43+
44+
override fun onResume() {
45+
super.onResume()
46+
OpenLibraryApp.gameEngine().attachView(this)
47+
}
48+
49+
override fun onPause() {
50+
super.onPause()
51+
OpenLibraryApp.gameEngine().detachView(this)
52+
}
53+
override fun render(book: BookListItemViewState) {
54+
txtTitle.text = book.title
55+
txtAuthorName.text = book.author
56+
GlideApp.with(this)
57+
.load(book.coverImageUrl)
58+
.into(imgBook)
59+
}
60+
}

0 commit comments

Comments
 (0)