package edu.dhbw.andobjviewer;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import edu.dhbw.andarmodelviewer.R;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.text.Html;
import android.text.Spanned;
import android.text.SpannedString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
/**
* allows you to choose either one of the internal models
* or choose an file on the sd card through another activity
* @author Tobias Domhan
*
*/
public class ModelChooser extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AssetManager am = getAssets();
Vector<Item> models = new Vector<Item>();
Item item = new Item();
item.text = getResources().getString(R.string.choose_a_model);
item.type = Item.TYPE_HEADER;
models.add(item);
try {
String[] modelFiles = am.list("models");
List<String> modelFilesList = Arrays.asList(modelFiles);
for (int i = 0; i < modelFiles.length; i++) {
String currFileName = modelFiles[i];
if(currFileName.endsWith(".obj")) {
item = new Item();
String trimmedFileName = currFileName.substring(0,currFileName.lastIndexOf(".obj"));
item.text = trimmedFileName;
models.add(item);
if(modelFilesList.contains(trimmedFileName+".jpg")) {
InputStream is = am.open("models/"+trimmedFileName+".jpg");
item.icon=(BitmapFactory.decodeStream(is));
} else if(modelFilesList.contains(trimmedFileName+".png")) {
InputStream is = am.open("models/"+trimmedFileName+".png");
item.icon=(BitmapFactory.decodeStream(is));
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
item = new Item();
item.text = getResources().getString(R.string.custom_model);
item.type = Item.TYPE_HEADER;
models.add(item);
item = new Item();
item.text = getResources().getString(R.string.choose_custom_model);
item.icon = new Integer(R.drawable.open);
models.add(item);
item = new Item();
item.text = getResources().getString(R.string.help);
item.type = Item.TYPE_HEADER;
models.add(item);
item = new Item();
item.text = getResources().getString(R.string.instructions);
item.icon = new Integer(R.drawable.help);
models.add(item);
/*setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, models));*/
setListAdapter(new ModelChooserListAdapter(models));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Item item = (Item) this.getListAdapter().getItem(position);
String str = item.text;
if(str.equals(getResources().getString(R.string.choose_custom_model))) {
//start oi file manager activity
Intent intent = new Intent(ModelChooser.this, CheckFileManagerActivity.class);
startActivity(intent);
} else if(str.equals(getResources().getString(R.string.instructions))) {
//show the instructions activity
startActivity(new Intent(ModelChooser.this, InstructionsActivity.class));
} else {
//load the selected internal file
Intent intent = new Intent(ModelChooser.this, AugmentedModelViewerActivity.class);
intent.putExtra("name", str+".obj");
intent.putExtra("type", AugmentedModelViewerActivity.TYPE_INTERNAL);
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
}
}
class ModelChooserListAdapter extends BaseAdapter{
private Vector<Item> items;
public ModelChooserListAdapter(Vector<Item> items) {
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
//normal items, and the header
return 2;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return !(items.get(position).type==Item.TYPE_HEADER);
}
@Override
public int getItemViewType(int position) {
return items.get(position).type;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
Item item = items.get(position);
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch(item.type) {
case Item.TYPE_HEADER:
v = vi.inflate(R.layout.list_header, null);
break;
case Item.TYPE_ITEM:
v = vi.inflate(R.layout.choose_model_row, null);
break;
}
}
if(item != null) {
switch(item.type) {
case Item.TYPE_HEADER:
TextView headerText = (TextView) v.findViewById(R.id.list_header_title);
if(headerText != null) {
headerText.setText(item.text);
}
break;
case Item.TYPE_ITEM:
Object iconImage = item.icon;
ImageView icon = (ImageView) v.findViewById(R.id.choose_model_row_icon);
if(icon!=null) {
if(iconImage instanceof Integer) {
icon.setImageResource(((Integer)iconImage).intValue());
} else if(iconImage instanceof Bitmap) {
icon.setImageBitmap((Bitmap)iconImage);
}
}
TextView text = (TextView) v.findViewById(R.id.choose_model_row_text);
if(text!=null)
text.setText(item.text);
break;
}
}
return v;
}
}
class Item {
public static final int TYPE_ITEM=0;
public static final int TYPE_HEADER=1;
public int type = TYPE_ITEM;
public Object icon = new Integer(R.drawable.missingimage);
public String text;
}
}