1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.launcher3; 18 19 import android.content.Context; 20 import android.graphics.Rect; 21 import android.util.AttributeSet; 22 import android.view.Gravity; 23 import android.view.MotionEvent; 24 import android.view.View; 25 import android.view.ViewDebug; 26 import android.view.ViewGroup; 27 import android.widget.FrameLayout; 28 29 import com.android.launcher3.graphics.RotationMode; 30 import com.android.launcher3.logging.StatsLogUtils.LogContainerProvider; 31 import com.android.launcher3.userevent.nano.LauncherLogProto; 32 import com.android.launcher3.userevent.nano.LauncherLogProto.Target; 33 import com.android.launcher3.views.Transposable; 34 35 public class Hotseat extends CellLayout implements LogContainerProvider, Insettable, Transposable { 36 37 @ViewDebug.ExportedProperty(category = "launcher") 38 private boolean mHasVerticalHotseat; 39 Hotseat(Context context)40 public Hotseat(Context context) { 41 this(context, null); 42 } 43 Hotseat(Context context, AttributeSet attrs)44 public Hotseat(Context context, AttributeSet attrs) { 45 this(context, attrs, 0); 46 } 47 Hotseat(Context context, AttributeSet attrs, int defStyle)48 public Hotseat(Context context, AttributeSet attrs, int defStyle) { 49 super(context, attrs, defStyle); 50 } 51 52 /* Get the orientation specific coordinates given an invariant order in the hotseat. */ getCellXFromOrder(int rank)53 int getCellXFromOrder(int rank) { 54 return mHasVerticalHotseat ? 0 : rank; 55 } 56 getCellYFromOrder(int rank)57 int getCellYFromOrder(int rank) { 58 return mHasVerticalHotseat ? (getCountY() - (rank + 1)) : 0; 59 } 60 resetLayout(boolean hasVerticalHotseat)61 public void resetLayout(boolean hasVerticalHotseat) { 62 removeAllViewsInLayout(); 63 mHasVerticalHotseat = hasVerticalHotseat; 64 InvariantDeviceProfile idp = mActivity.getDeviceProfile().inv; 65 if (hasVerticalHotseat) { 66 setGridSize(1, idp.numHotseatIcons); 67 } else { 68 setGridSize(idp.numHotseatIcons, 1); 69 } 70 } 71 72 @Override fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent)73 public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { 74 target.gridX = info.cellX; 75 target.gridY = info.cellY; 76 targetParent.containerType = LauncherLogProto.ContainerType.HOTSEAT; 77 } 78 79 @Override setInsets(Rect insets)80 public void setInsets(Rect insets) { 81 FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams(); 82 DeviceProfile grid = mActivity.getWallpaperDeviceProfile(); 83 insets = grid.getInsets(); 84 85 if (grid.isVerticalBarLayout()) { 86 lp.height = ViewGroup.LayoutParams.MATCH_PARENT; 87 if (grid.isSeascape()) { 88 lp.gravity = Gravity.LEFT; 89 lp.width = grid.hotseatBarSizePx + insets.left; 90 } else { 91 lp.gravity = Gravity.RIGHT; 92 lp.width = grid.hotseatBarSizePx + insets.right; 93 } 94 } else { 95 lp.gravity = Gravity.BOTTOM; 96 lp.width = ViewGroup.LayoutParams.MATCH_PARENT; 97 lp.height = grid.hotseatBarSizePx + insets.bottom; 98 } 99 Rect padding = grid.getHotseatLayoutPadding(); 100 setPadding(padding.left, padding.top, padding.right, padding.bottom); 101 102 setLayoutParams(lp); 103 InsettableFrameLayout.dispatchInsets(this, insets); 104 } 105 106 @Override onTouchEvent(MotionEvent event)107 public boolean onTouchEvent(MotionEvent event) { 108 return event.getY() > getCellHeight(); 109 } 110 111 @Override getRotationMode()112 public RotationMode getRotationMode() { 113 return Launcher.getLauncher(getContext()).getRotationMode(); 114 } 115 } 116