Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support reordering favorites #7

Merged
merged 5 commits into from
May 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package dev.mslalith.focuslauncher

import android.content.Context
import dev.mslalith.focuslauncher.data.models.LunarPhaseDetails
import dev.mslalith.focuslauncher.data.models.Outcome
import dev.mslalith.focuslauncher.data.models.UpcomingLunarPhase
import dev.mslalith.focuslauncher.data.respository.interfaces.LunarPhaseDetailsRepo
import dev.mslalith.focuslauncher.data.repository.interfaces.LunarPhaseDetailsRepo
import dev.mslalith.focuslauncher.extensions.formatToTime
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
Expand Down Expand Up @@ -36,7 +35,7 @@ class FakeLunarPhaseDetailsRepo(

var instantTimeList = listOf<Instant>()

private fun setupTickJob(context: Context) {
private fun setupTickJob() {
tickJob = coroutineScope.launch {
instantTimeList.forEach { currentInstant ->
_currentTimeStateFlow.value = Outcome.Success(currentInstant.formatToTime())
Expand All @@ -45,7 +44,7 @@ class FakeLunarPhaseDetailsRepo(
updateStateFlowsWith(lunarPhaseDetails)
}
instantTimeList = emptyList()
unregisterToTimeChange(context)
unregisterToTimeChange()
}
}

Expand All @@ -54,12 +53,16 @@ class FakeLunarPhaseDetailsRepo(
_upcomingLunarPhaseStateFlow.value = Outcome.Success(findUpcomingMoonPhaseFor(lunarPhaseDetails.direction))
}

override fun registerToTimeChange(context: Context) {
override fun refreshTime() {
TODO("Not yet implemented")
}

fun registerToTimeChange() {
_isTimeChangeBroadcastReceiverRegisteredFlow.value = true
setupTickJob(context)
setupTickJob()
}

override fun unregisterToTimeChange(context: Context) {
fun unregisterToTimeChange() {
_isTimeChangeBroadcastReceiverRegisteredFlow.value = false
tickJob?.cancel()
tickJob = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package dev.mslalith.focuslauncher

import dev.mslalith.focuslauncher.data.database.entities.Quote
import dev.mslalith.focuslauncher.data.models.Outcome
import dev.mslalith.focuslauncher.data.respository.interfaces.QuotesRepo
import dev.mslalith.focuslauncher.data.repository.interfaces.QuotesRepo
import dev.mslalith.focuslauncher.utils.Constants
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import android.content.Context
import androidx.room.Room
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import android.content.Context
import androidx.datastore.core.DataStore
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import android.content.Context
import androidx.room.Room
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import android.content.Context
import androidx.room.Room
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import android.content.Context
import androidx.test.core.app.ApplicationProvider
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat
import dev.mslalith.focuslauncher.FakeLunarPhaseDetailsRepo
Expand All @@ -22,12 +20,10 @@ import kotlin.time.Duration.Companion.seconds
@OptIn(ExperimentalCoroutinesApi::class)
class LunarPhaseDetailsRepoTest {

private lateinit var context: Context
private lateinit var lunarPhaseDetailsRepo: FakeLunarPhaseDetailsRepo

@Before
fun setUp() {
context = ApplicationProvider.getApplicationContext()
lunarPhaseDetailsRepo = FakeLunarPhaseDetailsRepo(TestCoroutineScope())
}

Expand Down Expand Up @@ -62,7 +58,7 @@ class LunarPhaseDetailsRepoTest {
}
}

lunarPhaseDetailsRepo.registerToTimeChange(context)
lunarPhaseDetailsRepo.registerToTimeChange()
job.join()
}

Expand All @@ -82,7 +78,7 @@ class LunarPhaseDetailsRepoTest {
}
}

lunarPhaseDetailsRepo.registerToTimeChange(context)
lunarPhaseDetailsRepo.registerToTimeChange()
job.join()
}

Expand All @@ -103,7 +99,7 @@ class LunarPhaseDetailsRepoTest {
}
}

lunarPhaseDetailsRepo.registerToTimeChange(context)
lunarPhaseDetailsRepo.registerToTimeChange()
job.join()
}

Expand All @@ -118,9 +114,9 @@ class LunarPhaseDetailsRepoTest {
}
}

