This commit is contained in:
MM20
2022-06-24 17:23:59 +02:00
parent 26995c1141
commit 96e70da913
98 changed files with 61 additions and 891 deletions
@@ -3,7 +3,6 @@ package de.mm20.launcher2.ui.animation
import androidx.compose.animation.core.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.ExperimentalUnitApi
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.TextUnitType
@@ -27,7 +27,7 @@ import de.mm20.launcher2.ui.component.BottomSheetDialog
import de.mm20.launcher2.ui.component.LargeMessage
import de.mm20.launcher2.ui.component.SmallMessage
@OptIn(ExperimentalComposeUiApi::class, ExperimentalMaterial3Api::class)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun RestoreBackupSheet(
uri: Uri,
@@ -1,7 +1,6 @@
package de.mm20.launcher2.ui.component
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
@@ -42,6 +42,7 @@ import de.mm20.launcher2.ui.locals.LocalDarkTheme
import palettes.TonalPalette
import java.time.Instant
import java.time.ZoneId
import kotlin.math.abs
import kotlin.math.pow
import kotlin.math.roundToInt
@@ -389,12 +390,12 @@ private val SquircleShape: Shape
for (x in -radius.roundToInt()..radius.roundToInt())
lineTo(
x.toFloat(),
Math.cbrt(radiusToPow - Math.abs(x * x * x)).toFloat()
Math.cbrt(radiusToPow - abs(x * x * x)).toFloat()
)
for (x in radius.roundToInt() downTo -radius.roundToInt())
lineTo(
x.toFloat(),
(-Math.cbrt(radiusToPow - Math.abs(x * x * x))).toFloat()
(-Math.cbrt(radiusToPow - abs(x * x * x))).toFloat()
)
translate(Offset(size.width / 2f, size.height / 2f))
}
@@ -3,7 +3,6 @@ package de.mm20.launcher2.ui.component.preferences
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Switch
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
@@ -1,7 +1,6 @@
package de.mm20.launcher2.ui.component.preferences
import androidx.compose.material3.Switch
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.vector.ImageVector
@@ -613,6 +613,7 @@ private fun Precipitation(icon: WeatherIcon) {
tint = colorResource(id = R.color.weather_snow)
)
}
else -> {}
}
}
}
@@ -181,14 +181,6 @@ class LauncherActivity : BaseActivity() {
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
override fun onResume() {
super.onResume()
/*binding.container.doOnNextLayout {
WallpaperManager.getInstance(this).setWallpaperOffsets(it.windowToken, 0.5f, 0.5f)
}*/
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
val navContract = intent?.let { GestureNavContract.fromIntent(it) }
@@ -6,7 +6,7 @@ import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.slideIn
import androidx.compose.animation.slideOut
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.LocalOverScrollConfiguration
import androidx.compose.foundation.LocalOverscrollConfiguration
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
@@ -46,8 +46,7 @@ import de.mm20.launcher2.ui.utils.rememberNotificationShadeController
import kotlin.math.roundToInt
@OptIn(
ExperimentalMaterialApi::class,
ExperimentalFoundationApi::class
ExperimentalMaterialApi::class, ExperimentalFoundationApi::class
)
@Composable
fun PagerScaffold(
@@ -216,7 +215,7 @@ fun PagerScaffold(
CompositionLocalProvider(
LocalOverScrollConfiguration provides null
LocalOverscrollConfiguration provides null
) {
Row(
@@ -7,7 +7,7 @@ import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.slideIn
import androidx.compose.animation.slideOut
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.LocalOverScrollConfiguration
import androidx.compose.foundation.LocalOverscrollConfiguration
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
@@ -231,7 +231,7 @@ fun PullDownScaffold(
derivedStateOf { maxHeight }
}
CompositionLocalProvider(
LocalOverScrollConfiguration provides null
LocalOverscrollConfiguration provides null
) {
val offset by animateFloatAsState(if (isSearchOpen) 1f else 0f)
Column(
@@ -1,9 +1,6 @@
package de.mm20.launcher2.ui.launcher.modals
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.liveData
import de.mm20.launcher2.favorites.FavoritesItem
import de.mm20.launcher2.favorites.FavoritesRepository
import org.koin.core.component.KoinComponent
@@ -3,19 +3,13 @@ package de.mm20.launcher2.ui.launcher.modals
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Edit
import androidx.compose.material.icons.rounded.Settings
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
@@ -3,11 +3,7 @@ package de.mm20.launcher2.ui.launcher.modals
import android.content.Context
import android.content.Intent
import androidx.lifecycle.ViewModel
import de.mm20.launcher2.favorites.FavoritesRepository
import de.mm20.launcher2.ui.settings.SettingsActivity
import kotlinx.coroutines.flow.map
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
class HiddenItemsSheetVM: ViewModel() {
@@ -1,21 +1,9 @@
package de.mm20.launcher2.ui.launcher.search
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.VisibilityOff
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.launcher.LauncherActivityVM
import de.mm20.launcher2.ui.launcher.search.apps.AppResults
import de.mm20.launcher2.ui.launcher.search.appshortcuts.AppShortcutResults
import de.mm20.launcher2.ui.launcher.search.calculator.CalculatorResults
@@ -29,7 +17,6 @@ import de.mm20.launcher2.ui.launcher.search.website.WebsiteResults
import de.mm20.launcher2.ui.launcher.search.wikipedia.WikipediaResults
import de.mm20.launcher2.ui.layout.BottomReversed
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SearchColumn(
modifier: Modifier = Modifier,
@@ -37,7 +37,6 @@ import kotlin.math.min
import kotlin.math.pow
import kotlin.math.roundToInt
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun AppItem(
modifier: Modifier = Modifier,
@@ -1,4 +1,4 @@
package de.mm20.launcher2.ui.search
package de.mm20.launcher2.ui.launcher.search.calculator
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
@@ -11,7 +11,6 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.component.LauncherCard
import de.mm20.launcher2.ui.launcher.search.SearchVM
import de.mm20.launcher2.ui.search.CalculatorItem
@Composable
fun ColumnScope.CalculatorResults(reverse: Boolean = false) {
@@ -109,7 +109,7 @@ fun GridItem(modifier: Modifier = Modifier, item: Searchable, showLabels: Boolea
}
}
@OptIn(ExperimentalComposeUiApi::class, ExperimentalAnimationApi::class)
@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun ItemPopup(origin: Rect, searchable: Searchable, onDismissRequest: () -> Unit) {
var show by remember { mutableStateOf(false) }
@@ -1,19 +1,8 @@
package de.mm20.launcher2.ui.launcher.search.common.grid
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.graphics.toAndroidRect
import androidx.core.app.ActivityOptionsCompat
import de.mm20.launcher2.badges.BadgeRepository
import de.mm20.launcher2.favorites.FavoritesRepository
import de.mm20.launcher2.icons.IconRepository
import de.mm20.launcher2.icons.LauncherIcon
import de.mm20.launcher2.search.data.Searchable
import de.mm20.launcher2.ui.launcher.search.common.SearchableItemVM
import kotlinx.coroutines.flow.Flow
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
class GridItemVM(
private val searchable: Searchable
searchable: Searchable
): SearchableItemVM(searchable)
@@ -16,7 +16,7 @@ import de.mm20.launcher2.ui.launcher.search.contacts.ContactItem
import de.mm20.launcher2.ui.launcher.search.files.FileItem
import de.mm20.launcher2.ui.launcher.search.shortcut.AppShortcutItem
@OptIn(ExperimentalMaterialApi::class, androidx.compose.foundation.ExperimentalFoundationApi::class)
@OptIn(androidx.compose.foundation.ExperimentalFoundationApi::class)
@Composable
fun ListItem(modifier: Modifier = Modifier, item: Searchable) {
var showDetails by remember { mutableStateOf(false) }
@@ -4,6 +4,5 @@ import de.mm20.launcher2.search.data.Searchable
import de.mm20.launcher2.ui.launcher.search.common.SearchableItemVM
class ListItemVM(
private val searchable: Searchable
): SearchableItemVM(searchable) {
}
searchable: Searchable
): SearchableItemVM(searchable)
@@ -43,7 +43,6 @@ import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
import de.mm20.launcher2.ui.modifier.scale
import kotlinx.coroutines.launch
@OptIn(ExperimentalUnitApi::class)
@Composable
fun ContactItem(
modifier: Modifier = Modifier,
@@ -38,7 +38,6 @@ import kotlinx.coroutines.launch
import java.text.DecimalFormat
import kotlin.math.roundToInt
@OptIn(ExperimentalUnitApi::class)
@Composable
fun FileItem(
modifier: Modifier = Modifier,
@@ -40,7 +40,6 @@ import kotlinx.coroutines.launch
import kotlin.math.pow
import kotlin.math.roundToInt
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun AppShortcutItem(
modifier: Modifier = Modifier,
@@ -1,9 +1,8 @@
package de.mm20.launcher2.ui.search
package de.mm20.launcher2.ui.launcher.search.unitconverter
import android.icu.text.DateFormat
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.*
import androidx.compose.material3.*
@@ -12,11 +11,9 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import de.mm20.launcher2.search.data.CurrencyUnitConverter
import de.mm20.launcher2.search.data.UnitConverter
import de.mm20.launcher2.ui.R
@@ -11,7 +11,6 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.component.LauncherCard
import de.mm20.launcher2.ui.launcher.search.SearchVM
import de.mm20.launcher2.ui.search.UnitConverterItem
@Composable
fun ColumnScope.UnitConverterResults(reverse: Boolean = false) {
@@ -1,6 +1,5 @@
package de.mm20.launcher2.ui.launcher.transitions
import android.content.ComponentName
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import com.android.launcher3.GestureNavContract
@@ -1,9 +1,6 @@
package de.mm20.launcher2.ui.launcher.transitions
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.graphics.toAndroidRectF
import com.android.launcher3.GestureNavContract
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -16,7 +16,6 @@ import androidx.compose.foundation.gestures.rememberDraggableState
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Add
import androidx.compose.material3.*
@@ -36,7 +35,7 @@ import androidx.compose.ui.window.Dialog
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.ClockWidget
import de.mm20.launcher2.ui.launcher.widgets.clock.ClockWidget
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.ktx.animateTo
import de.mm20.launcher2.ui.launcher.widgets.picker.PickAppWidgetActivity
@@ -145,7 +145,7 @@ fun CalendarWidget() {
)
}
val pinnedEvents by viewModel.pinnedCalendarEvents.observeAsState(emptyList())
if (pinnedEvents.size > 0) {
if (pinnedEvents.isNotEmpty()) {
Text(
stringResource(R.string.calendar_widget_pinned_events),
modifier = Modifier.padding(start = 4.dp, end = 4.dp, top = 8.dp, bottom = 4.dp),
@@ -1,4 +1,4 @@
package de.mm20.launcher2.ui
package de.mm20.launcher2.ui.launcher.widgets.clock
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -19,7 +19,6 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockStyle
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetLayout
import de.mm20.launcher2.ui.base.LocalTime
import de.mm20.launcher2.ui.launcher.widgets.clock.ClockWidgetVM
import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.*
import de.mm20.launcher2.ui.launcher.widgets.clock.parts.PartProvider
@@ -2,7 +2,6 @@ package de.mm20.launcher2.ui.launcher.widgets.clock.parts
import android.content.Context
import androidx.compose.runtime.Composable
import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetLayout
import kotlinx.coroutines.flow.Flow
@@ -33,7 +33,7 @@ fun AppWidgetList(
modifier = modifier
) {
for (group in widgets) {
item() {
item {
Text(
modifier = Modifier.padding(
top = 16.dp,
@@ -10,6 +10,7 @@ import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ArrowBack
import androidx.compose.material3.*
@@ -67,7 +68,7 @@ class PickAppWidgetActivity : BaseActivity() {
if (selected == null) {
if (widgets != null) {
AppWidgetList(
modifier = Modifier.fillMaxSize(),
modifier = Modifier.fillMaxSize().padding(it),
widgets = widgets,
onWidgetSelected = {
selectAppWidget(it)
@@ -75,7 +76,7 @@ class PickAppWidgetActivity : BaseActivity() {
)
} else {
Box(
modifier = Modifier.fillMaxSize(),
modifier = Modifier.fillMaxSize().padding(it),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator()
@@ -39,7 +39,6 @@ import java.text.DecimalFormat
import java.text.SimpleDateFormat
import kotlin.math.roundToInt
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun WeatherWidget() {
val viewModel: WeatherWidgetWM = viewModel()
@@ -1,22 +0,0 @@
package de.mm20.launcher2.ui.legacy.helper
import android.graphics.*
import android.util.LruCache
import androidx.annotation.MainThread
/**
* Helper object to store temporary bitmaps to draw on so they don't have to be allocated every
* time and can be reused by different classes and methods.
*/
object BitmapHolder {
private val cache = LruCache<Int, Pair<Bitmap, Canvas>>(8)
@MainThread
fun getBitmapAndCanvas(size: Int): Pair<Bitmap, Canvas> {
return cache[size]?.apply { second.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR) }
?: Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888).let {
Pair(it, Canvas(it)).also { pair -> cache.put(size, pair) }
}
}
}
@@ -1,137 +0,0 @@
package de.mm20.launcher2.ui.legacy.view
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.os.BatteryManager
import android.util.AttributeSet
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.*
import de.mm20.launcher2.ktx.dp
import java.util.*
class BatteryChargingView : View, DefaultLifecycleObserver {
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 var animating = false
private val activity = context as AppCompatActivity
init {
activity.lifecycle.addObserver(this)
}
private val batteryReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action != Intent.ACTION_BATTERY_CHANGED) return
update(intent, true)
}
}
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
val intent = activity.registerReceiver(batteryReceiver, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
start()
intent?.let { update(it, true) }
}
override fun onPause(owner: LifecycleOwner) {
super.onPause(owner)
stop()
try {
activity.unregisterReceiver(batteryReceiver)
} catch (e: IllegalArgumentException) {
}
}
private fun update(intent: Intent, retryOnZeroCurrent: Boolean = false) {
val status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)
val charging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL
if (charging) {
val bm = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val current = bm.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW)
if (current <= 0) {
intensity = 5
start()
//Workaround for delayed current updates
if (retryOnZeroCurrent) postDelayed({ update(intent) }, 1000)
return
}
intensity = Math.round(current / 100000f).takeIf { it > 0 } ?: 1
start()
} else {
intensity = 0
}
}
var intensity = 0
set(value) {
if (field == 0 && value > 0) start()
if (value == 0) stop()
field = when {
value > 100 -> 100
value < 0 -> 0
else -> value
}
for (i in field until bubbles.size) {
bubbles.pop()
}
for (i in bubbles.size until field) {
bubbles.push(FloatArray(6) { 0f })
}
}
fun start() {
if (animating || intensity == 0) return
animating = true
invalidate()
}
fun stop() {
animating = false
}
/**
* 0: Pos X
* 1: Pos Y
* 2: Delta X
* 3: Delta Y
* 4: Radius
* 5: Lifetime left
*/
private var bubbles = ArrayDeque<FloatArray>()
private val paint = Paint()
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
if (!animating) return
for (b in bubbles) {
if (b[5] <= 0f) {
b[0] = (Math.random() * width).toFloat()
b[1] = height.toFloat()
b[2] = ((Math.random() - 0.5) * width / 120f).toFloat() * dp
b[3] = -(Math.random() * height / 90f).toFloat() * dp
b[4] = (Math.random() * 2 + 2).toFloat() * dp
b[5] = (Math.random() * 80 + 40).toInt().toFloat()
}
paint.color = Color.argb((b[5] / 120f * 120).toInt(), 255, 255, 255)
canvas.drawCircle(b[0], b[1], b[4], paint)
b[0] += b[2]
b[1] += b[3]
b[5]--
}
postInvalidate()
}
}
@@ -1,15 +0,0 @@
package de.mm20.launcher2.ui.settings
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.runBlocking
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
class SettingsActivityVM: ViewModel(), KoinComponent {
}
@@ -1,7 +1,6 @@
package de.mm20.launcher2.ui.settings.accounts
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
@@ -318,7 +318,6 @@ fun SearchBarStylePreference(
}
}
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun IconShapePreference(
title: String,
@@ -1,6 +1,5 @@
package de.mm20.launcher2.ui.settings.backup
import android.net.Uri
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.runtime.*
@@ -1,19 +1,9 @@
package de.mm20.launcher2.ui.settings.backup
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.core.content.FileProvider
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.backup.BackupManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import java.io.File
class BackupSettingsScreenVM : ViewModel(), KoinComponent {
@@ -1,17 +1,12 @@
package de.mm20.launcher2.ui.settings.buildinfo
import android.content.pm.PackageManager
import android.os.Build
import android.util.Base64
import androidx.lifecycle.ViewModel
import androidx.lifecycle.liveData
import de.mm20.launcher2.accounts.AccountType
import de.mm20.launcher2.accounts.AccountsRepository
import de.mm20.launcher2.preferences.Settings.WeatherSettings.WeatherProvider
import de.mm20.launcher2.weather.WeatherRepository
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import java.security.MessageDigest
class BuildInfoSettingsScreenVM : ViewModel(), KoinComponent {
private val accountsRepository: AccountsRepository by inject()
@@ -20,7 +20,7 @@ import com.google.accompanist.pager.HorizontalPagerIndicator
import com.google.accompanist.pager.rememberPagerState
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockStyle
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetLayout
import de.mm20.launcher2.ui.Clock
import de.mm20.launcher2.ui.launcher.widgets.clock.Clock
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.preferences.*
@@ -2,7 +2,6 @@ package de.mm20.launcher2.ui.settings.crashreporter
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.liveData
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.crashreporter.BuildConfig
import de.mm20.launcher2.crashreporter.CrashReport
@@ -4,8 +4,6 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.preferences.Settings.IconSettings.IconShape
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import org.koin.core.component.KoinComponent
@@ -82,7 +82,7 @@ fun HiddenItemsSettingsScreen() {
DropdownMenuItem(
text = { Text(stringResource(R.string.menu_app_info)) },
onClick = {
viewModel.openAppInfo(context, searchable as Application)
viewModel.openAppInfo(context, searchable)
showPopup = false
})
@@ -1,17 +1,9 @@
package de.mm20.launcher2.ui.settings.websearch
import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import androidx.core.graphics.drawable.toBitmap
import androidx.core.graphics.scale
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import coil.imageLoader
import coil.request.ImageRequest
import coil.size.Scale
import de.mm20.launcher2.search.WebsearchRepository
import de.mm20.launcher2.search.data.Websearch
import kotlinx.coroutines.Dispatchers
@@ -20,7 +12,6 @@ import kotlinx.coroutines.withContext
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import java.io.File
import java.io.FileOutputStream
class WebSearchSettingsScreenVM: ViewModel(), KoinComponent {
private val repository: WebsearchRepository by inject()