/*
 * 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.Intent;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.util.Log;

import java.util.ArrayList;

import com.fruit.launcher.LauncherSettings.BaseLauncherColumns;

/**
 * Represents an app in AllAppsView.
 */
class ApplicationInfo extends ItemInfo {

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

	/**
	 * A bitmap of the application's text in the bubble.
	 */
	Bitmap titleBitmap;

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

	/**
	 * A bitmap version of the application icon.
	 */
	Bitmap iconBitmap;

	ComponentName componentName;

	ApplicationInfo() {
		itemType = BaseLauncherColumns.ITEM_TYPE_SHORTCUT;
	}

	/**
	 * Must not hold the Context.
	 */
	public ApplicationInfo(ResolveInfo info, IconCache iconCache) {
		this.componentName = new ComponentName(
				info.activityInfo.applicationInfo.packageName,
				info.activityInfo.name);

		this.container = ItemInfo.NO_ID;
		this.setActivity(componentName, Intent.FLAG_ACTIVITY_NEW_TASK
				| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

		iconCache.getTitleAndIcon(this, info);
	}

	public ApplicationInfo(ApplicationInfo info) {
		super(info);
		componentName = info.componentName;
		title = info.title.toString();
		intent = new Intent(info.intent);
	}

	/**
	 * 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
	public String toString() {
		return "ApplicationInfo(title=" + title.toString() + ")";
	}

	public static void dumpApplicationInfoList(String tag, String label,
			ArrayList<ApplicationInfo> list) {
		Log.d(tag, label + " size=" + list.size());
		for (ApplicationInfo info : list) {
			Log.d(tag, "   title=\"" + info.title + "\" titleBitmap="
					+ info.titleBitmap + " iconBitmap=" + info.iconBitmap);
		}
	}
	
	public static String dumpApplicationInfoList2String(String tag, String label,
			ArrayList<ApplicationInfo> list){
		String str = new String("");
		int i = 1;
				
		str += list.size()+"\n";
		for (ApplicationInfo info : list) {
			str += "  " + i +"   "+ info.title  +"\n";
			i++;
		}
		return str;		
	}

	public ShortcutInfo makeShortcut() {
		return new ShortcutInfo(this);
	}
}
@@ -3170,11 +3170,27 @@
 list
+, String appName
 )%7B%0A
-
 %09%09St
@@ -3243,16 +3243,17 @@
 %09str += 
+(
 list.siz
@@ -3255,22 +3255,55 @@
 t.size()
+-1)
 +%22%5Cn%22;
+//remove fruit.launcher itself
 %0A%09%09for (
@@ -3332,17 +3332,67 @@
  list) %7B
+%09
 %0A
+%09%09%09if (!info.title.toString().equals(appName))%7B%0A%09
 %09%09%09str +
@@ -3436,13 +3436,19 @@
 %0A%09%09%09
+%09
 i++;%0A
+%09%09%09%7D%0A
 %09%09%7D%0A

Modify dump string.