package io.evercam.connect; import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.provider.Settings; import java.util.ArrayList; import io.evercam.connect.helper.Constants; import io.evercam.connect.helper.SharedPrefsManager; import io.evercam.connect.net.NetInfo; import io.evercam.connect.signin.LoginActivity; import io.evercam.network.discovery.NetworkInfo; public class SettingsActivity extends Activity { public static final String TAG = "evercamDiscover-SettingsActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initFragment(); final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setDisplayHomeAsUpEnabled(true); EvercamDiscover.sendScreenAnalytics(this, getString(R.string.screen_settings)); } @Override protected void onResume() { super.onResume(); initFragment(); } @Override public Intent getParentActivityIntent() { this.finish(); return super.getParentActivityIntent(); } private void initFragment() { getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement ()).commit(); } public static class PrefsFragement extends PreferenceFragment { NetInfo netInfo; ListPreference interfaceList; Preference netInfoPrefs; Preference accountPrefs; SharedPreferences sharedPrefs; private boolean isSigned = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference_xml); netInfo = new NetInfo(getActivity().getApplicationContext()); sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); setUpAccount(); setUpNetworkInterfacePrefs(); setNetInfoPrefs(); setVersionPrefs(); interfaceList.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference prefs, Object newValue) { interfaceList.setSummary(newValue.toString()); return true; } }); accountPrefs.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { if(isSigned) { AlertDialog.Builder logoutDialog = new AlertDialog.Builder(getActivity()); logoutDialog.setMessage(R.string.signOutAlert); logoutDialog.setNegativeButton(R.string.no, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { return; } }); logoutDialog.setPositiveButton(R.string.yes, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { EvercamDiscover.sendEventAnalytics(getActivity(), R.string .category_preference, R.string.action_prefs_login_out, R .string.label_prefs_logout); SharedPrefsManager.clearAllUserInfo(sharedPrefs); isSigned = false; accountPrefs.setTitle("Not Signed In"); accountPrefs.setSummary("Click to sign in with Evercam"); return; } }); logoutDialog.show(); } else { EvercamDiscover.sendEventAnalytics(getActivity(), R.string .category_preference, R.string.action_prefs_login_out, R.string .label_prefs_login); Intent intentSignIn = new Intent(getActivity(), LoginActivity.class); startActivity(intentSignIn); } return false; } }); netInfoPrefs.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { EvercamDiscover.sendEventAnalytics(getActivity(), R.string .category_preference, R.string.action_prefs_network, R.string .label_prefs_network); if(netInfo.hasActiveNetwork()) { Intent intent = new Intent(); intent.setClass(getActivity(), RouterActivity.class); startActivity(intent); } else { showWifiNotConnectDialog(); } return true; } }); } private void setUpAccount() { accountPrefs = getPreferenceManager().findPreference(Constants.KEY_ACCOUNT); if(SharedPrefsManager.isSignedWithGoogle(sharedPrefs)) { String[] googleInfos = SharedPrefsManager.getGoogle(sharedPrefs); String userEmail = googleInfos[0]; String userFirstName = googleInfos[1]; isSigned = true; accountPrefs.setTitle(userFirstName + " - " + userEmail); accountPrefs.setSummary("Signed with Google"); } else if(SharedPrefsManager.isSignedWithEvercam(sharedPrefs)) { isSigned = true; String username = SharedPrefsManager.getEvercamUsername(sharedPrefs); accountPrefs.setTitle(username); accountPrefs.setSummary("Signed with Evercam"); } } private void setUpNetworkInterfacePrefs() { ArrayList<String> interfaceNameArrayList = NetworkInfo.getNetworkInterfaceNames(); CharSequence[] charInterfaceNames = interfaceNameArrayList.toArray(new CharSequence[interfaceNameArrayList.size()]); interfaceList = (ListPreference) getPreferenceManager().findPreference(Constants .KEY_NETWORK_INTERFACE); interfaceList.setEntries(charInterfaceNames); interfaceList.setEntryValues(charInterfaceNames); if(charInterfaceNames.length != 0) { interfaceList.setValue(netInfo.getInterfaceName()); interfaceList.setSummary(interfaceList.getEntry()); interfaceList.setEnabled(true); } else { interfaceList.setEnabled(false); interfaceList.setSummary(R.string.noNetworkInterface); } } private void setNetInfoPrefs() { netInfoPrefs = getPreferenceManager().findPreference(Constants.KEY_NETWORK_INFO); } private void setVersionPrefs() { Preference netInfoPrefs = getPreferenceManager().findPreference(Constants.KEY_VERSION); netInfoPrefs.setSummary(getVersion()); } private void showWifiNotConnectDialog() { AlertDialog.Builder connectDialogBuilder = new AlertDialog.Builder(getActivity()); connectDialogBuilder.setMessage(R.string.dialogMsgMustConnect); connectDialogBuilder.setPositiveButton(R.string.wifiSettings, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); } }); connectDialogBuilder.setNegativeButton(R.string.notNow, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { return; } }); connectDialogBuilder.setTitle(R.string.notConnected); connectDialogBuilder.setCancelable(false); connectDialogBuilder.show(); } private String getVersion() { try { PackageManager manager = getActivity().getPackageManager(); PackageInfo info = manager.getPackageInfo(getActivity().getPackageName(), 0); String version = info.versionName; return version; } catch(Exception e) { e.printStackTrace(); return getResources().getString(R.string.notAvaliable); } } } }