Merge "Improve SettingsTransitionActivity for standalone usage." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0d6ceb6710
@@ -35,7 +35,6 @@ import com.google.android.material.resources.TextAppearanceConfig;
|
|||||||
public class CollapsingToolbarBaseActivity extends SettingsTransitionActivity {
|
public class CollapsingToolbarBaseActivity extends SettingsTransitionActivity {
|
||||||
|
|
||||||
private CollapsingToolbarLayout mCollapsingToolbarLayout;
|
private CollapsingToolbarLayout mCollapsingToolbarLayout;
|
||||||
private Toolbar mToolbar;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
@@ -45,8 +44,8 @@ public class CollapsingToolbarBaseActivity extends SettingsTransitionActivity {
|
|||||||
super.setContentView(R.layout.collapsing_toolbar_base_layout);
|
super.setContentView(R.layout.collapsing_toolbar_base_layout);
|
||||||
mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
|
mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
|
||||||
|
|
||||||
mToolbar = findViewById(R.id.action_bar);
|
final Toolbar toolbar = findViewById(R.id.action_bar);
|
||||||
setActionBar(mToolbar);
|
setActionBar(toolbar);
|
||||||
|
|
||||||
// Enable title and home button by default
|
// Enable title and home button by default
|
||||||
final ActionBar actionBar = getActionBar();
|
final ActionBar actionBar = getActionBar();
|
||||||
@@ -97,16 +96,11 @@ public class CollapsingToolbarBaseActivity extends SettingsTransitionActivity {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onNavigateUp() {
|
public boolean onNavigateUp() {
|
||||||
if (!super.onNavigateUp()) {
|
if (!super.onNavigateUp()) {
|
||||||
finish();
|
finishAfterTransition();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Toolbar getToolbar() {
|
|
||||||
return mToolbar;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an instance of collapsing toolbar.
|
* Returns an instance of collapsing toolbar.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -18,14 +18,11 @@ package com.android.settingslib.collapsingtoolbar;
|
|||||||
|
|
||||||
import android.app.ActivityOptions;
|
import android.app.ActivityOptions;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.os.BuildCompat;
|
import androidx.core.os.BuildCompat;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
@@ -40,117 +37,85 @@ public abstract class SettingsTransitionActivity extends FragmentActivity {
|
|||||||
private static final String TAG = "SettingsTransitionActivity";
|
private static final String TAG = "SettingsTransitionActivity";
|
||||||
private static final int DEFAULT_REQUEST = -1;
|
private static final int DEFAULT_REQUEST = -1;
|
||||||
|
|
||||||
|
private Toolbar mToolbar;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
if (BuildCompat.isAtLeastS()) {
|
if (isSettingsTransitionEnabled()) {
|
||||||
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
|
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
|
||||||
SettingsTransitionHelper.applyForwardTransition(this);
|
SettingsTransitionHelper.applyForwardTransition(this);
|
||||||
SettingsTransitionHelper.applyBackwardTransition(this);
|
SettingsTransitionHelper.applyBackwardTransition(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startActivity(Intent intent) {
|
public void setActionBar(@Nullable Toolbar toolbar) {
|
||||||
if (!BuildCompat.isAtLeastS()) {
|
super.setActionBar(toolbar);
|
||||||
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));
|
|
||||||
|
|
||||||
|
mToolbar = toolbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startActivity(Intent intent) {
|
||||||
|
if (!isSettingsTransitionEnabled()) {
|
||||||
|
super.startActivity(intent);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
super.startActivity(intent, createActivityOptionsBundleForTransition(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startActivity(Intent intent, @Nullable Bundle options) {
|
public void startActivity(Intent intent, @Nullable Bundle options) {
|
||||||
if (!BuildCompat.isAtLeastS()) {
|
if (!isSettingsTransitionEnabled()) {
|
||||||
super.startActivity(intent, options);
|
super.startActivity(intent, options);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Toolbar toolbar = getToolbar();
|
|
||||||
if (toolbar == null) {
|
super.startActivity(intent, createActivityOptionsBundleForTransition(options));
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startActivityForResult(Intent intent, int requestCode) {
|
public void startActivityForResult(Intent intent, int requestCode) {
|
||||||
if (!BuildCompat.isAtLeastS() || requestCode == DEFAULT_REQUEST) {
|
if (!isSettingsTransitionEnabled() || requestCode == DEFAULT_REQUEST) {
|
||||||
super.startActivityForResult(intent, requestCode);
|
super.startActivityForResult(intent, requestCode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Toolbar toolbar = getToolbar();
|
super.startActivityForResult(intent, requestCode, createActivityOptionsBundleForTransition(
|
||||||
if (toolbar == null) {
|
null));
|
||||||
Log.w(TAG, "Toolbar is null. Cannot apply settings transition!");
|
|
||||||
super.startActivityForResult(intent, requestCode);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
super.startActivityForResult(intent, requestCode, getActivityOptionsBundle(toolbar));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
|
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);
|
super.startActivityForResult(intent, requestCode, options);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Toolbar toolbar = getToolbar();
|
super.startActivityForResult(intent, requestCode, createActivityOptionsBundleForTransition(
|
||||||
if (toolbar == null) {
|
options));
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected boolean isSettingsTransitionEnabled() {
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
return BuildCompat.isAtLeastS();
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Nullable
|
||||||
* Subclasses should implement this method and return their {@link Toolbar}.
|
private Bundle createActivityOptionsBundleForTransition(@Nullable Bundle options) {
|
||||||
*/
|
if (mToolbar == null) {
|
||||||
public abstract Toolbar getToolbar();
|
Log.w(TAG, "setActionBar(Toolbar) is not called. Cannot apply settings transition!");
|
||||||
|
return options;
|
||||||
private Bundle getActivityOptionsBundle(Toolbar toolbar) {
|
|
||||||
return ActivityOptions.makeSceneTransitionAnimation(this, toolbar,
|
|
||||||
"shared_element_view").toBundle();
|
|
||||||
}
|
}
|
||||||
|
final Bundle transitionOptions = ActivityOptions.makeSceneTransitionAnimation(this,
|
||||||
private Bundle getMergedBundleForTransition(@NonNull Bundle options) {
|
mToolbar, "shared_element_view").toBundle();
|
||||||
final Toolbar toolbar = getToolbar();
|
if (options == null) {
|
||||||
final Bundle mergedBundle = new Bundle();
|
return transitionOptions;
|
||||||
mergedBundle.putAll(options);
|
|
||||||
final Bundle activityOptionsBundle = getActivityOptionsBundle(toolbar);
|
|
||||||
if (activityOptionsBundle != null) {
|
|
||||||
mergedBundle.putAll(activityOptionsBundle);
|
|
||||||
}
|
}
|
||||||
return mergedBundle;
|
final Bundle mergedOptions = new Bundle(options);
|
||||||
|
mergedOptions.putAll(transitionOptions);
|
||||||
|
return mergedOptions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user