Skip to content

Commit b61ab85

Browse files
pekingmepaulfthomas
authored andcommitted
[ProgressIndicator] Refactored the catalogs for more demos in future.
PiperOrigin-RevId: 620287681
1 parent 4f21b95 commit b61ab85

12 files changed

+345
-250
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright 2024 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.material.catalog.progressindicator;
17+
18+
import io.material.catalog.R;
19+
20+
import android.os.Bundle;
21+
import android.view.LayoutInflater;
22+
import android.view.View;
23+
import android.view.ViewGroup;
24+
import androidx.annotation.LayoutRes;
25+
import androidx.annotation.NonNull;
26+
import androidx.annotation.Nullable;
27+
import io.material.catalog.feature.DemoFragment;
28+
29+
/**
30+
* Base class that provides a structure for Progress Indicator demos with optional controls for the
31+
* Catalog app.
32+
*/
33+
public abstract class ProgressIndicatorDemoFragment extends DemoFragment {
34+
35+
@Override
36+
@NonNull
37+
public View onCreateDemoView(
38+
@NonNull LayoutInflater layoutInflater,
39+
@Nullable ViewGroup viewGroup,
40+
@Nullable Bundle bundle) {
41+
View view =
42+
layoutInflater.inflate(
43+
R.layout.cat_progress_indicator_fragment, viewGroup, false /* attachToRoot */);
44+
45+
// Inflate the demo content layout.
46+
ViewGroup content = view.findViewById(R.id.content);
47+
content.addView(
48+
layoutInflater.inflate(
49+
getProgressIndicatorContentLayout(), content, /* attachToRoot= */ false));
50+
51+
initDemoContents(view);
52+
53+
// Inflate the demo controls layout.
54+
@LayoutRes int demoControls = getProgressIndicatorDemoControlLayout();
55+
if (demoControls != 0) {
56+
ViewGroup control = view.findViewById(R.id.control);
57+
control.addView(
58+
layoutInflater.inflate(
59+
getProgressIndicatorDemoControlLayout(), control, /* attachToRoot= */ false));
60+
}
61+
62+
initDemoControls(view);
63+
64+
return view;
65+
}
66+
67+
public void initDemoContents(@NonNull View view) {}
68+
69+
public void initDemoControls(@NonNull View view) {}
70+
71+
@LayoutRes
72+
public abstract int getProgressIndicatorContentLayout();
73+
74+
@LayoutRes
75+
public int getProgressIndicatorDemoControlLayout() {
76+
return 0;
77+
}
78+
}

catalog/java/io/material/catalog/progressindicator/ProgressIndicatorMainDemoFragment.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,43 +22,31 @@
2222
import static com.google.android.material.progressindicator.LinearProgressIndicator.INDICATOR_DIRECTION_LEFT_TO_RIGHT;
2323
import static com.google.android.material.progressindicator.LinearProgressIndicator.INDICATOR_DIRECTION_RIGHT_TO_LEFT;
2424

25-
import android.os.Bundle;
26-
import android.view.LayoutInflater;
2725
import android.view.View;
28-
import android.view.ViewGroup;
26+
import androidx.annotation.LayoutRes;
2927
import androidx.annotation.NonNull;
30-
import androidx.annotation.Nullable;
3128
import com.google.android.material.materialswitch.MaterialSwitch;
3229
import com.google.android.material.progressindicator.CircularProgressIndicator;
3330
import com.google.android.material.progressindicator.LinearProgressIndicator;
3431
import com.google.android.material.slider.Slider;
35-
import io.material.catalog.feature.DemoFragment;
3632

