/* * Copyright (C) 2020 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.touch; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Rect; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.accessibility.AccessibilityEvent; /** * Abstraction layer to separate horizontal and vertical specific implementations * for {@link com.android.launcher3.PagedView}. Majority of these implementations are (should be) as * simple as choosing the correct X and Y analogous methods. */ public interface PagedOrientationHandler { PagedOrientationHandler DEFAULT = new DefaultPagedViewHandler(); interface Int2DAction { void call(T target, int x, int y); } interface Float2DAction { void call(T target, float x, float y); } Int2DAction VIEW_SCROLL_BY = View::scrollBy; Int2DAction VIEW_SCROLL_TO = View::scrollTo; Float2DAction CANVAS_TRANSLATE = Canvas::translate; Float2DAction MATRIX_POST_TRANSLATE = Matrix::postTranslate; void setPrimary(T target, Int2DAction action, int param); void setPrimary(T target, Float2DAction action, float param); float getPrimaryDirection(MotionEvent event, int pointerIndex); float getPrimaryVelocity(VelocityTracker velocityTracker, int pointerId); int getMeasuredSize(View view); int getPrimaryScroll(View view); float getPrimaryScale(View view); int getChildStart(View view); int getCenterForPage(View view, Rect insets); int getScrollOffsetStart(View view, Rect insets); int getScrollOffsetEnd(View view, Rect insets); ChildBounds getChildBounds(View child, int childStart, int pageCenter, boolean layoutChild); void setMaxScroll(AccessibilityEvent event, int maxScroll); boolean getRecentsRtlSetting(Resources resources); int getPrimaryValue(int x, int y); int getSecondaryValue(int x, int y); float getPrimaryValue(float x, float y); float getSecondaryValue(float x, float y); class ChildBounds { public final int primaryDimension; public final int secondaryDimension; public final int childPrimaryEnd; public final int childSecondaryEnd; public ChildBounds(int primaryDimension, int secondaryDimension, int childPrimaryEnd, int childSecondaryEnd) { this.primaryDimension = primaryDimension; this.secondaryDimension = secondaryDimension; this.childPrimaryEnd = childPrimaryEnd; this.childSecondaryEnd = childSecondaryEnd; } } }