package com.ptrprograms.streetview.activities;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient;
import com.google.android.gms.location.LocationClient;
import com.google.android.gms.maps.StreetViewPanorama;
import com.google.android.gms.maps.StreetViewPanoramaFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.StreetViewPanoramaCamera;
import com.ptrprograms.streetview.R;
public class MainActivity extends Activity implements GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener {
private static final String EXTRA_LONG = "current_long";
private static final String EXTRA_LAT = "current_lat";
private static final String EXTRA_BEARING = "current_bearing";
private static final String EXTRA_TILT = "current_tilt";
private static final String EXTRA_ZOOM = "current_zoom";
private LocationClient mLocationClient;
private LatLng mCurrentLocation;
private float mBearing;
private float mTilt;
private float mZoom;
private StreetViewPanorama mPanorama;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if( savedInstanceState != null ) {
if( savedInstanceState.containsKey( EXTRA_LAT ) && savedInstanceState.containsKey( EXTRA_LONG ) ) {
mCurrentLocation = new LatLng( savedInstanceState.getDouble( EXTRA_LAT ), savedInstanceState.getDouble( EXTRA_LONG ) );
if( savedInstanceState.containsKey( EXTRA_TILT ) && savedInstanceState.containsKey( EXTRA_BEARING ) ) {
mTilt = savedInstanceState.getFloat( EXTRA_TILT );
mBearing = savedInstanceState.getFloat( EXTRA_BEARING );
mZoom = savedInstanceState.getFloat( EXTRA_ZOOM );
}
}
}
}
private void initStreetView( ) {
StreetViewPanoramaFragment fragment = ( (StreetViewPanoramaFragment) getFragmentManager().findFragmentById( R.id.street_view_panorama_fragment ) );
if( mPanorama == null ) {
if( fragment != null ) {
mPanorama = fragment.getStreetViewPanorama();
if( mPanorama != null && mCurrentLocation != null ) {
StreetViewPanoramaCamera.Builder builder = new StreetViewPanoramaCamera.Builder( mPanorama.getPanoramaCamera() );
if( mBearing != builder.bearing )
builder.bearing = mBearing;
if( mTilt != builder.tilt )
builder.tilt = mTilt;
if( mZoom != builder.zoom )
builder.zoom = mZoom;
mPanorama.animateTo(builder.build(), 0);
mPanorama.setPosition( mCurrentLocation, 300 );
mPanorama.setStreetNamesEnabled( true );
}
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if( mPanorama != null && mPanorama.getLocation() != null && mPanorama.getLocation().position != null ) {
outState.putDouble( EXTRA_LAT, mPanorama.getLocation().position.latitude );
outState.putDouble( EXTRA_LONG, mPanorama.getLocation().position.longitude );
}
if( mPanorama != null && mPanorama.getPanoramaCamera() != null ) {
outState.putFloat( EXTRA_TILT, mPanorama.getPanoramaCamera().tilt );
outState.putFloat( EXTRA_BEARING, mPanorama.getPanoramaCamera().bearing );
outState.putFloat( EXTRA_ZOOM, mPanorama.getPanoramaCamera().zoom );
}
}
private void updateStreetViewPosition() {
if( mLocationClient == null )
mLocationClient = new LocationClient( this, this, this );
if( !mLocationClient.isConnected() && !mLocationClient.isConnecting() ) {
mLocationClient.connect();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConnected(Bundle bundle) {
if( mCurrentLocation == null ) {
mCurrentLocation = new LatLng( mLocationClient.getLastLocation().getLatitude(), mLocationClient.getLastLocation().getLongitude() );
}
initStreetView();
}
@Override
public void onDisconnected() {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
@Override
protected void onResume() {
super.onResume();
updateStreetViewPosition();
}
}