diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/SearchBar.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchBarView.kt similarity index 96% rename from ui/src/main/java/de/mm20/launcher2/ui/legacy/component/SearchBar.kt rename to ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchBarView.kt index 0f32f59e..e882ee3d 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/SearchBar.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchBarView.kt @@ -1,4 +1,4 @@ -package de.mm20.launcher2.ui.legacy.component +package de.mm20.launcher2.ui.launcher.search import android.content.Context import android.util.AttributeSet @@ -24,7 +24,7 @@ import kotlinx.coroutines.flow.map import org.koin.core.component.KoinComponent import org.koin.core.component.inject -class SearchBar @JvmOverloads constructor( +class SearchBarView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.materialCardViewStyle diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/ApplicationView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/ApplicationView.kt deleted file mode 100644 index 782645a1..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/ApplicationView.kt +++ /dev/null @@ -1,37 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.animation.LayoutTransition -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.* -import de.mm20.launcher2.search.data.Application -import de.mm20.launcher2.ui.databinding.ViewApplicationBinding -import de.mm20.launcher2.ui.launcher.search.SearchVM - -class ApplicationView : FrameLayout { - - private val applications: LiveData> - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super(context, attrs, defStyleRes) - - private val binding = ViewApplicationBinding.inflate(LayoutInflater.from(context), this, true) - - init { - layoutTransition = LayoutTransition() - layoutTransition.enableTransitionType(LayoutTransition.CHANGING) - binding.applicationCard.layoutTransition.enableTransitionType(LayoutTransition.CHANGING) - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - applications = viewModel.appResults - applications.observe(context as AppCompatActivity, Observer> { - visibility = if (it.isEmpty()) View.GONE else View.VISIBLE - binding.applicationGrid.submitItems(it) - }) - } -} diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/CalculatorView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/CalculatorView.kt deleted file mode 100644 index 7bc3f375..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/CalculatorView.kt +++ /dev/null @@ -1,64 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.compose.foundation.layout.Column -import androidx.compose.material3.LocalContentColor -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState -import androidx.lifecycle.LiveData -import androidx.lifecycle.Observer -import de.mm20.launcher2.search.data.Calculator -import de.mm20.launcher2.ui.MdcLauncherTheme -import de.mm20.launcher2.ui.databinding.ViewCalculatorBinding -import de.mm20.launcher2.ui.launcher.search.SearchVM -import de.mm20.launcher2.ui.search.CalculatorItem - -class CalculatorView : FrameLayout { - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super( - context, - attrs, - defStyleRes - ) - - private val calculator: LiveData - - private val binding = ViewCalculatorBinding.inflate(LayoutInflater.from(context), this, true) - - init { - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - calculator = viewModel.calculatorResult - calculator.observe(context as AppCompatActivity, Observer { - if (it == null) visibility = View.GONE - else { - visibility = View.VISIBLE - } - }) - - binding.composeView.setContent { - val converter by calculator.observeAsState() - MdcLauncherTheme { - // TODO: Temporary solution until parent widget card is rewritten in Compose - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) { - Column { - converter?.let { - CalculatorItem( - calculator = it, - ) - } - } - } - } - } - } -} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/CalendarView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/CalendarView.kt deleted file mode 100644 index e9b93051..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/CalendarView.kt +++ /dev/null @@ -1,117 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.animation.LayoutTransition -import android.content.Context -import android.util.AttributeSet -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.asLiveData -import de.mm20.launcher2.ktx.lifecycleScope -import de.mm20.launcher2.permissions.PermissionGroup -import de.mm20.launcher2.permissions.PermissionsManager -import de.mm20.launcher2.preferences.LauncherDataStore -import de.mm20.launcher2.search.data.MissingPermission -import de.mm20.launcher2.ui.R -import de.mm20.launcher2.ui.launcher.search.SearchVM -import de.mm20.launcher2.ui.legacy.search.SearchListView -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.launch -import org.koin.core.component.KoinComponent -import org.koin.core.component.get - -class CalendarView : FrameLayout, KoinComponent { - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super( - context, - attrs, - defStyleRes - ) - - init { - val permissionsManager: PermissionsManager = get() - val dataStore: LauncherDataStore = get() - View.inflate(context, R.layout.view_search_category_list, this) - layoutTransition = LayoutTransition() - layoutTransition.enableTransitionType(LayoutTransition.CHANGING) - val card = findViewById(R.id.card) - card.layoutTransition.enableTransitionType(LayoutTransition.CHANGING) - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - - val showMissingPermissionBanner = combine( - dataStore.data.map { it.calendarSearch.enabled }, - permissionsManager.hasPermission(PermissionGroup.Calendar) - ) { calendarSearchEnabled, hasPermission -> - !hasPermission && calendarSearchEnabled - }.asLiveData() - - val searchQuery = viewModel.searchQuery - val calendarResults = viewModel.calendarResults - - val show = MediatorLiveData() - show.addSource(showMissingPermissionBanner) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !calendarResults.value.isNullOrEmpty()) - } - show.addSource(calendarResults) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !calendarResults.value.isNullOrEmpty()) - } - show.addSource(searchQuery) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !calendarResults.value.isNullOrEmpty()) - } - - show.observe(context as AppCompatActivity) { - visibility = if (it) { - View.VISIBLE - } else { - View.GONE - } - } - - val list = findViewById(R.id.list) - calendarResults.observe(context as AppCompatActivity) { - if (showMissingPermissionBanner.value == true) { - list.submitItems(listOf( - MissingPermission( - context.getString(R.string.permission_calendar_search), - PermissionGroup.Calendar, - secondaryActionLabel = context.getString(R.string.turn_off), - secondaryAction = { - lifecycleScope.launch { - dataStore.updateData { - it.toBuilder() - .setCalendarSearch(it.calendarSearch.toBuilder().setEnabled(false)) - .build() - } - } - } - ) - ) + it) - } else { - list.submitItems(it) - } - } - - showMissingPermissionBanner.observe(context as AppCompatActivity) { - if (it == true) { - list.submitItems(listOf( - MissingPermission( - context.getString(R.string.permission_calendar_search), - PermissionGroup.Calendar, - secondaryActionLabel = context.getString(R.string.turn_off) - ) - ) + calendarResults.value!!) - } else { - list.submitItems(calendarResults.value) - } - } - } -} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/ContactView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/ContactView.kt deleted file mode 100644 index 7b603913..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/ContactView.kt +++ /dev/null @@ -1,117 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.animation.LayoutTransition -import android.content.Context -import android.util.AttributeSet -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.asLiveData -import de.mm20.launcher2.ktx.lifecycleScope -import de.mm20.launcher2.permissions.PermissionGroup -import de.mm20.launcher2.permissions.PermissionsManager -import de.mm20.launcher2.preferences.LauncherDataStore -import de.mm20.launcher2.search.data.MissingPermission -import de.mm20.launcher2.ui.R -import de.mm20.launcher2.ui.launcher.search.SearchVM -import de.mm20.launcher2.ui.legacy.search.SearchListView -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.launch -import org.koin.core.component.KoinComponent -import org.koin.core.component.get - -class ContactView : FrameLayout, KoinComponent { - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super( - context, - attrs, - defStyleRes - ) - - init { - val permissionsManager: PermissionsManager = get() - val dataStore: LauncherDataStore = get() - View.inflate(context, R.layout.view_search_category_list, this) - layoutTransition = LayoutTransition() - layoutTransition.enableTransitionType(LayoutTransition.CHANGING) - val card = findViewById(R.id.card) - card.layoutTransition.enableTransitionType(LayoutTransition.CHANGING) - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - - val showMissingPermissionBanner = combine( - dataStore.data.map { it.contactsSearch.enabled }, - permissionsManager.hasPermission(PermissionGroup.Contacts) - ) { contactSearchEnabled, hasPermission -> - !hasPermission && contactSearchEnabled - }.asLiveData() - - val searchQuery = viewModel.searchQuery - val contactResults = viewModel.contactResults - - val show = MediatorLiveData() - show.addSource(showMissingPermissionBanner) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !contactResults.value.isNullOrEmpty()) - } - show.addSource(contactResults) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !contactResults.value.isNullOrEmpty()) - } - show.addSource(searchQuery) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !contactResults.value.isNullOrEmpty()) - } - - show.observe(context as AppCompatActivity) { - visibility = if (it) { - View.VISIBLE - } else { - View.GONE - } - } - - val list = findViewById(R.id.list) - contactResults.observe(context as AppCompatActivity) { - if (showMissingPermissionBanner.value == true) { - list.submitItems(listOf( - MissingPermission( - context.getString(R.string.permission_contact_search), - PermissionGroup.Contacts, - secondaryActionLabel = context.getString(R.string.turn_off), - secondaryAction = { - lifecycleScope.launch { - dataStore.updateData { - it.toBuilder() - .setContactsSearch(it.contactsSearch.toBuilder().setEnabled(false)) - .build() - } - } - } - ) - ) + it) - } else { - list.submitItems(it) - } - } - - showMissingPermissionBanner.observe(context as AppCompatActivity) { - if (it == true) { - list.submitItems(listOf( - MissingPermission( - context.getString(R.string.permission_contact_search), - PermissionGroup.Contacts, - secondaryActionLabel = context.getString(R.string.turn_off) - ) - ) + contactResults.value!!) - } else { - list.submitItems(contactResults.value) - } - } - } -} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/FavoritesView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/FavoritesView.kt deleted file mode 100644 index fc108dae..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/FavoritesView.kt +++ /dev/null @@ -1,39 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.animation.LayoutTransition -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import de.mm20.launcher2.ui.databinding.ViewFavoritesBinding -import de.mm20.launcher2.ui.launcher.search.SearchVM - -class FavoritesView : FrameLayout { - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super(context, attrs, defStyleRes) - - private val binding = ViewFavoritesBinding.inflate(LayoutInflater.from(context), this, true) - - - init { - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - val favorites = viewModel.favorites - val hide = viewModel.hideFavorites - favorites.observe(context as AppCompatActivity) { - visibility = if (it?.isEmpty() == true || hide.value == true) View.GONE else View.VISIBLE - binding.favoritesGrid.submitItems(it) - } - - hide.observe(context as AppCompatActivity) { - visibility = if(it == true || favorites.value?.isEmpty() == true) View.GONE else View.VISIBLE - } - - layoutTransition = LayoutTransition().apply { enableTransitionType(LayoutTransition.CHANGING) } - binding.favoritesCard.layoutTransition = LayoutTransition().apply { enableTransitionType(LayoutTransition.CHANGING) } - } -} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/FileView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/FileView.kt deleted file mode 100644 index b49e194e..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/FileView.kt +++ /dev/null @@ -1,119 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.animation.LayoutTransition -import android.content.Context -import android.util.AttributeSet -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.LiveData -import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.asLiveData -import de.mm20.launcher2.ktx.lifecycleScope -import de.mm20.launcher2.permissions.PermissionGroup -import de.mm20.launcher2.permissions.PermissionsManager -import de.mm20.launcher2.preferences.LauncherDataStore -import de.mm20.launcher2.search.data.File -import de.mm20.launcher2.search.data.MissingPermission -import de.mm20.launcher2.ui.R -import de.mm20.launcher2.ui.launcher.search.SearchVM -import de.mm20.launcher2.ui.legacy.search.SearchListView -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.launch -import org.koin.core.component.KoinComponent -import org.koin.core.component.get - -class FileView : FrameLayout, KoinComponent { - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super( - context, - attrs, - defStyleRes - ) - - init { - val permissionsManager: PermissionsManager = get() - val dataStore: LauncherDataStore = get() - View.inflate(context, R.layout.view_search_category_list, this) - layoutTransition = LayoutTransition() - layoutTransition.enableTransitionType(LayoutTransition.CHANGING) - val card = findViewById(R.id.card) - card.layoutTransition.enableTransitionType(LayoutTransition.CHANGING) - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - - val showMissingPermissionBanner = combine( - dataStore.data.map { it.fileSearch.localFiles }, - permissionsManager.hasPermission(PermissionGroup.ExternalStorage) - ) { localFileSearchEnabled, hasPermission -> - !hasPermission && localFileSearchEnabled - }.asLiveData() - - val searchQuery = viewModel.searchQuery - val fileResults = viewModel.fileResults - - val show = MediatorLiveData() - show.addSource(showMissingPermissionBanner) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !fileResults.value.isNullOrEmpty()) - } - show.addSource(fileResults) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !fileResults.value.isNullOrEmpty()) - } - show.addSource(searchQuery) { - show.value = !searchQuery.value.isNullOrBlank() && - (showMissingPermissionBanner.value == true || !fileResults.value.isNullOrEmpty()) - } - - show.observe(context as AppCompatActivity) { - visibility = if (it) { - View.VISIBLE - } else { - View.GONE - } - } - - val list = findViewById(R.id.list) - fileResults.observe(context as AppCompatActivity) { - if (showMissingPermissionBanner.value == true) { - list.submitItems(listOf( - MissingPermission( - context.getString(R.string.permission_files_search), - PermissionGroup.ExternalStorage, - secondaryActionLabel = context.getString(R.string.turn_off), - secondaryAction = { - lifecycleScope.launch { - dataStore.updateData { - it.toBuilder() - .setFileSearch(it.fileSearch.toBuilder().setLocalFiles(false)) - .build() - } - } - } - ) - ) + it) - } else { - list.submitItems(it) - } - } - - showMissingPermissionBanner.observe(context as AppCompatActivity) { - if (it == true) { - list.submitItems(listOf( - MissingPermission( - context.getString(R.string.permission_files_search), - PermissionGroup.ExternalStorage, - secondaryActionLabel = context.getString(R.string.turn_off) - ) - ) + fileResults.value!!) - } else { - list.submitItems(fileResults.value) - } - } - } -} diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/UnitConverterView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/UnitConverterView.kt deleted file mode 100644 index d963604d..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/UnitConverterView.kt +++ /dev/null @@ -1,65 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.compose.foundation.layout.Column -import androidx.compose.material3.LocalContentColor -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState -import androidx.lifecycle.LiveData -import androidx.lifecycle.Observer -import de.mm20.launcher2.search.data.UnitConverter -import de.mm20.launcher2.ui.MdcLauncherTheme -import de.mm20.launcher2.ui.databinding.ViewUnitconverterBinding -import de.mm20.launcher2.ui.launcher.search.SearchVM -import de.mm20.launcher2.ui.search.UnitConverterItem - -class UnitConverterView : FrameLayout { - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super( - context, - attrs, - defStyleRes - ) - - private val unitConverter: LiveData - - private val binding = ViewUnitconverterBinding.inflate(LayoutInflater.from(context), this, true) - - init { - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - unitConverter = viewModel.unitConverterResult - unitConverter.observe(context as AppCompatActivity, Observer { - if (it == null) visibility = View.GONE - else { - visibility = View.VISIBLE - } - }) - - binding.composeView.setContent { - val converter by unitConverter.observeAsState() - MdcLauncherTheme { - // TODO: Temporary solution until parent widget card is rewritten in Compose - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) { - Column { - converter?.let { - UnitConverterItem( - unitConverter = it, - ) - } - } - } - } - } - } - -} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WebSearchView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WebSearchView.kt deleted file mode 100644 index 7c136eda..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WebSearchView.kt +++ /dev/null @@ -1,87 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.content.Context -import android.content.res.ColorStateList -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat -import androidx.lifecycle.LiveData -import androidx.lifecycle.Observer -import coil.imageLoader -import coil.request.ImageRequest -import coil.size.Scale -import com.google.android.material.chip.Chip -import de.mm20.launcher2.ktx.dp -import de.mm20.launcher2.ktx.lifecycleScope -import de.mm20.launcher2.ui.legacy.helper.ActivityStarter -import de.mm20.launcher2.search.data.Websearch -import de.mm20.launcher2.ui.R -import de.mm20.launcher2.ui.databinding.ViewWebsearchBinding -import de.mm20.launcher2.ui.launcher.search.SearchVM -import kotlinx.coroutines.launch -import java.io.File - -class WebSearchView : FrameLayout { - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super( - context, - attrs, - defStyleRes - ) - - private val websearches: LiveData> - - private val binding = ViewWebsearchBinding.inflate(LayoutInflater.from(context), this, true) - - init { - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - websearches = viewModel.websearchResults - websearches.observe(context as AppCompatActivity, Observer { - updateWebsearches(it) - }) - } - - private fun updateWebsearches(websearches: List) { - visibility = if (websearches.isEmpty()) View.GONE else View.VISIBLE - binding.webSearchList.removeAllViews() - for (search in websearches) { - val chip = Chip(context) - chip.text = search.label - val icon = search.icon - if (icon != null) { - val imageRequest = ImageRequest.Builder(context) - .data(File(icon)) - .size((32*dp).toInt()) - .scale(Scale.FIT) - .target { - chip.chipIcon = it - } - .build() - lifecycleScope.launch { - context.imageLoader.execute(imageRequest) - } - chip.chipIconTint = null - } else { - chip.chipIcon = ContextCompat.getDrawable(context, R.drawable.ic_search) - chip.chipIconTint = ColorStateList.valueOf(search.color) - - } - chip.chipStrokeWidth = 1 * dp - chip.chipStrokeColor = ContextCompat.getColorStateList(context, R.color.chip_stroke) - chip.chipBackgroundColor = - ContextCompat.getColorStateList(context, R.color.chip_background) - chip.setTextAppearanceResource(R.style.ChipTextAppearance) - chip.setOnClickListener { - ActivityStarter.start(context, chip, intent = search.getLaunchIntent()) - } - - binding.webSearchList.addView(chip) - } - } - -} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WebsiteView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WebsiteView.kt deleted file mode 100644 index d165d338..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WebsiteView.kt +++ /dev/null @@ -1,48 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.content.Context -import android.util.AttributeSet -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.LiveData -import androidx.lifecycle.Observer -import de.mm20.launcher2.ui.legacy.helper.ActivityStarter -import de.mm20.launcher2.search.data.Website -import de.mm20.launcher2.ui.R -import de.mm20.launcher2.ui.launcher.search.SearchVM -import de.mm20.launcher2.ui.legacy.searchable.SearchableView - -class WebsiteView : FrameLayout { - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super( - context, - attrs, - defStyleRes - ) - - private val website: LiveData - - init { - View.inflate(context, R.layout.view_search_category_single_item, this) - val websiteView = SearchableView(context, SearchableView.REPRESENTATION_LIST) - val params = - ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - val card = findViewById(R.id.card) - websiteView.layoutParams = params - card.addView(websiteView) - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - website = viewModel.websiteResult - website.observe(context as AppCompatActivity, Observer { - visibility = if (it == null) View.GONE else View.VISIBLE - card.setOnClickListener { _ -> - ActivityStarter.start(context, websiteView, item = it) - } - websiteView.searchable = it - }) - } -} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WikipediaView.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WikipediaView.kt deleted file mode 100644 index 7c553e21..00000000 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/component/WikipediaView.kt +++ /dev/null @@ -1,47 +0,0 @@ -package de.mm20.launcher2.ui.legacy.component - -import android.content.Context -import android.util.AttributeSet -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.LiveData -import de.mm20.launcher2.ui.legacy.helper.ActivityStarter -import de.mm20.launcher2.search.data.Wikipedia -import de.mm20.launcher2.ui.R -import de.mm20.launcher2.ui.launcher.search.SearchVM -import de.mm20.launcher2.ui.legacy.searchable.SearchableView - -class WikipediaView : FrameLayout { - - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super( - context, - attrs, - defStyleRes - ) - - val wikipedia: LiveData - - init { - View.inflate(context, R.layout.view_search_category_single_item, this) - val websiteView = SearchableView(context, SearchableView.REPRESENTATION_LIST) - val params = - ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - val card = findViewById(R.id.card) - websiteView.layoutParams = params - card.addView(websiteView) - val viewModel: SearchVM by (context as AppCompatActivity).viewModels() - wikipedia = viewModel.wikipediaResult - wikipedia.observe(context as AppCompatActivity, { - visibility = if (it == null) View.GONE else View.VISIBLE - card.setOnClickListener { _ -> - ActivityStarter.start(context, websiteView, item = it) - } - websiteView.searchable = it - }) - } -} \ No newline at end of file diff --git a/ui/src/main/res/layout/compact_weather.xml b/ui/src/main/res/layout/compact_weather.xml deleted file mode 100644 index fb3d8a25..00000000 --- a/ui/src/main/res/layout/compact_weather.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/unit_converter_row.xml b/ui/src/main/res/layout/unit_converter_row.xml deleted file mode 100644 index 7a12587d..00000000 --- a/ui/src/main/res/layout/unit_converter_row.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/unit_converter_show_all.xml b/ui/src/main/res/layout/unit_converter_show_all.xml deleted file mode 100644 index 30513b4c..00000000 --- a/ui/src/main/res/layout/unit_converter_show_all.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/view_application.xml b/ui/src/main/res/layout/view_application.xml deleted file mode 100644 index e49557f6..00000000 --- a/ui/src/main/res/layout/view_application.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/view_calculator.xml b/ui/src/main/res/layout/view_calculator.xml deleted file mode 100644 index 10b09407..00000000 --- a/ui/src/main/res/layout/view_calculator.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/view_favorites.xml b/ui/src/main/res/layout/view_favorites.xml deleted file mode 100644 index d62b0db4..00000000 --- a/ui/src/main/res/layout/view_favorites.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/view_launcher_scaffold.xml b/ui/src/main/res/layout/view_launcher_scaffold.xml index 0d753e28..aa7c399a 100644 --- a/ui/src/main/res/layout/view_launcher_scaffold.xml +++ b/ui/src/main/res/layout/view_launcher_scaffold.xml @@ -43,7 +43,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/view_search_category_list.xml b/ui/src/main/res/layout/view_search_category_list.xml deleted file mode 100644 index 1049f205..00000000 --- a/ui/src/main/res/layout/view_search_category_list.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/view_search_category_single_item.xml b/ui/src/main/res/layout/view_search_category_single_item.xml deleted file mode 100644 index f852381d..00000000 --- a/ui/src/main/res/layout/view_search_category_single_item.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/view_unitconverter.xml b/ui/src/main/res/layout/view_unitconverter.xml deleted file mode 100644 index f24fb628..00000000 --- a/ui/src/main/res/layout/view_unitconverter.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ui/src/main/res/layout/view_websearch.xml b/ui/src/main/res/layout/view_websearch.xml deleted file mode 100644 index b68da54d..00000000 --- a/ui/src/main/res/layout/view_websearch.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file