Skip to content

Commit 37adaf9

Browse files
authored
Merge pull request #1 from daniel-stoneuk/add-arch-components
Use Android Architecture Components
2 parents 128d052 + 2094ef9 commit 37adaf9

19 files changed

+393
-236
lines changed

app/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,14 @@ dependencies {
4040
implementation("androidx.constraintlayout:constraintlayout:1.1.3")
4141
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.2.0")
4242
implementation("androidx.recyclerview:recyclerview:1.1.0")
43+
implementation("androidx.navigation:navigation-runtime-ktx:2.3.0")
4344
implementation("androidx.navigation:navigation-fragment-ktx:2.3.0")
4445
implementation("androidx.navigation:navigation-ui-ktx:2.3.0")
4546
implementation("com.google.android.material:material:1.3.0-alpha01")
4647
implementation("com.apollographql.apollo:apollo-runtime:2.2.2")
4748
implementation("com.apollographql.apollo:apollo-coroutines-support:2.2.2")
49+
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.2.0")
50+
4851
}
4952

5053
apollo {

app/src/main/java/guide/graphql/toc/ChaptersFragment.kt

Lines changed: 0 additions & 80 deletions
This file was deleted.

app/src/main/java/guide/graphql/toc/MainActivity.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,29 @@ package guide.graphql.toc
22

33
import android.os.Bundle
44
import androidx.appcompat.app.AppCompatActivity
5+
import androidx.navigation.NavController
6+
import androidx.navigation.findNavController
7+
import androidx.navigation.ui.AppBarConfiguration
8+
import androidx.navigation.ui.NavigationUI
9+
import guide.graphql.toc.databinding.ActivityMainBinding
510

611
class MainActivity : AppCompatActivity() {
712

13+
private lateinit var binding: ActivityMainBinding
14+
15+
816
override fun onCreate(savedInstanceState: Bundle?) {
917
super.onCreate(savedInstanceState)
18+
binding = ActivityMainBinding.inflate(layoutInflater)
19+
val view = binding.root
20+
setContentView(view)
21+
22+
setSupportActionBar(binding.toolbar)
23+
NavigationUI.setupActionBarWithNavController(this, findNavController(R.id.nav_host_fragment))
24+
25+
}
1026

11-
setContentView(R.layout.activity_main)
27+
override fun onSupportNavigateUp(): Boolean {
28+
return findNavController(R.id.nav_host_fragment).navigateUp() || super.onSupportNavigateUp()
1229
}
1330
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package guide.graphql.toc
2+
3+
//https://github.com/android/architecture-components-samples/blob/master/GithubBrowserSample/app/src/main/java/com/android/example/github/vo/Resource.kt
4+
data class Resource<out T>(val status: Status, val data: T?, val message: String?) {
5+
companion object {
6+
fun <T> success(data: T?): Resource<T> {
7+
return Resource(Status.SUCCESS, data, null)
8+
}
9+
10+
fun <T> error(msg: String, data: T?): Resource<T> {
11+
return Resource(Status.ERROR, data, msg)
12+
}
13+
14+
fun <T> loading(data: T?): Resource<T> {
15+
return Resource(Status.LOADING, data, null)
16+
}
17+
}
18+
}
19+
enum class Status {
20+
SUCCESS,
21+
ERROR,
22+
LOADING
23+
}

app/src/main/java/guide/graphql/toc/SectionsFragment.kt

Lines changed: 0 additions & 103 deletions
This file was deleted.

app/src/main/java/guide/graphql/toc/ChaptersAdapter.kt renamed to app/src/main/java/guide/graphql/toc/ui/chapters/ChaptersAdapter.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
1-
package guide.graphql.toc
1+
package guide.graphql.toc.ui.chapters
22

33
import android.content.Context
44
import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
77
import androidx.recyclerview.widget.RecyclerView
8+
import guide.graphql.toc.ChaptersQuery
9+
import guide.graphql.toc.R
810
import guide.graphql.toc.databinding.ChapterBinding
911

1012
class ChaptersAdapter(
11-
private val chapters: List<ChaptersQuery.Chapter>,
1213
private val context: Context,
14+
private var chapters: List<ChaptersQuery.Chapter> = listOf(),
1315
private val onItemClicked: ((ChaptersQuery.Chapter) -> Unit)
1416
) :
1517
RecyclerView.Adapter<ChaptersAdapter.ViewHolder>() {
1618

1719
class ViewHolder(val binding: ChapterBinding) : RecyclerView.ViewHolder(binding.root)
1820

21+
fun updateChapters(chapters: List<ChaptersQuery.Chapter>) {
22+
this.chapters = chapters
23+
notifyDataSetChanged()
24+
}
25+
1926
override fun getItemCount(): Int {
2027
return chapters.size
2128
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package guide.graphql.toc.ui.chapters
2+
3+
import android.os.Bundle
4+
import android.view.LayoutInflater
5+
import android.view.View
6+
import android.view.ViewGroup
7+
import android.widget.Toast
8+
import androidx.appcompat.app.AppCompatActivity
9+
import androidx.fragment.app.Fragment
10+
import androidx.fragment.app.viewModels
11+
import androidx.lifecycle.Observer
12+
import androidx.navigation.fragment.findNavController
13+
import androidx.recyclerview.widget.DividerItemDecoration
14+
import androidx.recyclerview.widget.LinearLayoutManager
15+
import com.google.android.material.transition.MaterialFade
16+
import com.google.android.material.transition.MaterialSharedAxis
17+
import guide.graphql.toc.R
18+
import guide.graphql.toc.Status
19+
import guide.graphql.toc.databinding.ChaptersFragmentBinding
20+
21+
class ChaptersFragment : Fragment() {
22+
23+
private val viewModel: ChaptersViewModel by viewModels()
24+
25+
private lateinit var binding: ChaptersFragmentBinding
26+
27+
override fun onCreateView(
28+
inflater: LayoutInflater,
29+
container: ViewGroup?,
30+
savedInstanceState: Bundle?
31+
): View? {
32+
binding = ChaptersFragmentBinding.inflate(inflater)
33+
return binding.root
34+
}
35+
36+
override fun onCreate(savedInstanceState: Bundle?) {
37+
super.onCreate(savedInstanceState)
38+
39+
val backward = MaterialSharedAxis(MaterialSharedAxis.X, false)
40+
reenterTransition = backward
41+
42+
val forward = MaterialSharedAxis(MaterialSharedAxis.X, true)
43+
exitTransition = forward
44+
}
45+
46+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
47+
super.onViewCreated(view, savedInstanceState)
48+
49+
requireActivity()
50+
val adapter =
51+
ChaptersAdapter(
52+
requireContext()
53+
) { chapter ->
54+
findNavController().navigate(
55+
ChaptersFragmentDirections.viewSections(
56+
chapterId = chapter.id,
57+
chapterNumber = chapter.number?.toInt() ?: -1,
58+
chapterTitle = if (chapter.number == null) chapter.title else getString(
59+
R.string.chapter_title,
60+
chapter.number.toInt().toString(),
61+
chapter.title
62+
)
63+
)
64+
)
65+
}
66+
val layoutManager = LinearLayoutManager(requireContext())
67+
binding.chapters.layoutManager = layoutManager
68+
val itemDivider = DividerItemDecoration(requireContext(), layoutManager.orientation)
69+
binding.chapters.addItemDecoration(itemDivider)
70+
binding.chapters.adapter = adapter
71+
72+
viewModel.chapterList.observe(viewLifecycleOwner, Observer { chapterListResponse ->
73+
when (chapterListResponse.status) {
74+
Status.SUCCESS -> {
75+
chapterListResponse.data?.let {
76+
adapter.updateChapters(it)
77+
}
78+
}
79+
Status.ERROR -> Toast.makeText(
80+
requireContext(),
81+
"Error: ${chapterListResponse.message}",
82+
Toast.LENGTH_SHORT
83+
).show()
84+
}
85+
})
86+
87+
}
88+
}

0 commit comments

Comments
 (0)