Skip to content

Commit 122dab4

Browse files
Merge pull request #42 from VaibhavLakhera/develop
Added Work profile support
2 parents 8722a6e + e9f4084 commit 122dab4

23 files changed

+396
-229
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ android {
1515
applicationId = "com.minimo.launcher"
1616
minSdk = 26
1717
targetSdk = 35
18-
versionCode = 49
19-
versionName = "1.15.2"
18+
versionCode = 50
19+
versionName = "1.16.0"
2020
}
2121

2222
buildFeatures {

app/src/main/java/com/minimo/launcher/data/AppInfoDao.kt

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,42 +9,42 @@ import kotlinx.coroutines.flow.Flow
99

1010
@Dao
1111
interface AppInfoDao {
12-
@Query("SELECT * FROM appInfoEntity WHERE user_handle = :userHandle ORDER BY COALESCE( NULLIF(alternate_app_name, ''), app_name ) COLLATE NOCASE")
13-
fun getAllAppsFlow(userHandle: Int): Flow<List<AppInfoEntity>>
12+
@Query("SELECT * FROM appInfoEntity ORDER BY COALESCE( NULLIF(alternate_app_name, ''), app_name ) COLLATE NOCASE")
13+
fun getAllAppsFlow(): Flow<List<AppInfoEntity>>
1414

1515
@Query("SELECT * FROM appInfoEntity ORDER BY COALESCE( NULLIF(alternate_app_name, ''), app_name ) COLLATE NOCASE")
1616
suspend fun getAllApps(): List<AppInfoEntity>
1717

18-
@Query("SELECT * FROM appInfoEntity WHERE is_hidden = 0 AND user_handle = :userHandle ORDER BY COALESCE( NULLIF(alternate_app_name, ''), app_name ) COLLATE NOCASE")
19-
fun getAllNonHiddenAppsFlow(userHandle: Int): Flow<List<AppInfoEntity>>
18+
@Query("SELECT * FROM appInfoEntity WHERE is_hidden = 0 ORDER BY COALESCE( NULLIF(alternate_app_name, ''), app_name ) COLLATE NOCASE")
19+
fun getAllNonHiddenAppsFlow(): Flow<List<AppInfoEntity>>
2020

2121
@Query("SELECT * FROM appInfoEntity WHERE package_name = :packageName")
2222
suspend fun getAppsByPackageName(packageName: String): List<AppInfoEntity>
2323

2424
@Insert(onConflict = OnConflictStrategy.REPLACE)
2525
suspend fun addApps(apps: List<AppInfoEntity>)
2626

27-
@Query("SELECT * FROM appInfoEntity WHERE is_favourite = 1 AND user_handle = :userHandle ORDER BY COALESCE( NULLIF(alternate_app_name, ''), app_name ) COLLATE NOCASE")
28-
fun getFavouriteAppsFlow(userHandle: Int): Flow<List<AppInfoEntity>>
27+
@Query("SELECT * FROM appInfoEntity WHERE is_favourite = 1 ORDER BY COALESCE( NULLIF(alternate_app_name, ''), app_name ) COLLATE NOCASE")
28+
fun getFavouriteAppsFlow(): Flow<List<AppInfoEntity>>
2929

30-
@Query("UPDATE appInfoEntity SET is_favourite = 1 WHERE class_name = :className AND package_name = :packageName")
31-
suspend fun addAppToFavourite(className: String, packageName: String)
30+
@Query("UPDATE appInfoEntity SET is_favourite = 1 WHERE class_name = :className AND package_name = :packageName AND user_handle = :userHandle")
31+
suspend fun addAppToFavourite(className: String, packageName: String, userHandle: Int)
3232

33-
@Query("UPDATE appInfoEntity SET is_favourite = 0 WHERE class_name = :className AND package_name = :packageName")
34-
suspend fun removeAppFromFavourite(className: String, packageName: String)
33+
@Query("UPDATE appInfoEntity SET is_favourite = 0 WHERE class_name = :className AND package_name = :packageName AND user_handle = :userHandle")
34+
suspend fun removeAppFromFavourite(className: String, packageName: String, userHandle: Int)
3535

36-
@Query("UPDATE appInfoEntity SET is_hidden = 1, is_favourite = 0 WHERE class_name = :className AND package_name = :packageName")
37-
suspend fun addAppToHidden(className: String, packageName: String)
36+
@Query("UPDATE appInfoEntity SET is_hidden = 1, is_favourite = 0 WHERE class_name = :className AND package_name = :packageName AND user_handle = :userHandle")
37+
suspend fun addAppToHidden(className: String, packageName: String, userHandle: Int)
3838

39-
@Query("UPDATE appInfoEntity SET is_hidden = 0 WHERE class_name = :className AND package_name = :packageName")
40-
suspend fun removeAppFromHidden(className: String, packageName: String)
39+
@Query("UPDATE appInfoEntity SET is_hidden = 0 WHERE class_name = :className AND package_name = :packageName AND user_handle = :userHandle")
40+
suspend fun removeAppFromHidden(className: String, packageName: String, userHandle: Int)
4141

4242
@Query("UPDATE appInfoEntity SET alternate_app_name = :newName WHERE class_name = :className AND package_name = :packageName")
4343
suspend fun renameApp(className: String, packageName: String, newName: String)
4444

45-
@Query("DELETE FROM appInfoEntity WHERE class_name = :className AND package_name = :packageName")
46-
suspend fun deleteAppByClassAndPackage(className: String, packageName: String)
45+
@Query("DELETE FROM appInfoEntity WHERE class_name = :className AND package_name = :packageName AND user_handle = :userHandle")
46+
suspend fun deleteAppByClassAndPackage(className: String, packageName: String, userHandle: Int)
4747

48-
@Query("DELETE FROM appInfoEntity WHERE package_name = :packageName")
49-
suspend fun deleteAppByPackage(packageName: String)
48+
@Query("DELETE FROM appInfoEntity WHERE package_name = :packageName AND user_handle = :userHandle")
49+
suspend fun deleteAppByPackage(packageName: String, userHandle: Int)
5050
}

app/src/main/java/com/minimo/launcher/data/usecase/AddUpdateAppsUseCase.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ class AddUpdateAppsUseCase @Inject constructor(
2424
for (removedApp in removedApps) {
2525
appInfoDao.deleteAppByClassAndPackage(
2626
className = removedApp.className,
27-
packageName = removedApp.packageName
27+
packageName = removedApp.packageName,
28+
userHandle = removedApp.userHandle
2829
)
2930
}
3031
}

app/src/main/java/com/minimo/launcher/data/usecase/RemoveAppsUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import javax.inject.Singleton
88
class RemoveAppsUseCase @Inject constructor(
99
private val appInfoDao: AppInfoDao
1010
) {
11-
suspend operator fun invoke(packageName: String) {
12-
appInfoDao.deleteAppByPackage(packageName)
11+
suspend operator fun invoke(packageName: String, userHandle: Int) {
12+
appInfoDao.deleteAppByPackage(packageName, userHandle)
1313
}
1414
}

app/src/main/java/com/minimo/launcher/data/usecase/UpdateAllAppsUseCase.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ class UpdateAllAppsUseCase @Inject constructor(
5757
for (deleteApp in deleteApps) {
5858
appInfoDao.deleteAppByClassAndPackage(
5959
className = deleteApp.className,
60-
packageName = deleteApp.packageName
60+
packageName = deleteApp.packageName,
61+
userHandle = deleteApp.userHandle
6162
)
6263
}
6364
}

app/src/main/java/com/minimo/launcher/ui/components/ToggleAppItem.kt

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,63 @@
11
package com.minimo.launcher.ui.components
22

33
import androidx.compose.foundation.clickable
4+
import androidx.compose.foundation.layout.PaddingValues
45
import androidx.compose.foundation.layout.Row
56
import androidx.compose.foundation.layout.Spacer
67
import androidx.compose.foundation.layout.padding
8+
import androidx.compose.foundation.layout.size
79
import androidx.compose.foundation.layout.width
10+
import androidx.compose.material3.Icon
11+
import androidx.compose.material3.MaterialTheme
812
import androidx.compose.material3.Switch
913
import androidx.compose.material3.Text
1014
import androidx.compose.runtime.Composable
15+
import androidx.compose.runtime.remember
1116
import androidx.compose.ui.Alignment
1217
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.res.painterResource
1319
import androidx.compose.ui.unit.dp
1420
import androidx.compose.ui.unit.sp
21+
import com.minimo.launcher.R
1522
import com.minimo.launcher.ui.theme.Dimens
1623

1724
@Composable
1825
fun ToggleAppItem(
1926
modifier: Modifier,
2027
appName: String,
2128
isChecked: Boolean,
29+
isWorkProfile: Boolean,
2230
onToggleClick: () -> Unit
2331
) {
32+
val paddingValues = remember(isWorkProfile) {
33+
if (isWorkProfile) {
34+
PaddingValues(
35+
start = 0.dp,
36+
end = Dimens.APP_HORIZONTAL_SPACING,
37+
top = 4.dp,
38+
bottom = 4.dp
39+
)
40+
} else {
41+
PaddingValues(horizontal = Dimens.APP_HORIZONTAL_SPACING, vertical = 4.dp)
42+
}
43+
}
44+
2445
Row(
2546
modifier = modifier
2647
.clickable(onClick = onToggleClick)
27-
.padding(horizontal = Dimens.APP_HORIZONTAL_SPACING, vertical = 4.dp),
48+
.padding(paddingValues),
2849
verticalAlignment = Alignment.CenterVertically
2950
) {
51+
if (isWorkProfile) {
52+
Icon(
53+
painter = painterResource(id = R.drawable.ic_work_profile),
54+
modifier = Modifier
55+
.padding(horizontal = 8.dp)
56+
.size(16.dp),
57+
tint = MaterialTheme.colorScheme.onSurface,
58+
contentDescription = null
59+
)
60+
}
3061
Text(
3162
modifier = Modifier.weight(1f),
3263
text = appName,

app/src/main/java/com/minimo/launcher/ui/entities/AppInfo.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ data class AppInfo(
77
val appName: String,
88
val alternateAppName: String,
99
val isFavourite: Boolean,
10-
val isHidden: Boolean
10+
val isHidden: Boolean,
11+
val isWorkProfile: Boolean
1112
) {
1213
val name: String
1314
get() = alternateAppName.ifEmpty { appName }

app/src/main/java/com/minimo/launcher/ui/favourite_apps/FavouriteAppsScreen.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ fun FavouriteAppsScreen(
119119
modifier = Modifier.animateItem(),
120120
appName = appInfo.name,
121121
isChecked = appInfo.isFavourite,
122+
isWorkProfile = appInfo.isWorkProfile,
122123
onToggleClick = { viewModel.onToggleFavouriteAppClick(appInfo) }
123124
)
124125
}

app/src/main/java/com/minimo/launcher/ui/favourite_apps/FavouriteAppsViewModel.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class FavouriteAppsViewModel @Inject constructor(
2222

2323
init {
2424
viewModelScope.launch {
25-
appInfoDao.getAllNonHiddenAppsFlow(userHandle = appUtils.getCurrentUserHandle())
25+
appInfoDao.getAllNonHiddenAppsFlow()
2626
.collect { appInfoList ->
2727
val allApps = appUtils.mapToAppInfo(appInfoList)
2828
val favouriteApps = allApps.filter { it.isFavourite }
@@ -49,9 +49,17 @@ class FavouriteAppsViewModel @Inject constructor(
4949
fun onToggleFavouriteAppClick(appInfo: AppInfo) {
5050
viewModelScope.launch {
5151
if (appInfo.isFavourite) {
52-
appInfoDao.removeAppFromFavourite(appInfo.className, appInfo.packageName)
52+
appInfoDao.removeAppFromFavourite(
53+
appInfo.className,
54+
appInfo.packageName,
55+
appInfo.userHandle
56+
)
5357
} else {
54-
appInfoDao.addAppToFavourite(appInfo.className, appInfo.packageName)
58+
appInfoDao.addAppToFavourite(
59+
appInfo.className,
60+
appInfo.packageName,
61+
appInfo.userHandle
62+
)
5563
}
5664
}
5765
}

app/src/main/java/com/minimo/launcher/ui/hidden_apps/HiddenAppsScreen.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ fun HiddenAppsScreen(
119119
modifier = Modifier.animateItem(),
120120
appName = appInfo.name,
121121
isChecked = appInfo.isHidden,
122+
isWorkProfile = appInfo.isWorkProfile,
122123
onToggleClick = { viewModel.onToggleHiddenAppClick(appInfo) }
123124
)
124125
}

0 commit comments

Comments
 (0)