lunarPhaseDetailsRepo.registerToTimeChange(context)
lunarPhaseDetailsRepo.registerToTimeChange()
advanceTimeBy(2_000)
lunarPhaseDetailsRepo.unregisterToTimeChange(context)
lunarPhaseDetailsRepo.unregisterToTimeChange()

job.join()
}
Expand All @@ -136,9 +132,9 @@ class LunarPhaseDetailsRepoTest {
}
}

lunarPhaseDetailsRepo.registerToTimeChange(context)
lunarPhaseDetailsRepo.registerToTimeChange()
advanceTimeBy(3_000)
lunarPhaseDetailsRepo.unregisterToTimeChange(context)
lunarPhaseDetailsRepo.unregisterToTimeChange()

job.join()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import com.google.common.truth.Truth.assertThat
import dev.mslalith.focuslauncher.data.models.AppDrawerViewType
import dev.mslalith.focuslauncher.data.respository.DataStoreTest
import dev.mslalith.focuslauncher.data.repository.DataStoreTest
import dev.mslalith.focuslauncher.utils.Constants
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import com.google.common.truth.Truth.assertThat
import dev.mslalith.focuslauncher.data.models.ClockAlignment
import dev.mslalith.focuslauncher.data.respository.DataStoreTest
import dev.mslalith.focuslauncher.data.repository.DataStoreTest
import dev.mslalith.focuslauncher.utils.Constants
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import com.google.common.truth.Truth.assertThat
import dev.mslalith.focuslauncher.data.respository.DataStoreTest
import dev.mslalith.focuslauncher.data.repository.DataStoreTest
import dev.mslalith.focuslauncher.utils.Constants
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import com.google.common.truth.Truth.assertThat
import dev.mslalith.focuslauncher.data.respository.DataStoreTest
import dev.mslalith.focuslauncher.data.repository.DataStoreTest
import dev.mslalith.focuslauncher.utils.Constants
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import dev.mslalith.focuslauncher.data.respository.DataStoreTest
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import com.google.common.truth.Truth.assertThat
import dev.mslalith.focuslauncher.data.repository.DataStoreTest
import dev.mslalith.focuslauncher.utils.Constants
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import org.junit.Test

@OptIn(ExperimentalCoroutinesApi::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ interface FavoriteAppsDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun addFavorite(favoriteApp: FavoriteApp)

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun addFavorites(favoriteApps: List<FavoriteApp>)

@Delete
suspend fun removeFavorite(favoriteApp: FavoriteApp)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import dev.mslalith.focuslauncher.data.database.dao.AppsDao
import dev.mslalith.focuslauncher.data.database.entities.App
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import dev.mslalith.focuslauncher.data.database.dao.AppsDao
import dev.mslalith.focuslauncher.data.database.dao.FavoriteAppsDao
import dev.mslalith.focuslauncher.data.database.entities.App
import dev.mslalith.focuslauncher.data.database.entities.FavoriteApp
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import javax.inject.Inject

Expand All @@ -21,6 +22,19 @@ class FavoritesRepo @Inject constructor(
favoriteAppsDao.addFavorite(FavoriteApp(app.packageName))
}

suspend fun reorderFavorite(app: App, withApp: App) {
val apps = favoriteAppsDao.getFavoriteAppsFlow().first().toMutableList()
val appIndex = apps.indexOfFirst { it.packageName == app.packageName }
val withAppIndex = apps.indexOfFirst { it.packageName == withApp.packageName }
if (appIndex == -1 || withAppIndex == -1) return

apps[appIndex] = FavoriteApp(app.packageName)
apps[withAppIndex] = FavoriteApp(withApp.packageName)

favoriteAppsDao.clearFavoriteApps()
favoriteAppsDao.addFavorites(apps)
}

suspend fun removeFromFavorites(packageName: String) {
favoriteAppsDao.removeFavorite(FavoriteApp(packageName))
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import dev.mslalith.focuslauncher.data.database.dao.AppsDao
import dev.mslalith.focuslauncher.data.database.dao.HiddenAppsDao
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import dev.mslalith.focuslauncher.data.models.LunarPhaseDetails
import dev.mslalith.focuslauncher.data.models.Outcome
import dev.mslalith.focuslauncher.data.models.UpcomingLunarPhase
import dev.mslalith.focuslauncher.data.respository.interfaces.LunarPhaseDetailsRepo
import dev.mslalith.focuslauncher.data.repository.interfaces.LunarPhaseDetailsRepo
import dev.mslalith.focuslauncher.extensions.formatToTime
import dev.mslalith.focuslauncher.extensions.runAfter
import kotlinx.coroutines.flow.MutableStateFlow
Expand Down Expand Up @@ -37,31 +33,14 @@ class LunarPhaseDetailsRepoImpl @Inject constructor() : LunarPhaseDetailsRepo()
updateStateFlowsWith(lunarPhaseDetails)
}

private val timeChangeBroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val currentInstant = Clock.System.now()
val delayInMillis = Random.nextInt(from = 8, until = 17) * 100L
_currentTimeStateFlow.value = Outcome.Success(currentInstant.formatToTime())

runAfter(delayInMillis) {
val lunarPhaseDetails = findLunarPhaseDetails(currentInstant)
updateStateFlowsWith(lunarPhaseDetails)
}
}
}

