package com.infonuascape.osrshelper;
import java.io.InputStream;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Point;
import android.graphics.PointF;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.infonuascape.osrshelper.adapters.PoIAdapter;
import com.infonuascape.osrshelper.utils.Utils;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.sigseg.android.io.RandomAccessFileInputStream;
import com.sigseg.android.map.ImageSurfaceView;
public class WorldMapActivity extends Activity implements OnItemClickListener, OnClickListener {
private static final String TAG = "WorldMapActivity";
private static final String KEY_X = "X";
private static final String KEY_Y = "Y";
private static final String KEY_FN = "FN";
private static final Point DEFAULT_POINT = new Point(3050, 2580);
private static final String MAP_FILE_NAME = "osrs.jpg";
private SlidingMenu slidingMenu;
private ListView poICitiesListView;
private PoIAdapter adapterCities;
private long lastTimeZoomed = 0;
private ImageSurfaceView imageSurfaceView;
private String filename = null;
public static void show(final Context context){
Intent i = new Intent(context, WorldMapActivity.class);
context.startActivity(i);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.world_map_container);
imageSurfaceView = (ImageSurfaceView) findViewById(R.id.world_map_image);
slidingMenu = (SlidingMenu) findViewById(R.id.slidingmenulayout);
poICitiesListView = (ListView) findViewById(R.id.poi_cities);
findViewById(R.id.world_map_open).setOnClickListener(this);
// Setup/restore state
if (savedInstanceState != null && savedInstanceState.containsKey(KEY_X) && savedInstanceState.containsKey(KEY_Y)) {
Log.d(TAG, "restoring state");
int x = (Integer) savedInstanceState.get(KEY_X);
int y = (Integer) savedInstanceState.get(KEY_Y);
String fn = null;
if (savedInstanceState.containsKey(KEY_FN))
fn = (String) savedInstanceState.get(KEY_FN);
try {
if (fn == null || fn.length()==0) {
imageSurfaceView.setInputStream(getAssets().open(MAP_FILE_NAME));
} else {
imageSurfaceView.setInputStream(new RandomAccessFileInputStream(fn));
}
imageSurfaceView.setViewport(new Point(x, y));
} catch (java.io.IOException e) {
Log.e(TAG, e.getMessage());
}
} else {
// Centering the map to start
Intent intent = getIntent();
try {
Uri uri = null;
if (intent!=null)
uri = getIntent().getData();
InputStream is;
if (uri != null) {
filename = uri.getPath();
is = new RandomAccessFileInputStream(uri.getPath());
} else {
is = getAssets().open(MAP_FILE_NAME);
}
imageSurfaceView.setInputStream(is);
} catch (java.io.IOException e) {
Log.e(TAG, e.getMessage());
}
PointF center = getCenterScreen();
imageSurfaceView.setViewport(new Point(DEFAULT_POINT.x - (int)center.x, DEFAULT_POINT.y - (int)center.y));
}
initPoT();
}
@Override
public void onBackPressed() {
if(slidingMenu.isMenuShowing()){
slidingMenu.toggle(true);
} else{
super.onBackPressed();
}
}
private void initPoT() {
//Cities
adapterCities = new PoIAdapter(Utils.getCitiesPoI());
poICitiesListView.setAdapter(adapterCities);
poICitiesListView.setOnItemClickListener(this);
}
public void zoomToPoT(Point point){
PointF center = getCenterScreen();
if(imageSurfaceView.getLastScaleTime() >= lastTimeZoomed){
imageSurfaceView.setViewport(new Point(point.x - (int)center.x, point.y - (int)center.y));
imageSurfaceView.zoom(0.4f, center);
}
imageSurfaceView.setViewport(new Point(point.x - (int)(center.x/2.5), point.y - (int)(center.y/2.5)));
imageSurfaceView.zoom(0.4f, center);
lastTimeZoomed = System.currentTimeMillis();
}
@Override
protected void onResume() {
super.onResume();
PointF center = getCenterScreen();
imageSurfaceView.setViewportCenter();
imageSurfaceView.setViewport(new Point(DEFAULT_POINT.x - (int)center.x, DEFAULT_POINT.y - (int)center.y));
}
public PointF getCenterScreen(){
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
PointF p = new PointF(size.x/2, size.y/2);
return p;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
Point p = new Point();
imageSurfaceView.getViewport(p);
outState.putInt(KEY_X, p.x);
outState.putInt(KEY_Y, p.y);
if (filename!=null)
outState.putString(KEY_FN, filename);
super.onSaveInstanceState(outState);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
zoomToPoT(adapterCities.getItem(position).getPoint());
slidingMenu.toggle(true);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.world_map_open){
slidingMenu.toggle(true);
}
}
}