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

Tile #243

Merged
merged 1 commit into from
Mar 5, 2024
Merged

Tile #243

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading