diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
commit | c8f00b61c600927ab404c84686d4472e9b527976 (patch) | |
tree | cb28d653b31d6a23067bb0f9de18fa7dc6e3ac37 /src/com/android/launcher/Folder.java | |
download | android_packages_apps_Trebuchet-c8f00b61c600927ab404c84686d4472e9b527976.tar.gz android_packages_apps_Trebuchet-c8f00b61c600927ab404c84686d4472e9b527976.tar.bz2 android_packages_apps_Trebuchet-c8f00b61c600927ab404c84686d4472e9b527976.zip |
Initial Contribution
Diffstat (limited to 'src/com/android/launcher/Folder.java')
-rw-r--r-- | src/com/android/launcher/Folder.java | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/com/android/launcher/Folder.java b/src/com/android/launcher/Folder.java new file mode 100644 index 000000000..1a91eb134 --- /dev/null +++ b/src/com/android/launcher/Folder.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2008 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.launcher; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.GridView; +import android.widget.LinearLayout; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; + +/** + * Represents a set of icons chosen by the user or generated by the system. + */ +public class Folder extends LinearLayout implements DragSource, OnItemLongClickListener, + OnItemClickListener, OnClickListener, View.OnLongClickListener { + + protected GridView mContent; + protected DragController mDragger; + + protected Launcher mLauncher; + + protected Button mCloseButton; + + protected FolderInfo mInfo; + + /** + * Which item is being dragged + */ + protected ApplicationInfo mDragItem; + private boolean mCloneInfo; + + /** + * Used to inflate the Workspace from XML. + * + * @param context The application's context. + * @param attrs The attribtues set containing the Workspace's customization values. + */ + public Folder(Context context, AttributeSet attrs) { + super(context, attrs); + setAlwaysDrawnWithCacheEnabled(false); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + mContent = (GridView) findViewById(R.id.content); + mContent.setOnItemClickListener(this); + mContent.setOnItemLongClickListener(this); + + mCloseButton = (Button) findViewById(R.id.close); + mCloseButton.setOnClickListener(this); + mCloseButton.setOnLongClickListener(this); + } + + public void onItemClick(AdapterView parent, View v, int position, long id) { + ApplicationInfo app = (ApplicationInfo) parent.getItemAtPosition(position); + mLauncher.startActivitySafely(app.intent); + } + + public void onClick(View v) { + mLauncher.closeFolder(this); + } + + public boolean onLongClick(View v) { + return false; + } + + public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { + if (!view.isInTouchMode()) { + return false; + } + + ApplicationInfo app = (ApplicationInfo) parent.getItemAtPosition(position); + if (mCloneInfo) { + app = new ApplicationInfo(app); + } + + mDragger.startDrag(view, this, app, DragController.DRAG_ACTION_COPY); + mLauncher.closeFolder(this); + mDragItem = app; + + return true; + } + + void setCloneInfo(boolean cloneInfo) { + mCloneInfo = cloneInfo; + } + + public void setDragger(DragController dragger) { + mDragger = dragger; + } + + public void onDropCompleted(View target, boolean success) { + } + + /** + * Sets the adapter used to populate the content area. The adapter must only + * contains ApplicationInfo items. + * + * @param adapter The list of applications to display in the folder. + */ + void setContentAdapter(ArrayAdapter<ApplicationInfo> adapter) { + mContent.setAdapter(adapter); + } + + void setLauncher(Launcher launcher) { + mLauncher = launcher; + } + + /** + * @return the FolderInfo object associated with this folder + */ + FolderInfo getInfo() { + return mInfo; + } + + // When the folder opens, we need to refresh the GridView's selection by + // forcing a layout + void onOpen() { + mContent.requestLayout(); + } + + void onClose() { + final Workspace workspace = mLauncher.getWorkspace(); + workspace.getChildAt(workspace.getCurrentScreen()).requestFocus(); + } +} |