Loading src/com/android/settings/core/SettingsBaseActivity.java +51 −37 Original line number Diff line number Diff line Loading @@ -15,16 +15,13 @@ */ package com.android.settings.core; import static android.text.Layout.HYPHENATION_FREQUENCY_NORMAL_FAST; import android.annotation.LayoutRes; import android.app.ActionBar; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.text.LineBreakConfig; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; Loading @@ -36,13 +33,15 @@ import android.widget.Toolbar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.fragment.app.FragmentActivity; import com.android.settings.R; import com.android.settings.SubSettings; import com.android.settings.Utils; import com.android.settings.core.CategoryMixin.CategoryHandler; import com.android.settingslib.collapsingtoolbar.CollapsingToolbarDelegate; import com.android.settingslib.collapsingtoolbar.FloatingToolbarHandler; import com.android.settingslib.collapsingtoolbar.widget.ScrollableToolbarItemLayout; import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin; import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; import com.android.settingslib.widget.SettingsThemeHelper; Loading @@ -50,13 +49,17 @@ import com.android.window.flags.Flags; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.floatingtoolbar.FloatingToolbarLayout; import com.google.android.material.resources.TextAppearanceConfig; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.transition.TransitionHelper; import com.google.android.setupdesign.util.ThemeHelper; import java.util.List; /** Base activity for Settings pages */ public class SettingsBaseActivity extends FragmentActivity implements CategoryHandler { public class SettingsBaseActivity extends FragmentActivity implements CategoryHandler, FloatingToolbarHandler { /** * What type of page transition should be apply. Loading @@ -66,7 +69,6 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa protected static final boolean DEBUG_TIMING = false; private static final String TAG = "SettingsBaseActivity"; private static final int DEFAULT_REQUEST = -1; private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f; private static final int EXPRESSIVE_LAYOUT_ID = com.android.settingslib.collapsingtoolbar.R.layout.settingslib_expressive_collapsing_toolbar_base_layout; Loading @@ -79,6 +81,8 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa protected AppBarLayout mAppBarLayout; private Toolbar mToolbar; private CollapsingToolbarDelegate mToolbardelegate; @Override public CategoryMixin getCategoryMixin() { return mCategoryMixin; Loading Loading @@ -127,17 +131,7 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa mCollapsingToolbarLayout = findViewById(com.android.settingslib.collapsingtoolbar.R.id.collapsing_toolbar); mAppBarLayout = findViewById(R.id.app_bar); if (mCollapsingToolbarLayout != null) { mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER); mCollapsingToolbarLayout.setHyphenationFrequency(HYPHENATION_FREQUENCY_NORMAL_FAST); mCollapsingToolbarLayout.setStaticLayoutBuilderConfigurer(builder -> builder.setLineBreakConfig( new LineBreakConfig.Builder() .setLineBreakWordStyle( LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE) .build())); } autoSetCollapsingToolbarLayoutScrolling(); getToolbarDelegate().initCollapsingToolbar(mCollapsingToolbarLayout, mAppBarLayout); } else { super.setContentView(R.layout.settings_base_layout); } Loading @@ -150,6 +144,10 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa } setActionBar(toolbar); FloatingToolbarLayout toolbarLayout = findViewById( com.android.settingslib.collapsingtoolbar.R.id.floating_toolbar); getToolbarDelegate().initFloatingToolbar(getApplicationContext(), toolbarLayout); if (DEBUG_TIMING) { Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); } Loading Loading @@ -276,25 +274,6 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa return false; } private void autoSetCollapsingToolbarLayoutScrolling() { if (mAppBarLayout == null) { return; } final CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); final AppBarLayout.Behavior behavior = new AppBarLayout.Behavior(); behavior.setDragCallback( new AppBarLayout.Behavior.DragCallback() { @Override public boolean canDrag(@NonNull AppBarLayout appBarLayout) { // Header can be scrolling while device in landscape mode. return appBarLayout.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; } }); params.setBehavior(behavior); } private int getTransitionType(Intent intent) { if (intent == null) { return TransitionType.TRANSITION_NONE; Loading @@ -315,4 +294,39 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa actionBarContainer.setVisibility(View.GONE); } } @Override public void setFloatingToolbarVisibility(boolean visible) { getToolbarDelegate().setFloatingToolbarVisibility(visible); } @Override public void setToolbarItems(@NonNull List<ScrollableToolbarItemLayout.ToolbarItem> items) { getToolbarDelegate().setToolbarItems(items); } @Override public void setOnItemSelectedListener( @NonNull ScrollableToolbarItemLayout.OnItemSelectedListener listener) { getToolbarDelegate().setOnItemSelectedListener(listener); } private CollapsingToolbarDelegate getToolbarDelegate() { if (mToolbardelegate == null) { mToolbardelegate = new CollapsingToolbarDelegate(new EmptyDelegateCallback(), true); } return mToolbardelegate; } private class EmptyDelegateCallback implements CollapsingToolbarDelegate.HostCallback { @Nullable @Override public ActionBar setActionBar(Toolbar toolbar) { return null; } @Override public void setOuterTitle(CharSequence title) { } } } Loading
src/com/android/settings/core/SettingsBaseActivity.java +51 −37 Original line number Diff line number Diff line Loading @@ -15,16 +15,13 @@ */ package com.android.settings.core; import static android.text.Layout.HYPHENATION_FREQUENCY_NORMAL_FAST; import android.annotation.LayoutRes; import android.app.ActionBar; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.text.LineBreakConfig; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; Loading @@ -36,13 +33,15 @@ import android.widget.Toolbar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.fragment.app.FragmentActivity; import com.android.settings.R; import com.android.settings.SubSettings; import com.android.settings.Utils; import com.android.settings.core.CategoryMixin.CategoryHandler; import com.android.settingslib.collapsingtoolbar.CollapsingToolbarDelegate; import com.android.settingslib.collapsingtoolbar.FloatingToolbarHandler; import com.android.settingslib.collapsingtoolbar.widget.ScrollableToolbarItemLayout; import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin; import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; import com.android.settingslib.widget.SettingsThemeHelper; Loading @@ -50,13 +49,17 @@ import com.android.window.flags.Flags; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.floatingtoolbar.FloatingToolbarLayout; import com.google.android.material.resources.TextAppearanceConfig; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.transition.TransitionHelper; import com.google.android.setupdesign.util.ThemeHelper; import java.util.List; /** Base activity for Settings pages */ public class SettingsBaseActivity extends FragmentActivity implements CategoryHandler { public class SettingsBaseActivity extends FragmentActivity implements CategoryHandler, FloatingToolbarHandler { /** * What type of page transition should be apply. Loading @@ -66,7 +69,6 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa protected static final boolean DEBUG_TIMING = false; private static final String TAG = "SettingsBaseActivity"; private static final int DEFAULT_REQUEST = -1; private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f; private static final int EXPRESSIVE_LAYOUT_ID = com.android.settingslib.collapsingtoolbar.R.layout.settingslib_expressive_collapsing_toolbar_base_layout; Loading @@ -79,6 +81,8 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa protected AppBarLayout mAppBarLayout; private Toolbar mToolbar; private CollapsingToolbarDelegate mToolbardelegate; @Override public CategoryMixin getCategoryMixin() { return mCategoryMixin; Loading Loading @@ -127,17 +131,7 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa mCollapsingToolbarLayout = findViewById(com.android.settingslib.collapsingtoolbar.R.id.collapsing_toolbar); mAppBarLayout = findViewById(R.id.app_bar); if (mCollapsingToolbarLayout != null) { mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER); mCollapsingToolbarLayout.setHyphenationFrequency(HYPHENATION_FREQUENCY_NORMAL_FAST); mCollapsingToolbarLayout.setStaticLayoutBuilderConfigurer(builder -> builder.setLineBreakConfig( new LineBreakConfig.Builder() .setLineBreakWordStyle( LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE) .build())); } autoSetCollapsingToolbarLayoutScrolling(); getToolbarDelegate().initCollapsingToolbar(mCollapsingToolbarLayout, mAppBarLayout); } else { super.setContentView(R.layout.settings_base_layout); } Loading @@ -150,6 +144,10 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa } setActionBar(toolbar); FloatingToolbarLayout toolbarLayout = findViewById( com.android.settingslib.collapsingtoolbar.R.id.floating_toolbar); getToolbarDelegate().initFloatingToolbar(getApplicationContext(), toolbarLayout); if (DEBUG_TIMING) { Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); } Loading Loading @@ -276,25 +274,6 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa return false; } private void autoSetCollapsingToolbarLayoutScrolling() { if (mAppBarLayout == null) { return; } final CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); final AppBarLayout.Behavior behavior = new AppBarLayout.Behavior(); behavior.setDragCallback( new AppBarLayout.Behavior.DragCallback() { @Override public boolean canDrag(@NonNull AppBarLayout appBarLayout) { // Header can be scrolling while device in landscape mode. return appBarLayout.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; } }); params.setBehavior(behavior); } private int getTransitionType(Intent intent) { if (intent == null) { return TransitionType.TRANSITION_NONE; Loading @@ -315,4 +294,39 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa actionBarContainer.setVisibility(View.GONE); } } @Override public void setFloatingToolbarVisibility(boolean visible) { getToolbarDelegate().setFloatingToolbarVisibility(visible); } @Override public void setToolbarItems(@NonNull List<ScrollableToolbarItemLayout.ToolbarItem> items) { getToolbarDelegate().setToolbarItems(items); } @Override public void setOnItemSelectedListener( @NonNull ScrollableToolbarItemLayout.OnItemSelectedListener listener) { getToolbarDelegate().setOnItemSelectedListener(listener); } private CollapsingToolbarDelegate getToolbarDelegate() { if (mToolbardelegate == null) { mToolbardelegate = new CollapsingToolbarDelegate(new EmptyDelegateCallback(), true); } return mToolbardelegate; } private class EmptyDelegateCallback implements CollapsingToolbarDelegate.HostCallback { @Nullable @Override public ActionBar setActionBar(Toolbar toolbar) { return null; } @Override public void setOuterTitle(CharSequence title) { } } }