/*
 * 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.fruit.launcher;

import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Intent;
import android.graphics.Bitmap;
import android.util.Log;

import java.util.ArrayList;

import com.fruit.launcher.LauncherSettings.BaseLauncherColumns;

/**
 * Represents a launchable icon on the workspaces and in folders.
 */
class ShortcutInfo extends ItemInfo {

	/**
	 * The application name.
	 */
	CharSequence title;

	/**
	 * The intent used to start the application.
	 */
	Intent intent;

	/**
	 * Indicates whether the icon comes from an application's resource (if
	 * false) or from a custom Bitmap (if true.)
	 */
	boolean customIcon;

	/**
	 * Indicates whether we're using the default fallback icon instead of
	 * something from the app.
	 */
	boolean usingFallbackIcon;

	/**
	 * Indicates whether the shortcut is on external storage and may go away at
	 * any time.
	 */
	boolean onExternalStorage;

	/**
	 * If isShortcut=true and customIcon=false, this contains a reference to the
	 * shortcut icon as an application's resource.
	 */
	Intent.ShortcutIconResource iconResource;

	/**
	 * The application icon.
	 */
	private Bitmap mIcon;

	ShortcutInfo() {
		itemType = BaseLauncherColumns.ITEM_TYPE_SHORTCUT;
	}

	public ShortcutInfo(ShortcutInfo info) {
		super(info);
		title = info.title.toString();
		intent = new Intent(info.intent);
		if (info.iconResource != null) {
			iconResource = new Intent.ShortcutIconResource();
			iconResource.packageName = info.iconResource.packageName;
			iconResource.resourceName = info.iconResource.resourceName;
		}
		mIcon = info.mIcon; // TODO: should make a copy here. maybe we don't
							// need this ctor at all
		customIcon = info.customIcon;
	}

	/** TODO: Remove this. It's only called by ApplicationInfo.makeShortcut. */
	public ShortcutInfo(ApplicationInfo info) {
		super(info);
		title = info.title.toString();
		intent = new Intent(info.intent);
		customIcon = false;
	}

	public void setIcon(Bitmap b) {
		mIcon = b;
	}

	public Bitmap getIcon(IconCache iconCache) {
		if (mIcon == null) {
			mIcon = iconCache.getIcon(this.intent);
		}
		return mIcon;
	}

	/**
	 * Creates the application intent based on a component name and various
	 * launch flags. Sets {@link #itemType} to
	 * {@link LauncherSettings.BaseLauncherColumns#ITEM_TYPE_APPLICATION}.
	 * 
	 * @param className
	 *            the class name of the component representing the intent
	 * @param launchFlags
	 *            the launch flags
	 */
	final void setActivity(ComponentName className, int launchFlags) {
		intent = new Intent(Intent.ACTION_MAIN);
		intent.addCategory(Intent.CATEGORY_LAUNCHER);
		intent.setComponent(className);
		intent.setFlags(launchFlags);
		itemType = BaseLauncherColumns.ITEM_TYPE_APPLICATION;
	}

	@Override
	void onAddToDatabase(ContentValues values) {
		super.onAddToDatabase(values);

		String titleStr = title != null ? title.toString() : null;
		values.put(BaseLauncherColumns.TITLE, titleStr);

		String uri = intent != null ? intent.toUri(0) : null;
		values.put(BaseLauncherColumns.INTENT, uri);

		if (customIcon) {
			values.put(BaseLauncherColumns.ICON_TYPE,
					BaseLauncherColumns.ICON_TYPE_BITMAP);
			writeBitmap(values, mIcon);
		} else {
			if (onExternalStorage && !usingFallbackIcon) {
				writeBitmap(values, mIcon);
			}
			values.put(BaseLauncherColumns.ICON_TYPE,
					BaseLauncherColumns.ICON_TYPE_RESOURCE);
			if (iconResource != null) {
				values.put(BaseLauncherColumns.ICON_PACKAGE,
						iconResource.packageName);
				values.put(BaseLauncherColumns.ICON_RESOURCE,
						iconResource.resourceName);
			}
		}
	}

	@Override
	public String toString() {
		return "ShortcutInfo(title=" + title.toString() + "),type="+itemType
				+",screen="+this.screen+",seqno="+this.seqNo
				+",cell("+this.cellX+","+this.cellY+","+this.spanX+","+this.spanY+"),"
				+",container="+this.container;
	}

	@Override
	void unbind() {
		super.unbind();
	}

	public static void dumpShortcutInfoList(String tag, String label,
			ArrayList<ShortcutInfo> list) {
		Log.d(tag, label + " size=" + list.size());
		for (ShortcutInfo info : list) {
			Log.d(tag, "title=\"" + info.title + " icon=" + info.mIcon
					+ " customIcon=" + info.customIcon);
		}
	}
}
@@ -4302,22 +4302,51 @@
 g() %7B%0A%09%09
-return
+String str = null;%0A%09%09try %7B%0A%09%09%09str =
  %22Shortc
@@ -4404,16 +4404,17 @@
 ype%0A%09%09%09%09
+%09
 +%22,scree
@@ -4450,16 +4450,17 @@
 s.seqNo%0A
+%09
 %09%09%09%09+%22,c
@@ -4526,24 +4526,25 @@
 nY+%22),%22%0A%09%09%09%09
+%09
 +%22,container
@@ -4562,16 +4562,126 @@
 tainer;%0A
+%09%09%7D catch (Exception e) %7B%0A%09%09%09// TODO Auto-generated catch block%0A%09%09%09e.printStackTrace();%0A%09%09%09%0A%09%09%7D%0A%09%09return str;%0A
 %09%7D%0A%0A%09@Ov

fix exception sometimes.