194b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal/*
294b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * Copyright (C) 2016 The Android Open Source Project
394b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal *
494b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * Licensed under the Apache License, Version 2.0 (the "License");
594b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * you may not use this file except in compliance with the License.
694b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * You may obtain a copy of the License at
794b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal *
894b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal *      http://www.apache.org/licenses/LICENSE-2.0
994b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal *
1094b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * Unless required by applicable law or agreed to in writing, software
1194b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * distributed under the License is distributed on an "AS IS" BASIS,
1294b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1394b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * See the License for the specific language governing permissions and
1494b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * limitations under the License.
1594b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal */
1694b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
1794b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyalpackage com.android.launcher3.accessibility;
1894b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
1994b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyalimport android.view.ViewGroup;
2094b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
2194b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyalimport com.android.launcher3.CellLayout;
2294b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyalimport com.android.launcher3.DropTarget.DragObject;
2394b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyalimport com.android.launcher3.Launcher;
2494b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyalimport com.android.launcher3.dragndrop.DragController.DragListener;
2594b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyalimport com.android.launcher3.dragndrop.DragOptions;
2694b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
2794b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal/**
2894b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * Utility listener to enable/disable accessibility drag flags for a ViewGroup
2994b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal * containing CellLayouts
3094b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal */
310de011705b132eacdd10f7bfb5cdc4bd79a147e8Hyunyoung Songpublic class AccessibleDragListenerAdapter implements DragListener {
3294b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
3394b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    private final ViewGroup mViewGroup;
3494b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    private final int mDragType;
3594b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
3694b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    /**
3794b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal     * @param parent
3894b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal     * @param dragType either {@link CellLayout#WORKSPACE_ACCESSIBILITY_DRAG} or
3994b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal     *                 {@link CellLayout#FOLDER_ACCESSIBILITY_DRAG}
4094b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal     */
410de011705b132eacdd10f7bfb5cdc4bd79a147e8Hyunyoung Song    public AccessibleDragListenerAdapter(ViewGroup parent, int dragType) {
4294b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal        mViewGroup = parent;
4394b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal        mDragType = dragType;
4494b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    }
4594b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
4694b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    @Override
4794b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    public void onDragStart(DragObject dragObject, DragOptions options) {
4894b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal        enableAccessibleDrag(true);
4994b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    }
5094b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
5194b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    @Override
5294b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    public void onDragEnd() {
5394b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal        enableAccessibleDrag(false);
5494b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal        Launcher.getLauncher(mViewGroup.getContext()).getDragController().removeDragListener(this);
5594b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    }
5694b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
5794b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    protected void enableAccessibleDrag(boolean enable) {
5894b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal        for (int i = 0; i < mViewGroup.getChildCount(); i++) {
5994b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal            setEnableForLayout((CellLayout) mViewGroup.getChildAt(i), enable);
6094b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal        }
6194b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    }
6294b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal
6394b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    protected final void setEnableForLayout(CellLayout layout, boolean enable) {
6494b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal        layout.enableAccessibleDrag(enable, mDragType);
6594b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal    }
6694b510cc683a6436ae82c6d323cbd8b429561b06Sunny Goyal}
67