2018-07-03 15:53:39 -07:00
|
|
|
/*
|
|
|
|
|
* 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;
|
2021-02-11 11:55:24 -08:00
|
|
|
import android.graphics.Rect;
|
2021-03-22 14:43:58 -07:00
|
|
|
import android.view.LayoutInflater;
|
2018-11-13 19:43:57 -08:00
|
|
|
import android.view.View.AccessibilityDelegate;
|
|
|
|
|
|
|
|
|
|
import com.android.launcher3.DeviceProfile;
|
2018-12-03 18:11:39 -08:00
|
|
|
import com.android.launcher3.dot.DotInfo;
|
2021-05-06 12:11:44 -07:00
|
|
|
import com.android.launcher3.dragndrop.DragController;
|
2020-04-06 15:11:17 -07:00
|
|
|
import com.android.launcher3.model.data.ItemInfo;
|
2021-05-06 12:11:44 -07:00
|
|
|
import com.android.launcher3.util.ViewCache;
|
2018-07-03 15:53:39 -07:00
|
|
|
|
|
|
|
|
/**
|
2018-11-13 19:43:57 -08:00
|
|
|
* 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.
|
2018-07-03 15:53:39 -07:00
|
|
|
*/
|
|
|
|
|
public interface ActivityContext {
|
|
|
|
|
|
|
|
|
|
default boolean finishAutoCancelActionMode() {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-03 18:11:39 -08:00
|
|
|
default DotInfo getDotInfoForItem(ItemInfo info) {
|
2018-11-13 19:43:57 -08:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-11 11:55:24 -08:00
|
|
|
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) {
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-22 14:43:58 -07:00
|
|
|
/**
|
|
|
|
|
* 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;
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-13 19:43:57 -08:00
|
|
|
/**
|
|
|
|
|
* The root view to support drag-and-drop and popup support.
|
|
|
|
|
*/
|
2018-07-03 15:53:39 -07:00
|
|
|
BaseDragLayer getDragLayer();
|
|
|
|
|
|
2018-11-13 19:43:57 -08:00
|
|
|
DeviceProfile getDeviceProfile();
|
|
|
|
|
|
2021-05-06 12:11:44 -07:00
|
|
|
default ViewCache getViewCache() {
|
|
|
|
|
return new ViewCache();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Controller for supporting item drag-and-drop
|
|
|
|
|
*/
|
|
|
|
|
default <T extends DragController> T getDragController() {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-22 14:43:58 -07:00
|
|
|
/**
|
|
|
|
|
* Returns the ActivityContext associated with the given Context.
|
|
|
|
|
*/
|
|
|
|
|
static <T extends Context & ActivityContext> T lookupContext(Context context) {
|
2018-07-03 15:53:39 -07:00
|
|
|
if (context instanceof ActivityContext) {
|
2021-02-11 11:55:24 -08:00
|
|
|
return (T) context;
|
|
|
|
|
} else if (context instanceof ContextWrapper) {
|
2018-07-03 15:53:39 -07:00
|
|
|
return lookupContext(((ContextWrapper) context).getBaseContext());
|
|
|
|
|
} else {
|
|
|
|
|
throw new IllegalArgumentException("Cannot find ActivityContext in parent tree");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|