/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.activity;
import WriteReviewOperation.MediaRef;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.widget.Toast;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.analytics.OzViews;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsProvider;
import com.galaxy.meetup.client.android.content.PanoramaDetector;
import com.galaxy.meetup.client.android.service.ImageResourceManager;
import com.galaxy.meetup.client.android.service.Resource;
import com.galaxy.meetup.client.android.service.ResourceConsumer;
import com.galaxy.meetup.client.android.ui.fragments.EsFragmentActivity;
import com.galaxy.meetup.client.android.ui.fragments.ProgressFragmentDialog;
import com.galaxy.meetup.client.util.ImageUtils;
import com.galaxy.meetup.client.util.MediaStoreUtils;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.panorama.PanoramaClient;
import com.google.android.gms.panorama.PanoramaClient.OnPanoramaInfoLoadedListener;
/**
*
* @author sihai
*
*/
public class PanoramaViewerActivity extends EsFragmentActivity implements
ResourceConsumer, ConnectionCallbacks, OnConnectionFailedListener,
OnPanoramaInfoLoadedListener {
private Handler mHandler;
private MediaRef mMediaRef;
private PanoramaClient mPanoramaClient;
private Resource mResource;
public PanoramaViewerActivity()
{
}
private void hideProgressDialog()
{
DialogFragment dialogfragment = (DialogFragment)getSupportFragmentManager().findFragmentByTag("progress");
if(dialogfragment != null)
dialogfragment.dismissAllowingStateLoss();
}
private void loadPanoramaInfo() {
if(null == mResource) {
return;
}
switch(mResource.getStatus())
{
case 2: // '\002'
case 3: // '\003'
default:
break;
case 1: // '\001'
android.net.Uri uri = null;
hideProgressDialog();
if(mPanoramaClient.isConnected()) {
boolean flag = mMediaRef.hasLocalUri();
uri = null;
if(flag) {
android.net.Uri uri1 = mMediaRef.getLocalUri();
if(!MediaStoreUtils.isMediaStoreUri(uri1))
{
boolean flag1 = ImageUtils.isFileUri(uri1);
uri = null;
if(flag1)
uri = uri1;
}
}
}
if(uri == null)
uri = EsProvider.buildPanoramaUri(mResource.getCacheFileName());
mPanoramaClient.loadPanoramaInfoAndGrantAccess(this, uri);
break;
case 4: // '\004'
case 5: // '\005'
case 6: // '\006'
case 7: // '\007'
hideProgressDialog();
showFailureMessage();
finish();
break;
}
}
private void showFailureMessage()
{
Toast.makeText(this, R.string.toast_panorama_viewer_failure, 0).show();
}
public final void bindResources()
{
mResource = ImageResourceManager.getInstance(this).getMedia(mMediaRef, 1, 2, this);
}
protected final EsAccount getAccount()
{
return (EsAccount)getIntent().getParcelableExtra("account");
}
public final OzViews getViewForLogging()
{
return OzViews.UNKNOWN;
}
public final void onConnected()
{
loadPanoramaInfo();
}
public final void onConnectionFailed(ConnectionResult result)
{
showFailureMessage();
finish();
}
protected void onCreate(Bundle bundle)
{
super.onCreate(bundle);
int i = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if(i != 0)
{
PanoramaDetector.clearCache();
FragmentManager fragmentmanager = getSupportFragmentManager();
if(fragmentmanager.findFragmentByTag("GMS_error") == null)
(new GmsErrorDialogFragment(i)).show(fragmentmanager, "GMS_error");
} else
{
mPanoramaClient = new PanoramaClient(this, this, this);
mPanoramaClient.connect();
mMediaRef = (MediaRef)getIntent().getParcelableExtra("mediaref");
bindResources();
mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
public final void run()
{
showProgressDialog();
}
}, 200L);
}
}
protected void onDestroy()
{
super.onDestroy();
unbindResources();
if(mPanoramaClient != null)
{
mPanoramaClient.disconnect();
mPanoramaClient = null;
}
}
public final void onDisconnected()
{
finish();
}
public final void onPanoramaInfoLoaded(ConnectionResult result, Intent intent)
{
if(intent != null)
startActivity(intent);
else
showFailureMessage();
finish();
}
public final void onResourceStatusChange(Resource resource)
{
loadPanoramaInfo();
}
protected final void showProgressDialog() {
if(isFinishing() || mResource.getStatus() == 1) {
return;
}
FragmentManager fragmentmanager = getSupportFragmentManager();
if(fragmentmanager.findFragmentByTag("progress") == null)
ProgressFragmentDialog.newInstance(null, getString(R.string.loading_panorama)).show(fragmentmanager, "progress");
}
public final void unbindResources()
{
if(mResource != null)
mResource.unregister(this);
}
public static class GmsErrorDialogFragment extends DialogFragment
{
public final Dialog onCreateDialog(Bundle bundle)
{
return GooglePlayServicesUtil.getErrorDialog(getArguments().getInt("errorCode"), getActivity(), 0);
}
public void onDismiss(DialogInterface dialoginterface)
{
FragmentActivity fragmentactivity = getActivity();
if(fragmentactivity != null)
fragmentactivity.finish();
}
public GmsErrorDialogFragment()
{
}
GmsErrorDialogFragment(int i)
{
Bundle bundle = new Bundle();
bundle.putInt("errorCode", i);
setArguments(bundle);
}
}
}