Files
Lawnchair/src/com/android/launcher3/views/ActivityContext.java
T
Tony Wickham 9ce3b25ef6 Add TaskbarView as a child of Hotseat
Instead of keeping the Taskbar window showing above the home screen,
we now integrate a copy of TaskbarView directly into Launcher's view
hierarchy. Most TaskbarController calls apply to both TaskbarViews
(mTaskbarViewInApp and mTaskbarViewOnHome), except for calls related
to Hotseat, which only apply to mTasbkarViewInApp given the real
Hotseat will be showing with mTaskbarViewOnHome.

More cleanup will follow this change.

Test: All taskbar interactions (e.g. drag and drop) continue to work
Bug: 182512211
Bug: 171917176
Change-Id: I0f0b124f652daa85f866e1df8f9e2981540331a0
2021-03-22 15:26:01 -07:00

102 lines
3.6 KiB
Java

/*
* Copyright (C) 2018 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.views;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Rect;
import android.view.LayoutInflater;
import android.view.View.AccessibilityDelegate;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.dot.DotInfo;
import com.android.launcher3.model.data.ItemInfo;
/**
* An interface to be used along with a context for various activities in Launcher. This allows a
* generic class to depend on Context subclass instead of an Activity.
*/
public interface ActivityContext {
default boolean finishAutoCancelActionMode() {
return false;
}
default DotInfo getDotInfoForItem(ItemInfo info) {
return null;
}
/**
* For items with tree hierarchy, notifies the activity to invalidate the parent when a root
* is invalidated
* @param info info associated with a root node.
*/
default void invalidateParent(ItemInfo info) { }
default AccessibilityDelegate getAccessibilityDelegate() {
return null;
}
default Rect getFolderBoundingBox() {
return getDeviceProfile().getAbsoluteOpenFolderBounds();
}
/**
* After calling {@link #getFolderBoundingBox()}, we calculate a (left, top) position for a
* Folder of size width x height to be within those bounds. However, the chosen position may
* not be visually ideal (e.g. uncanny valley of centeredness), so here's a chance to update it.
* @param inOutPosition A 2-size array where the first element is the left position of the open
* folder and the second element is the top position. Should be updated in place if desired.
* @param bounds The bounds that the open folder should fit inside.
* @param width The width of the open folder.
* @param height The height of the open folder.
*/
default void updateOpenFolderPosition(int[] inOutPosition, Rect bounds, int width, int height) {
}
/**
* Returns a LayoutInflater that is cloned in this Context, so that Views inflated by it will
* have the same Context. (i.e. {@link #lookupContext(Context)} will find this ActivityContext.)
*/
default LayoutInflater getLayoutInflater() {
if (this instanceof Context) {
Context context = (Context) this;
return LayoutInflater.from(context).cloneInContext(context);
}
return null;
}
/**
* The root view to support drag-and-drop and popup support.
*/
BaseDragLayer getDragLayer();
DeviceProfile getDeviceProfile();
/**
* Returns the ActivityContext associated with the given Context.
*/
static <T extends Context & ActivityContext> T lookupContext(Context context) {
if (context instanceof ActivityContext) {
return (T) context;
} else if (context instanceof ContextWrapper) {
return lookupContext(((ContextWrapper) context).getBaseContext());
} else {
throw new IllegalArgumentException("Cannot find ActivityContext in parent tree");
}
}
}