16e80583aSopenharmony_ci/** 26e80583aSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 36e80583aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 46e80583aSopenharmony_ci * you may not use this file except in compliance with the License. 56e80583aSopenharmony_ci * You may obtain a copy of the License at 66e80583aSopenharmony_ci * 76e80583aSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 86e80583aSopenharmony_ci * 96e80583aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 106e80583aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 116e80583aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126e80583aSopenharmony_ci * See the License for the specific language governing permissions and 136e80583aSopenharmony_ci * limitations under the License. 146e80583aSopenharmony_ci */ 156e80583aSopenharmony_ci 166e80583aSopenharmony_ciimport { Log } from '../utils/Log'; 176e80583aSopenharmony_ciimport { DragArea } from '../interface/DragArea'; 186e80583aSopenharmony_ciimport { CommonConstants } from '../constants/CommonConstants'; 196e80583aSopenharmony_ciimport type { LauncherDragItemInfo } from '../bean/LauncherDragItemInfo'; 206e80583aSopenharmony_ci 216e80583aSopenharmony_ciconst TAG = 'BaseDragHandler'; 226e80583aSopenharmony_ci 236e80583aSopenharmony_ci/** 246e80583aSopenharmony_ci * Drag processing base class, drag processing is mainly responsible for the processing of the following tasks: 256e80583aSopenharmony_ci * 1.Efficient event distribution based on drag area. 266e80583aSopenharmony_ci * 2.Initialize drag function related parameters. 276e80583aSopenharmony_ci * 3.Adjust and refresh the desktop layout according to the drag results. 286e80583aSopenharmony_ci */ 296e80583aSopenharmony_ciexport abstract class BaseDragHandler { 306e80583aSopenharmony_ci protected mIsInEffectArea = false; 316e80583aSopenharmony_ci protected mDragEffectArea: DragArea | undefined; 326e80583aSopenharmony_ci private mDragStateListener = null; 336e80583aSopenharmony_ci private mSelectItemIndex: number = CommonConstants.INVALID_VALUE; 346e80583aSopenharmony_ci 356e80583aSopenharmony_ci constructor() { 366e80583aSopenharmony_ci this.setIsLongPress(false); 376e80583aSopenharmony_ci } 386e80583aSopenharmony_ci 396e80583aSopenharmony_ci /** 406e80583aSopenharmony_ci * Get the data object corresponding to the drag operation. 416e80583aSopenharmony_ci */ 426e80583aSopenharmony_ci protected abstract getDragRelativeData(): any; 436e80583aSopenharmony_ci 446e80583aSopenharmony_ci /** 456e80583aSopenharmony_ci * Get the position of the drag target. 466e80583aSopenharmony_ci */ 476e80583aSopenharmony_ci protected abstract getItemIndex(x: number, y: number): number; 486e80583aSopenharmony_ci 496e80583aSopenharmony_ci /** 506e80583aSopenharmony_ci * Get the object at the target location. 516e80583aSopenharmony_ci */ 526e80583aSopenharmony_ci protected abstract getItemByIndex(index: number): any; 536e80583aSopenharmony_ci 546e80583aSopenharmony_ci /** 556e80583aSopenharmony_ci * Set the drag effective area. 566e80583aSopenharmony_ci */ 576e80583aSopenharmony_ci setDragEffectArea(effectArea: DragArea): void { 586e80583aSopenharmony_ci this.mDragEffectArea = effectArea; 596e80583aSopenharmony_ci } 606e80583aSopenharmony_ci 616e80583aSopenharmony_ci /** 626e80583aSopenharmony_ci * Get valid area. 636e80583aSopenharmony_ci */ 646e80583aSopenharmony_ci protected getDragEffectArea(): DragArea | undefined { 656e80583aSopenharmony_ci return this.mDragEffectArea; 666e80583aSopenharmony_ci } 676e80583aSopenharmony_ci 686e80583aSopenharmony_ci /** 696e80583aSopenharmony_ci * Set up drag listeners. 706e80583aSopenharmony_ci */ 716e80583aSopenharmony_ci setDragStateListener(dragStateListener): void { 726e80583aSopenharmony_ci this.mDragStateListener = dragStateListener; 736e80583aSopenharmony_ci } 746e80583aSopenharmony_ci 756e80583aSopenharmony_ci /** 766e80583aSopenharmony_ci * Set drag and drop item information. 776e80583aSopenharmony_ci * 786e80583aSopenharmony_ci * @param dragItemInfo 796e80583aSopenharmony_ci */ 806e80583aSopenharmony_ci protected setDragItemInfo(dragItemInfo: LauncherDragItemInfo): void { 816e80583aSopenharmony_ci Log.showDebug(TAG, `setDragItemInfo dragItemInfo: ${JSON.stringify(dragItemInfo)}`); 826e80583aSopenharmony_ci AppStorage.setOrCreate<LauncherDragItemInfo>('dragItemInfo', dragItemInfo); 836e80583aSopenharmony_ci } 846e80583aSopenharmony_ci 856e80583aSopenharmony_ci /** 866e80583aSopenharmony_ci * Get drag item information. 876e80583aSopenharmony_ci * 886e80583aSopenharmony_ci * @return dragItemInfo 896e80583aSopenharmony_ci */ 906e80583aSopenharmony_ci protected getDragItemInfo() { 916e80583aSopenharmony_ci const dragItemInfo: LauncherDragItemInfo = AppStorage.get<LauncherDragItemInfo>('dragItemInfo'); 926e80583aSopenharmony_ci // avoid dragItemInfo from AppStorage is undefined 936e80583aSopenharmony_ci return dragItemInfo; 946e80583aSopenharmony_ci } 956e80583aSopenharmony_ci 966e80583aSopenharmony_ci /** 976e80583aSopenharmony_ci * Get IsLongPress parameter. 986e80583aSopenharmony_ci * 996e80583aSopenharmony_ci * @return isLongPress 1006e80583aSopenharmony_ci */ 1016e80583aSopenharmony_ci protected getIsLongPress(): boolean { 1026e80583aSopenharmony_ci const isLongPress: boolean = AppStorage.get('isLongPress'); 1036e80583aSopenharmony_ci return isLongPress; 1046e80583aSopenharmony_ci } 1056e80583aSopenharmony_ci 1066e80583aSopenharmony_ci /** 1076e80583aSopenharmony_ci * Set the IsLongPress parameter. 1086e80583aSopenharmony_ci */ 1096e80583aSopenharmony_ci protected setIsLongPress(isLongPress): void { 1106e80583aSopenharmony_ci Log.showDebug(TAG, `setIsLongPress isLongPress: ${isLongPress}`); 1116e80583aSopenharmony_ci AppStorage.setOrCreate('isLongPress', isLongPress); 1126e80583aSopenharmony_ci } 1136e80583aSopenharmony_ci 1146e80583aSopenharmony_ci protected isDragEffectArea(x: number, y: number): boolean { 1156e80583aSopenharmony_ci if (this.mDragEffectArea) { 1166e80583aSopenharmony_ci if (x >= this.mDragEffectArea.left && x <= this.mDragEffectArea.right 1176e80583aSopenharmony_ci && y >= this.mDragEffectArea.top && y <= this.mDragEffectArea.bottom) { 1186e80583aSopenharmony_ci return true; 1196e80583aSopenharmony_ci } 1206e80583aSopenharmony_ci } 1216e80583aSopenharmony_ci return false; 1226e80583aSopenharmony_ci } 1236e80583aSopenharmony_ci} 124