13d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung/*
23d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * Copyright (C) 2011 The Android Open Source Project
33d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung *
43d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * Licensed under the Apache License, Version 2.0 (the "License");
53d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * you may not use this file except in compliance with the License.
63d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * You may obtain a copy of the License at
73d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung *
83d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung *      http://www.apache.org/licenses/LICENSE-2.0
93d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung *
103d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * Unless required by applicable law or agreed to in writing, software
113d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * distributed under the License is distributed on an "AS IS" BASIS,
123d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * See the License for the specific language governing permissions and
143d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung * limitations under the License.
153d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung */
163d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
17325dc23624160689e59fbac708cf6f222b20d025Daniel Sandlerpackage com.android.launcher3;
183d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
19e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohenimport android.content.ComponentName;
203d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chungimport android.content.Context;
213d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chungimport android.content.res.Configuration;
220e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chungimport android.content.res.Resources;
233a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chungimport android.graphics.Rect;
24c58497ee619416c4949b16eb43486c11618b69e5Winson Chungimport android.graphics.drawable.Drawable;
253d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chungimport android.util.AttributeSet;
2664359a53dc827797917a8d9a0697a91996789801Winson Chungimport android.util.Log;
27c58497ee619416c4949b16eb43486c11618b69e5Winson Chungimport android.view.LayoutInflater;
28a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohenimport android.view.MotionEvent;
293d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chungimport android.view.View;
303d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chungimport android.widget.FrameLayout;
3161f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohenimport android.widget.TextView;
323d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
33e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohenimport java.util.ArrayList;
34e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen
353d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chungpublic class Hotseat extends FrameLayout {
36f30ad5f1bf33baceeca6b770464fb543b58af985Winson Chung    private static final String TAG = "Hotseat";
373d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
383d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    private CellLayout mContent;
393d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
40c58497ee619416c4949b16eb43486c11618b69e5Winson Chung    private Launcher mLauncher;
41c58497ee619416c4949b16eb43486c11618b69e5Winson Chung
420dca1ec41479a74f8da080224fa0c7eacab674d6Andrew Flynn    private int mAllAppsButtonRank;
43307fe23f125cbbd5512ad8d4660025f2ab68f30bAdam Cohen
440e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung    private boolean mTransposeLayoutWithOrientation;
453d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    private boolean mIsLandscape;
463d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
473d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    public Hotseat(Context context) {
483d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        this(context, null);
493d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
503d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
513d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    public Hotseat(Context context, AttributeSet attrs) {
523d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        this(context, attrs, 0);
533d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
543d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
553d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    public Hotseat(Context context, AttributeSet attrs, int defStyle) {
563d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        super(context, attrs, defStyle);
573d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
580e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung        Resources r = context.getResources();
590e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung        mTransposeLayoutWithOrientation =
600e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung                r.getBoolean(R.bool.hotseat_transpose_layout_with_orientation);
613d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        mIsLandscape = context.getResources().getConfiguration().orientation ==
623d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung            Configuration.ORIENTATION_LANDSCAPE;
633d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
643d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
653d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    public void setup(Launcher launcher) {
66c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        mLauncher = launcher;
67ac56cff1860b71d3f164aedd268703936e08fdc0Adam Cohen        setOnKeyListener(new HotseatIconKeyEventListener());
683d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
693d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
703d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    CellLayout getLayout() {
713d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        return mContent;
723d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
7311a1a53651924b544513f1f6971a735b18d67539Winson Chung
7411a1a53651924b544513f1f6971a735b18d67539Winson Chung    /**
7511a1a53651924b544513f1f6971a735b18d67539Winson Chung     * Registers the specified listener on the cell layout of the hotseat.
7611a1a53651924b544513f1f6971a735b18d67539Winson Chung     */
7711a1a53651924b544513f1f6971a735b18d67539Winson Chung    @Override
7811a1a53651924b544513f1f6971a735b18d67539Winson Chung    public void setOnLongClickListener(OnLongClickListener l) {
7911a1a53651924b544513f1f6971a735b18d67539Winson Chung        mContent.setOnLongClickListener(l);
8011a1a53651924b544513f1f6971a735b18d67539Winson Chung    }
810e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung
820e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung    private boolean hasVerticalHotseat() {
830e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung        return (mIsLandscape && mTransposeLayoutWithOrientation);
840e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung    }
853d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
863d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    /* Get the orientation invariant order of the item in the hotseat for persistence. */
873d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    int getOrderInHotseat(int x, int y) {
880e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung        return hasVerticalHotseat() ? (mContent.getCountY() - y - 1) : x;
893d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
903d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    /* Get the orientation specific coordinates given an invariant order in the hotseat. */
913d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    int getCellXFromOrder(int rank) {
920e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung        return hasVerticalHotseat() ? 0 : rank;
933d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
943d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    int getCellYFromOrder(int rank) {
950e721a4005b4d119cf641ca0dd0d8744672646f0Winson Chung        return hasVerticalHotseat() ? (mContent.getCountY() - (rank + 1)) : 0;
963d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
970dca1ec41479a74f8da080224fa0c7eacab674d6Andrew Flynn    public boolean isAllAppsButtonRank(int rank) {
98c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        if (AppsCustomizePagedView.DISABLE_ALL_APPS) {
99c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            return false;
100c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        } else {
101c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            return rank == mAllAppsButtonRank;
102c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        }
103f30ad5f1bf33baceeca6b770464fb543b58af985Winson Chung    }
1043d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
1053a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung    /** This returns the coordinates of an app in a given cell, relative to the DragLayer */
1063a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung    Rect getCellCoordinates(int cellX, int cellY) {
1073a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        Rect coords = new Rect();
1083a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        mContent.cellToRect(cellX, cellY, 1, 1, coords);
1093a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        int[] hotseatInParent = new int[2];
1103a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        Utilities.getDescendantCoordRelativeToParent(this, mLauncher.getDragLayer(),
1113a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung                hotseatInParent, false);
1123a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        coords.offset(hotseatInParent[0], hotseatInParent[1]);
1133a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung
1143a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        // Center the icon
1153a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        int cWidth = mContent.getShortcutsAndWidgets().getCellContentWidth();
1163a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        int cHeight = mContent.getShortcutsAndWidgets().getCellContentHeight();
1173a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        int cellPaddingX = (int) Math.max(0, ((coords.width() - cWidth) / 2f));
1183a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        int cellPaddingY = (int) Math.max(0, ((coords.height() - cHeight) / 2f));
1193a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        coords.offset(cellPaddingX, cellPaddingY);
1203a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung
1213a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung        return coords;
1223a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung    }
1233a6e7f330e680ef718ca7c0921d842efb4d8bbaeWinson Chung
1243d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    @Override
1253d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    protected void onFinishInflate() {
1263d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        super.onFinishInflate();
1275f8afe6280eae34620067696173e71943e1a30a3Winson Chung        LauncherAppState app = LauncherAppState.getInstance();
1285f8afe6280eae34620067696173e71943e1a30a3Winson Chung        DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
1295f8afe6280eae34620067696173e71943e1a30a3Winson Chung
130c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        mAllAppsButtonRank = grid.hotseatAllAppsRank;
1313d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        mContent = (CellLayout) findViewById(R.id.layout);
1325f8afe6280eae34620067696173e71943e1a30a3Winson Chung        if (grid.isLandscape && !grid.isLargeTablet()) {
1335f8afe6280eae34620067696173e71943e1a30a3Winson Chung            mContent.setGridSize(1, (int) grid.numHotseatIcons);
1345f8afe6280eae34620067696173e71943e1a30a3Winson Chung        } else {
1355f8afe6280eae34620067696173e71943e1a30a3Winson Chung            mContent.setGridSize((int) grid.numHotseatIcons, 1);
1365f8afe6280eae34620067696173e71943e1a30a3Winson Chung        }
1370dca1ec41479a74f8da080224fa0c7eacab674d6Andrew Flynn        mContent.setIsHotseat(true);
1383d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
1393d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        resetLayout();
1403d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
1413d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung
1423d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    void resetLayout() {
1433d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung        mContent.removeAllViewsInLayout();
144c58497ee619416c4949b16eb43486c11618b69e5Winson Chung
145c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        if (!AppsCustomizePagedView.DISABLE_ALL_APPS) {
146c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            // Add the Apps button
147c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            Context context = getContext();
148c58497ee619416c4949b16eb43486c11618b69e5Winson Chung
149c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            LayoutInflater inflater = LayoutInflater.from(context);
15061f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohen            TextView allAppsButton = (TextView)
15161f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohen                    inflater.inflate(R.layout.all_apps_button, mContent, false);
15261f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohen            Drawable d = context.getResources().getDrawable(R.drawable.all_apps_button_icon);
1530dbd734384df38960515ce49dfcb5e15a394decaWinson Chung            Utilities.resizeIconDrawable(d);
15461f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohen            allAppsButton.setCompoundDrawables(null, d, null, null);
155c58497ee619416c4949b16eb43486c11618b69e5Winson Chung
15661f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohen            allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label));
15761f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohen            if (mLauncher != null) {
15861f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohen                allAppsButton.setOnTouchListener(mLauncher.getHapticFeedbackTouchListener());
15961f560d92ab4b11a61beeb8df97b9952027e08e4Adam Cohen            }
160c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            allAppsButton.setOnClickListener(new View.OnClickListener() {
161c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                @Override
162c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                public void onClick(android.view.View v) {
163c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                    if (mLauncher != null) {
164c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                        mLauncher.onClickAllAppsButton(v);
165c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                    }
166c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                }
167c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            });
168c58497ee619416c4949b16eb43486c11618b69e5Winson Chung
169c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            // Note: We do this to ensure that the hotseat is always laid out in the orientation of
170c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            // the hotseat in order regardless of which orientation they were added
171c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            int x = getCellXFromOrder(mAllAppsButtonRank);
172c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            int y = getCellYFromOrder(mAllAppsButtonRank);
173c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            CellLayout.LayoutParams lp = new CellLayout.LayoutParams(x,y,1,1);
174c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            lp.canReorder = false;
175c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            mContent.addViewToCellLayout(allAppsButton, -1, 0, lp, true);
176c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        }
1773d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung    }
178e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen
179a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen    @Override
180a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen    public boolean onInterceptTouchEvent(MotionEvent ev) {
181a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen        // We don't want any clicks to go through to the hotseat unless the workspace is in
182a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen        // the normal state.
183a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen        if (mLauncher.getWorkspace().isSmall()) {
184a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen            return true;
185a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen        }
186a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen        return false;
187a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen    }
188a5f4e488dff461fbbc61400a8d284d9886164f76Adam Cohen
189156ab5b22e45b36a1c5edbe5accccf6aefcb4907Winson Chung    void addAllAppsFolder(IconCache iconCache,
190eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka            ArrayList<AppInfo> allApps, ArrayList<ComponentName> onWorkspace,
191156ab5b22e45b36a1c5edbe5accccf6aefcb4907Winson Chung            Launcher launcher, Workspace workspace) {
192c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        if (AppsCustomizePagedView.DISABLE_ALL_APPS) {
193c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            FolderInfo fi = new FolderInfo();
194c58497ee619416c4949b16eb43486c11618b69e5Winson Chung
195c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            fi.cellX = getCellXFromOrder(mAllAppsButtonRank);
196c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            fi.cellY = getCellYFromOrder(mAllAppsButtonRank);
197c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            fi.spanX = 1;
198c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            fi.spanY = 1;
199c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            fi.container = LauncherSettings.Favorites.CONTAINER_HOTSEAT;
200c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            fi.screenId = mAllAppsButtonRank;
201c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            fi.itemType = LauncherSettings.Favorites.ITEM_TYPE_FOLDER;
202c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            fi.title = "More Apps";
203c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            LauncherModel.addItemToDatabase(launcher, fi, fi.container, fi.screenId, fi.cellX,
204c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                    fi.cellY, false);
205c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            FolderIcon folder = FolderIcon.fromXml(R.layout.folder_icon, launcher,
206c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                    getLayout(), fi, iconCache);
207c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            workspace.addInScreen(folder, fi.container, fi.screenId, fi.cellX, fi.cellY,
208c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                    fi.spanX, fi.spanY);
209c58497ee619416c4949b16eb43486c11618b69e5Winson Chung
210c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            for (AppInfo info: allApps) {
211c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                ComponentName cn = info.intent.getComponent();
212c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                if (!onWorkspace.contains(cn)) {
213c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                    Log.d(TAG, "Adding to 'more apps': " + info.intent);
214c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                    ShortcutInfo si = info.makeShortcut();
215c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                    fi.add(si);
216c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                }
217e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen            }
218e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen        }
219e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen    }
220e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen
221eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka    void addAppsToAllAppsFolder(ArrayList<AppInfo> apps) {
222c58497ee619416c4949b16eb43486c11618b69e5Winson Chung        if (AppsCustomizePagedView.DISABLE_ALL_APPS) {
223c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            View v = mContent.getChildAt(getCellXFromOrder(mAllAppsButtonRank), getCellYFromOrder(mAllAppsButtonRank));
224c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            FolderIcon fi = null;
225c58497ee619416c4949b16eb43486c11618b69e5Winson Chung
226c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            if (v instanceof FolderIcon) {
227c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                fi = (FolderIcon) v;
228c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            } else {
229c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                return;
230c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            }
231e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen
232c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            FolderInfo info = fi.getFolderInfo();
233c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            for (AppInfo a: apps) {
234c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                ShortcutInfo si = a.makeShortcut();
235c58497ee619416c4949b16eb43486c11618b69e5Winson Chung                info.add(si);
236c58497ee619416c4949b16eb43486c11618b69e5Winson Chung            }
237e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen        }
238e25af795647a19f1a0d60bc4baea5a996d215fdfAdam Cohen    }
2393d503fbd9468fb2b9fa645f4f7b91e11229edbfaWinson Chung}
240