3733
/**
3834
* This is the fragment to demo simple use cases of {@link LinearProgressIndicator} and {@link
3935
* CircularProgressIndicator}.
4036
*/
41-
public class ProgressIndicatorMainDemoFragment extends DemoFragment {
37+
public class ProgressIndicatorMainDemoFragment extends ProgressIndicatorDemoFragment {
4238

43-
@Override
44-
@NonNull
45-
public View onCreateDemoView(
46-
@NonNull LayoutInflater layoutInflater,
47-
@Nullable ViewGroup viewGroup,
48-
@Nullable Bundle bundle) {
49-
50-
View view =
51-
layoutInflater.inflate(
52-
R.layout.cat_progress_indicator_main_fragment, viewGroup, false /* attachToRoot */);
53-
54-
initialize(view);
39+
@NonNull private LinearProgressIndicator linearIndicator;
40+
@NonNull private CircularProgressIndicator circularIndicator;
5541

56-
return view;
42+
@Override
43+
public void initDemoContents(@NonNull View view) {
44+
linearIndicator = view.findViewById(R.id.linear_indicator);
45+
circularIndicator = view.findViewById(R.id.circular_indicator);
5746
}
5847

59-
public void initialize(@NonNull View view) {
60-
LinearProgressIndicator linearIndicator = view.findViewById(R.id.linear_indicator);
61-
CircularProgressIndicator circularIndicator = view.findViewById(R.id.circular_indicator);
48+
@Override
49+
public void initDemoControls(@NonNull View view) {
6250
Slider progressSlider = view.findViewById(R.id.progress_slider);
6351
MaterialSwitch determinateSwitch = view.findViewById(R.id.determinate_mode_switch);
6452

@@ -150,4 +138,16 @@ public void initialize(@NonNull View view) {
150138
}
151139
});
152140
}
141+
142+
@Override
143+
@LayoutRes
144+
public int getProgressIndicatorContentLayout() {
145+
return R.layout.cat_progress_indicator_main_content;
146+
}
147+
148+
@Override
149+
@LayoutRes
150+
public int getProgressIndicatorDemoControlLayout() {
151+
return R.layout.cat_progress_indicator_basic_controls;
152+
}
153153
}

catalog/java/io/material/catalog/progressindicator/ProgressIndicatorMultiColorDemoFragment.java

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,17 @@
1717

1818
import io.material.catalog.R;
1919

20-
import android.os.Bundle;
21-
import android.view.LayoutInflater;
22-
import android.view.View;
23-
import android.view.ViewGroup;
24-
import androidx.annotation.NonNull;
25-
import androidx.annotation.Nullable;
26-
import com.google.android.material.progressindicator.CircularProgressIndicator;
27-
import com.google.android.material.progressindicator.LinearProgressIndicator;
28-
import io.material.catalog.feature.DemoFragment;
20+
import androidx.annotation.LayoutRes;
2921

3022
/**
3123
* This is the fragment to demo using multiple indicator colors in {@link LinearProgressIndicator}
3224
* and {@link CircularProgressIndicator}.
3325
*/
34-
public class ProgressIndicatorMultiColorDemoFragment extends DemoFragment {
26+
public class ProgressIndicatorMultiColorDemoFragment extends ProgressIndicatorDemoFragment {
3527

3628
@Override
37-
@NonNull
38-
public View onCreateDemoView(
39-
@NonNull LayoutInflater layoutInflater,
40-
@Nullable ViewGroup viewGroup,
41-
@Nullable Bundle bundle) {
42-
43-
return layoutInflater.inflate(
44-
R.layout.cat_progress_indicator_multi_color_fragment, viewGroup, false /* attachToRoot */);
29+
@LayoutRes
30+
public int getProgressIndicatorContentLayout() {
31+
return R.layout.cat_progress_indicator_multi_color_content;
4532
}
4633
}

catalog/java/io/material/catalog/progressindicator/ProgressIndicatorStandaloneDemoFragment.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,40 +17,25 @@
1717

1818
import io.material.catalog.R;
1919

20-
import android.os.Bundle;
21-
import android.view.LayoutInflater;
2220
import android.view.View;
23-
import android.view.ViewGroup;
21+
import androidx.annotation.LayoutRes;
2422
import androidx.annotation.NonNull;
25-
import androidx.annotation.Nullable;
2623
import androidx.annotation.StyleRes;
2724
import com.google.android.material.button.MaterialButton;
2825
import com.google.android.material.chip.Chip;
2926
import com.google.android.material.materialswitch.MaterialSwitch;
3027
import com.google.android.material.progressindicator.CircularProgressIndicatorSpec;
3128
import com.google.android.material.progressindicator.IndeterminateDrawable;
32-
import io.material.catalog.feature.DemoFragment;
3329

3430
/**
3531
* The fragment demos progress indicator drawables used as standalone drawables in other components.
3632
*/
37-
public class ProgressIndicatorStandaloneDemoFragment extends DemoFragment {
33+
public class ProgressIndicatorStandaloneDemoFragment extends ProgressIndicatorDemoFragment {
3834

39-
@SuppressWarnings("RestrictTo")
4035
@Override
41-
@NonNull
42-
public View onCreateDemoView(
43-
@NonNull LayoutInflater layoutInflater,
44-
@Nullable ViewGroup viewGroup,
45-
@Nullable Bundle bundle) {
46-
View view =
47-
layoutInflater.inflate(
48-
R.layout.cat_progress_indicator_standalone_fragment,
49-
viewGroup,
50-
/*attachToRoot=*/ false);
51-
36+
public void initDemoContents(@NonNull View view) {
5237
CircularProgressIndicatorSpec spec =
53-
new CircularProgressIndicatorSpec(getContext(), /*attrs=*/ null, 0, getSpecStyleResId());
38+
new CircularProgressIndicatorSpec(getContext(), /* attrs= */ null, 0, getSpecStyleResId());
5439
Chip chip = view.findViewById(R.id.cat_progress_indicator_chip);
5540
chip.setChipIcon(IndeterminateDrawable.createCircularDrawable(getContext(), spec));
5641

@@ -66,7 +51,12 @@ public View onCreateDemoView(
6651
chip.setChipIconVisible(isChecked);
6752
button.setIcon(isChecked ? progressIndicatorDrawable : null);
6853
});
69-
return view;
54+
}
55+
56+
@Override
57+
@LayoutRes
58+
public int getProgressIndicatorContentLayout() {
59+
return R.layout.cat_progress_indicator_standalone_content;
7060
}
7161

7262
@StyleRes

catalog/java/io/material/catalog/progressindicator/ProgressIndicatorVisibilityDemoFragment.java

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,15 @@
1717

1818
import io.material.catalog.R;
1919

20-
import android.os.Bundle;
21-
import android.view.LayoutInflater;
2220
import android.view.View;
23-
import android.view.ViewGroup;
2421
import android.widget.AutoCompleteTextView;
2522
import android.widget.Button;
23+
import androidx.annotation.LayoutRes;
2624
import androidx.annotation.NonNull;
27-
import androidx.annotation.Nullable;
2825
import com.google.android.material.materialswitch.MaterialSwitch;
2926
import com.google.android.material.progressindicator.CircularProgressIndicator;
3027
import com.google.android.material.progressindicator.LinearProgressIndicator;
3128
import com.google.android.material.slider.Slider;
32-
import io.material.catalog.feature.DemoFragment;
3329
import java.util.HashMap;
3430
import java.util.Locale;
3531
import java.util.Map;
@@ -38,7 +34,7 @@
3834
* This is the fragment to demo different visibility change behaviors of {@link
3935
* LinearProgressIndicator} and {@link CircularProgressIndicator}.
4036
*/
41-
public class ProgressIndicatorVisibilityDemoFragment extends DemoFragment {
37+
public class ProgressIndicatorVisibilityDemoFragment extends ProgressIndicatorDemoFragment {
4238

4339
public static final int SHOW_NONE = 0;
4440
public static final int SHOW_OUTWARD = 1;
@@ -61,27 +57,17 @@ public class ProgressIndicatorVisibilityDemoFragment extends DemoFragment {
6157
hideBehaviorCodes.put("escape", HIDE_ESCAPE);
6258
}
6359

64-
@Override
65-
@NonNull
66-
public View onCreateDemoView(
67-
@NonNull LayoutInflater layoutInflater,
68-
@Nullable ViewGroup viewGroup,
69-
@Nullable Bundle bundle) {
70-
71-
View view =
72-
layoutInflater.inflate(
73-
R.layout.cat_progress_indicator_visibility_fragment,
74-
viewGroup,
75-
false /* attachToRoot */);
76-
77-
initialize(view);
60+
@NonNull private LinearProgressIndicator linearIndicator;
61+
@NonNull private CircularProgressIndicator circularIndicator;
7862

79-
return view;
63+
@Override
64+
public void initDemoContents(@NonNull View view) {
65+
linearIndicator = view.findViewById(R.id.linear_indicator);
66+
circularIndicator = view.findViewById(R.id.circular_indicator);
8067
}
8168

82-
public void initialize(@NonNull View view) {
83-
LinearProgressIndicator linearIndicator = view.findViewById(R.id.linear_indicator);
84-
CircularProgressIndicator circularIndicator = view.findViewById(R.id.circular_indicator);
69+
@Override
70+
public void initDemoControls(@NonNull View view) {
8571
Slider progressSlider = view.findViewById(R.id.progress_slider);
8672
MaterialSwitch determinateSwitch = view.findViewById(R.id.determinate_mode_switch);
8773

@@ -146,4 +132,16 @@ public void initialize(@NonNull View view) {
146132
}
147133
});
148134
}
135+
136+
@Override
137+
@LayoutRes
138+
public int getProgressIndicatorContentLayout() {
139+
return R.layout.cat_progress_indicator_main_content;
140+
}
141+
142+
@Override
143+
@LayoutRes
144+
public int getProgressIndicatorDemoControlLayout() {
145+
return R.layout.cat_progress_indicator_visibility_controls;
146+
}
149147
}

0 commit comments

Comments
 (0)