package edu.berkeley.cs.amplab.carat.android.subscreens;
import java.util.HashMap;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import edu.berkeley.cs.amplab.carat.android.CaratApplication;
import edu.berkeley.cs.amplab.carat.android.MainActivity;
import edu.berkeley.cs.amplab.carat.android.R;
import edu.berkeley.cs.amplab.carat.android.fragments.ExtendedTitleFragment;
import edu.berkeley.cs.amplab.carat.android.protocol.ClickTracking;
import edu.berkeley.cs.amplab.carat.android.sampling.SamplingLibrary;
import edu.berkeley.cs.amplab.carat.android.ui.LocalizedWebView;
public class KillAppFragment extends ExtendedTitleFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.killlayout, container, false);
LocalizedWebView webview = (LocalizedWebView) view.findViewById(R.id.killView);
String osVer = SamplingLibrary.getOsVersion();
// FIXME: KLUDGE. Should be smarter with the version number.
if (osVer.startsWith("2."))
webview.loadUrl("file:///android_asset/killapp-2.2.html");
else
webview.loadUrl("file:///android_asset/killapp.html");
final Context c = getActivity();
final String raw = getArguments().getString("raw");
Boolean isBug = getArguments().getBoolean("isBug");
Boolean isHog = getArguments().getBoolean("isHog");
ImageView icon = (ImageView) view.findViewById(R.id.suggestion_app_icon);
TextView txtName = (TextView) view.findViewById(R.id.actionName);
TextView txtType = (TextView) view.findViewById(R.id.suggestion_type);
final TextView txtBenefit = (TextView) view.findViewById(R.id.expectedBenefit);
final Button killButton = (Button) view.findViewById(R.id.killButton);
final String label = CaratApplication.labelForApp(c, raw);
icon.setImageDrawable(CaratApplication.iconForApp(c, raw));
if (isBug || isHog) {
txtName.setText(label);
final PackageInfo pak = SamplingLibrary.getPackageInfo(c, raw);
String ver = "";
if (pak != null)
ver = pak.versionName;
if (ver == null)
ver = "";
// Log.d("killApp", pak.packageName);
final String s = label + " " + ver;
killButton.setText(getString(R.string.kill) + " " + s);
killButton.setEnabled(true);
killButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
/* killButton clicked. Track click: */
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(getActivity());
if (p != null) {
String uuId = p.getString(CaratApplication.getRegisteredUuid(), "UNKNOWN");
HashMap<String, String> options = new HashMap<String, String>();
if (pak != null) {
options.put("app", pak.packageName);
options.put("version", pak.versionName);
options.put("versionCode", pak.versionCode + "");
options.put("label", label);
}
options.put("benefit", txtBenefit.getText().toString().replace('\u00B1', '+'));
ClickTracking.track(uuId, "killbutton", options, getActivity());
}
/*
* Change kill button text and make it unclickable until
* screen is exited
*/
killButton.setEnabled(false);
killButton.setText(s + " " + getString(R.string.killed));
// FIXME: sometimes this method doesn't kill the app,
// check and if needed, fix it
SamplingLibrary.killApp(c, raw, label);
}
});
Button AppManagerButton = (Button) view.findViewById(R.id.appManager);
AppManagerButton.setOnClickListener(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>();
if (pak != null) {
options.put("app", pak.packageName);
options.put("version", pak.versionName);
options.put("versionCode", pak.versionCode + "");
options.put("label", label);
}
options.put("benefit", txtBenefit.getText().toString().replace('\u00B1', '+'));
ClickTracking.track(uuId, "appmanagerbutton", options, getActivity());
}
// FIXME: implement this method (show AppManager in a fragment/screen)
GoToAppScreen();
}
});
} else { // Other action
txtName.setText(label);
killButton.setText(label);
}
txtType.setText(getArguments().getString("appPriority"));
String benefit = getArguments().getString("benefit");
txtBenefit.setText(benefit);
// onCreateView() should return the view resulting from inflating the
// layout file
return view;
}
/* Show the application setting */
public void GoToAppScreen() {
((MainActivity) getActivity()).safeStart(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS, getString(R.string.appsettings));
}
}