/*
* 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));
}
}
}