Skip to content

Commit

Permalink
Migrate SearchBarPositionDialog
Browse files Browse the repository at this point in the history
  • Loading branch information
jkuester committed Feb 12, 2025
1 parent b043cbd commit e052994
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.jkuester.unlauncher.dialog

import android.app.AlertDialog
import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.jkuester.unlauncher.datasource.CorePreferencesRepository
import com.jkuester.unlauncher.datasource.setSearchBarPosition
import com.jkuester.unlauncher.datastore.proto.SearchBarPosition
import com.sduduzog.slimlauncher.R
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

@AndroidEntryPoint
class SearchBarPositionDialog : DialogFragment() {
@Inject
lateinit var corePreferencesRepo: CorePreferencesRepository

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = AlertDialog
.Builder(context)
.setTitle(R.string.choose_search_bar_position_dialog_title)
.setSingleChoiceItems(
R.array.search_bar_position_array,
corePreferencesRepo.get().searchBarPosition.number,
this::onSelection
)
.create()

private fun onSelection(dialogInterface: DialogInterface, i: Int) = dialogInterface
.dismiss()
.also { corePreferencesRepo.updateAsync(setSearchBarPosition(SearchBarPosition.forNumber(i))) }
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import com.jkuester.unlauncher.datasource.CorePreferencesRepository
import com.jkuester.unlauncher.datasource.setActivateKeyboardInDrawer
import com.jkuester.unlauncher.datasource.setSearchAllAppsInDrawer
import com.jkuester.unlauncher.datasource.setShowSearchBar
import com.jkuester.unlauncher.dialog.SearchBarPositionDialog
import com.sduduzog.slimlauncher.R
import com.sduduzog.slimlauncher.databinding.CustomizeAppDrawerFragmentSearchFieldOptionsBinding
import com.sduduzog.slimlauncher.ui.dialogs.ChooseSearchBarPositionDialog
import com.sduduzog.slimlauncher.utils.BaseFragment
import com.sduduzog.slimlauncher.utils.createTitleAndSubtitleText
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -70,8 +70,7 @@ class CustomizeSearchFieldFragment : BaseFragment() {

private fun setupSearchBarPositionOption(options: CustomizeAppDrawerFragmentSearchFieldOptionsBinding) {
options.customizeAppDrawerFragmentSearchFieldPosition.setOnClickListener {
val positionDialog = ChooseSearchBarPositionDialog.getSearchBarPositionChooser()
positionDialog.showNow(childFragmentManager, "POSITION_CHOOSER")
SearchBarPositionDialog().showNow(childFragmentManager, "POSITION_CHOOSER")
}
corePreferencesRepo.observe(viewLifecycleOwner) {
val position = it.searchBarPosition.number
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.jkuester.unlauncher.dialog

import android.app.AlertDialog
import android.content.DialogInterface
import com.jkuester.unlauncher.datasource.CorePreferencesRepository
import com.jkuester.unlauncher.datasource.setSearchBarPosition
import com.jkuester.unlauncher.datastore.proto.SearchBarPosition
import com.sduduzog.slimlauncher.R
import io.kotest.matchers.shouldBe
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.junit5.MockKExtension
import io.mockk.justRun
import io.mockk.mockk
import io.mockk.mockkConstructor
import io.mockk.mockkStatic
import io.mockk.slot
import io.mockk.verify
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith

@MockKExtension.CheckUnnecessaryStub
// @MockKExtension.ConfirmVerification Weird bug between mockk/kotlin/Java is causing this to fail
@ExtendWith(MockKExtension::class)
class SearchBarPositionDialogTest {
@MockK
lateinit var corePrefsRepo: CorePreferencesRepository
@MockK
lateinit var alertDialog: AlertDialog

@Test
fun onCreateDialog() {
mockkConstructor(AlertDialog.Builder::class)
val onSelectionSlot = slot<DialogInterface.OnClickListener>()
every { anyConstructed<AlertDialog.Builder>().setTitle(any(Int::class)) } answers
{ self as AlertDialog.Builder }
every {
anyConstructed<AlertDialog.Builder>().setSingleChoiceItems(
any(Int::class),
any(Int::class),
capture(onSelectionSlot)
)
} answers { self as AlertDialog.Builder }
every { anyConstructed<AlertDialog.Builder>().create() } returns alertDialog
every { corePrefsRepo.get().searchBarPosition.number } returns 0
justRun { alertDialog.dismiss() }
every { corePrefsRepo.updateAsync(any()) } returns mockk()
mockkStatic(::setSearchBarPosition)
every { setSearchBarPosition(any()) } returns mockk()

val dialogFragment = SearchBarPositionDialog()
.apply { corePreferencesRepo = corePrefsRepo }
val result = dialogFragment.onCreateDialog(null)

result shouldBe alertDialog
verify(exactly = 1) {
anyConstructed<AlertDialog.Builder>().setTitle(R.string.choose_search_bar_position_dialog_title)
}
verify(exactly = 1) {
anyConstructed<AlertDialog.Builder>().setSingleChoiceItems(
R.array.search_bar_position_array,
0,
onSelectionSlot.captured
)
}
verify(exactly = 1) { anyConstructed<AlertDialog.Builder>().create() }
verify(exactly = 1) { corePrefsRepo.get().searchBarPosition.number }

// Trigger the listener
onSelectionSlot.captured.onClick(alertDialog, 0)

verify(exactly = 1) { alertDialog.dismiss() }
verify(exactly = 1) { corePrefsRepo.updateAsync(any()) }
verify(exactly = 1) { setSearchBarPosition(SearchBarPosition.forNumber(0)) }
}
}

0 comments on commit e052994

Please sign in to comment.