package in.ceeq.settings;
import in.ceeq.R;
import in.ceeq.commons.Utils;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnKeyListener;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import android.provider.ContactsContract;
import android.view.KeyEvent;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.plus.Plus;
class PreferencesFragment extends PreferenceFragment implements ConnectionCallbacks, OnConnectionFailedListener,
OnPreferenceClickListener, OnPreferenceChangeListener {
private static final int CONNECTION_FAILURE_REQUEST = 9020;
private static final String CHANGE_CONTACT = "change_contact";
private static final String ADD_EXTRA_CONTACT = "add_extra_contact";
private static final String FACEBOOK_CONNECTED_PREF = "facebook_connected";
private static final String GOOGLE_CONNECTED_PREF = "google_connected";
private static final String UNINSTALL_PROTECTION_PREF = "uninstall_protection";
private static final String NOTIFICATION_PREF = "notifications";
private Preference changePrimaryContact, facebookConnect, googleConnect, notifications;
private GoogleApiClient googleApiClient;
private Context context;
// public Session.StatusCallback statusCallback = new FBSessionStatus();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getActivity();
addPreferencesFromResource(R.xml.app_preferences);
setupGoogle();
// setupFacebook(savedInstanceState);
changePrimaryContact = (Preference) findPreference(CHANGE_CONTACT);
changePrimaryContact.setOnPreferenceClickListener(this);
facebookConnect = (Preference) findPreference(FACEBOOK_CONNECTED_PREF);
facebookConnect.setOnPreferenceChangeListener(this);
googleConnect = (Preference) findPreference(GOOGLE_CONNECTED_PREF);
googleConnect.setOnPreferenceChangeListener(this);
googleConnect = (Preference) findPreference(UNINSTALL_PROTECTION_PREF);
googleConnect.setOnPreferenceChangeListener(this);
notifications = (Preference) findPreference(NOTIFICATION_PREF);
notifications.setOnPreferenceChangeListener(this);
}
public void setupGoogle() {
googleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).addApi(Plus.API).addScope(Plus.SCOPE_PLUS_PROFILE).build();
}
// public void setupFacebook(Bundle savedInstanceState) {
// com.facebook.Settings
// .addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
//
// Session session = Session.getActiveSession();
// if (session == null) {
// if (savedInstanceState != null) {
// session = Session.restoreSession(getActivity(), null,
// statusCallback, savedInstanceState);
// }
// if (session == null) {
// session = new Session(getActivity());
// }
// Session.setActiveSession(session);
// if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
// session.openForRead(new Session.OpenRequest(getActivity())
// .setCallback(statusCallback));
// }
// }
// }
@Override
public void onConnected(Bundle connectionHint) {
/**
* we have nothing to do on google+ connected
*/
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if (result.hasResolution()) {
try {
result.startResolutionForResult(getActivity(), CONNECTION_FAILURE_REQUEST);
} catch (SendIntentException e) {
googleApiClient.connect();
}
}
}
@Override
public void onStart() {
super.onStart();
// Session.getActiveSession().addCallback(statusCallback);
googleApiClient.connect();
}
@Override
public void onStop() {
super.onStop();
// Session.getActiveSession().removeCallback(statusCallback);
googleApiClient.disconnect();
}
// public class FBSessionStatus implements Session.StatusCallback {
//
// @Override
// public void call(Session session, SessionState state,
// Exception exception) {
//
// }
// }
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Session.getActiveSession().onActivityResult(getActivity(), requestCode,
// resultCode, data);
switch (requestCode) {
case Utils.CONTACT_REQUEST:
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = context.getContentResolver().query(contactData, null, null, null, null);
if (c.moveToFirst()) {
Utils.setStringPrefs(context, Utils.EMERGENCY_CONTACT_NAME,
c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
Utils.setStringPrefs(context, Utils.EMERGENCY_CONTACT_NUMBER,
c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
Toast.makeText(context, "Great, New Contact chosen.", Toast.LENGTH_SHORT).show();
}
} else
Toast.makeText(context, "Sorry, You cancelled !", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onConnectionSuspended(int arg0) {
}
@Override
public boolean onPreferenceClick(Preference preference) {
String key = preference.getKey();
if (key.equals(CHANGE_CONTACT)) {
Utils.chooseContact((Activity) context);
} else if (key.equals(ADD_EXTRA_CONTACT)) {
Utils.chooseContact((Activity) context);
}
return true;
}
@SuppressLint("InflateParams")
@Override
public boolean onPreferenceChange(Preference preference, Object obj) {
String key = preference.getKey();
if (key.equals(NOTIFICATION_PREF)) {
if ((Boolean) obj) {
Utils.notification(Utils.NOTIFICATION_NOTIFY, context, Utils.DEFAULT_NOTIFICATION_ID);
} else {
Utils.notification(Utils.NOTIFICATION_NOTIFY, context, Utils.DEFAULT_NOTIFICATION_ID);
Toast.makeText(context, R.string.toast_string_13, Toast.LENGTH_SHORT).show();
}
}
if (key.equals(GOOGLE_CONNECTED_PREF)) {
new AlertDialog.Builder(context).setTitle("Warning").setMessage(getString(R.string.help_note_38))
.setPositiveButton(R.string.continue_, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if (googleApiClient.isConnected()) {
ResetTask.run(context, googleApiClient);
}
}
}).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
dialog.cancel();
}
return false;
}
}).create().show();
}
if (key.equals(FACEBOOK_CONNECTED_PREF)) {
if (Boolean.parseBoolean(obj.toString())) {
// connectFacebook();
} else {
new AlertDialog.Builder(context).setTitle("Warning").setMessage(getString(R.string.help_note_39))
.setPositiveButton(R.string.continue_, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// disConnectFacebook();
}
}).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
dialog.cancel();
}
return false;
}
}).create().show();
}
}
if (key.equals(UNINSTALL_PROTECTION_PREF)) {
if ((Boolean) obj) {
new AlertDialog.Builder(context)
.setTitle("")
.setView(
((Activity) context).getLayoutInflater().inflate(R.layout.dialog_uninstall_protect,
null)).setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Utils.setBooleanPrefs(context, Utils.APP_UNINSTALL_PROTECTION, true);
}
}).create().show();
} else {
Toast.makeText(context, R.string.toast_string_10, Toast.LENGTH_SHORT).show();
Utils.setBooleanPrefs(context, Utils.APP_UNINSTALL_PROTECTION, false);
}
}
return true;
}
// public void connectFacebook() {
// Session session = Session.getActiveSession();
// if (!session.isOpened() && !session.isClosed()) {
// session.openForRead(new Session.OpenRequest((Activity) context)
// .setCallback(statusCallback));
// } else {
// Session.openActiveSession((Activity) context, true,
// statusCallback);
// }
// }
// public void disConnectFacebook() {
// preferencesHelper.setBoolean(
// PreferencesHelper.FACEBOOK_CONNECT_STATUS, false);
// Session session = Session.getActiveSession();
// / if (!session.isClosed()) {
// session.closeAndClearTokenInformation();
// }
// }
}