/src/edu/umich/PowerTutor/ui/UMLogger.java
Java | 355 lines | 303 code | 31 blank | 21 comment | 16 complexity | 3ffda58d1a9de34218f6fda417ce6e37 MD5 | raw file
- /*
- Copyright (C) 2011 The University of Michigan
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- Please send inquiries to powertutor@umich.edu
- */
- package edu.umich.PowerTutor.ui;
- import edu.umich.PowerTutor.R;
- import edu.umich.PowerTutor.phone.PhoneSelector;
- import edu.umich.PowerTutor.service.ICounterService;
- import edu.umich.PowerTutor.service.UMLoggerService;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.app.Dialog;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.content.SharedPreferences;
- import android.content.res.Configuration;
- import android.os.Bundle;
- import android.os.Environment;
- import android.os.IBinder;
- import android.os.RemoteException;
- import android.preference.PreferenceManager;
- import android.util.Log;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemSelectedListener;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.SeekBar;
- import android.widget.SeekBar.OnSeekBarChangeListener;
- import android.widget.Spinner;
- import android.widget.TextView;
- import android.widget.Toast;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.util.zip.InflaterInputStream;
- import java.io.BufferedOutputStream;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- /** The main view activity for PowerTutor*/
- public class UMLogger extends Activity {
- private static final String TAG = "UMLogger";
- public static final String CURRENT_VERSION = "1.2"; // Don't change this...
- public static final String SERVER_IP = "spidermonkey.eecs.umich.edu";
- public static final int SERVER_PORT = 5204;
- private SharedPreferences prefs;
- private Intent serviceIntent;
- private ICounterService counterService;
- private CounterServiceConnection conn;
- private Button serviceStartButton;
- private Button appViewerButton;
- private Button sysViewerButton;
- private Button helpButton;
- private TextView scaleText;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- prefs = PreferenceManager.getDefaultSharedPreferences(this);
- serviceIntent = new Intent(this, UMLoggerService.class);
- conn = new CounterServiceConnection();
- setContentView(R.layout.main);
- ArrayAdapter<?> adapterxaxis = ArrayAdapter.createFromResource(
- this, R.array.xaxis, android.R.layout.simple_spinner_item);
- adapterxaxis.setDropDownViewResource(
- android.R.layout.simple_spinner_dropdown_item);
- serviceStartButton = (Button)findViewById(R.id.servicestartbutton);
- appViewerButton = (Button)findViewById(R.id.appviewerbutton);
- sysViewerButton = (Button)findViewById(R.id.sysviewerbutton);
- helpButton= (Button)findViewById(R.id.helpbutton);
- serviceStartButton.setOnClickListener(serviceStartButtonListener);
- sysViewerButton.setOnClickListener(sysViewerButtonListener);
- appViewerButton.setOnClickListener(appViewerButtonListener);
- helpButton.setOnClickListener(helpButtonListener);
-
- if(counterService != null) {
- serviceStartButton.setText("Stop Profiler");
- appViewerButton.setEnabled(true);
- sysViewerButton.setEnabled(true);
- } else {
- serviceStartButton.setText("Start Profiler");
- appViewerButton.setEnabled(false);
- sysViewerButton.setEnabled(false);
- }
- }
- @Override
- public void onResume() {
- super.onResume();
- getApplicationContext().bindService(serviceIntent, conn, 0);
- if(prefs.getBoolean("firstRun", true)) {
- if(PhoneSelector.getPhoneType() == PhoneSelector.PHONE_UNKNOWN) {
- showDialog(DIALOG_UNKNOWN_PHONE);
- } else {
- showDialog(DIALOG_TOS);
- }
- }
- Intent startingIntent = getIntent();
- if(startingIntent.getBooleanExtra("isFromIcon", false)) {
- Intent copyIntent = (Intent)getIntent().clone();
- copyIntent.putExtra("isFromIcon", false);
- setIntent(copyIntent);
- Intent intent = new Intent(this, PowerTabs.class);
- startActivity(intent);
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
- getApplicationContext().unbindService(conn);
- }
- private static final int MENU_PREFERENCES = 0;
- private static final int MENU_SAVE_LOG = 1;
- private static final int DIALOG_START_SENDING = 0;
- private static final int DIALOG_STOP_SENDING = 1;
- private static final int DIALOG_TOS = 2;
- private static final int DIALOG_RUNNING_ON_STARTUP = 3;
- private static final int DIALOG_NOT_RUNNING_ON_STARTUP = 4;
- private static final int DIALOG_UNKNOWN_PHONE = 5;
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(0, MENU_PREFERENCES, 0, "Options");
- menu.add(0, MENU_SAVE_LOG, 0, "Save log");
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch(item.getItemId()) {
- case MENU_PREFERENCES:
- startActivity(new Intent(this, EditPreferences.class));
- return true;
- case MENU_SAVE_LOG:
- new Thread() {
- public void start() {
- File writeFile = new File(
- Environment.getExternalStorageDirectory(), "PowerTrace" +
- System.currentTimeMillis() + ".log");
- try {
- InflaterInputStream logIn = new InflaterInputStream(
- openFileInput("PowerTrace.log"));
- BufferedOutputStream logOut = new BufferedOutputStream(
- new FileOutputStream(writeFile));
- byte[] buffer = new byte[20480];
- for(int ln = logIn.read(buffer); ln != -1;
- ln = logIn.read(buffer)) {
- logOut.write(buffer, 0, ln);
- }
- logIn.close();
- logOut.close();
- Toast.makeText(UMLogger.this, "Wrote log to " +
- writeFile.getAbsolutePath(),
- Toast.LENGTH_SHORT).show();
- return;
- } catch(java.io.EOFException e) {
- Toast.makeText(UMLogger.this, "Wrote log to " +
- writeFile.getAbsolutePath(),
- Toast.LENGTH_SHORT).show();
- return;
- } catch(IOException e) {
- }
- Toast.makeText(UMLogger.this, "Failed to write log to sdcard",
- Toast.LENGTH_SHORT).show();
- }
- }.start();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
- /**This function includes all the dialog constructor*/
- @Override
- protected Dialog onCreateDialog(int id) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- switch(id) {
- case DIALOG_TOS:
- builder.setMessage(R.string.term)
- .setCancelable(false)
- .setPositiveButton("Agree", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- prefs.edit().putBoolean("firstRun", false)
- .putBoolean("runOnStartup", true)
- .putBoolean("sendPermission", true).commit();
- dialog.dismiss();
- }
- })
- .setNegativeButton("Do not agree",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- prefs.edit().putBoolean("firstRun", true).commit();
- finish();
- }
- });
- return builder.create();
- case DIALOG_STOP_SENDING:
- builder.setMessage(R.string.stop_sending_text)
- .setCancelable(true)
- .setPositiveButton("Stop", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- prefs.edit().putBoolean("sendPermission", false).commit();
- dialog.dismiss();
- }
- })
- .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
- return builder.create();
- case DIALOG_START_SENDING:
- builder.setMessage(R.string.start_sending_text)
- .setCancelable(true)
- .setPositiveButton("Start", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- prefs.edit().putBoolean("sendPermission", true).commit();
- dialog.dismiss();
- }
- })
- .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
- return builder.create();
- case DIALOG_RUNNING_ON_STARTUP:
- builder.setMessage(R.string.running_on_startup)
- .setCancelable(true)
- .setNeutralButton("Ok", null);
- return builder.create();
- case DIALOG_NOT_RUNNING_ON_STARTUP:
- builder.setMessage(R.string.not_running_on_startup)
- .setCancelable(true)
- .setNeutralButton("Ok", null);
- return builder.create();
- case DIALOG_UNKNOWN_PHONE:
- builder.setMessage(R.string.unknown_phone)
- .setCancelable(false)
- .setNeutralButton("Ok", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.dismiss();
- showDialog(DIALOG_TOS);
- }
- });
- return builder.create();
-
- }
- return null;
- }
-
- private Button.OnClickListener appViewerButtonListener =
- new Button.OnClickListener() {
- public void onClick(View v) {
- Intent intent = new Intent(v.getContext(), PowerTop.class);
- startActivityForResult(intent, 0);
- }
- };
-
- private Button.OnClickListener sysViewerButtonListener =
- new Button.OnClickListener() {
- public void onClick(View v) {
- Intent intent = new Intent(v.getContext(), PowerTabs.class);
- startActivityForResult(intent, 0);
- }
- };
-
- private Button.OnClickListener serviceStartButtonListener =
- new Button.OnClickListener() {
- public void onClick(View v) {
- serviceStartButton.setEnabled(false);
- if(counterService != null) {
- stopService(serviceIntent);
- } else {
- if(conn == null) {
- Toast.makeText(UMLogger.this, "Profiler failed to start",
- Toast.LENGTH_SHORT).show();
- } else {
- startService(serviceIntent);
- }
- }
- }
- };
- private class CounterServiceConnection implements ServiceConnection {
- public void onServiceConnected(ComponentName className,
- IBinder boundService) {
- counterService = ICounterService.Stub.asInterface((IBinder)boundService);
- serviceStartButton.setText("Stop Profiler");
- serviceStartButton.setEnabled(true);
- appViewerButton.setEnabled(true);
- sysViewerButton.setEnabled(true);
- }
- public void onServiceDisconnected(ComponentName className) {
- counterService = null;
- getApplicationContext().unbindService(conn);
- getApplicationContext().bindService(serviceIntent, conn, 0);
- Toast.makeText(UMLogger.this, "Profiler stopped",
- Toast.LENGTH_SHORT).show();
- serviceStartButton.setText("Start Profiler");
- serviceStartButton.setEnabled(true);
- appViewerButton.setEnabled(false);
- sysViewerButton.setEnabled(false);
- }
- }
-
- private Button.OnClickListener helpButtonListener =
- new Button.OnClickListener() {
- public void onClick(View v) {
- Intent myIntent = new Intent(v.getContext(), Help.class);
- startActivityForResult(myIntent, 0);
- }
- };
- }