package org.greengin.sciencetoolkit.common.ui.base; import org.greengin.sciencetoolkit.common.R; import org.greengin.sciencetoolkit.common.model.ModelDefaults; import org.greengin.sciencetoolkit.common.model.SettingsManager; import org.greengin.sciencetoolkit.common.model.events.ModelNotificationListener; import org.greengin.sciencetoolkit.common.ui.base.RemoteCapableActivity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.support.v4.app.NavUtils; import android.view.MenuItem; public class SettingsControlledActivity extends RemoteCapableActivity { ModelNotificationListener controlledRotationListener; int controlledRotationLastValue; boolean controlledRotationActive; boolean controlledSettingsHasParent; public SettingsControlledActivity(boolean hasParent) { this(-1, hasParent); this.controlledRotationLastValue = 0; } public SettingsControlledActivity(int overrideSettings, boolean hasParent) { this.controlledSettingsHasParent = hasParent; this.controlledRotationLastValue = overrideSettings; this.controlledRotationActive = overrideSettings < 0; if (this.controlledRotationActive) { this.controlledRotationListener = new ModelNotificationListener() { @Override public void modelNotificationReceived(String msg) { updateScreenOrientationValue(); } }; updateScreenOrientationValue(); } else { this.controlledRotationListener = null; updateScreenOrientation(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupActionBar(); } private void setupActionBar() { if (controlledSettingsHasParent) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); // getSupportActionBar().setHomeButtonEnabled(true); } } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == android.R.id.home) { if (controlledSettingsHasParent) { NavUtils.navigateUpFromSameTask(this); } return true; } else if (itemId == R.id.action_application_settings) { Intent intent = new Intent(getApplicationContext(), AppSettingsActivity.class); startActivity(intent); return true; } return super.onOptionsItemSelected(item); } @Override public void onResume() { super.onResume(); if (controlledRotationActive) { updateScreenOrientationValue(); SettingsManager.get().registerDirectListener("app", this.controlledRotationListener); } } public void onPause() { super.onPause(); if (controlledRotationActive) { SettingsManager.get().unregisterDirectListener("app", this.controlledRotationListener); } } private void updateScreenOrientationValue() { int value = SettingsManager.get().get("app").getInt("screen_orientation", ModelDefaults.APP_SCREEN_ORIENTATION); if (value != controlledRotationLastValue) { controlledRotationLastValue = value; } updateScreenOrientation(); } private void updateScreenOrientation() { try { switch (controlledRotationLastValue) { case 0: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; case 1: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case 2: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); break; } } catch (NullPointerException e) { } } }