Skip to content

Commit 8de095f

Browse files
committed
Type: feat
Add a ViewModel Moving the Details to the ViewModel
1 parent 34f9e87 commit 8de095f

File tree

6 files changed

+60
-17
lines changed

6 files changed

+60
-17
lines changed

app/src/androidTest/java/com/appleobject/notekeeper/NavigationTest.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,16 @@ import androidx.test.espresso.matcher.ViewMatchers.*
1010
import androidx.test.ext.junit.runners.AndroidJUnit4
1111
import androidx.test.rule.ActivityTestRule
1212
import com.appleobject.notekeeper.model.DataManager
13-
import com.appleobject.notekeeper.model.NoteInfo
1413
import org.hamcrest.Matchers.containsString
15-
import org.junit.Assert.*
1614
import org.junit.Rule
1715
import org.junit.Test
1816
import org.junit.runner.RunWith
19-
import org.junit.runners.JUnit4
2017

2118
@RunWith(AndroidJUnit4::class)
2219
class NavigationTest{
2320

2421
@Rule @JvmField
25-
val itemActivity = ActivityTestRule(ItemActivity::class.java)
22+
val itemActivity = ActivityTestRule(ItemsActivity::class.java)
2623

2724
@Test
2825
fun selectNoteAfterNavigationDrawerChange(){
@@ -39,7 +36,7 @@ class NavigationTest{
3936

4037
val notePosition = 0
4138
onView(withId(R.id.listItems)).perform(
42-
RecyclerViewActions.actionOnItemAtPosition<NoteRecyclerAdapter.ViewHolder>(notePosition, click()))
39+
RecyclerViewActions.actionOnItemAtPosition<NoteRecyclerAdapter.NoteViewHolder>(notePosition, click()))
4340

4441
val notes = DataManager.notes[notePosition]
4542
onView(withId(R.id.spinnerCourses)).check(matches(withSpinnerText(containsString(notes.course?.title))))

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
android:supportsRtl="true"
1212
android:theme="@style/AppTheme">
1313
<activity
14-
android:name=".ItemActivity"
14+
android:name=".ItemsActivity"
1515
android:label="@string/title_activity_item"
1616
android:theme="@style/AppTheme.NoActionBar">
1717
<intent-filter>

app/src/main/java/com/appleobject/notekeeper/ItemActivity.kt renamed to app/src/main/java/com/appleobject/notekeeper/ItemsActivity.kt

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,18 @@ import androidx.appcompat.app.ActionBarDrawerToggle
88
import com.google.android.material.floatingactionbutton.FloatingActionButton
99
import com.google.android.material.snackbar.Snackbar
1010
import com.google.android.material.navigation.NavigationView
11-
import androidx.drawerlayout.widget.DrawerLayout
1211
import androidx.appcompat.app.AppCompatActivity
1312
import androidx.appcompat.widget.Toolbar
1413
import androidx.core.view.GravityCompat
14+
import androidx.lifecycle.ViewModelProvider
15+
import androidx.lifecycle.ViewModelProviders
1516
import androidx.recyclerview.widget.GridLayoutManager
1617
import androidx.recyclerview.widget.LinearLayoutManager
1718
import com.appleobject.notekeeper.model.DataManager
18-
import kotlinx.android.synthetic.main.activity_item.*
19+
import kotlinx.android.synthetic.main.activity_items.*
1920
import kotlinx.android.synthetic.main.content_note_list.*
2021

21-
class ItemActivity : AppCompatActivity() , NavigationView.OnNavigationItemSelectedListener{
22+
class ItemsActivity : AppCompatActivity() , NavigationView.OnNavigationItemSelectedListener{
2223

2324
private val linearLayoutManager by lazy {
2425
LinearLayoutManager(this)
@@ -36,18 +37,26 @@ class ItemActivity : AppCompatActivity() , NavigationView.OnNavigationItemSelect
3637
CourseRecyclerAdapter(this, DataManager.courses.values.toList())
3738
}
3839

40+
private val viewModel by lazy {
41+
ViewModelProviders.of(this)[ItemsActivityViewModel::class.java]
42+
}
43+
3944
override fun onCreate(savedInstanceState: Bundle?) {
4045
super.onCreate(savedInstanceState)
41-
setContentView(R.layout.activity_item)
46+
setContentView(R.layout.activity_items)
4247
val toolbar: Toolbar = findViewById(R.id.toolbar)
4348
setSupportActionBar(toolbar)
4449

4550
val fab: FloatingActionButton = findViewById(R.id.fab)
46-
fab.setOnClickListener { view ->
51+
fab.setOnClickListener {
4752
startActivity(Intent(this, NoteActivity::class.java))
4853
}
4954

50-
displayNote()
55+
if (savedInstanceState != null)
56+
viewModel.restoreState(savedInstanceState)
57+
58+
59+
handleDisplaySelection(viewModel.navDrawerDisplaySelection)
5160

5261

5362
nav_view.setNavigationItemSelectedListener(this)
@@ -62,6 +71,11 @@ class ItemActivity : AppCompatActivity() , NavigationView.OnNavigationItemSelect
6271

6372
}
6473

74+
override fun onSaveInstanceState(outState: Bundle) {
75+
super.onSaveInstanceState(outState)
76+
viewModel.saveState(outState)
77+
}
78+
6579
private fun displayCourses() {
6680
listItems.layoutManager = coursesLayoutManager
6781
listItems.adapter = coursesRecyclerAdapter
@@ -98,11 +112,10 @@ class ItemActivity : AppCompatActivity() , NavigationView.OnNavigationItemSelect
98112

99113
override fun onNavigationItemSelected(item: MenuItem): Boolean {
100114
when(item.itemId){
101-
R.id.nav_notes ->{
102-
displayNote()
103-
}
115+
R.id.nav_notes,
104116
R.id.nav_courses -> {
105-
displayCourses()
117+
handleDisplaySelection(item.itemId)
118+
viewModel.navDrawerDisplaySelection = item.itemId
106119
}
107120
R.id.nav_share -> {
108121
handleSelection("Don't you think you've shared enough..")
@@ -124,4 +137,15 @@ class ItemActivity : AppCompatActivity() , NavigationView.OnNavigationItemSelect
124137
return true
125138
}
126139

140+
fun handleDisplaySelection(itemId: Int){
141+
when(itemId){
142+
R.id.nav_notes ->{
143+
displayNote()
144+
}
145+
R.id.nav_courses -> {
146+
displayCourses()
147+
}
148+
}
149+
}
150+
127151
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.appleobject.notekeeper
2+
3+
import android.os.Bundle
4+
import androidx.lifecycle.ViewModel
5+
6+
class ItemsActivityViewModel: ViewModel() {
7+
8+
var navDrawerDisplaySelectionName =
9+
"com.appleobject.notekeeper.ItemsActivityViewModel.navDrawerDisplaySelectionName"
10+
11+
var navDrawerDisplaySelection = R.id.nav_notes
12+
13+
fun saveState(outState: Bundle){
14+
outState.putInt(navDrawerDisplaySelectionName, navDrawerDisplaySelection)
15+
}
16+
17+
fun restoreState(savedInstanceState: Bundle) {
18+
navDrawerDisplaySelection = savedInstanceState.getInt(navDrawerDisplaySelectionName)
19+
}
20+
21+
22+
}
File renamed without changes.

app/src/main/res/layout/app_bar_main.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
xmlns:tools="http://schemas.android.com/tools"
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
7-
tools:context=".ItemActivity">
7+
tools:context=".ItemsActivity">
88

99
<com.google.android.material.appbar.AppBarLayout
1010
android:layout_width="match_parent"

0 commit comments

Comments
 (0)