package edu.berkeley.cs.amplab.carat.android.fragments; import java.io.Serializable; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.Toast; import edu.berkeley.cs.amplab.carat.android.CaratApplication; import edu.berkeley.cs.amplab.carat.android.Constants; import edu.berkeley.cs.amplab.carat.android.MainActivity; import edu.berkeley.cs.amplab.carat.android.R; import edu.berkeley.cs.amplab.carat.android.lists.HogBugSuggestionsAdapter; import edu.berkeley.cs.amplab.carat.android.sampling.SamplingLibrary; import edu.berkeley.cs.amplab.carat.android.storage.SimpleHogBug; import edu.berkeley.cs.amplab.carat.android.subscreens.KillAppFragment; import edu.berkeley.cs.amplab.carat.android.ui.LocalizedWebView; public class SuggestionsFragment extends ExtendedTitleFragment implements Serializable{ private static final long serialVersionUID = -6034269327947014085L; final MainActivity mMainActivity = CaratApplication.getMainActivity(); // private static final String TAG = "CaratSuggestions"; private View root; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (CaratApplication.storage.getHogReport().length == 0 && CaratApplication.storage.getBugReport().length == 0) { root = inflater.inflate(R.layout.emptyactions, container, false); return root; } root = inflater.inflate(R.layout.suggestions, container, false); final ListView lv = (ListView) root.findViewById(android.R.id.list); lv.setCacheColorHint(0); 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; final String raw = fullObject.getAppName(); // Log.v(TAG, "Showing kill view for " + raw); if (raw.equals("OsUpgrade")) mMainActivity.showHTMLFile("upgradeos", getString(R.string.upgradeosinfo), false); // else if (raw.equals(getString(R.string.dimscreen))) // GoToDisplayScreen(); // else if (raw.equals(getString(R.string.disablewifi))) // GoToWifiScreen(); // else if (raw.equals(getString(R.string.disablegps))) // GoToLocSevScreen(); // else if (raw.equals(getString(R.string.disablebluetooth))) // GoToBluetoothScreen(); // else if (raw.equals(getString(R.string.disablehapticfeedback))) // GoToSoundScreen(); // else if (raw.equals(getString(R.string.automaticbrightness))) // GoToDisplayScreen(); // else if (raw.equals(getString(R.string.disablenetwork))) // GoToMobileNetworkScreen(); // else if (raw.equals(getString(R.string.disablevibration))) // GoToSoundScreen(); // else if (raw.equals(getString(R.string.shortenscreentimeout))) // GoToDisplayScreen(); // else if (raw.equals(getString(R.string.disableautomaticsync))) // GoToSyncScreen(); else if (raw.equals(getString(R.string.helpcarat))) { mMainActivity.showHTMLFile("collectdata", getString(R.string.collectdatainfo), false); } else if (raw.equals(getString(R.string.questionnaire))) { openQuestionnaire(); } else { displayKillAppFragment(fullObject, raw); } } /* * display a fragment (KillAppFragment) for killing the buggy app */ private void displayKillAppFragment(SimpleHogBug fullObject, final String raw) { // we need to pass the buggy app info (as a bundle named "args") // to the fragment Bundle args = new Bundle(); args.putString("raw", raw); Constants.Type type = fullObject.getType(); if (type == Constants.Type.BUG) { args.putBoolean("isBug", true); args.putBoolean("isHog", false); args.putBoolean("isOther", false); } else if (type == Constants.Type.HOG) { args.putBoolean("isHog", true); args.putBoolean("isBug", false); args.putBoolean("isOther", false); } if (type == Constants.Type.OTHER) { args.putString("appPriority", fullObject.getAppPriority()); } else { args.putString("appPriority", CaratApplication.translatedPriority(fullObject.getAppPriority())); } args.putString("benefit", fullObject.getBenefitText()); Fragment fragment = new KillAppFragment(); fragment.setArguments(args); CaratApplication.getMainActivity().replaceFragment(fragment, getString(R.string.kill)+" "+raw, false); /* * if (raw.equals("Disable bluetooth")) { double benefitOther = * PowerProfileHelper. bluetoothBenefit(c); hours = (int) * (benefitOther); min = (int) (benefitOther * 60); min -= hours * * 60; } else if (raw.equals("Disable Wifi")) { double * benefitOther = PowerProfileHelper.wifiBenefit(c); hours = * (int) (benefitOther); min = (int) (benefitOther * 60); min -= * hours * 60; } else if (raw.equals("Dim the Screen")) { double * benefitOther = PowerProfileHelper. * screenBrightnessBenefit(c); hours = (int) (benefitOther); min * = (int) (benefitOther * 60); min -= hours * 60; } */ } }); initUpgradeOsView(root); // if (savedInstanceState != null){ // Object o = savedInstanceState.get("savedInstance"); // if (o != null) { // SuggestionsFragment previous = (SuggestionsFragment) o; // viewIndex = previous.viewIndex; // if (previous.killView != null && previous.killView == previous.vf.getChildAt(viewIndex)) { // restoreKillView(previous.killView); // } // } // } /* getActivity().setTitle(getResources().getString(R.string.tab_actions)); */ return root; } private void initUpgradeOsView(View root) { LocalizedWebView webview = (LocalizedWebView) root.findViewById(R.id.upgradeOsView); webview.loadUrl("file:///android_asset/upgradeos.html"); //webview.setOnTouchListener(new FlipperBackListener(this, vf, vf.indexOfChild(findViewById(android.R.id.list)))); } /* Show the bluetooth setting */ public void GoToBluetoothScreen() { safeStart(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS, getString(R.string.bluetoothsettings)); } /* Show the wifi setting */ public void GoToWifiScreen() { safeStart(android.provider.Settings.ACTION_WIFI_SETTINGS, getString(R.string.wifisettings)); } /* * Show the display setting including screen brightness setting, sleep mode */ public void GoToDisplayScreen() { safeStart(android.provider.Settings.ACTION_DISPLAY_SETTINGS, getString(R.string.screensettings)); } /* * Show the sound setting including phone ringer mode, vibration mode, haptic feedback setting and other sound options */ public void GoToSoundScreen() { safeStart(android.provider.Settings.ACTION_SOUND_SETTINGS, getString(R.string.soundsettings)); } /* * Show the location service setting including configuring gps provider, network provider */ public void GoToLocSevScreen() { safeStart(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS, getString(R.string.locationsettings)); } /* Show the synchronization setting */ public void GoToSyncScreen() { safeStart(android.provider.Settings.ACTION_SYNC_SETTINGS, getString(R.string.syncsettings)); } /* * Show the mobile network setting including configuring 3G/2G, network operators */ public void GoToMobileNetworkScreen() { safeStart(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS, getString(R.string.mobilenetworksettings)); } /* Show the application setting */ public void GoToAppScreen() { safeStart(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS, getString(R.string.appsettings)); } private void safeStart(String intentString, String thing) { Intent intent = null; try { intent = new Intent(intentString); startActivity(intent); } catch (Throwable th) { // Log.e(TAG, "Could not start activity: " + intent, th); if (thing != null) { Toast t = Toast.makeText(getActivity(), getString(R.string.opening) + thing + getString(R.string.notsupported), Toast.LENGTH_SHORT); t.show(); } } } /** * Open a Carat-related questionnaire. */ public void openQuestionnaire() { SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(getActivity()); String caratId = Uri.encode(p.getString(CaratApplication.getRegisteredUuid(), "")); String os = Uri.encode(SamplingLibrary.getOsVersion()); String model = Uri.encode(SamplingLibrary.getModel()); String url = CaratApplication.storage.getQuestionnaireUrl(); if (url != null && url.length() > 7 && url.startsWith("http")) { // http:// url = url.replace("caratid", caratId).replace("caratos", os).replace("caratmodel", model); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(browserIntent); } } @Override public void onResume() { // we no longer manipulate fragments directly. // CaratApplication.setActionList(this); refresh(); super.onResume(); } public void refresh() { SimpleHogBug[] hogReport, bugReport; hogReport = CaratApplication.storage.getHogReport(); bugReport = CaratApplication.storage.getBugReport(); if (hogReport.length == 0 && bugReport.length == 0) return; CaratApplication caratAppllication = (CaratApplication) CaratApplication.getMainActivity().getApplication(); final ListView lv = (ListView) root.findViewById(android.R.id.list); lv.setAdapter(new HogBugSuggestionsAdapter(caratAppllication, hogReport, bugReport)); } @Override public void onSaveInstanceState(Bundle outState) { // outState.putSerializable("savedInstance", this); super.onSaveInstanceState(outState); } }