package com.kedzie.vbox.machine;
import java.io.IOException;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragment;
import com.kedzie.vbox.R;
import com.kedzie.vbox.api.IMachine;
import com.kedzie.vbox.app.BundleBuilder;
import com.kedzie.vbox.task.ActionBarTask;
/**
*
* @author Marek Kędzierski
* @apiviz.stereotype fragment
*/
public class LogFragment extends SherlockFragment {
private static final String TAG = "LogFragment";
private static final int MAX_LOG_SIZE=409600; //400 Kbps
class LoadLogTask extends ActionBarTask<IMachine, String> {
public LoadLogTask() {
super(getSherlockActivity(), null);
}
@Override
protected String work(IMachine... m) throws Exception {
try {
return new String(m[0].readLog(0, 0, MAX_LOG_SIZE));
} catch(Exception e) {
return "";
}
}
@Override
protected void onSuccess(String result) {
if(result.length()==MAX_LOG_SIZE)
Log.w(TAG,"Didn't get entire log file. Log size: " + result.length());
_logText.setText(_log=result);
}
}
private TextView _logText;
private IMachine _machine;
private String _log;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_machine = BundleBuilder.getProxy(getArguments(), IMachine.BUNDLE, IMachine.class);
if(savedInstanceState!=null)
_log = savedInstanceState.getString("log");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.machine_log, null);
_logText = (TextView)view.findViewById(R.id.logText);
return view;
}
@Override
public void onStart() {
super.onStart();
if(_log!=null)
_logText.setText(_log);
else
new LoadLogTask().execute(_machine);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("log", _log);
}
@Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
switch(item.getItemId()) {
case R.id.option_menu_refresh:
Log.i(TAG, "Refreshing...");
new LoadLogTask().execute(_machine);
return true;
}
return false;
}
}