Folder.java revision 31dd503c6aa69018e694d91724d46db49ea09327
131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/* 231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * you may not use this file except in compliance with the License. 631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * You may obtain a copy of the License at 731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * See the License for the specific language governing permissions and 1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * limitations under the License. 1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 1731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectpackage com.android.launcher; 1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 1931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.Context; 2031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.util.AttributeSet; 2131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.view.View; 2231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.view.View.OnClickListener; 2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.AdapterView; 2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.Button; 2531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.LinearLayout; 2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.AbsListView; 2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.ListAdapter; 2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.AdapterView.OnItemClickListener; 2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.AdapterView.OnItemLongClickListener; 3031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 3131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/** 3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Represents a set of icons chosen by the user or generated by the system. 3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectpublic class Folder extends LinearLayout implements DragSource, OnItemLongClickListener, 3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project OnItemClickListener, OnClickListener, View.OnLongClickListener { 3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 3731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project protected AbsListView mContent; 3831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project protected DragController mDragger; 3931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project protected Launcher mLauncher; 4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 4231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project protected Button mCloseButton; 4331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 4431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project protected FolderInfo mInfo; 4531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 4731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Which item is being dragged 4831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project protected ApplicationInfo mDragItem; 5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project private boolean mCloneInfo; 5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 5231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 5331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Used to inflate the Workspace from XML. 5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 5531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * @param context The application's context. 5631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * @param attrs The attribtues set containing the Workspace's customization values. 5731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 5831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public Folder(Context context, AttributeSet attrs) { 5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project super(context, attrs); 6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project setAlwaysDrawnWithCacheEnabled(false); 6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 6231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project @Override 6431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project protected void onFinishInflate() { 6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project super.onFinishInflate(); 6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mContent = (AbsListView) findViewById(R.id.content); 6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mContent.setOnItemClickListener(this); 6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mContent.setOnItemLongClickListener(this); 7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mCloseButton = (Button) findViewById(R.id.close); 7231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mCloseButton.setOnClickListener(this); 7331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mCloseButton.setOnLongClickListener(this); 7431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 7531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 7631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public void onItemClick(AdapterView parent, View v, int position, long id) { 7731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project ApplicationInfo app = (ApplicationInfo) parent.getItemAtPosition(position); 7831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mLauncher.startActivitySafely(app.intent); 7931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 8031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 8131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public void onClick(View v) { 8231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mLauncher.closeFolder(this); 8331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 8431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 8531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public boolean onLongClick(View v) { 8631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mLauncher.closeFolder(this); 8731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mLauncher.showRenameDialog(mInfo); 8831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project return true; 8931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 9031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 9131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 9231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (!view.isInTouchMode()) { 9331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project return false; 9431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 9531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 9631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project ApplicationInfo app = (ApplicationInfo) parent.getItemAtPosition(position); 9731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (mCloneInfo) { 9831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project app = new ApplicationInfo(app); 9931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 10031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 10131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mDragger.startDrag(view, this, app, DragController.DRAG_ACTION_COPY); 10231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mLauncher.closeFolder(this); 10331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mDragItem = app; 10431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 10531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project return true; 10631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 10731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 10831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project void setCloneInfo(boolean cloneInfo) { 10931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mCloneInfo = cloneInfo; 11031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 11131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 11231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public void setDragger(DragController dragger) { 11331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mDragger = dragger; 11431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 11531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 11631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public void onDropCompleted(View target, boolean success) { 11731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 11831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 11931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 12031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Sets the adapter used to populate the content area. The adapter must only 12131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * contains ApplicationInfo items. 12231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 12331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * @param adapter The list of applications to display in the folder. 12431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 12531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project void setContentAdapter(ListAdapter adapter) { 12631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mContent.setAdapter(adapter); 12731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 12831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 12931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project void setLauncher(Launcher launcher) { 13031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mLauncher = launcher; 13131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 13231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 13331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 13431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * @return the FolderInfo object associated with this folder 13531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 13631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project FolderInfo getInfo() { 13731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project return mInfo; 13831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 13931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 14031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project // When the folder opens, we need to refresh the GridView's selection by 14131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project // forcing a layout 14231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project void onOpen() { 14331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mContent.requestLayout(); 14431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 14531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 14631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project void onClose() { 14731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project final Workspace workspace = mLauncher.getWorkspace(); 14831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project workspace.getChildAt(workspace.getCurrentScreen()).requestFocus(); 14931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 15031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 15131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project void bind(FolderInfo info) { 15231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mInfo = info; 15331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project mCloseButton.setText(info.title); 15431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 15531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 156