package com.mobmonkey.mobmonkeyandroid.fragments;
import org.json.JSONException;
import org.json.JSONObject;
import com.facebook.Session;
import com.mobmonkey.mobmonkeyandroid.R;
import com.mobmonkey.mobmonkeyandroid.SubscribeScreen;
import com.mobmonkey.mobmonkeyandroid.TermsofuseScreen;
import com.mobmonkey.mobmonkeyandroid.listeners.*;
import com.mobmonkey.mobmonkeyandroid.utils.MMCategories;
import com.mobmonkey.mobmonkeyandroid.utils.MMConstants;
import com.mobmonkey.mobmonkeyandroid.utils.MMFragment;
import com.mobmonkey.mobmonkeysdk.adapters.MMUserAdapter;
import com.mobmonkey.mobmonkeysdk.utils.MMProgressDialog;
import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants;
import com.mobmonkey.mobmonkeysdk.utils.MMCallback;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
/**
* @author Dezapp, LLC
*
*/
public class SettingsFragment extends MMFragment implements OnClickListener,
OnItemClickListener {
private final static String TAG = "SettingsFragment: ";
private SharedPreferences userPrefs;
private SharedPreferences.Editor userPrefsEditor;
private MMOnMyInfoFragmentItemClickListener myInfoFragmentItemClickListener;
private MMOnSocialNetworksFragmentItemClickListener socialNetworksFragmentItemClickListener;
private MMOnMyInterestsFragmentItemClickListener myInterestsFragmentItemClickListener;
private ListView lvSettings;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
userPrefs = getActivity().getSharedPreferences(MMSDKConstants.USER_PREFS, Context.MODE_PRIVATE);
userPrefsEditor = userPrefs.edit();
View view = inflater.inflate(R.layout.fragment_settings_screen, container, false);
lvSettings = (ListView) view.findViewById(R.id.lvsettings);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), R.layout.listview_row_settings, R.id.tvsettingscategory, getResources().getStringArray(R.array.settings_category));
lvSettings.setAdapter(arrayAdapter);
lvSettings.setOnItemClickListener(this);
Button btnSignOut = (Button) view.findViewById(R.id.btnsignout);
btnSignOut.setOnClickListener(this);
return view;
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.btnsignout:
MMUserAdapter.signOut(new SignOutCallback());
MMProgressDialog.displayDialog(getActivity(),
MMSDKConstants.DEFAULT_STRING_EMPTY,
getString(R.string.pd_signing_out));
break;
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if(activity instanceof MMOnMyInfoFragmentItemClickListener) {
myInfoFragmentItemClickListener = (MMOnMyInfoFragmentItemClickListener) activity;
if(activity instanceof MMOnSocialNetworksFragmentItemClickListener) {
socialNetworksFragmentItemClickListener = (MMOnSocialNetworksFragmentItemClickListener) activity;
if(activity instanceof MMOnMyInterestsFragmentItemClickListener) {
myInterestsFragmentItemClickListener = (MMOnMyInterestsFragmentItemClickListener) activity;
}
}
}
}
/* (non-Javadoc)
* @see android.support.v4.app.Fragment#onActivityResult(int, int, android.content.Intent)
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 0) {
Log.d(TAG, TAG + "resultCode: " + resultCode);
}
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
switch(position) {
case 0:
myInfoFragmentItemClickListener.onMyInfoFragmentItemClick();
break;
case 1:
socialNetworksFragmentItemClickListener.onSocialNetworksItemClick();
break;
case 2:
myInterestsFragmentItemClickListener.onMyInterestsFragmentItemClick(MMCategories.getTopLevelCategories(getActivity()), true);
break;
case 3:
startActivity(new Intent(getActivity(), SubscribeScreen.class));
break;
case 4:
startActivity(new Intent(getActivity(), TermsofuseScreen.class));
break;
}
}
@Override
public void onFragmentBackPressed() {
}
/**
* Custom {@link MMCallback} specifically for {@link SettingsScreen} to be processed after receiving response from MobMonkey server.
* @author Dezapp, LLC
*
*/
private class SignOutCallback implements MMCallback {
public void processCallback(Object obj) {
MMProgressDialog.dismissDialog();
if(obj != null) {
if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) {
Toast.makeText(getActivity(), getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show();
} else {
try {
JSONObject response = new JSONObject((String) obj);
if(response.getString(MMSDKConstants.JSON_KEY_STATUS).equals(MMSDKConstants.RESPONSE_STATUS_SUCCESS)) {
Session session = Session.getActiveSession();
if(session != null) {
Log.d(TAG, TAG + "session not null");
session.closeAndClearTokenInformation();
}
Toast.makeText(getActivity(), R.string.toast_sign_out_successful, Toast.LENGTH_SHORT).show();
userPrefsEditor.remove(MMSDKConstants.KEY_USER);
userPrefsEditor.remove(MMSDKConstants.KEY_AUTH);
userPrefsEditor.remove(MMSDKConstants.KEY_OAUTH_PROVIDER);
userPrefsEditor.remove(MMSDKConstants.KEY_OAUTH_PROVIDER_USER_NAME);
userPrefsEditor.remove(MMSDKConstants.TAB_TITLE_CURRENT_TAG);
userPrefsEditor.commit();
}
getActivity().finish();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
Log.d(TAG, TAG + "callback response: " + (String) obj);
}
}
}