override fun registerToTimeChange(context: Context) {
context.registerReceiver(
timeChangeBroadcastReceiver,
IntentFilter(Intent.ACTION_TIME_TICK)
)
}
override fun refreshTime() {
val currentInstant = Clock.System.now()
val delayInMillis = Random.nextInt(from = 8, until = 17) * 100L
_currentTimeStateFlow.value = Outcome.Success(currentInstant.formatToTime())

override fun unregisterToTimeChange(context: Context) {
try {
context.unregisterReceiver(timeChangeBroadcastReceiver)
} catch (ex: IllegalArgumentException) {
ex.printStackTrace()
runAfter(delayInMillis) {
val lunarPhaseDetails = findLunarPhaseDetails(currentInstant)
updateStateFlowsWith(lunarPhaseDetails)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository
package dev.mslalith.focuslauncher.data.repository

import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
Expand All @@ -7,7 +7,7 @@ import dev.mslalith.focuslauncher.data.database.dao.QuotesDao
import dev.mslalith.focuslauncher.data.database.entities.Quote
import dev.mslalith.focuslauncher.data.models.Outcome
import dev.mslalith.focuslauncher.data.models.QuoteResponse
import dev.mslalith.focuslauncher.data.respository.interfaces.QuotesRepo
import dev.mslalith.focuslauncher.data.repository.interfaces.QuotesRepo
import dev.mslalith.focuslauncher.utils.Constants.Defaults.QUOTES_LIMIT
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.mslalith.focuslauncher.data.respository.interfaces
package dev.mslalith.focuslauncher.data.repository.interfaces

import android.content.Context
import androidx.annotation.VisibleForTesting
import dev.mslalith.focuslauncher.data.models.LunarPhase
import dev.mslalith.focuslauncher.data.models.LunarPhaseDetails
Expand All @@ -20,8 +19,7 @@ abstract class LunarPhaseDetailsRepo {
abstract val lunarPhaseDetailsStateFlow: StateFlow<Outcome<LunarPhaseDetails>>
abstract val upcomingLunarPhaseStateFlow: StateFlow<Outcome<UpcomingLunarPhase>>

abstract fun registerToTimeChange(context: Context)
abstract fun unregisterToTimeChange(context: Context)
abstract fun refreshTime()

@VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
fun findLunarPhaseDetails(instant: Instant): LunarPhaseDetails =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository.interfaces
package dev.mslalith.focuslauncher.data.repository.interfaces

import dev.mslalith.focuslauncher.data.database.entities.Quote
import dev.mslalith.focuslauncher.data.models.Outcome
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.mslalith.focuslauncher.data.respository.settings
package dev.mslalith.focuslauncher.data.repository.settings

import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
Expand Down