307fe23f12
--> A bunch of stuff breaks when scaling the hotseat. More specifically,
drag and drop animations between hotseat and workspace,
scaling on pick up, folder animations, determination of
item placement. This CL fixes these issues so that the
hotseat or hotseat items are ready to be scaled.
--> For now, using 90% scale factor for 7-inch+ UIs
Change-Id: Iac098409347e76139e4d726a071397b56ac684d2
148 lines
5.3 KiB
Java
148 lines
5.3 KiB
Java
/*
|
|
* 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.launcher2;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.Configuration;
|
|
import android.content.res.Resources;
|
|
import android.content.res.TypedArray;
|
|
import android.util.AttributeSet;
|
|
import android.view.LayoutInflater;
|
|
import android.view.MotionEvent;
|
|
import android.view.View;
|
|
import android.widget.FrameLayout;
|
|
|
|
import com.android.launcher.R;
|
|
|
|
public class Hotseat extends FrameLayout {
|
|
@SuppressWarnings("unused")
|
|
private static final String TAG = "Hotseat";
|
|
|
|
private Launcher mLauncher;
|
|
private CellLayout mContent;
|
|
|
|
private int mCellCountX;
|
|
private int mCellCountY;
|
|
private int mAllAppsButtonRank;
|
|
|
|
private boolean mTransposeLayoutWithOrientation;
|
|
private boolean mIsLandscape;
|
|
|
|
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);
|
|
|
|
TypedArray a = context.obtainStyledAttributes(attrs,
|
|
R.styleable.Hotseat, defStyle, 0);
|
|
Resources r = context.getResources();
|
|
mCellCountX = a.getInt(R.styleable.Hotseat_cellCountX, -1);
|
|
mCellCountY = a.getInt(R.styleable.Hotseat_cellCountY, -1);
|
|
mAllAppsButtonRank = r.getInteger(R.integer.hotseat_all_apps_index);
|
|
mTransposeLayoutWithOrientation =
|
|
r.getBoolean(R.bool.hotseat_transpose_layout_with_orientation);
|
|
mIsLandscape = context.getResources().getConfiguration().orientation ==
|
|
Configuration.ORIENTATION_LANDSCAPE;
|
|
}
|
|
|
|
public void setup(Launcher launcher) {
|
|
mLauncher = launcher;
|
|
setOnKeyListener(new HotseatIconKeyEventListener());
|
|
}
|
|
|
|
CellLayout getLayout() {
|
|
return mContent;
|
|
}
|
|
|
|
private boolean hasVerticalHotseat() {
|
|
return (mIsLandscape && mTransposeLayoutWithOrientation);
|
|
}
|
|
|
|
/* Get the orientation invariant order of the item in the hotseat for persistence. */
|
|
int getOrderInHotseat(int x, int y) {
|
|
return hasVerticalHotseat() ? (mContent.getCountY() - y - 1) : x;
|
|
}
|
|
/* Get the orientation specific coordinates given an invariant order in the hotseat. */
|
|
int getCellXFromOrder(int rank) {
|
|
return hasVerticalHotseat() ? 0 : rank;
|
|
}
|
|
int getCellYFromOrder(int rank) {
|
|
return hasVerticalHotseat() ? (mContent.getCountY() - (rank + 1)) : 0;
|
|
}
|
|
public boolean isAllAppsButtonRank(int rank) {
|
|
return rank == mAllAppsButtonRank;
|
|
}
|
|
|
|
@Override
|
|
protected void onFinishInflate() {
|
|
super.onFinishInflate();
|
|
if (mCellCountX < 0) mCellCountX = LauncherModel.getCellCountX();
|
|
if (mCellCountY < 0) mCellCountY = LauncherModel.getCellCountY();
|
|
mContent = (CellLayout) findViewById(R.id.layout);
|
|
mContent.setGridSize(mCellCountX, mCellCountY);
|
|
mContent.setIsHotseat(true);
|
|
|
|
resetLayout();
|
|
}
|
|
|
|
void resetLayout() {
|
|
mContent.removeAllViewsInLayout();
|
|
|
|
// Add the Apps button
|
|
Context context = getContext();
|
|
LayoutInflater inflater = LayoutInflater.from(context);
|
|
BubbleTextView allAppsButton = (BubbleTextView)
|
|
inflater.inflate(R.layout.application, mContent, false);
|
|
allAppsButton.setCompoundDrawablesWithIntrinsicBounds(null,
|
|
context.getResources().getDrawable(R.drawable.all_apps_button_icon), null, null);
|
|
allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label));
|
|
allAppsButton.setOnTouchListener(new View.OnTouchListener() {
|
|
@Override
|
|
public boolean onTouch(View v, MotionEvent event) {
|
|
if (mLauncher != null &&
|
|
(event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) {
|
|
mLauncher.onTouchDownAllAppsButton(v);
|
|
}
|
|
return false;
|
|
}
|
|
});
|
|
|
|
allAppsButton.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(android.view.View v) {
|
|
if (mLauncher != null) {
|
|
mLauncher.onClickAllAppsButton(v);
|
|
}
|
|
}
|
|
});
|
|
|
|
// Note: We do this to ensure that the hotseat is always laid out in the orientation of
|
|
// the hotseat in order regardless of which orientation they were added
|
|
int x = getCellXFromOrder(mAllAppsButtonRank);
|
|
int y = getCellYFromOrder(mAllAppsButtonRank);
|
|
CellLayout.LayoutParams lp = new CellLayout.LayoutParams(x,y,1,1);
|
|
lp.canReorder = false;
|
|
mContent.addViewToCellLayout(allAppsButton, -1, 0, lp, true);
|
|
}
|
|
}
|