Skip to content

Commit

Permalink
Tile (#243)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelbel committed Mar 5, 2024
1 parent 96487eb commit b7fe919
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 2 deletions.
13 changes: 13 additions & 0 deletions android-app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,19 @@

</service>

<service
android:name="org.michaelbel.movies.ui.tile.MoviesTileService"
android:icon="@drawable/ic_movie_filter_24"
android:label="@string/tile_title"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
android:exported="true">

<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>

</service>

<!-- AdMob -->
<!--<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import androidx.compose.material.icons.outlined.Search
import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material.icons.outlined.SystemUpdate
import androidx.compose.material.icons.outlined.ViewAgenda
import androidx.compose.material.icons.outlined.Visibility
import androidx.compose.material.icons.outlined.VisibilityOff
import androidx.compose.material.icons.outlined.Widgets
Expand Down Expand Up @@ -59,6 +60,7 @@ object MoviesIcons {
val Settings = Icons.Outlined.Settings
val Share = Icons.Outlined.Share
val SystemUpdate = Icons.Outlined.SystemUpdate
val ViewAgenda = Icons.Outlined.ViewAgenda
val Visibility = Icons.Outlined.Visibility
val VisibilityOff = Icons.Outlined.VisibilityOff
val Widgets = Icons.Outlined.Widgets
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.michaelbel.movies.ui.tile

import android.app.PendingIntent
import android.content.Intent
import android.graphics.drawable.Icon
import android.os.Build
import android.service.quicksettings.TileService
import android.widget.Toast
import org.michaelbel.movies.ui.R
import org.michaelbel.movies.ui.icons.MoviesIcons

class MoviesTileService: TileService() {

override fun onTileAdded() {
super.onTileAdded()
Toast.makeText(this, R.string.tile_added, Toast.LENGTH_SHORT).show()
}

override fun onStartListening() {
super.onStartListening()
val tile = qsTile
tile.label = getString(R.string.tile_title)
tile.icon = Icon.createWithResource(this, MoviesIcons.MovieFilter24)
tile.updateTile()
}

override fun onClick() {
super.onClick()
runCatching {
val intent = packageManager.getLaunchIntentForPackage(packageName)?.apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
val pendingIntent = PendingIntent.getActivity(
this,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
if (Build.VERSION.SDK_INT >= 34) {
startActivityAndCollapse(pendingIntent)
} else {
@Suppress("deprecation")
startActivityAndCollapse(intent)
}
}
}
}
2 changes: 2 additions & 0 deletions core/ui/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@
<string name="error_loading">При загрузке фильмов произошла ошибка</string>
<string name="error_check_internet_connectivity">Проверить подключение к интернету</string>
<string name="share_via">Поделиться через</string>
<string name="tile_title">Movies</string>
<string name="tile_added">Плитка добавлена</string>
</resources>
2 changes: 2 additions & 0 deletions core/ui/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@
<string name="error_loading">Error while loading movies</string>
<string name="error_check_internet_connectivity">Check Internet Connectivity</string>
<string name="share_via">Share via</string>
<string name="tile_title">Movies</string>
<string name="tile_added">Movies Tile added</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ package org.michaelbel.movies.settings.ui
import android.Manifest
import android.app.Activity
import android.app.GrammaticalInflectionManager
import android.app.StatusBarManager
import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.graphics.drawable.Icon
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.background
Expand Down Expand Up @@ -37,6 +40,7 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -68,6 +72,7 @@ import org.michaelbel.movies.ui.ktx.appNotificationSettingsIntent
import org.michaelbel.movies.ui.ktx.clickableWithoutRipple
import org.michaelbel.movies.ui.ktx.displayCutoutWindowInsets
import org.michaelbel.movies.ui.lifecycle.OnResume
import org.michaelbel.movies.ui.tile.MoviesTileService
import org.michaelbel.movies.widget.ktx.pin
import org.michaelbel.movies.ui.R as UiR
import org.michaelbel.movies.widget.R as WidgetR
Expand Down Expand Up @@ -458,6 +463,35 @@ private fun SettingsScreenContent(
color = MaterialTheme.colorScheme.onPrimaryContainer
)
}
item {
fun onRequestAddTileService() {
val statusBarManager = ContextCompat.getSystemService(context, StatusBarManager::class.java)
statusBarManager?.requestAddTileService(
ComponentName(context, MoviesTileService::class.java),
context.getString(UiR.string.tile_title),
Icon.createWithResource(context, MoviesIcons.MovieFilter24),
context.mainExecutor
) { result ->
when (result) {
StatusBarManager.TILE_ADD_REQUEST_RESULT_TILE_ALREADY_ADDED -> onShowSnackbar(context.getString(R.string.settings_tile_error_already_added))
}
}
}

SettingItem(
title = stringResource(R.string.settings_tile),
description = stringResource(R.string.settings_tile_description),
icon = MoviesIcons.ViewAgenda,
onClick = { onRequestAddTileService() }
)
}
item {
HorizontalDivider(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp),
thickness = .1.dp,
color = MaterialTheme.colorScheme.onPrimaryContainer
)
}
item {
Text(
text = stringResource(R.string.settings_app_launcher_icon),
Expand Down
5 changes: 4 additions & 1 deletion feature/settings-impl/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,11 @@
<string name="settings_action_cancel">Отмена</string>
<string name="settings_github">Movies на GitHub</string>
<string name="settings_github_description">Посмотреть GitHub-репозиторий</string>
<string name="settings_app_widget">Установить виджет</string>
<string name="settings_app_widget">Добавить виджет на главный экран</string>
<string name="settings_app_widget_description">3x2 %s</string>
<string name="settings_tile">Добавить плитку в шторку</string>
<string name="settings_tile_description">Плитка для запуска аппки</string>
<string name="settings_tile_error_already_added">Плитка уже добавлена</string>
<string name="settings_gender">Род</string>
<string name="settings_gender_not_specified">Не указан</string>
<string name="settings_gender_neutral">Средний</string>
Expand Down
5 changes: 4 additions & 1 deletion feature/settings-impl/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,11 @@
<string name="settings_action_cancel">Cancel</string>
<string name="settings_github">Movies on GitHub</string>
<string name="settings_github_description">Check the GitHub repository</string>
<string name="settings_app_widget">Install AppWidget</string>
<string name="settings_app_widget">Add Widget to Home Screen</string>
<string name="settings_app_widget_description">3x2 %s</string>
<string name="settings_tile">Add Tile to Quick Settings</string>
<string name="settings_tile_description">Movies launcher tile</string>
<string name="settings_tile_error_already_added">Tile already added</string>
<string name="settings_gender">Gender</string>
<string name="settings_gender_not_specified">Not specified</string>
<string name="settings_gender_neutral">Neutral</string>
Expand Down
1 change: 1 addition & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ TMDB_API_KEY=your_own_tmdb_api_key
- [x] [Voice Input](https://d.android.com/training/wearables/user-input/voice)
- [x] [User Interactions](https://d.android.com/jetpack/compose/text/user-interactions)
- [x] [Glance AppWidget](https://d.android.com/jetpack/compose/glance)
- [x] [Tile Quick Settings](https://d.android.com/reference/android/service/quicksettings/TileService)
- [x] [Grammatical Gender](https://d.android.com/about/versions/14/features/grammatical-inflection)
- [x] [Biometric Authentication Dialog](https://d.android.com/training/sign-in/biometric-auth)
- [x] [LeakCanary](https://github.com/square/leakcanary)
Expand Down

0 comments on commit b7fe919

Please sign in to comment.