package com.ericsson.uecontrol.gui; import android.app.ActionBar; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; import android.support.v4.app.FragmentActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import com.ericsson.uecontrol.R; import com.ericsson.uecontrol.core.UeControlExecutor; import com.ericsson.uecontrol.core.behaviour.UeBehaviourSleep; import com.ericsson.uecontrol.core.behaviour.UeBehaviourSurfing; import com.ericsson.uecontrol.gui.fragments.BehaviourListFragment; import com.ericsson.uecontrol.gui.fragments.NavigationDrawerFragment; import com.ericsson.uecontrol.gui.fragments.StatusFragment; import com.ericsson.uecontrol.gui.util.CSVWriter; import org.apache.log4j.Level; import org.apache.log4j.Logger; import java.io.File; import de.mindpipe.android.logging.log4j.LogConfigurator; public class MainActivity extends FragmentActivity implements OnSharedPreferenceChangeListener{ private static final Logger log = Logger.getLogger(MainActivity.class); /** * Fragment managing the behaviors, interactions and presentation of the navigation drawer. */ private NavigationDrawerFragment navigationDrawerFragment; private StatusFragment statusFragment; private boolean backButtonPressed = false; private static UeControlExecutor currentExecutor; private static CSVWriter csvLogger; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Setup Debugging setupDebugLogging(); // Setup Main GUI setContentView(R.layout.activity_main); //navigationDrawerFragment = (NavigationDrawerFragment) // getFragmentManager().findFragmentById(R.id.navigation_drawer); statusFragment = (StatusFragment) getFragmentManager().findFragmentById(R.id.status_fragment); getFragmentManager().beginTransaction() .replace(R.id.container, BehaviourListFragment.newInstance()).commit(); // Set up the drawer. //navigationDrawerFragment.setUp( // R.id.navigation_drawer, // (DrawerLayout) findViewById(R.id.drawer_layout)); currentExecutor = new UeControlExecutor(); currentExecutor.addBehaviour(new UeBehaviourSleep()); currentExecutor.addBehaviour(new UeBehaviourSurfing()); currentExecutor.addBehaviour(new UeBehaviourSleep(4000)); currentExecutor.setThroughputListener(statusFragment.getThroughputListener()); } public void setupDebugLogging(){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); String path = prefs.getString("logging_path", "/sdcard/uecontrol/"); if(!path.endsWith("/")) path += File.separator; LogConfigurator logConfigurator = new LogConfigurator(); logConfigurator.setFileName(path + "uecontrol.log"); if(prefs.getBoolean("debug", false)) logConfigurator.setRootLevel(Level.DEBUG); else logConfigurator.setRootLevel(Level.WARN); // Set log level of a specific logger logConfigurator.setLevel("org.apache", Level.ERROR); logConfigurator.configure(); prefs.registerOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { log.debug("Preference changed: "+key); if(key.equals("debug")) { if (sharedPreferences.getBoolean("debug", false)) { Logger.getRootLogger().setLevel(Level.DEBUG); log.info("Enabling debug logging."); } else { log.info("Disabling debug logging."); Logger.getRootLogger().setLevel(Level.WARN); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { if (navigationDrawerFragment == null || !navigationDrawerFragment.isDrawerOpen()) { // Only show items in the action bar relevant to this screen // if the drawer is not showing. Otherwise, let the drawer // decide what to show in the action bar. getMenuInflater().inflate(R.menu.main, menu); ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setDisplayShowTitleEnabled(true); return true; } return super.onCreateOptionsMenu(menu); } @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_execute) { if(currentExecutor.isRunning()){ currentExecutor.terminate(); item.setTitle(R.string.action_run); csvLogger = null; } else { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); if(prefs.getBoolean("logging", false)) csvLogger = new CSVWriter(this); else csvLogger = null; currentExecutor.execute(); item.setTitle(R.string.action_stop); } return true; } if (id == R.id.action_edit) { Intent intent = new Intent(this, EditActivity.class); startActivity(intent); return true; } if (id == R.id.action_settings) { startActivity(new Intent(this, SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } public static UeControlExecutor getExecutor() { return currentExecutor; } public static void logThroughput(double downThroughput, double upThroughput) { if(csvLogger == null || currentExecutor == null || currentExecutor.getRunningBehaviour() == null) return; csvLogger.write(currentExecutor.getRunningBehaviour().getName(), downThroughput, upThroughput); } @Override public void onBackPressed() { if (backButtonPressed) { super.onBackPressed(); return; } this.backButtonPressed = true; Toast.makeText(this, "Press BACK again to Exit", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { backButtonPressed = false; } }, 2000); } }