package com.osmnavigator;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import org.osmdroid.bonuspack.kml.Style;
import org.osmdroid.bonuspack.kml.StyleSelector;
import java.util.ArrayList;
import java.util.HashMap;
public class KmlStylesActivity extends Activity {
/* request codes */
public static final int KML_STYLES_REQUEST = 100;
public static final int KML_STYLE_REQUEST = 101;
KmlStyleListAdapter mListAdapter;
ListView mListView;
HashMap<String, StyleSelector> mStyles; //the genuine Styles of the KmlDocument
static ArrayList<String> mStyleList = new ArrayList<String>(); //the list of style names, as an array
static int mPosition;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kml_styles);
mListView = (ListView) findViewById(R.id.listviewKml);
registerForContextMenu(mListView);
mStyles = MapActivity.mKmlDocument.getStyles();
buildStyleList();
mListAdapter = new KmlStyleListAdapter(this, mStyleList);
mListView.setAdapter(mListAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> arg0, View view, int position, long index) {
mPosition = position;
Intent myIntent = new Intent(view.getContext(), KmlStyleActivity.class);
myIntent.putExtra("STYLE_ID", mStyleList.get(position));
startActivityForResult(myIntent, KML_STYLE_REQUEST);
}
});
}
public static Style getCurrentStyle(){
String styleId = mStyleList.get(mPosition);
return MapActivity.mKmlDocument.getStyle(styleId);
}
protected void buildStyleList(){
mStyleList.clear();
for (HashMap.Entry<String, StyleSelector> entry : mStyles.entrySet()) {
mStyleList.add(entry.getKey());
}
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch (requestCode) {
case KML_STYLE_REQUEST:
buildStyleList();
mListAdapter.notifyDataSetChanged();
break;
default:
break;
}
}
//------------ Context Menu implementation
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.style_item_menu, menu);
}
@Override public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.style_item_menu_cut:
String style = mStyleList.get(info.position);
mStyles.remove(style);
buildStyleList();
mListAdapter.notifyDataSetChanged();
return true;
default:
return super.onContextItemSelected(item);
}
}
//------------ Option Menu implementation
@Override public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.style_option_menu, menu);
return true;
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.style_option_menu_new:
MapActivity.mKmlDocument.addStyle(new Style());
buildStyleList();
mListAdapter.notifyDataSetChanged();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}