package edu.berkeley.cs.amplab.carat.android.fragments;
import java.util.HashMap;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import edu.berkeley.cs.amplab.carat.android.CaratApplication;
import edu.berkeley.cs.amplab.carat.android.Constants;
import edu.berkeley.cs.amplab.carat.android.R;
import edu.berkeley.cs.amplab.carat.android.lists.HogsBugsAdapter;
import edu.berkeley.cs.amplab.carat.android.protocol.ClickTracking;
import edu.berkeley.cs.amplab.carat.android.storage.SimpleHogBug;
import edu.berkeley.cs.amplab.carat.android.subscreens.AppDetailsFragment;
import edu.berkeley.cs.amplab.carat.android.ui.DrawView;
import edu.berkeley.cs.amplab.carat.android.ui.LocalizedWebView;
public class BugsOrHogsFragment extends ExtendedTitleFragment {
public static final String IS_BUGS = "IS_BUGS";
protected boolean isBugs = false;
private DrawView w = null;
private View detailPage = null;
/**
* When creating Hogs or Bugs, set which one this is here:
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Boolean bug = getArguments().getBoolean("isBugs");
if (bug)
isBugs = true;
else
isBugs = false;
// if (savedInstanceState != null) {
// isBugs = savedInstanceState.getBoolean(IS_BUGS);
// } else {
// Log.d("BugsOrHogsFragment", "savedInstanceState=null");
// }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = null;
if (isBugs && CaratApplication.storage.getBugReport().length == 0) {
root = inflater.inflate(R.layout.emptybugsonly, container, false);
return root;
} else {
root = inflater.inflate(R.layout.hogs, container, false);
initEnergyDetails(root, container);
initDetailView(root);
if (savedInstanceState != null) {
Object o = savedInstanceState.get("savedInstance");
if (o != null) {
BugsOrHogsFragment previous = (BugsOrHogsFragment) o;
TextView pn = (TextView) previous.detailPage.findViewById(R.id.name);
ImageView pi = (ImageView) previous.detailPage.findViewById(R.id.appIcon);
TextView pp = (TextView) previous.detailPage.findViewById(R.id.benefit);
DrawView w = previous.w;
((TextView) detailPage.findViewById(R.id.name)).setText(pn.getText());
((ImageView) detailPage.findViewById(R.id.appIcon)).setImageDrawable(pi.getDrawable());
((TextView) detailPage.findViewById(R.id.benefit)).setText(pp.getText());
String appName = w.getAppName();
w.setParams(isBugs ? Constants.Type.BUG : Constants.Type.HOG, appName, w.getEv(), w.getEvWithout(), w.getSampleCount(),
w.getSampleCountWithout(), w.getError(), w.getErrorWithout(), (ViewGroup) detailPage);
// w.postInvalidate();
}
}
return root;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
}
private void initEnergyDetails(View root, ViewGroup container) {
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
detailPage = inflater.inflate(R.layout.graph, container);
w = new DrawView(getActivity());
OnClickListener detailViewer = new OnClickListener() {
@Override
public void onClick(View arg0) {
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(getActivity());
if (p != null) {
String uuId = p.getString(CaratApplication.getRegisteredUuid(), "UNKNOWN");
HashMap<String, String> options = new HashMap<String, String>();
options.put("status", getActivity().getTitle().toString());
options.put("type", isBugs ? "Bugs" : "Hogs");
options.put("app", ((TextView) detailPage.findViewById(R.id.name)).getText() + "");
options.put("benefit", ((TextView) detailPage.findViewById(R.id.benefit)).getText().toString()
.replace('\u00B1', '+'));
ClickTracking.track(uuId, "whatnumbers", options, getActivity());
}
}
};
View moreinfo = detailPage.findViewById(R.id.jscore_info);
moreinfo.setOnClickListener(detailViewer);
View item = detailPage.findViewById(R.id.benefit);
item.setClickable(true);
item.setOnClickListener(detailViewer);
item = detailPage.findViewById(R.id.benefit);
item.setClickable(true);
item.setOnClickListener(detailViewer);
item = detailPage.findViewById(R.id.name);
item.setClickable(true);
item.setOnClickListener(detailViewer);
item = detailPage.findViewById(R.id.appIcon);
item.setClickable(true);
item.setOnClickListener(detailViewer);
final ListView lv = (ListView) root.findViewById(android.R.id.list);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv.getItemAtPosition(position);
SimpleHogBug fullObject = (SimpleHogBug) o;
AppDetailsFragment fragment = AppDetailsFragment.getInstance(Constants.Type.BUG, fullObject, isBugs);
CaratApplication.getMainActivity().replaceFragment(fragment, fullObject.getAppName(), false);
}
});
}
private void initDetailView(View root) {
LocalizedWebView webview = (LocalizedWebView) root.findViewById(R.id.detailView);
webview.loadUrl("file:///android_asset/detailinfo.html");
}
@Override
public void onDetach() {
CaratApplication.setBugs(null);
CaratApplication.setHogs(null);
super.onDetach();
}
public void refresh() {
if (getActivity() == null)
Log.e("BugsOrHogsFragment", "unable to get activity");
CaratApplication app = (CaratApplication) getActivity().getApplication();
final ListView lv = (ListView) getActivity().findViewById(android.R.id.list);
if (isBugs) {
if (CaratApplication.storage.getBugReport().length == 0)
return;
else lv.setAdapter(new HogsBugsAdapter(app, CaratApplication.storage.getBugReport()));
} else
lv.setAdapter(new HogsBugsAdapter(app, CaratApplication.storage.getHogReport()));
}
@Override
public void onResume() {
if (isBugs)
CaratApplication.setBugs(this);
else
CaratApplication.setHogs(this);
refresh();
super.onResume();
}
}