summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/layout/chooser_headline_row.xml8
-rw-r--r--java/res/values-ar/strings.xml2
-rw-r--r--java/res/values-in/strings.xml2
-rw-r--r--java/res/values-nb/strings.xml2
-rw-r--r--java/res/values-pt-rBR/strings.xml2
-rw-r--r--java/res/values-pt/strings.xml2
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt24
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/ChooserRequestInteractor.kt3
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ComposeIconComposable.kt19
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt21
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt5
11 files changed, 76 insertions, 14 deletions
diff --git a/java/res/layout/chooser_headline_row.xml b/java/res/layout/chooser_headline_row.xml
index 97e8552e..bfce7473 100644
--- a/java/res/layout/chooser_headline_row.xml
+++ b/java/res/layout/chooser_headline_row.xml
@@ -65,13 +65,17 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="@dimen/modify_share_text_toggle_max_width"
+ android:background="@drawable/chooser_action_button_bg"
app:layout_constraintEnd_toEndOf="parent"
android:maxLines="2"
android:ellipsize="end"
android:visibility="gone"
- android:paddingTop="3dp"
- style="@style/TextAppearance.ChooserDefault"
+ android:paddingVertical="3dp"
+ android:paddingHorizontal="@dimen/chooser_edge_margin_normal_half"
+ style="?android:attr/borderlessButtonStyle"
android:drawableEnd="@drawable/chevron_right"
+ android:textColor="?androidprv:attr/materialColorOnSurface"
+ android:textSize="12sp"
/>
<!-- This is only relevant for image+text preview, but needs to be in this layout so it can
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index a5979327..3b27b005 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -49,7 +49,7 @@
<string name="forward_intent_to_work" msgid="2906094223089139419">"أنت تستخدم هذا التطبيق في ملفك الشخصي للعمل"</string>
<string name="activity_resolver_use_always" msgid="8674194687637555245">"دائمًا"</string>
<string name="activity_resolver_use_once" msgid="594173435998892989">"مرة واحدة فقط"</string>
- <string name="activity_resolver_work_profiles_support" msgid="8228711455685203580">"لا يتوافق تطبيق \"<xliff:g id="APP">%1$s</xliff:g>\" مع الملف الشخصي للعمل."</string>
+ <string name="activity_resolver_work_profiles_support" msgid="8228711455685203580">"لا يتوافق تطبيق \"<xliff:g id="APP">%1$s</xliff:g>\" مع ملف العمل."</string>
<string name="pin_specific_target" msgid="5057063421361441406">"تثبيت <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="unpin_specific_target" msgid="3115158908159857777">"إزالة تثبيت <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="screenshot_edit" msgid="3857183660047569146">"تعديل"</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 83d18123..40313afa 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -55,7 +55,7 @@
<string name="screenshot_edit" msgid="3857183660047569146">"Edit"</string>
<string name="other_files" msgid="4501185823517473875">"{count,plural, =1{+ # file}other{+ # file}}"</string>
<string name="more_files" msgid="1043875756612339842">"{count,plural, =1{+ # file lainnya}other{+ # file lainnya}}"</string>
- <string name="sharing_text" msgid="8137537443603304062">"Berbagi teks"</string>
+ <string name="sharing_text" msgid="8137537443603304062">"Teks yang akan dibagikan"</string>
<string name="sharing_link" msgid="2307694372813942916">"Berbagi link"</string>
<string name="sharing_images" msgid="5251443722186962006">"{count,plural, =1{Berbagi gambar}other{Berbagi # gambar}}"</string>
<string name="sharing_videos" msgid="3583423190182877434">"{count,plural, =1{Membagikan video}other{Membagikan # video}}"</string>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index 587233b4..ef522229 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -55,7 +55,7 @@
<string name="screenshot_edit" msgid="3857183660047569146">"Endre"</string>
<string name="other_files" msgid="4501185823517473875">"{count,plural, =1{+ # fil}other{+ # filer}}"</string>
<string name="more_files" msgid="1043875756612339842">"{count,plural, =1{+ # fil til}other{+ # filer til}}"</string>
- <string name="sharing_text" msgid="8137537443603304062">"Deler teksten"</string>
+ <string name="sharing_text" msgid="8137537443603304062">"Deler tekst"</string>
<string name="sharing_link" msgid="2307694372813942916">"Deler linken"</string>
<string name="sharing_images" msgid="5251443722186962006">"{count,plural, =1{Deler bildet}other{Deler # bilder}}"</string>
<string name="sharing_videos" msgid="3583423190182877434">"{count,plural, =1{Deler videoen}other{Deler # videoer}}"</string>
diff --git a/java/res/values-pt-rBR/strings.xml b/java/res/values-pt-rBR/strings.xml
index 255fcbe6..575bc5da 100644
--- a/java/res/values-pt-rBR/strings.xml
+++ b/java/res/values-pt-rBR/strings.xml
@@ -77,7 +77,7 @@
<string name="usb_device_resolve_prompt_warn" msgid="4254493957548169620">"Este app não tem permissão de gravação, mas pode capturar áudio pelo dispositivo USB."</string>
<string name="resolver_personal_tab" msgid="1381052735324320565">"Pessoal"</string>
<string name="resolver_work_tab" msgid="3588325717455216412">"Trabalho"</string>
- <string name="resolver_private_tab" msgid="3707548826254095157">"Particular"</string>
+ <string name="resolver_private_tab" msgid="3707548826254095157">"Privado"</string>
<string name="resolver_personal_tab_accessibility" msgid="4467784352232582574">"Visualização pessoal"</string>
<string name="resolver_work_tab_accessibility" msgid="7581878836587799920">"Visualização de trabalho"</string>
<string name="resolver_private_tab_accessibility" msgid="2513122834337197252">"Visualização particular"</string>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index 255fcbe6..575bc5da 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -77,7 +77,7 @@
<string name="usb_device_resolve_prompt_warn" msgid="4254493957548169620">"Este app não tem permissão de gravação, mas pode capturar áudio pelo dispositivo USB."</string>
<string name="resolver_personal_tab" msgid="1381052735324320565">"Pessoal"</string>
<string name="resolver_work_tab" msgid="3588325717455216412">"Trabalho"</string>
- <string name="resolver_private_tab" msgid="3707548826254095157">"Particular"</string>
+ <string name="resolver_private_tab" msgid="3707548826254095157">"Privado"</string>
<string name="resolver_personal_tab_accessibility" msgid="4467784352232582574">"Visualização pessoal"</string>
<string name="resolver_work_tab_accessibility" msgid="7581878836587799920">"Visualização de trabalho"</string>
<string name="resolver_private_tab_accessibility" msgid="2513122834337197252">"Visualização particular"</string>
diff --git a/java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt b/java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt
index fa0859e0..5fce711c 100644
--- a/java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt
+++ b/java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt
@@ -33,6 +33,8 @@ import com.android.intentresolver.R
import com.android.intentresolver.contentpreview.payloadtoggle.ui.composable.Shareousel
import com.android.intentresolver.contentpreview.payloadtoggle.ui.viewmodel.ShareouselViewModel
import com.android.intentresolver.ui.viewmodel.ChooserViewModel
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
class ShareouselContentPreviewUi : ContentPreviewUi() {
@@ -56,7 +58,7 @@ class ShareouselContentPreviewUi : ContentPreviewUi() {
val viewModel: ShareouselViewModel = vm.shareouselViewModel
headlineViewParent?.let {
- LaunchedEffect(viewModel) { bindHeadline(viewModel, headlineViewParent) }
+ LaunchedEffect(viewModel) { bindHeader(viewModel, headlineViewParent) }
}
MaterialTheme(
@@ -73,6 +75,13 @@ class ShareouselContentPreviewUi : ContentPreviewUi() {
}
}
+ private suspend fun bindHeader(viewModel: ShareouselViewModel, headlineViewParent: View) {
+ coroutineScope {
+ launch { bindHeadline(viewModel, headlineViewParent) }
+ launch { bindMetadataText(viewModel, headlineViewParent) }
+ }
+ }
+
private suspend fun bindHeadline(viewModel: ShareouselViewModel, headlineViewParent: View) {
viewModel.headline.collect { headline ->
headlineViewParent.findViewById<TextView>(R.id.headline)?.apply {
@@ -85,4 +94,17 @@ class ShareouselContentPreviewUi : ContentPreviewUi() {
}
}
}
+
+ private suspend fun bindMetadataText(viewModel: ShareouselViewModel, headlineViewParent: View) {
+ viewModel.metadataText.collect { metadata ->
+ headlineViewParent.findViewById<TextView>(R.id.metadata)?.apply {
+ if (metadata?.isNotBlank() == true) {
+ text = metadata
+ visibility = View.VISIBLE
+ } else {
+ visibility = View.GONE
+ }
+ }
+ }
+ }
}
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/ChooserRequestInteractor.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/ChooserRequestInteractor.kt
index c70fc83e..953e91b3 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/ChooserRequestInteractor.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/ChooserRequestInteractor.kt
@@ -35,4 +35,7 @@ constructor(
val customActions: Flow<List<CustomActionModel>>
get() = repository.customActions.asSharedFlow()
+
+ val metadataText: Flow<CharSequence?>
+ get() = repository.chooserRequest.map { it.metadataText }
}
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ComposeIconComposable.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ComposeIconComposable.kt
index 38138225..8cf237da 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ComposeIconComposable.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ComposeIconComposable.kt
@@ -22,6 +22,7 @@ import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
@@ -31,11 +32,16 @@ import com.android.intentresolver.icon.ComposeIcon
import com.android.intentresolver.icon.ResourceIcon
@Composable
-fun Image(icon: ComposeIcon, modifier: Modifier = Modifier) {
+fun Image(icon: ComposeIcon, modifier: Modifier = Modifier, colorFilter: ColorFilter? = null) {
when (icon) {
- is AdaptiveIcon -> Image(icon.wrapped, modifier)
+ is AdaptiveIcon -> Image(icon.wrapped, modifier, colorFilter = colorFilter)
is BitmapIcon ->
- Image(icon.bitmap.asImageBitmap(), contentDescription = null, modifier = modifier)
+ Image(
+ icon.bitmap.asImageBitmap(),
+ contentDescription = null,
+ modifier = modifier,
+ colorFilter = colorFilter
+ )
is ResourceIcon -> {
val localContext = LocalContext.current
val wrappedContext: Context =
@@ -43,7 +49,12 @@ fun Image(icon: ComposeIcon, modifier: Modifier = Modifier) {
override fun getResources(): Resources = icon.res
}
CompositionLocalProvider(LocalContext provides wrappedContext) {
- Image(painterResource(icon.resId), contentDescription = null, modifier = modifier)
+ Image(
+ painterResource(icon.resId),
+ contentDescription = null,
+ modifier = modifier,
+ colorFilter = colorFilter
+ )
}
}
}
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt
index 7558d994..0cb7306d 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt
@@ -36,6 +36,8 @@ import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.AssistChip
+import androidx.compose.material3.AssistChipDefaults
+import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -44,6 +46,7 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.layout.ContentScale
@@ -167,7 +170,13 @@ private fun ActionCarousel(viewModel: ShareouselViewModel) {
label = actionViewModel.label,
onClick = { actionViewModel.onClicked() },
) {
- actionViewModel.icon?.let { Image(icon = it, modifier = Modifier.size(16.dp)) }
+ actionViewModel.icon?.let {
+ Image(
+ icon = it,
+ modifier = Modifier.size(16.dp),
+ colorFilter = ColorFilter.tint(LocalContentColor.current)
+ )
+ }
}
if (idx == actions.size - 1) {
Spacer(Modifier.width(dimensionResource(R.dimen.chooser_edge_margin_normal)))
@@ -188,7 +197,15 @@ private fun ShareouselAction(
onClick = onClick,
label = { Text(label) },
leadingIcon = leadingIcon,
- modifier = modifier
+ border = null,
+ shape = RoundedCornerShape(1000.dp), // pill shape.
+ colors =
+ AssistChipDefaults.assistChipColors(
+ containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,
+ labelColor = MaterialTheme.colorScheme.onSurface,
+ leadingIconContentColor = MaterialTheme.colorScheme.onSurface
+ ),
+ modifier = modifier,
)
}
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt
index 6eccaffa..082581dc 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt
@@ -21,6 +21,7 @@ import com.android.intentresolver.contentpreview.HeadlineGenerator
import com.android.intentresolver.contentpreview.ImageLoader
import com.android.intentresolver.contentpreview.ImagePreviewImageLoader
import com.android.intentresolver.contentpreview.payloadtoggle.domain.cursor.PayloadToggle
+import com.android.intentresolver.contentpreview.payloadtoggle.domain.interactor.ChooserRequestInteractor
import com.android.intentresolver.contentpreview.payloadtoggle.domain.interactor.CustomActionsInteractor
import com.android.intentresolver.contentpreview.payloadtoggle.domain.interactor.SelectablePreviewsInteractor
import com.android.intentresolver.contentpreview.payloadtoggle.domain.interactor.SelectionInteractor
@@ -47,6 +48,8 @@ import kotlinx.coroutines.plus
data class ShareouselViewModel(
/** Text displayed at the top of the share sheet when Shareousel is present. */
val headline: Flow<String>,
+ /** App-provided text shown beneath the headline. */
+ val metadataText: Flow<CharSequence?>,
/**
* Previews which are available for presentation within Shareousel. Use [preview] to create a
* [ShareouselPreviewViewModel] for a given [PreviewModel].
@@ -68,6 +71,7 @@ object ShareouselViewModelModule {
actionsInteractor: CustomActionsInteractor,
headlineGenerator: HeadlineGenerator,
selectionInteractor: SelectionInteractor,
+ chooserRequestInteractor: ChooserRequestInteractor,
// TODO: remove if possible
@ViewModelOwned scope: CoroutineScope,
): ShareouselViewModel {
@@ -87,6 +91,7 @@ object ShareouselViewModelModule {
ContentType.Video -> headlineGenerator.getVideosHeadline(numItems)
}
},
+ metadataText = chooserRequestInteractor.metadataText,
previews = keySet,
actions =
actionsInteractor.customActions.map { actions ->