package edu.alaska.gina.feeder.gina_puffinfeeder_android_viewer; import android.app.Activity; import android.app.FragmentManager; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.app.Fragment; import android.preference.PreferenceManager; import android.util.Log; import android.view.*; import android.widget.ImageView; import android.widget.Toast; import com.octo.android.robospice.SpiceManager; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; import com.octo.android.robospice.request.simple.BitmapRequest; import edu.alaska.gina.feeder.gina_puffinfeeder_android_viewer.network.JsonSpiceService; import uk.co.senab.photoview.PhotoViewAttacher; import java.io.File; import java.util.Timer; import java.util.TimerTask; /** * Activity for viewing a full sized image in full screen. * Created by Bobby Signor on 5/30/2014. */ public class FullscreenImageViewerActivity extends Activity { private static final int UI_HIDE_OPTIONS = View.SYSTEM_UI_FLAG_LOW_PROFILE; private final SpiceManager manager = new SpiceManager(JsonSpiceService.class); private PhotoViewAttacher photoAttacher; private String url; private DataFragment retained; private FragmentManager fragmentManager; private ImageView fullscreenImage; private Bitmap image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fullscreen_image_viewer); fragmentManager = getFragmentManager(); retained = (DataFragment) fragmentManager.findFragmentByTag("data"); } @Override protected void onStart() { super.onStart(); this.findViewById(R.id.fullscreen_content).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { view.setSystemUiVisibility(UI_HIDE_OPTIONS); } }); fullscreenImage = (ImageView)findViewById(R.id.fullscreen_content); fullscreenImage.setOnSystemUiVisibilityChangeListener(new SysUiVisibilityListener()); photoAttacher = new PhotoViewAttacher(fullscreenImage); photoAttacher.setOnPhotoTapListener(new PhotoTapListener()); if (retained == null) { retained = new DataFragment(); fragmentManager.beginTransaction().add(retained, "data").commit(); Bundle b = getIntent().getExtras(); url = b.getString("image_url_" + b.getInt("position") + "_" + pickLoadSize(PreferenceManager.getDefaultSharedPreferences(this))); networkRequest(); } else { image = retained.image; fullscreenImage.setImageBitmap(image); photoAttacher.update(); } this.getWindow().getDecorView().setSystemUiVisibility(UI_HIDE_OPTIONS); } @Override protected void onRestart() { networkRequest(); super.onRestart(); } @Override protected void onStop() { if (manager.isStarted()) { manager.cancelAllRequests(); manager.shouldStop(); } super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); retained.image = this.image; if (photoAttacher != null) photoAttacher.cleanup(); } private void networkRequest() { if (!manager.isStarted()) manager.start(this); manager.execute(new BitmapRequest(url, new File(getCacheDir().getAbsolutePath() + "images.cache")), new BitmapRequestListener()); } /** Methods to choose size. */ /** * Determines what sized image to load in the viewer. * @return URL of image to be loaded. */ private String pickLoadSize(SharedPreferences sharedPreferences) { ConnectivityManager connectivityManager = getConnectivityManager(); NetworkInfo nf = connectivityManager.getActiveNetworkInfo(); if (nf != null) { if (isMetered(nf)) return sharedPreferences.getString("pref_smart_sizing_size", "0"); else return sharedPreferences.getString("pref_viewer_image_size", "1"); } else { Log.d(getString(R.string.app_tag), "NetworkInfo null!"); return sharedPreferences.getString("pref_viewer_image_size", "1"); } } /** * Grabs the ConnectivityManager object representing the device's networks. * @return ConnectivityManager of the device. */ private ConnectivityManager getConnectivityManager() { return (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); } /** * Determines if the network being used is a mobile network. * @param net1 The NetworkInfo object representing the network to be tested. * @return "true" if network is mobile (3/4G). "false" if it is not (wifi). */ private boolean isMetered(NetworkInfo net1) { int type = net1.getType(); switch (type) { case ConnectivityManager.TYPE_MOBILE: case ConnectivityManager.TYPE_MOBILE_DUN: case ConnectivityManager.TYPE_MOBILE_HIPRI: case ConnectivityManager.TYPE_MOBILE_MMS: case ConnectivityManager.TYPE_MOBILE_SUPL: return true; default: return false; } } private class SysUiVisibilityListener implements View.OnSystemUiVisibilityChangeListener { private int delay = Integer.parseInt(getResources().getString(R.string.hide_system_ui_delay)); @Override public void onSystemUiVisibilityChange(int visibility) { Timer t = new Timer(); t.schedule(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { fullscreenImage.setSystemUiVisibility(UI_HIDE_OPTIONS); } }); } }, delay); } } private class PhotoTapListener implements PhotoViewAttacher.OnPhotoTapListener { @Override public void onPhotoTap(View view, float v, float v2) { finish(); } } private class BitmapRequestListener implements RequestListener<Bitmap> { @Override public void onRequestFailure(SpiceException e) { Toast.makeText(getBaseContext(), "Image Request Fail!", Toast.LENGTH_LONG).show(); //manager.shouldStop(); } @Override public void onRequestSuccess(Bitmap bitmap) { image = retained.image = bitmap; fullscreenImage.setImageBitmap(bitmap); photoAttacher.update(); /* if (manager.isStarted()) manager.shouldStop();*/ } } private class DataFragment extends Fragment { public Bitmap image; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } } }