Skip to content

Commit dfd8dba

Browse files
Material Design Teamleticiarossi
authored andcommitted
[M3][Color] Refactored PreferencesActivity to allow configurations on any activity-level preferences/options
PiperOrigin-RevId: 447470760
1 parent 1995438 commit dfd8dba

File tree

4 files changed

+68
-30
lines changed

4 files changed

+68
-30
lines changed

catalog/java/io/material/catalog/feature/DemoActivity.java

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import android.os.Build.VERSION_CODES;
2323
import android.os.Bundle;
2424
import androidx.appcompat.app.ActionBar;
25-
import androidx.appcompat.app.AppCompatActivity;
2625
import androidx.appcompat.widget.Toolbar;
2726
import android.view.LayoutInflater;
2827
import android.view.MenuItem;
@@ -34,15 +33,11 @@
3433
import com.google.android.material.color.MaterialColors;
3534
import com.google.android.material.transition.platform.MaterialContainerTransform;
3635
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback;
37-
import dagger.android.AndroidInjection;
38-
import dagger.android.AndroidInjector;
39-
import dagger.android.DispatchingAndroidInjector;
40-
import dagger.android.HasAndroidInjector;
36+
import io.material.catalog.preferences.BaseCatalogActivity;
4137
import io.material.catalog.windowpreferences.WindowPreferencesManager;
42-
import javax.inject.Inject;
4338

4439
/** Base Activity class that provides a demo screen structure for a single demo. */
45-
public abstract class DemoActivity extends AppCompatActivity implements HasAndroidInjector {
40+
public abstract class DemoActivity extends BaseCatalogActivity {
4641

4742
public static final String EXTRA_DEMO_TITLE = "demo_title";
4843

@@ -51,8 +46,6 @@ public abstract class DemoActivity extends AppCompatActivity implements HasAndro
5146
private Toolbar toolbar;
5247
private ViewGroup demoContainer;
5348

54-
@Inject DispatchingAndroidInjector<Object> androidInjector;
55-
5649
@Override
5750
protected void onCreate(@Nullable Bundle bundle) {
5851
if (shouldSetUpContainerTransform()) {
@@ -63,7 +56,6 @@ protected void onCreate(@Nullable Bundle bundle) {
6356
getWindow().setSharedElementReturnTransition(buildContainerTransform(/* entering= */ false));
6457
}
6558

66-
safeInject();
6759
super.onCreate(bundle);
6860

6961
if (shouldApplyEdgeToEdgePreference()) {
@@ -111,19 +103,6 @@ protected boolean shouldApplyEdgeToEdgePreference() {
111103
return true;
112104
}
113105

114-
@Override
115-
public AndroidInjector<Object> androidInjector() {
116-
return androidInjector;
117-
}
118-
119-
private void safeInject() {
120-
try {
121-
AndroidInjection.inject(this);
122-
} catch (Exception e) {
123-
// Ignore exception, not all DemoActivity subclasses need to inject
124-
}
125-
}
126-
127106
@RequiresApi(VERSION_CODES.LOLLIPOP)
128107
private MaterialContainerTransform buildContainerTransform(boolean entering) {
129108
MaterialContainerTransform transform = new MaterialContainerTransform(this, entering);

catalog/java/io/material/catalog/main/MainActivity.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,11 @@
2626
import com.google.common.base.Optional;
2727
import dagger.BindsOptionalOf;
2828
import dagger.android.ContributesAndroidInjector;
29-
import dagger.android.support.DaggerAppCompatActivity;
3029
import io.material.catalog.application.scope.ActivityScope;
3130
import io.material.catalog.feature.FeatureDemoUtils;
3231
import io.material.catalog.feature.OnBackPressedHandler;
3332
import io.material.catalog.internal.InternalOptionsMenuPresenter;
34-
import io.material.catalog.preferences.CatalogPreferencesHelper.PreferencesActivity;
33+
import io.material.catalog.preferences.BaseCatalogActivity;
3534
import io.material.catalog.preferences.ThemeOverlayUtils;
3635
import io.material.catalog.tableofcontents.TocFragment;
3736
import io.material.catalog.tableofcontents.TocModule;
@@ -42,7 +41,7 @@
4241
* The main launcher activity for the Catalog, capable of displaying a number of different screens
4342
* via Fragments.
4443
*/
45-
public class MainActivity extends DaggerAppCompatActivity implements PreferencesActivity {
44+
public class MainActivity extends BaseCatalogActivity {
4645

4746
@Inject Optional<InternalOptionsMenuPresenter> internalOptionsMenu;
4847
TocFragment tocFragment;
@@ -100,6 +99,11 @@ public void onBackPressed() {
10099
super.onBackPressed();
101100
}
102101

102+
@Override
103+
public boolean isPreferencesEnabled() {
104+
return true;
105+
}
106+
103107
private boolean handleFragmentOnBackPressed() {
104108
Fragment currentFragment = FeatureDemoUtils.getCurrentFragment(this);
105109
return currentFragment instanceof OnBackPressedHandler
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright 2022 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+
17+
package io.material.catalog.preferences;
18+
19+
import android.os.Bundle;
20+
import androidx.appcompat.app.AppCompatActivity;
21+
import androidx.annotation.Nullable;
22+
import dagger.android.AndroidInjection;
23+
import dagger.android.AndroidInjector;
24+
import dagger.android.DispatchingAndroidInjector;
25+
import dagger.android.HasAndroidInjector;
26+
import javax.inject.Inject;
27+
28+
/** This configures activity-level options/preferences. */
29+
public class BaseCatalogActivity extends AppCompatActivity implements HasAndroidInjector {
30+
31+
@Inject DispatchingAndroidInjector<Object> androidInjector;
32+
33+
@Override
34+
protected void onCreate(@Nullable Bundle bundle) {
35+
safeInject();
36+
super.onCreate(bundle);
37+
}
38+
39+
/** Returns {@code true} if preferences option is enabled. */
40+
public boolean isPreferencesEnabled() {
41+
return false;
42+
}
43+
44+
@Override
45+
public AndroidInjector<Object> androidInjector() {
46+
return androidInjector;
47+
}
48+
49+
@SuppressWarnings("CatchingUnchecked")
50+
private void safeInject() {
51+
try {
52+
AndroidInjection.inject(this);
53+
} catch (Exception e) {
54+
// Ignore exception, not all DemoActivity subclasses need to inject
55+
}
56+
}
57+
}

catalog/java/io/material/catalog/preferences/CatalogPreferencesHelper.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ public <F extends Fragment & PreferencesFragment> CatalogPreferencesHelper(@NonN
3434
fragmentManager = fragment.getParentFragmentManager();
3535
enabled =
3636
fragment.shouldShowDefaultDemoActionBar()
37-
&& fragment.getActivity() instanceof PreferencesActivity;
37+
&& fragment.getActivity() instanceof BaseCatalogActivity
38+
&& ((BaseCatalogActivity) fragment.getActivity()).isPreferencesEnabled();
3839

3940
if (enabled) {
4041
fragment.setHasOptionsMenu(true);
@@ -66,9 +67,6 @@ private void showPreferences() {
6667
new CatalogPreferencesDialogFragment().show(fragmentManager, "preferences");
6768
}
6869

69-
/** Implement this interface to include an Activity for preferences screen support. */
70-
public interface PreferencesActivity {}
71-
7270
/**
7371
* Implement this interface to allow a Fragment to be used with {@link CatalogPreferencesHelper}.
7472
*/

0 commit comments

Comments
 (0)