Merge "Improve SettingsTransitionActivity for standalone usage." into sc-dev

This commit is contained in:
TreeHugger Robot
2021-05-13 23:14:47 +00:00
committed by Android (Google) Code Review
2 changed files with 44 additions and 85 deletions

View File

@@ -35,7 +35,6 @@ import com.google.android.material.resources.TextAppearanceConfig;
public class CollapsingToolbarBaseActivity extends SettingsTransitionActivity {
private CollapsingToolbarLayout mCollapsingToolbarLayout;
private Toolbar mToolbar;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -45,8 +44,8 @@ public class CollapsingToolbarBaseActivity extends SettingsTransitionActivity {
super.setContentView(R.layout.collapsing_toolbar_base_layout);
mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
mToolbar = findViewById(R.id.action_bar);
setActionBar(mToolbar);
final Toolbar toolbar = findViewById(R.id.action_bar);
setActionBar(toolbar);
// Enable title and home button by default
final ActionBar actionBar = getActionBar();
@@ -97,16 +96,11 @@ public class CollapsingToolbarBaseActivity extends SettingsTransitionActivity {
@Override
public boolean onNavigateUp() {
if (!super.onNavigateUp()) {
finish();
finishAfterTransition();
}
return true;
}
@Override
public Toolbar getToolbar() {
return mToolbar;
}
/**
* Returns an instance of collapsing toolbar.
*/

View File

@@ -18,14 +18,11 @@ package com.android.settingslib.collapsingtoolbar;
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toolbar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.os.BuildCompat;
import androidx.fragment.app.FragmentActivity;
@@ -40,117 +37,85 @@ public abstract class SettingsTransitionActivity extends FragmentActivity {
private static final String TAG = "SettingsTransitionActivity";
private static final int DEFAULT_REQUEST = -1;
private Toolbar mToolbar;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
if (BuildCompat.isAtLeastS()) {
if (isSettingsTransitionEnabled()) {
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
SettingsTransitionHelper.applyForwardTransition(this);
SettingsTransitionHelper.applyBackwardTransition(this);
}
super.onCreate(savedInstanceState);
}
@Override
public void startActivity(Intent intent) {
if (!BuildCompat.isAtLeastS()) {
super.startActivity(intent);
return;
}
final Toolbar toolbar = getToolbar();
if (toolbar == null) {
Log.w(TAG, "Toolbar is null. Cannot apply settings transition!");
super.startActivity(intent);
return;
}
super.startActivity(intent, getActivityOptionsBundle(toolbar));
public void setActionBar(@Nullable Toolbar toolbar) {
super.setActionBar(toolbar);
mToolbar = toolbar;
}
@Override
public void startActivity(Intent intent) {
if (!isSettingsTransitionEnabled()) {
super.startActivity(intent);
return;
}
super.startActivity(intent, createActivityOptionsBundleForTransition(null));
}
@Override
public void startActivity(Intent intent, @Nullable Bundle options) {
if (!BuildCompat.isAtLeastS()) {
if (!isSettingsTransitionEnabled()) {
super.startActivity(intent, options);
return;
}
final Toolbar toolbar = getToolbar();
if (toolbar == null) {
Log.w(TAG, "Toolbar is null. Cannot apply settings transition!");
super.startActivity(intent, options);
return;
}
if (options != null) {
super.startActivity(intent, getMergedBundleForTransition(options));
return;
}
super.startActivity(intent, getActivityOptionsBundle(toolbar));
super.startActivity(intent, createActivityOptionsBundleForTransition(options));
}
@Override
public void startActivityForResult(Intent intent, int requestCode) {
if (!BuildCompat.isAtLeastS() || requestCode == DEFAULT_REQUEST) {
if (!isSettingsTransitionEnabled() || requestCode == DEFAULT_REQUEST) {
super.startActivityForResult(intent, requestCode);
return;
}
final Toolbar toolbar = getToolbar();
if (toolbar == null) {
Log.w(TAG, "Toolbar is null. Cannot apply settings transition!");
super.startActivityForResult(intent, requestCode);
return;
}
super.startActivityForResult(intent, requestCode, getActivityOptionsBundle(toolbar));
super.startActivityForResult(intent, requestCode, createActivityOptionsBundleForTransition(
null));
}
@Override
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
if (!BuildCompat.isAtLeastS() || requestCode == DEFAULT_REQUEST) {
if (!isSettingsTransitionEnabled() || requestCode == DEFAULT_REQUEST) {
super.startActivityForResult(intent, requestCode, options);
return;
}
final Toolbar toolbar = getToolbar();
if (toolbar == null) {
Log.w(TAG, "Toolbar is null. Cannot apply settings transition!");
super.startActivityForResult(intent, requestCode, options);
return;
}
if (options != null) {
super.startActivityForResult(intent, requestCode,
getMergedBundleForTransition(options));
return;
}
super.startActivityForResult(intent, requestCode, getActivityOptionsBundle(toolbar));
super.startActivityForResult(intent, requestCode, createActivityOptionsBundleForTransition(
options));
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
final int id = item.getItemId();
if (id == android.R.id.home) {
// Make the up button behave the same as the back button.
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
protected boolean isSettingsTransitionEnabled() {
return BuildCompat.isAtLeastS();
}
/**
* Subclasses should implement this method and return their {@link Toolbar}.
*/
public abstract Toolbar getToolbar();
private Bundle getActivityOptionsBundle(Toolbar toolbar) {
return ActivityOptions.makeSceneTransitionAnimation(this, toolbar,
"shared_element_view").toBundle();
}
private Bundle getMergedBundleForTransition(@NonNull Bundle options) {
final Toolbar toolbar = getToolbar();
final Bundle mergedBundle = new Bundle();
mergedBundle.putAll(options);
final Bundle activityOptionsBundle = getActivityOptionsBundle(toolbar);
if (activityOptionsBundle != null) {
mergedBundle.putAll(activityOptionsBundle);
@Nullable
private Bundle createActivityOptionsBundleForTransition(@Nullable Bundle options) {
if (mToolbar == null) {
Log.w(TAG, "setActionBar(Toolbar) is not called. Cannot apply settings transition!");
return options;
}
return mergedBundle;
final Bundle transitionOptions = ActivityOptions.makeSceneTransitionAnimation(this,
mToolbar, "shared_element_view").toBundle();
if (options == null) {
return transitionOptions;
}
final Bundle mergedOptions = new Bundle(options);
mergedOptions.putAll(transitionOptions);
return mergedOptions;
}
}