/* * Copyright (C) 2007 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.applang.pflanzen; import com.applang.berichtsheft.R; import com.applang.berichtsheft.R.id; import com.applang.berichtsheft.R.layout; import com.applang.berichtsheft.R.string; import com.applang.provider.PlantInfo.Plants; import com.applang.tagesberichte.TitleEditor; import android.app.ListActivity; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.ContentUris; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; /** * Displays a list of notes. Will display notes from the {@link Uri} * provided in the intent if there is one, otherwise defaults to displaying the * contents of the {@link NotePadProvider} */ public class PlantsList extends ListActivity { private static final String TAG = "PlantsList"; // Menu item ids public static final int MENU_ITEM_DELETE = Menu.FIRST; public static final int MENU_ITEM_INSERT = Menu.FIRST + 1; public static final int MENU_ITEM_SORTBY = Menu.FIRST + 2; public static final int MENU_ITEM_QUERY = Menu.FIRST + 3; private static final int ACTIVITY_TOGGLE_ORDER=5; int language, order; /** * The columns we are interested in from the database */ private static final String[] PROJECTION = new String[] { Plants._ID, // 0 Plants.NAME, // 1 Plants.FAMILY, // 2 Plants.BOTNAME, // 3 Plants.BOTFAMILY, // 4 Plants.GROUP, // 5 }; /** The index of the title column */ private static final int COLUMN_INDEX_TITLE = 1; private static final int COLUMN_INDEX_FAMILY = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT); // If no data was given in the intent (because we were started // as a MAIN activity), then use our default content provider. Intent intent = getIntent(); if (intent.getData() == null) { intent.setData(Plants.CONTENT_URI); } language = 0; order = 0; setListView(); } private void setListView() { String UpperString = null, LowerString = null, rowOrder = null; int UpperViewId = -1, LowerViewId = -1, rorder = 0; switch (language){ case 0: UpperString = Plants.NAME; LowerString = Plants.FAMILY; break; case 1: UpperString = Plants.BOTNAME; LowerString = Plants.BOTFAMILY; rorder = 2; } switch (order){ case 0: UpperViewId = R.id.upper_text; LowerViewId = R.id.lower_text; break; case 1: UpperViewId = R.id.lower_text; LowerViewId = R.id.upper_text; } switch (rorder + order){ case 0: rowOrder = Plants.DEFAULT_SORT_ORDER; break; case 1: rowOrder = Plants.FAMILY_SORT_ORDER; break; case 2: rowOrder = Plants.BOTNAME_SORT_ORDER; break; case 3: rowOrder = Plants.BOTFAMILY_SORT_ORDER; break; } // Inform the list we provide context menus for items getListView().setOnCreateContextMenuListener(this); // Perform a managed query. The Activity will handle closing and requerying the cursor // when needed. Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, rowOrder); // Used to map notes entries from the database to views SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.plantslist_item, cursor, new String[] {UpperString,LowerString}, new int[] {UpperViewId,LowerViewId}){ @Override public void setViewText(TextView v, String text) { switch (v.getId()) { case R.id.lower_text: super.setStringConversionColumn(1); default: super.setViewText(v, text); } } }; setListAdapter(adapter); Toast.makeText(this, "Language:" + language +"Order:" + order, Toast.LENGTH_LONG).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // This is our one standard application action -- inserting a // new note into the list. menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert) .setShortcut('3', 'a') .setIcon(android.R.drawable.ic_menu_add); menu.add(0, MENU_ITEM_SORTBY, 0, R.string.menu_sort_by) .setShortcut('4', 'a') .setIcon(android.R.drawable.ic_menu_add); menu.add(0, MENU_ITEM_QUERY, 0, R.string.query) .setShortcut('4', 'a') .setIcon(android.R.drawable.ic_menu_add); // Generate any additional actions that can be performed on the // overall list. In a normal install, there are no additional // actions found here, but this allows other applications to extend // our menu with their own actions. Intent intent = new Intent(null, getIntent().getData()); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, new ComponentName(this, PlantsList.class), null, intent, 0, null); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); final boolean haveItems = getListAdapter().getCount() > 0; // If there are any notes in the list (which implies that one of // them is selected), then we need to generate the actions that // can be performed on the current selection. This will be a combination // of our own specific actions along with any extensions that can be // found. if (haveItems) { // This is the selected item. Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId()); // Build menu... always starts with the EDIT action... Intent[] specifics = new Intent[1]; specifics[0] = new Intent(Intent.ACTION_EDIT, uri); MenuItem[] items = new MenuItem[1]; // ... is followed by whatever other actions are available... Intent intent = new Intent(null, uri); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items); // Give a shortcut to the edit action. if (items[0] != null) { items[0].setShortcut('1', 'e'); } } else { menu.removeGroup(Menu.CATEGORY_ALTERNATIVE); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_ITEM_INSERT: // Launch activity to insert a new item startActivity(new Intent(Intent.ACTION_INSERT, getIntent().getData())); return true; case MENU_ITEM_SORTBY: /* try { **/ // Launch activity to choose option in order to sort list entries Intent sortOrder = new Intent(this, SortBySpinner.class); Bundle sortBundle = new Bundle(); sortBundle.putInt("language", language); sortBundle.putInt("order", order); sortOrder.putExtras(sortBundle); startActivityForResult(sortOrder,ACTIVITY_TOGGLE_ORDER); /* return true; } catch (ActivityNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } **/ return true; case MENU_ITEM_QUERY: // Launch activity to insert a new item // startActivity(new Intent(this, PlantsQuery.class)); startActivity(new Intent(Intent.ACTION_VIEW, getIntent().getData(), getApplicationContext(), PlantsQuery.class)); return true; } return super.onOptionsItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent sortOrder) { super.onActivityResult(requestCode, resultCode, sortOrder); if(sortOrder != null) { Bundle sortBundle = sortOrder.getExtras(); language = sortBundle.getInt("language"); order = sortBundle.getInt("order"); } setListView(); } @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { Log.e(TAG, "bad menuInfo", e); return; } Cursor cursor = (Cursor) getListAdapter().getItem(info.position); if (cursor == null) { // For some reason the requested item isn't available, do nothing return; } // Setup the menu header menu.setHeaderTitle(cursor.getString(COLUMN_INDEX_TITLE)); // Add a menu item to delete the note menu.add(0, MENU_ITEM_DELETE, 0, R.string.menu_delete); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); } catch (ClassCastException e) { Log.e(TAG, "bad menuInfo", e); return false; } switch (item.getItemId()) { case MENU_ITEM_DELETE: { // Delete the note that the context menu is for Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id); getContentResolver().delete(noteUri, null, null); return true; } } return false; } @Override protected void onListItemClick(ListView l, View v, int position, long id) { Uri uri = ContentUris.withAppendedId(getIntent().getData(), id); String action = getIntent().getAction(); if (Intent.ACTION_PICK.equals(action) || Intent.ACTION_GET_CONTENT.equals(action)) { // The caller is waiting for us to return a note selected by // the user. The have clicked on one, so return it now. setResult(RESULT_OK, new Intent().setData(uri)); } else { // Launch activity to view/edit the currently selected item startActivity(new Intent(Intent.ACTION_EDIT, uri)); } } }