mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
- To prevent surface thrashing, we no longer hide the home activity before starting the transition home. This prevents the launcher from being added to the remote animation target list, which means that we default to skipping the launcher animation. As a workaround, we special case the flow and force the animation to run when starting the recents animation. Bug: 74405472 Test: Go home from an app, ensure there is an animation. Change-Id: Ifd2b39444fdeab323ee79a368b580a6264c3e5b9
161 lines
4.8 KiB
Java
161 lines
4.8 KiB
Java
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.launcher3;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.content.ContextWrapper;
|
|
import android.content.Intent;
|
|
import android.graphics.Point;
|
|
import android.view.Display;
|
|
import android.view.View.AccessibilityDelegate;
|
|
|
|
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
|
|
import com.android.launcher3.logging.UserEventDispatcher;
|
|
import com.android.launcher3.util.SystemUiController;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
public abstract class BaseActivity extends Activity {
|
|
|
|
private final ArrayList<OnDeviceProfileChangeListener> mDPChangeListeners = new ArrayList<>();
|
|
|
|
protected DeviceProfile mDeviceProfile;
|
|
protected UserEventDispatcher mUserEventDispatcher;
|
|
protected SystemUiController mSystemUiController;
|
|
|
|
private boolean mStarted;
|
|
// When the recents animation is running, the visibility of the Launcher is managed by the
|
|
// animation
|
|
private boolean mForceInvisible;
|
|
private boolean mUserActive;
|
|
|
|
public DeviceProfile getDeviceProfile() {
|
|
return mDeviceProfile;
|
|
}
|
|
|
|
public AccessibilityDelegate getAccessibilityDelegate() {
|
|
return null;
|
|
}
|
|
|
|
public final UserEventDispatcher getUserEventDispatcher() {
|
|
if (mUserEventDispatcher == null) {
|
|
mUserEventDispatcher = UserEventDispatcher.newInstance(this, mDeviceProfile);
|
|
}
|
|
return mUserEventDispatcher;
|
|
}
|
|
|
|
public boolean isInMultiWindowModeCompat() {
|
|
return Utilities.ATLEAST_NOUGAT && isInMultiWindowMode();
|
|
}
|
|
|
|
public static BaseActivity fromContext(Context context) {
|
|
if (context instanceof BaseActivity) {
|
|
return (BaseActivity) context;
|
|
}
|
|
return ((BaseActivity) ((ContextWrapper) context).getBaseContext());
|
|
}
|
|
|
|
public SystemUiController getSystemUiController() {
|
|
if (mSystemUiController == null) {
|
|
mSystemUiController = new SystemUiController(getWindow());
|
|
}
|
|
return mSystemUiController;
|
|
}
|
|
|
|
@Override
|
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
super.onActivityResult(requestCode, resultCode, data);
|
|
}
|
|
|
|
@Override
|
|
protected void onStart() {
|
|
mStarted = true;
|
|
super.onStart();
|
|
}
|
|
|
|
@Override
|
|
protected void onResume() {
|
|
mUserActive = true;
|
|
super.onResume();
|
|
}
|
|
|
|
@Override
|
|
protected void onUserLeaveHint() {
|
|
mUserActive = false;
|
|
super.onUserLeaveHint();
|
|
}
|
|
|
|
@Override
|
|
protected void onStop() {
|
|
mStarted = false;
|
|
mForceInvisible = false;
|
|
super.onStop();
|
|
}
|
|
|
|
public boolean isStarted() {
|
|
return mStarted;
|
|
}
|
|
|
|
public boolean isUserActive() {
|
|
return mUserActive;
|
|
}
|
|
|
|
public void addOnDeviceProfileChangeListener(OnDeviceProfileChangeListener listener) {
|
|
mDPChangeListeners.add(listener);
|
|
}
|
|
|
|
public void removeOnDeviceProfileChangeListener(OnDeviceProfileChangeListener listener) {
|
|
mDPChangeListeners.remove(listener);
|
|
}
|
|
|
|
protected void dispatchDeviceProfileChanged() {
|
|
for (int i = mDPChangeListeners.size() - 1; i >= 0; i--) {
|
|
mDPChangeListeners.get(i).onDeviceProfileChanged(mDeviceProfile);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Used to set the override visibility state, used only to handle the transition home with the
|
|
* recents animation.
|
|
* @see LauncherAppTransitionManagerImpl.getWallpaperOpenRunner()
|
|
*/
|
|
public void setForceInvisible(boolean invisible) {
|
|
mForceInvisible = invisible;
|
|
}
|
|
|
|
/**
|
|
* @return Wether this activity should be considered invisible regardless of actual visibility.
|
|
*/
|
|
public boolean isForceInvisible() {
|
|
return mForceInvisible;
|
|
}
|
|
|
|
/**
|
|
* Sets the device profile, adjusting it accordingly in case of multi-window
|
|
*/
|
|
protected void setDeviceProfile(DeviceProfile dp) {
|
|
mDeviceProfile = dp;
|
|
if (isInMultiWindowModeCompat()) {
|
|
Display display = getWindowManager().getDefaultDisplay();
|
|
Point mwSize = new Point();
|
|
display.getSize(mwSize);
|
|
mDeviceProfile = mDeviceProfile.getMultiWindowProfile(this, mwSize);
|
|
}
|
|
}
|
|
}
|