package com.android.launcher;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import com.android.launcher.SubMenuSettings.SubMenuDBHelper;
public class SubMenuManageMenusSettings extends ListActivity {
private SQLiteDatabase mDatabase;
private Cursor mCursor;
private ListView mListView;
private LayoutInflater mInflater;
private final static int mFirstEntry = Menu.FIRST+1;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add("Add menu");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if(item.getTitle().equals("Add menu"))
{
Intent intent = new Intent(this, SubMenuAddMenu.class);
this.startActivityForResult(intent, 0);
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(resultCode != 0 || data == null)
return;
if(data.getStringExtra("com.android.launcher.AddSubMenu") != null)
{
AddMenu(data.getStringExtra("com.android.launcher.AddSubMenu"));
}
else if(data.getStringExtra("com.android.launcher.RenameSubMenuOrig") != null &&
data.getStringExtra("com.android.launcher.RenameSubMenuNew") != null)
{
RenameMenu(data.getStringExtra("com.android.launcher.RenameSubMenuOrig"), data.getStringExtra("com.android.launcher.RenameSubMenuNew"));
}
refreshCursor();
SubMenuSettings.refreshMenuList(mDatabase);
}
void AddMenu(String title)
{
ContentValues values = new ContentValues();
values.put("name", title);
mDatabase.insert("submenus", null, values);
refreshCursor();
}
void RenameMenu(String which, String title)
{
ContentValues content_values = new ContentValues();
content_values.put("submenu", title);
ContentValues menu_values = new ContentValues();
menu_values.put("name", title);
mDatabase.update("submenus_entries", content_values, "submenu = '"+which+"'", null);
mDatabase.update("submenus", menu_values, "name = '"+which+"'", null);
refreshCursor();
}
void DeleteMenu(String title)
{
ContentValues values = new ContentValues();
values.put("submenu", "MainMenu");
mDatabase.update("submenus_entries", values, "submenu = '"+title+"'", null);
mDatabase.delete("submenus", "name = '"+title+"'", null);
refreshCursor();
}
private void refreshCursor() {
try {
if(mCursor != null)
mCursor.close();
mCursor = mDatabase.query(false, "submenus", new String[] { "_id", "name" }, null, null, null, null, null, null);
mAdapter = new ApplicationsAdapter(this, mCursor);
setListAdapter(mAdapter);
} catch(SQLiteException e) {
Log.d("SubMenuSettings", "Error: "+e.getMessage());
}
}
@Override
protected void onResume()
{
refreshCursor();
super.onResume();
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.submenu_settings);
mListView = (ListView) findViewById(android.R.id.list);
mInflater = getLayoutInflater();
SubMenuDBHelper hlp = new SubMenuDBHelper(this, false);
mDatabase = hlp.getWritableDatabase();
Log.d("SubMenuManageSettings", "Loaded db "+mDatabase.getPath());
refreshCursor();
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
mCursor.moveToPosition(position);
final String name = mCursor.getString(1);
Intent intent = new Intent(SubMenuManageMenusSettings.this, SubMenuRenameMenu.class);
intent.putExtra("com.android.launcher.MenuName", name);
SubMenuManageMenusSettings.this.startActivityForResult(intent, 0);
}
});
mListView.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
mCursor.moveToPosition(position);
final String name = mCursor.getString(1);
AlertDialog.Builder builder = new AlertDialog.Builder(SubMenuManageMenusSettings.this);
builder.setMessage("Delete this submenu?");
builder.setPositiveButton("Delete", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.d("SubMenuManageMenus", "Trying to delete "+name);
DeleteMenu(name);
}
});
builder.setNegativeButton("Cancel", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog alert = builder.create();
alert.show();
return false;
}
});
}
@Override
public void onStop()
{
super.onStop();
mCursor.close();
mDatabase.close();
}
public class ApplicationsAdapter extends CursorAdapter {
public ApplicationsAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView menuNameText = (TextView) view.findViewById(R.id.txtTitle);
String menuName = cursor.getString(1);
menuNameText.setText(menuName);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = mInflater.inflate(R.layout.extended_drawersettings_row, null);
bindView(view, context, cursor);
return view;
}
}
}