Skip to content

Commit c0257e7

Browse files
author
Simon Schubert
committed
Add persistent expand sections toggle
1 parent c15304e commit c0257e7

20 files changed

Lines changed: 470 additions & 288 deletions

File tree

android/src/androidTest/java/com/inspiredandroid/linuxcommandbibliotheca/ComposeScreenshots.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ import androidx.test.core.app.ActivityScenario
1313
import androidx.test.core.app.ApplicationProvider
1414
import androidx.test.ext.junit.runners.AndroidJUnit4
1515
import androidx.test.platform.app.InstrumentationRegistry
16+
import com.linuxcommandlibrary.shared.copyDatabase
1617
import com.linuxcommandlibrary.shared.initDatabase
1718
import kotlinx.coroutines.delay
1819
import kotlinx.coroutines.runBlocking
1920
import org.junit.Before
2021
import org.junit.Rule
2122
import org.junit.Test
2223
import org.junit.runner.RunWith
24+
import org.koin.java.KoinJavaComponent.inject
2325
import java.io.FileOutputStream
2426

2527
/**
@@ -41,8 +43,12 @@ class ComposeScreenshots {
4143
@Before
4244
fun setUp() {
4345
val context: Context = ApplicationProvider.getApplicationContext()
46+
copyDatabase(context)
4447
initDatabase(context)
4548

49+
val dataManager: com.inspiredandroid.linuxcommandbibliotheca.DataManager by inject(com.inspiredandroid.linuxcommandbibliotheca.DataManager::class.java)
50+
dataManager.updateDatabaseVersion()
51+
4652
// Clear bookmarks
4753
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
4854
prefs.edit().putString("KEY_BOOKMARKS", "").apply()
@@ -87,8 +93,11 @@ class ComposeScreenshots {
8793
private fun takePhoneScreenshots(prefix: String) {
8894
// Command list
8995
composeTestRule.onNodeWithText("Commands").performClick()
96+
97+
composeTestRule.onNodeWithContentDescription("Search").performClick()
9098
composeTestRule.onNodeWithContentDescription("SearchField")
9199
.performTextInput("mk")
100+
92101
composeTestRule.takeScreenshot("screen-4$prefix.png")
93102

94103
// Command detail

android/src/androidTest/java/com/inspiredandroid/linuxcommandbibliotheca/ComposeTests.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import androidx.compose.ui.test.junit4.createComposeRule
66
import androidx.preference.PreferenceManager
77
import androidx.test.core.app.ApplicationProvider
88
import androidx.test.ext.junit.runners.AndroidJUnit4
9+
import com.linuxcommandlibrary.shared.copyDatabase
910
import com.linuxcommandlibrary.shared.databaseHelper
1011
import com.linuxcommandlibrary.shared.initDatabase
1112
import org.junit.Before
1213
import org.junit.Rule
1314
import org.junit.Test
1415
import org.junit.runner.RunWith
16+
import org.koin.java.KoinJavaComponent.inject
1517

1618
/**
1719
* Test for navigation, search and booksmarks. More tests to come
@@ -25,8 +27,12 @@ class ComposeTests {
2527
@Before
2628
fun setUp() {
2729
val context: Context = ApplicationProvider.getApplicationContext()
30+
copyDatabase(context)
2831
initDatabase(context)
2932

33+
val dataManager: com.inspiredandroid.linuxcommandbibliotheca.DataManager by inject(com.inspiredandroid.linuxcommandbibliotheca.DataManager::class.java)
34+
dataManager.updateDatabaseVersion()
35+
3036
// Clear bookmarks
3137
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
3238
prefs.edit().putString("KEY_BOOKMARKS", "").apply()
@@ -56,14 +62,16 @@ class ComposeTests {
5662
fun testSearch() {
5763
composeTestRule.onNodeWithText("Commands").performClick()
5864

65+
composeTestRule.onNodeWithContentDescription("Search").performClick()
66+
5967
// Search for a command that doesn't exist
6068
composeTestRule.onNodeWithContentDescription("SearchField")
6169
.performTextInput("CommandThatDoesn'tExist")
6270
composeTestRule.onNodeWithText("404 command not found").assertIsDisplayed()
6371
composeTestRule.onNodeWithContentDescription("SearchField").performTextClearance()
6472

6573
// Search for an existing command
66-
val firstCommand = databaseHelper.getCommand("2048")!!
74+
val firstCommand = databaseHelper.getCommands().last()
6775
composeTestRule.onNodeWithContentDescription("SearchField")
6876
.performTextInput(firstCommand.name)
6977
composeTestRule.onNodeWithText(firstCommand.description).assertIsDisplayed()
@@ -78,16 +86,18 @@ class ComposeTests {
7886

7987
composeTestRule.onNodeWithText("Commands").performClick()
8088

89+
composeTestRule.onNodeWithContentDescription("Search").performClick()
90+
8191
// Search for first command and go to command detail screen
8292
composeTestRule.onNodeWithContentDescription("SearchField")
8393
.performTextInput(firstCommand.name)
8494
composeTestRule.onNodeWithText(firstCommand.description).performClick()
8595

8696
// Click bookmark icon and check if icon/contentDescription changed
87-
composeTestRule.onNodeWithContentDescription("Bookmark").performClick()
97+
composeTestRule.onNodeWithContentDescription("Add bookmark").performClick()
8898
composeTestRule.mainClock.advanceTimeBy(1000)
8999
composeTestRule.waitForIdle()
90-
composeTestRule.onNodeWithContentDescription("Bookmarked").assertIsDisplayed()
100+
composeTestRule.onNodeWithContentDescription("Remove bookmark").assertIsDisplayed()
91101

92102
// Go back to search/list and check if bookmark icon is visible
93103
composeTestRule.onNodeWithContentDescription("Back").performClick()

android/src/main/java/com/inspiredandroid/linuxcommandbibliotheca/PreferenceUtil.kt renamed to android/src/main/java/com/inspiredandroid/linuxcommandbibliotheca/DataManager.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import android.content.SharedPreferences
55
import androidx.core.content.edit
66
import androidx.preference.PreferenceManager
77

8-
class PreferenceUtil(context: Context) {
8+
class DataManager(context: Context) {
99

1010
val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
1111

@@ -42,9 +42,16 @@ class PreferenceUtil(context: Context) {
4242
prefs.edit { putInt(KEY_DATABASE_VERSION, CURRENT_DATABASE_VERSION) }
4343
}
4444

45+
fun setAutoExpandSections(autoExpand: Boolean) {
46+
prefs.edit { putBoolean(KEY_AUTO_EXPAND_SECTIONS, autoExpand) }
47+
}
48+
49+
fun isAutoExpandSections(): Boolean = prefs.getBoolean(KEY_AUTO_EXPAND_SECTIONS, false)
50+
4551
companion object {
4652
const val KEY_BOOKMARKS = "KEY_BOOKMARKS"
4753
const val KEY_DATABASE_VERSION = "DATABASE_VERSION"
48-
const val CURRENT_DATABASE_VERSION = 15
54+
const val KEY_AUTO_EXPAND_SECTIONS = "auto_expand_sections"
55+
const val CURRENT_DATABASE_VERSION = 16
4956
}
5057
}

android/src/main/java/com/inspiredandroid/linuxcommandbibliotheca/LinuxApplication.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ class LinuxApplication : Application() {
2626
}
2727

2828
private val appModule = module {
29+
single { DataManager(androidContext()) }
30+
2931
viewModel { BasicGroupsViewModel(get()) }
3032
viewModel { BasicCategoriesViewModel() }
31-
viewModel { CommandDetailViewModel(get()) }
33+
viewModel { (commandId: Long) -> CommandDetailViewModel(commandId, get()) }
3234
viewModel { TipsViewModel() }
3335
viewModel { CommandListViewModel(get()) }
3436
viewModel { SearchViewModel() }
35-
36-
single { PreferenceUtil(androidContext()) }
3737
}
3838
}

android/src/main/java/com/inspiredandroid/linuxcommandbibliotheca/MainActivity.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,15 @@ import org.koin.android.ext.android.inject
6262

6363
class MainActivity : AppCompatActivity() {
6464

65-
private val preferenceManager by inject<PreferenceUtil>()
65+
private val dataManager by inject<DataManager>()
6666

6767
override fun onCreate(savedInstanceState: Bundle?) {
6868
enableEdgeToEdge(statusBarStyle = SystemBarStyle.dark(android.graphics.Color.TRANSPARENT))
6969
super.onCreate(savedInstanceState)
7070

71-
if (!hasDatabase(this) || !preferenceManager.isDatabaseUpToDate()) {
71+
if (!hasDatabase(this) || !dataManager.isDatabaseUpToDate()) {
7272
startActivity(Intent(this, InitializeDatabaseActivity::class.java))
73-
preferenceManager.updateDatabaseVersion()
73+
dataManager.updateDatabaseVersion()
7474
finish()
7575
return
7676
}
@@ -121,7 +121,7 @@ fun LinuxApp() {
121121
onNavigateBack = {
122122
navController.popBackStack()
123123
},
124-
showSearch = showSearch,
124+
isSearchVisible = showSearch,
125125
)
126126
},
127127
bottomBar = {

android/src/main/java/com/inspiredandroid/linuxcommandbibliotheca/ui/composables/CommandView.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import androidx.compose.ui.text.SpanStyle
2121
import androidx.compose.ui.text.buildAnnotatedString
2222
import androidx.compose.ui.text.withStyle
2323
import androidx.compose.ui.tooling.preview.Preview
24+
import androidx.compose.ui.unit.Dp
2425
import androidx.compose.ui.unit.dp
2526
import com.inspiredandroid.linuxcommandbibliotheca.R
2627
import com.inspiredandroid.linuxcommandbibliotheca.ui.theme.LinuxTheme
@@ -47,6 +48,7 @@ fun CommandView(
4748
command: String,
4849
elements: List<CommandElement>,
4950
onNavigate: (String) -> Unit = {},
51+
verticalPadding: Dp = 6.dp,
5052
) {
5153
val codeColor = MaterialTheme.colors.primary
5254
val annotatedString = remember(elements, codeColor) {
@@ -93,7 +95,7 @@ fun CommandView(
9395
}
9496
}
9597

96-
Row(modifier = Modifier.padding(start = 12.dp, end = 4.dp, top = 6.dp, bottom = 6.dp)) {
98+
Row(modifier = Modifier.padding(start = 12.dp, end = 4.dp).padding(vertical = verticalPadding)) {
9799
Text(
98100
text = annotatedString,
99101
modifier = Modifier

android/src/main/java/com/inspiredandroid/linuxcommandbibliotheca/ui/composables/NestedCommandView.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ fun NestedCommandView(
4343
textAlign = TextAlign.Center,
4444
)
4545
CommandView(
46-
command,
47-
commandElements,
48-
onNavigate,
46+
command = command,
47+
elements = commandElements,
48+
onNavigate = onNavigate,
4949
)
5050
}
5151
}

0 commit comments

Comments
 (0)