content: /*
   * Copyright (C) 2011 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.content.Context;
  import android.graphics.Rect;
  import android.util.AttributeSet;
  import android.view.Gravity;
  import android.view.MotionEvent;
  import android.view.View;
  import android.view.ViewDebug;
  import android.view.ViewGroup;
  import android.widget.FrameLayout;
  
  import com.android.launcher3.graphics.RotationMode;
  import com.android.launcher3.logging.StatsLogUtils.LogContainerProvider;
  import com.android.launcher3.userevent.nano.LauncherLogProto;
  import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
  import com.android.launcher3.views.Transposable;
  
  public class Hotseat extends CellLayout implements LogContainerProvider, Insettable, Transposable {
  
      @ViewDebug.ExportedProperty(category = "launcher")
      private boolean mHasVerticalHotseat;
  
      public Hotseat(Context context) {
          this(context, null);
      }
  
      public Hotseat(Context context, AttributeSet attrs) {
          this(context, attrs, 0);
      }
  
      public Hotseat(Context context, AttributeSet attrs, int defStyle) {
          super(context, attrs, defStyle);
      }
  
      /* Get the orientation specific coordinates given an invariant order in the hotseat. */
      int getCellXFromOrder(int rank) {
          return mHasVerticalHotseat ? 0 : rank;
      }
  
      int getCellYFromOrder(int rank) {
          return mHasVerticalHotseat ? (getCountY() - (rank + 1)) : 0;
      }
  
      public void resetLayout(boolean hasVerticalHotseat) {
          removeAllViewsInLayout();
          mHasVerticalHotseat = hasVerticalHotseat;
          InvariantDeviceProfile idp = mActivity.getDeviceProfile().inv;
          if (hasVerticalHotseat) {
              setGridSize(1, idp.numHotseatIcons);
          } else {
              setGridSize(idp.numHotseatIcons, 1);
          }
      }
  
      @Override
      public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) {
          target.gridX = info.cellX;
          target.gridY = info.cellY;
          targetParent.containerType = LauncherLogProto.ContainerType.HOTSEAT;
      }
  
      @Override
      public void setInsets(Rect insets) {
          FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();
          DeviceProfile grid = mActivity.getWallpaperDeviceProfile();
          insets = grid.getInsets();
  
          if (grid.isVerticalBarLayout()) {
              lp.height = ViewGroup.LayoutParams.MATCH_PARENT;
              if (grid.isSeascape()) {
                  lp.gravity = Gravity.LEFT;
                  lp.width = grid.hotseatBarSizePx + insets.left;
              } else {
                  lp.gravity = Gravity.RIGHT;
                  lp.width = grid.hotseatBarSizePx + insets.right;
              }
          } else {
              lp.gravity = Gravity.BOTTOM;
              lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
              lp.height = grid.hotseatBarSizePx + insets.bottom;
          }
          Rect padding = grid.getHotseatLayoutPadding();
          setPadding(padding.left, padding.top, padding.right, padding.bottom);
  
          setLayoutParams(lp);
          InsettableFrameLayout.dispatchInsets(this, insets);
      }
  
      @Override
      public boolean onTouchEvent(MotionEvent event) {
          return event.getY() > getCellHeight();
      }
  
      @Override
      public RotationMode getRotationMode() {
          return Launcher.getLauncher(getContext()).getRotationMode();
      }
  }
  