Skip to content

Commit 65e7506

Browse files
Material Design Teamdsn5ft
authored andcommitted
[M3][Color] Refactored ColorHarmonizationDemoFragment to DemoActivity
PiperOrigin-RevId: 448907753
1 parent 703249d commit 65e7506

File tree

7 files changed

+85
-47
lines changed

7 files changed

+85
-47
lines changed

catalog/androidTest/javatests/io/material/catalog/color/ColorHarmonizationDemoFragmentTest.java renamed to catalog/androidTest/javatests/io/material/catalog/color/ColorHarmonizationDemoActivityTest.java

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,39 +22,21 @@
2222
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
2323
import static androidx.test.espresso.matcher.ViewMatchers.withId;
2424

25-
import androidx.fragment.app.Fragment;
2625
import androidx.test.ext.junit.rules.ActivityScenarioRule;
2726
import androidx.test.ext.junit.runners.AndroidJUnit4;
2827
import androidx.test.filters.MediumTest;
29-
import io.material.catalog.main.MainActivity;
30-
import org.junit.Before;
3128
import org.junit.Rule;
3229
import org.junit.Test;
3330
import org.junit.runner.RunWith;
3431

35-
/** Tests for {@link ColorHarmonizationDemoFragment} */
32+
/** Tests for {@link ColorHarmonizationDemoActivity} */
3633
@MediumTest
3734
@RunWith(AndroidJUnit4.class)
38-
public class ColorHarmonizationDemoFragmentTest {
35+
public class ColorHarmonizationDemoActivityTest {
3936

4037
@Rule
41-
public final ActivityScenarioRule<MainActivity> activityScenarioRule =
42-
new ActivityScenarioRule<>(MainActivity.class);
43-
44-
@Before
45-
public void setUpAndLaunchFragment() {
46-
Fragment fragment = new ColorHarmonizationDemoFragment();
47-
48-
activityScenarioRule
49-
.getScenario()
50-
.onActivity(
51-
activity ->
52-
activity
53-
.getSupportFragmentManager()
54-
.beginTransaction()
55-
.replace(io.material.catalog.feature.R.id.container, fragment)
56-
.commit());
57-
}
38+
public final ActivityScenarioRule<ColorHarmonizationDemoActivity> activityScenarioRule =
39+
new ActivityScenarioRule<>(ColorHarmonizationDemoActivity.class);
5840

5941
@Test
6042
public void checkButtonsAreShown() {

catalog/java/io/material/catalog/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@
9494
<activity
9595
android:name="io.material.catalog.adaptive.AdaptiveSupportingPanelDemoActivity"
9696
android:exported="true" />
97+
<activity
98+
android:name="io.material.catalog.color.ColorHarmonizationDemoActivity"
99+
android:exported="true" />
97100
</application>
98101

99102
</manifest>

catalog/java/io/material/catalog/color/ColorHarmonizationDemoFragment.java renamed to catalog/java/io/material/catalog/color/ColorHarmonizationDemoActivity.java

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,16 @@
2727
import androidx.annotation.IdRes;
2828
import androidx.annotation.Nullable;
2929
import com.google.android.material.color.DynamicColors;
30+
import com.google.android.material.color.HarmonizedColorAttributes;
3031
import com.google.android.material.color.HarmonizedColors;
3132
import com.google.android.material.color.HarmonizedColorsOptions;
3233
import com.google.android.material.switchmaterial.SwitchMaterial;
33-
import io.material.catalog.feature.DemoFragment;
34+
import io.material.catalog.feature.DemoActivity;
3435
import java.util.ArrayList;
3536
import java.util.List;
3637

3738
/** A fragment that displays the Color Harmonization demo for the Catalog app. */
38-
public class ColorHarmonizationDemoFragment extends DemoFragment {
39+
public class ColorHarmonizationDemoActivity extends DemoActivity {
3940

4041
private static final HarmonizableButtonData[] HARMONIZABLE_BUTTON_DATA_LIST =
4142
new HarmonizableButtonData[] {
@@ -56,14 +57,18 @@ public class ColorHarmonizationDemoFragment extends DemoFragment {
5657
new HarmonizableButtonData(
5758
R.id.blue_button_light, R.color.blue_reference, /* isLightButton= */ true),
5859
};
59-
// TODO(b/231143697): Refactor this class to a DemoActivity and showcase harmonization using
60-
// error color attributes.
60+
6161
private static final ColorHarmonizationGridRowData[] HARMONIZATION_GRID_ROW_DATA_LIST =
6262
new ColorHarmonizationGridRowData[] {
6363
new ColorHarmonizationGridRowData(
6464
R.id.cat_colors_error,
6565
R.id.cat_colors_harmonized_error,
66-
R.color.error_reference,
66+
new int[] {
67+
R.attr.colorError,
68+
R.attr.colorOnError,
69+
R.attr.colorErrorContainer,
70+
R.attr.colorOnErrorContainer
71+
},
6772
R.array.cat_error_strings),
6873
new ColorHarmonizationGridRowData(
6974
R.id.cat_colors_yellow,
@@ -98,16 +103,14 @@ public View onCreateDemoView(
98103
layoutInflater.inflate(
99104
R.layout.cat_colors_harmonization_fragment, viewGroup, false /* attachToRoot */);
100105

101-
dynamicColorsContext = DynamicColors.wrapContextIfAvailable(requireContext());
106+
dynamicColorsContext = DynamicColors.wrapContextIfAvailable(this);
102107
HarmonizedColorsOptions options =
103108
new HarmonizedColorsOptions.Builder()
104109
.setColorResourceIds(
105110
new int[] {
106-
R.color.error_reference,
107-
R.color.yellow_reference,
108-
R.color.blue_reference,
109-
R.color.green_reference,
111+
R.color.yellow_reference, R.color.blue_reference, R.color.green_reference,
110112
})
113+
.setColorAttributes(HarmonizedColorAttributes.createMaterialDefaults())
111114
.build();
112115
harmonizedContext = HarmonizedColors.wrapContextIfAvailable(dynamicColorsContext, options);
113116

@@ -132,20 +135,39 @@ public View onCreateDemoView(
132135
return demoView;
133136
}
134137

138+
// This will disable app-wide color harmonization, to not have conflicts with the harmonization
139+
// logic within this demo.
140+
@Override
141+
public boolean isColorHarmonizationEnabled() {
142+
return false;
143+
}
144+
135145
private void createColorGridAndPopulateLayout(
136146
Context context,
137147
ColorHarmonizationGridRowData colorHarmonizationGridRowData,
138148
@IdRes int layoutId) {
139-
ColorGrid colorGrid =
140-
ColorGrid.createFromColorGridData(
141-
ColorGridData.createFromColorResId(
142-
context,
143-
colorHarmonizationGridRowData.getColorResId(),
144-
colorHarmonizationGridRowData.getColorNameIds()));
149+
ColorGrid colorGrid = createColorGrid(context, colorHarmonizationGridRowData);
145150
LinearLayout layout = demoView.findViewById(layoutId);
146151
layout.addView(colorGrid.renderView(context, layout));
147152
}
148153

154+
private ColorGrid createColorGrid(
155+
Context context, ColorHarmonizationGridRowData colorHarmonizationGridRowData) {
156+
if (colorHarmonizationGridRowData.getColorAttributeResIds().length > 0
157+
&& colorHarmonizationGridRowData.getColorResId() == 0) {
158+
return ColorGrid.createFromAttrResId(
159+
context,
160+
getResources().getStringArray(colorHarmonizationGridRowData.getColorNameIds()),
161+
colorHarmonizationGridRowData.getColorAttributeResIds());
162+
} else {
163+
return ColorGrid.createFromColorGridData(
164+
ColorGridData.createFromColorResId(
165+
context,
166+
colorHarmonizationGridRowData.getColorResId(),
167+
colorHarmonizationGridRowData.getColorNameIds()));
168+
}
169+
}
170+
149171
private void updateButtons(boolean harmonize) {
150172
for (HarmonizableButton button : harmonizableButtonList) {
151173
button.updateColors(harmonize);

catalog/java/io/material/catalog/color/ColorHarmonizationGridRowData.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ final class ColorHarmonizationGridRowData {
2727
@IdRes private final int rightLayoutId;
2828
@ColorRes private final int colorResId;
2929
@ArrayRes private final int colorNameIds;
30+
private final int[] colorAttributeResIds;
3031

3132
ColorHarmonizationGridRowData(
3233
@IdRes int leftLayoutId,
@@ -36,6 +37,19 @@ final class ColorHarmonizationGridRowData {
3637
this.leftLayoutId = leftLayoutId;
3738
this.rightLayoutId = rightLayoutId;
3839
this.colorResId = colorResId;
40+
this.colorAttributeResIds = new int[] {};
41+
this.colorNameIds = colorNameIds;
42+
}
43+
44+
ColorHarmonizationGridRowData(
45+
@IdRes int leftLayoutId,
46+
@IdRes int rightLayoutId,
47+
int[] colorAttributeResIds,
48+
@ArrayRes int colorNameIds) {
49+
this.leftLayoutId = leftLayoutId;
50+
this.rightLayoutId = rightLayoutId;
51+
this.colorResId = 0;
52+
this.colorAttributeResIds = colorAttributeResIds;
3953
this.colorNameIds = colorNameIds;
4054
}
4155

@@ -58,4 +72,8 @@ int getColorResId() {
5872
int getColorNameIds() {
5973
return colorNameIds;
6074
}
75+
76+
int[] getColorAttributeResIds() {
77+
return colorAttributeResIds;
78+
}
6179
}

catalog/java/io/material/catalog/color/ColorsFragment.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@
1818

1919
import io.material.catalog.R;
2020

21+
import android.content.Intent;
2122
import androidx.fragment.app.Fragment;
2223
import androidx.annotation.NonNull;
2324
import com.google.android.material.color.DynamicColors;
25+
import com.google.android.material.color.HarmonizedColors;
2426
import dagger.Provides;
2527
import dagger.android.ContributesAndroidInjector;
2628
import dagger.multibindings.IntoSet;
@@ -69,13 +71,15 @@ public Fragment createFragment() {
6971
}
7072
});
7173
}
72-
additionalDemos.add(
73-
new Demo(R.string.cat_color_harmonization) {
74-
@Override
75-
public Fragment createFragment() {
76-
return new ColorHarmonizationDemoFragment();
77-
}
78-
});
74+
if (HarmonizedColors.isHarmonizedColorAvailable()) {
75+
additionalDemos.add(
76+
new Demo(R.string.cat_color_harmonization) {
77+
@Override
78+
public Intent createActivityIntent() {
79+
return new Intent(getContext(), ColorHarmonizationDemoActivity.class);
80+
}
81+
});
82+
}
7983
return additionalDemos;
8084
}
8185

catalog/java/io/material/catalog/preferences/BaseCatalogActivity.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ public boolean isPreferencesEnabled() {
4141
return false;
4242
}
4343

44+
/** Returns {@code true} if color harmonization is enabled. */
45+
public boolean isColorHarmonizationEnabled() {
46+
return true;
47+
}
48+
4449
@Override
4550
public AndroidInjector<Object> androidInjector() {
4651
return androidInjector;

catalog/java/io/material/catalog/preferences/DynamicColorPreference.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,13 @@ private void applyDynamicColorsWithMaterialDefaultHarmonization(@NonNull Context
9494
new DynamicColorsOptions.Builder()
9595
.setPrecondition(precondition)
9696
.setOnAppliedCallback(
97-
activity ->
97+
activity -> {
98+
if ((activity instanceof BaseCatalogActivity)
99+
&& ((BaseCatalogActivity) activity).isColorHarmonizationEnabled()) {
98100
HarmonizedColors.applyToContextIfAvailable(
99-
activity, HarmonizedColorsOptions.createMaterialDefaults()))
101+
activity, HarmonizedColorsOptions.createMaterialDefaults());
102+
}
103+
})
100104
.build());
101105
}
102106
}

0 commit comments

Comments
 (0)