|
|
@ -14,7 +14,6 @@ import android.view.ViewGroup
|
|
|
|
import android.widget.CompoundButton
|
|
|
|
import android.widget.CompoundButton
|
|
|
|
import android.widget.LinearLayout
|
|
|
|
import android.widget.LinearLayout
|
|
|
|
import android.widget.RadioGroup
|
|
|
|
import android.widget.RadioGroup
|
|
|
|
import androidx.constraintlayout.widget.ConstraintLayout
|
|
|
|
|
|
|
|
import androidx.core.view.isVisible
|
|
|
|
import androidx.core.view.isVisible
|
|
|
|
import androidx.navigation.Navigation
|
|
|
|
import androidx.navigation.Navigation
|
|
|
|
import androidx.preference.Preference
|
|
|
|
import androidx.preference.Preference
|
|
|
@ -118,7 +117,8 @@ abstract class SearchEngineListPreference @JvmOverloads constructor(
|
|
|
|
res: Resources,
|
|
|
|
res: Resources,
|
|
|
|
allowDeletion: Boolean
|
|
|
|
allowDeletion: Boolean
|
|
|
|
): View {
|
|
|
|
): View {
|
|
|
|
val isCustomSearchEngine = CustomSearchEngineStore.isCustomSearchEngine(context, engine.identifier)
|
|
|
|
val isCustomSearchEngine =
|
|
|
|
|
|
|
|
CustomSearchEngineStore.isCustomSearchEngine(context, engine.identifier)
|
|
|
|
|
|
|
|
|
|
|
|
val wrapper = layoutInflater.inflate(itemResId, null) as LinearLayout
|
|
|
|
val wrapper = layoutInflater.inflate(itemResId, null) as LinearLayout
|
|
|
|
wrapper.setOnClickListener { wrapper.radio_button.isChecked = true }
|
|
|
|
wrapper.setOnClickListener { wrapper.radio_button.isChecked = true }
|
|
|
@ -133,7 +133,11 @@ abstract class SearchEngineListPreference @JvmOverloads constructor(
|
|
|
|
onItemTapped = {
|
|
|
|
onItemTapped = {
|
|
|
|
when (it) {
|
|
|
|
when (it) {
|
|
|
|
is SearchEngineMenu.Item.Edit -> editCustomSearchEngine(engine)
|
|
|
|
is SearchEngineMenu.Item.Edit -> editCustomSearchEngine(engine)
|
|
|
|
is SearchEngineMenu.Item.Delete -> deleteSearchEngine(context, engine, isCustomSearchEngine)
|
|
|
|
is SearchEngineMenu.Item.Delete -> deleteSearchEngine(
|
|
|
|
|
|
|
|
context,
|
|
|
|
|
|
|
|
engine,
|
|
|
|
|
|
|
|
isCustomSearchEngine
|
|
|
|
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
).menuBuilder.build(context).show(wrapper.overflow_menu)
|
|
|
|
).menuBuilder.build(context).show(wrapper.overflow_menu)
|
|
|
@ -147,7 +151,8 @@ abstract class SearchEngineListPreference @JvmOverloads constructor(
|
|
|
|
|
|
|
|
|
|
|
|
override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) {
|
|
|
|
override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) {
|
|
|
|
searchEngineList.list.forEach { engine ->
|
|
|
|
searchEngineList.list.forEach { engine ->
|
|
|
|
val wrapper: ConstraintLayout = searchEngineGroup?.findViewWithTag(engine.identifier) ?: return
|
|
|
|
val wrapper: LinearLayout =
|
|
|
|
|
|
|
|
searchEngineGroup?.findViewWithTag(engine.identifier) ?: return
|
|
|
|
|
|
|
|
|
|
|
|
when (wrapper.radio_button == buttonView) {
|
|
|
|
when (wrapper.radio_button == buttonView) {
|
|
|
|
true -> onSearchEngineSelected(engine)
|
|
|
|
true -> onSearchEngineSelected(engine)
|
|
|
@ -166,12 +171,20 @@ abstract class SearchEngineListPreference @JvmOverloads constructor(
|
|
|
|
Navigation.findNavController(searchEngineGroup!!).navigate(directions)
|
|
|
|
Navigation.findNavController(searchEngineGroup!!).navigate(directions)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun deleteSearchEngine(context: Context, engine: SearchEngine, isCustomSearchEngine: Boolean) {
|
|
|
|
private fun deleteSearchEngine(
|
|
|
|
|
|
|
|
context: Context,
|
|
|
|
|
|
|
|
engine: SearchEngine,
|
|
|
|
|
|
|
|
isCustomSearchEngine: Boolean
|
|
|
|
|
|
|
|
) {
|
|
|
|
val isDefaultEngine = engine == context.components.search.provider.getDefaultEngine(context)
|
|
|
|
val isDefaultEngine = engine == context.components.search.provider.getDefaultEngine(context)
|
|
|
|
val initialEngineList = searchEngineList.copy()
|
|
|
|
val initialEngineList = searchEngineList.copy()
|
|
|
|
val initialDefaultEngine = searchEngineList.default
|
|
|
|
val initialDefaultEngine = searchEngineList.default
|
|
|
|
|
|
|
|
|
|
|
|
context.components.search.provider.uninstallSearchEngine(context, engine, isCustomSearchEngine)
|
|
|
|
context.components.search.provider.uninstallSearchEngine(
|
|
|
|
|
|
|
|
context,
|
|
|
|
|
|
|
|
engine,
|
|
|
|
|
|
|
|
isCustomSearchEngine
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
MainScope().allowUndo(
|
|
|
|
MainScope().allowUndo(
|
|
|
|
view = context.getRootView()!!,
|
|
|
|
view = context.getRootView()!!,
|
|
|
@ -179,7 +192,11 @@ abstract class SearchEngineListPreference @JvmOverloads constructor(
|
|
|
|
.getString(R.string.search_delete_search_engine_success_message, engine.name),
|
|
|
|
.getString(R.string.search_delete_search_engine_success_message, engine.name),
|
|
|
|
undoActionTitle = context.getString(R.string.snackbar_deleted_undo),
|
|
|
|
undoActionTitle = context.getString(R.string.snackbar_deleted_undo),
|
|
|
|
onCancel = {
|
|
|
|
onCancel = {
|
|
|
|
context.components.search.provider.installSearchEngine(context, engine, isCustomSearchEngine)
|
|
|
|
context.components.search.provider.installSearchEngine(
|
|
|
|
|
|
|
|
context,
|
|
|
|
|
|
|
|
engine,
|
|
|
|
|
|
|
|
isCustomSearchEngine
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
searchEngineList = initialEngineList.copy(
|
|
|
|
searchEngineList = initialEngineList.copy(
|
|
|
|
default = initialDefaultEngine
|
|
|
|
default = initialDefaultEngine
|
|
|
|