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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
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.lists.SettingsSuggestionAdapter;
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.ui.LocalizedWebView;
public class SettingsSuggestionsFragment extends ExtendedTitleFragment implements Serializable{
private static final long serialVersionUID = 1L;
// private static final String TAG = "SettingsSuggestions";
private View rootView;
private final MainActivity mMainActivity = CaratApplication.getMainActivity();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.suggestions, container, false);
final ListView lv = (ListView) rootView.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 actionName = fullObject.getAppName();
// Log.v(TAG, "Showing view for " + actionName);
if (actionName.equals("OsUpgrade"))
mMainActivity.showHTMLFile("upgradeos", getString(R.string.upgradeosinfo), false);
else if (actionName.equals(getString(R.string.dimscreen)))
GoToDisplayScreen();
else if (actionName.equals(getString(R.string.disablewifi)))
GoToWifiScreen();
else if (actionName.equals(getString(R.string.disablegps)))
GoToLocSevScreen();
else if (actionName.equals(getString(R.string.disablelocation)))
GoToLocSevScreen();
else if (actionName.equals(getString(R.string.disablebluetooth)))
GoToBluetoothScreen();
else if (actionName.equals(getString(R.string.disablehapticfeedback)))
GoToSoundScreen();
else if (actionName.equals(getString(R.string.automaticbrightness)))
GoToDisplayScreen();
else if (actionName.equals(getString(R.string.disablenetwork)))
GoToMobileNetworkScreen();
else if (actionName.equals(getString(R.string.disablevibration)))
GoToSoundScreen();
else if (actionName.equals(getString(R.string.shortenscreentimeout)))
GoToDisplayScreen();
else if (actionName.equals(getString(R.string.disableautomaticsync)))
GoToSyncScreen();
else if (actionName.equals(getString(R.string.helpcarat)))
mMainActivity.showHTMLFile("collectdata", getString(R.string.collectdatainfo), false);
else if (actionName.equals(getString(R.string.questionnaire)))
openQuestionnaire();
}
});
initUpgradeOsView(rootView);
/*
getActivity().setTitle(getResources().getString(R.string.tab_settings));
*/
return rootView;
}
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() {
mMainActivity.safeStart(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS, getString(R.string.bluetoothsettings));
}
/* Show the wifi setting */
public void GoToWifiScreen() {
mMainActivity.safeStart(android.provider.Settings.ACTION_WIFI_SETTINGS, getString(R.string.wifisettings));
}
/*
* Show the display setting including screen brightness setting, sleep mode
*/
public void GoToDisplayScreen() {
mMainActivity.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() {
mMainActivity.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() {
mMainActivity.safeStart(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS, getString(R.string.locationsettings));
}
/* Show the synchronization setting */
public void GoToSyncScreen() {
mMainActivity.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() {
mMainActivity.safeStart(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS, getString(R.string.mobilenetworksettings));
}
/**
* 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() {
refresh();
super.onResume();
}
public void refresh() {
CaratApplication caratAppllication = (CaratApplication) CaratApplication.getMainActivity().getApplication();
final ListView lv = (ListView) rootView.findViewById(android.R.id.list);
lv.setAdapter(new SettingsSuggestionAdapter(caratAppllication, CaratApplication.storage.getSettingsReport()));
}
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO: disabled until fixing serialization (appropriate serialVersionUID)
// outState.putSerializable("savedInstance", this);
super.onSaveInstanceState(outState);
}
}