package com.android.launcher; import java.util.ArrayList; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.database.sqlite.SQLiteDatabase; import android.graphics.Rect; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import android.widget.LinearLayout; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import com.android.launcher.SubMenuSettings.SubMenuDBHelper; public class SubMenu extends LinearLayout implements OnItemClickListener, OnItemLongClickListener, DragSource, DropTarget { public SubMenu(Context context) { super(context); this.context = context; } private String title = null; private Context context = null; private SubMenuAdapter adapter = null; private DragController mDragger = null; private GridView content = null; public void onOpen(Context c, String t) { context = c; LayoutInflater inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.submenu, this); title = t; Log.d("SubMenu", "Opened submenu "+title); Button closeButton = (Button)findViewById(R.id.close); content = (GridView)findViewById(R.id.content); adapter = new SubMenuAdapter(context, 0); closeButton.setText(title); closeButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { Launcher.getModel().closeSubMenu(SubMenu.this); } }); closeButton.setOnLongClickListener(new OnLongClickListener() { public boolean onLongClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(SubMenu.this.context); LinearLayout layout = new LinearLayout(SubMenu.this.context); layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); final EditText edit = new EditText(SubMenu.this.context); edit.setText(SubMenu.this.title); edit.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); layout.addView(edit); builder.setTitle("Rename SubMenu"); builder.setView(layout); builder.setPositiveButton("Rename", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { SubMenuDBHelper hlp = new SubMenuDBHelper(SubMenu.this.context, false); SQLiteDatabase db = hlp.getWritableDatabase(); SubMenuSettings.RenameMenu(db, SubMenu.this.title, edit.getText().toString()); hlp.close(); //Launcher.getModel().loadApplications(false, SubMenuSettings.activeLauncher, false); for(int i = 0; i < Launcher.getModel().getApplicationsAdapter().getCount(); i++) { ApplicationInfo info = Launcher.getModel().getApplicationsAdapter().getItem(i); if(info.title.equals(SubMenu.this.title)) { Launcher.getModel().removeApplicationInfo(info); info.title = edit.getText().toString(); Launcher.getModel().addApplicationInfo(info); break; } } ArrayList<ItemInfo> infos = Launcher.getModel().getDesktopItems(); for(ItemInfo info: infos) { if(info instanceof ApplicationInfo) { ApplicationInfo appInfo = (ApplicationInfo)info; if(appInfo.isSubMenu && appInfo.title.equals(SubMenu.this.title)) { Launcher.getModel().removeDesktopItem(info); appInfo.title = edit.getText().toString(); Launcher.getModel().addDesktopItem(appInfo); break; } } } Launcher.getModel().openSubMenu(edit.getText().toString()); dialog.cancel(); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.create().show(); return true; } }); adapter.generateAppsList(title); content.setAdapter(adapter); content.setOnItemClickListener(this); content.setOnItemLongClickListener(this); setDragger(SubMenuSettings.activeLauncher.getDragController()); } public void onClose() { final Workspace workspace = SubMenuSettings.activeLauncher.getWorkspace(); workspace.getChildAt(workspace.getCurrentScreen()).requestFocus(); } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { context.startActivity(adapter.getItem(position).intent); if(com.android.launcher.extended.data.ExtendedSettings.Home_CloseFolders(parent.getContext())) { // Close the folder when an app is started Launcher.getModel().closeSubMenu(this); } } public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { if (!view.isInTouchMode()) { return false; } ApplicationInfo app = (ApplicationInfo) adapter.getItem(position); mDragger.startDrag(view, this, app, DragController.DRAG_ACTION_COPY); Launcher.getModel().closeSubMenu(this); return true; } public void onDropCompleted(View target, boolean success) { } public void setDragger(DragController dragger) { mDragger = dragger; } public boolean acceptDrop(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { final ItemInfo item = (ItemInfo) dragInfo; final int itemType = item.itemType; if(dragInfo instanceof ApplicationInfo) { ApplicationInfo appInfo = (ApplicationInfo) dragInfo; if(appInfo.isSubMenu) return false; } return (itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION || itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT); } public Rect estimateDropLocation(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo, Rect recycle) { // TODO Auto-generated method stub return null; } public void onDragEnter(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { // TODO Auto-generated method stub } public void onDragExit(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { // TODO Auto-generated method stub } public void onDragOver(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { // TODO Auto-generated method stub } public void onDrop(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { if(dragInfo instanceof ApplicationInfo) { ApplicationInfo appInfo = (ApplicationInfo) dragInfo; if(appInfo.isSubMenu) return; } final ApplicationInfo item = (ApplicationInfo) dragInfo; SubMenuDBHelper hlp = new SubMenuDBHelper(context, false); SQLiteDatabase db = hlp.getWritableDatabase(); SubMenuSettings.MoveApplication(db, this.title, item.title.toString(), item.intent.toURI(), false); //Launcher.getModel().loadApplications(false, SubMenuSettings.activeLauncher, false); //Launcher.getModel().removeApplicationInfo(item); Launcher.getModel().dropApplicationCache(); Launcher.getModel().removeApplicationInfo(item); adapter.clear(); adapter.generateAppsList(title); hlp.close(); Toast.makeText(this.getContext(), "Application '"+item.title+"' has been moved to '"+title+"'", Toast.LENGTH_SHORT).show(); } }