Skip to content

Commit fd7037f

Browse files
oprisnikmeta-codesync[bot]
authored andcommitted
Add toolbar dropdown to switch window color mode (Normal / P3 / HDR)
Differential Revision: D110335770 fbshipit-source-id: e4509c6800e4b7df5d3aac34b661235e3a606ede
1 parent 71585ff commit fd7037f

3 files changed

Lines changed: 41 additions & 0 deletions

File tree

samples/showcase/src/main/java/com/facebook/fresco/samples/showcase/MainActivity.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@
77

88
package com.facebook.fresco.samples.showcase
99

10+
import android.annotation.SuppressLint
11+
import android.content.pm.ActivityInfo
1012
import android.graphics.Color
13+
import android.os.Build
1114
import android.os.Bundle
1215
import android.view.Menu
1316
import android.view.MenuItem
1417
import android.view.View
18+
import android.widget.Spinner
1519
import androidx.activity.result.PickVisualMediaRequest
1620
import androidx.activity.result.contract.ActivityResultContracts
1721
import androidx.appcompat.app.ActionBarDrawerToggle
@@ -22,6 +26,7 @@ import androidx.core.view.GravityCompat
2226
import androidx.drawerlayout.widget.DrawerLayout
2327
import androidx.fragment.app.Fragment
2428
import androidx.preference.PreferenceManager
29+
import com.facebook.fresco.samples.showcase.common.SpinnerUtils.setupWithList
2530
import com.facebook.fresco.samples.showcase.permissions.StoragePermissionHelper
2631
import com.google.android.material.navigation.NavigationView
2732
import com.google.android.material.snackbar.Snackbar
@@ -38,6 +43,23 @@ class MainActivity : AppCompatActivity() {
3843
ShowcaseProvider.imageUriProvider.customUris = it
3944
}
4045

46+
@get:SuppressLint("InlinedApi")
47+
private val colorModeOptions: Pair<List<Pair<String, Int>>, String>
48+
get() =
49+
Pair(
50+
buildList {
51+
add(getString(R.string.color_mode_option_normal) to ActivityInfo.COLOR_MODE_DEFAULT)
52+
add(
53+
getString(R.string.color_mode_option_p3) to
54+
ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT
55+
)
56+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
57+
add(getString(R.string.color_mode_option_hdr) to ActivityInfo.COLOR_MODE_HDR)
58+
}
59+
},
60+
getString(R.string.color_mode_group_window),
61+
)
62+
4163
override fun onCreate(savedInstanceState: Bundle?) {
4264
super.onCreate(savedInstanceState)
4365
ShowcaseProvider.initIfNeeded(this)
@@ -104,6 +126,14 @@ class MainActivity : AppCompatActivity() {
104126

105127
override fun onCreateOptionsMenu(menu: Menu): Boolean {
106128
menuInflater.inflate(R.menu.main, menu)
129+
val colorModeItem = menu.findItem(R.id.action_color_mode)
130+
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
131+
(colorModeItem.actionView as? Spinner)?.setupWithList(colorModeOptions) { colorMode ->
132+
window.colorMode = colorMode
133+
}
134+
} else {
135+
colorModeItem.isVisible = false
136+
}
107137
// the support toolbar should probably do this by default
108138
val styles =
109139
obtainStyledAttributes(

samples/showcase/src/main/res/menu/main.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<menu xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto">
4+
<item android:id="@+id/action_color_mode"
5+
android:title="@string/action_window_color_mode"
6+
android:orderInCategory="100"
7+
app:actionViewClass="android.widget.Spinner"
8+
app:showAsAction="always"
9+
/>
410
<item android:id="@+id/action_prev_image"
511
android:title="Previous"
612
android:orderInCategory="101"

samples/showcase/src/main/res/values/strings.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99

1010
<string name="action_settings">Settings</string>
1111
<string name="action_select_custom_images" description="Toolbar action label that lets the user pick local images to display across the Showcase gallery and list examples">Select Custom Images</string>
12+
<string name="action_window_color_mode" description="Toolbar dropdown label for switching the Showcase window color mode between Normal, P3 (wide color gamut) and HDR">Window color mode</string>
13+
<string name="color_mode_group_window" description="Prefix shown before each color mode option in the toolbar dropdown, indicating the option applies to the app window">Window</string>
14+
<string name="color_mode_option_normal" description="Color mode dropdown option for the default (standard) window color mode">Normal</string>
15+
<string name="color_mode_option_p3" description="Color mode dropdown option for the P3 wide color gamut window color mode">P3</string>
16+
<string name="color_mode_option_hdr" description="Color mode dropdown option for the HDR (high dynamic range) window color mode">HDR</string>
1217

1318
<string name="vito_simple_help">Basic Vito example that just sets the image URI.</string>
1419

0 commit comments

Comments
 (0)