//
// Copyright 2011 Thomas Gumprecht, Robert Jacob, Thomas Pieronczyk
//
// 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 net.sourcewalker.garanbot;
import java.text.DateFormat;
import net.sourcewalker.garanbot.api.ClientException;
import net.sourcewalker.garanbot.api.Item;
import net.sourcewalker.garanbot.data.GaranboItemsProvider;
import net.sourcewalker.garanbot.data.GaranbotDBMetaData;
import android.app.Activity;
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.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
/**
* This activity should display one item from the database in a read-only
* manner. It should have a button or menu item to bring the user to the
* {@link EditItemActivity} where he can edit the item.
*
* @author Xperimental
*/
public class ViewItemActivity extends Activity {
private static final String TAG = "ViewItemActivity";
private static final int REQUEST_EDIT = 100;
private long itemId;
private ImageView imageView;
private TextView nameField;
private TextView manufacturerField;
private TextView modelField;
private TextView vendorField;
private TextView locationField;
private TextView purchaseField;
private TextView warrantyField;
private TextView notesField;
/*
* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.item_view);
imageView = (ImageView) findViewById(R.id.item_view_image);
nameField = (TextView) findViewById(R.id.item_view_name);
manufacturerField = (TextView) findViewById(R.id.item_view_manufacturer);
modelField = (TextView) findViewById(R.id.item_view_model);
vendorField = (TextView) findViewById(R.id.item_view_vendor);
locationField = (TextView) findViewById(R.id.item_view_location);
purchaseField = (TextView) findViewById(R.id.item_view_purchase);
warrantyField = (TextView) findViewById(R.id.item_view_endwarranty);
notesField = (TextView) findViewById(R.id.item_view_notes);
String action = getIntent().getAction();
if (action == null) {
finish();
}
try {
itemId = Long.parseLong(action);
} catch (NumberFormatException e) {
Log.w(TAG, "Invalid ID: " + action);
finish();
}
loadData();
}
/**
* Load the item data from database.
*/
private void loadData() {
Cursor cursor = managedQuery(ContentUris.withAppendedId(
GaranboItemsProvider.CONTENT_URI_ITEMS, itemId),
GaranbotDBMetaData.DEFAULT_PROJECTION, null, null, null);
if (cursor.moveToFirst()) {
Item dbItem;
try {
dbItem = Item.fromCursor(cursor);
setData(dbItem);
} catch (ClientException e) {
Log.e(TAG, "Can't create Item: " + e.getMessage(), e);
finish();
}
} else {
Toast.makeText(this, R.string.toast_view_itemnotfound,
Toast.LENGTH_LONG).show();
finish();
}
}
private void setData(Item source) {
DateFormat dateFormat = DateFormat.getDateInstance();
nameField.setText(source.getName());
manufacturerField.setText(source.getManufacturer());
modelField.setText(source.getItemType());
vendorField.setText(source.getVendor());
locationField.setText(source.getLocation());
purchaseField.setText(dateFormat.format(source.getPurchaseDate()));
warrantyField.setText(dateFormat.format(source.getEndOfWarranty()));
notesField.setText(source.getNotes());
if (source.hasPicture()) {
imageView.setImageURI(ContentUris.withAppendedId(
GaranboItemsProvider.CONTENT_URI_IMAGES,
source.getLocalId()));
}
}
/*
* (non-Javadoc)
* @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
*/
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.view_options, menu);
return true;
}
/*
* (non-Javadoc)
* @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.view_edit:
final Uri itemUri = ContentUris.withAppendedId(
GaranboItemsProvider.CONTENT_URI_ITEMS, itemId);
final Intent editIntent = new Intent(this, EditItemActivity.class);
editIntent.setAction(itemUri.toString());
startActivityForResult(editIntent, REQUEST_EDIT);
break;
case R.id.view_delete:
ItemUtilities.deleteItem(this, itemId);
finish();
break;
default:
throw new IllegalArgumentException("Unknown menu item: " + item);
}
return true;
}
/*
* (non-Javadoc)
* @see android.app.Activity#onActivityResult(int, int,
* android.content.Intent)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_EDIT:
loadData();
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
}