package com.mobmonkey.mobmonkeyandroid.fragments; import java.util.ArrayList; import java.util.Locale; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.mobmonkey.mobmonkeyandroid.R; import com.mobmonkey.mobmonkeyandroid.arrayadapters.MMMyInterestsArrayAdapter; import com.mobmonkey.mobmonkeyandroid.arrayadaptersitems.MMMyInterestsItem; import com.mobmonkey.mobmonkeyandroid.listeners.*; import com.mobmonkey.mobmonkeyandroid.utils.MMCategories; import com.mobmonkey.mobmonkeyandroid.utils.MMConstants; import com.mobmonkey.mobmonkeyandroid.utils.MMExpandedListView; import com.mobmonkey.mobmonkeyandroid.utils.MMFragment; import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView; /** * @author Dezapp, LLC * */ public class MyInterestsFragment extends MMFragment implements OnItemClickListener { private static final String TAG = "MyInterestsFragment: "; private SharedPreferences userPrefs; private SharedPreferences.Editor userPrefsEditor; private JSONArray interests; private JSONArray selectedInterests; private MMExpandedListView elvInterests; private MMMyInterestsItem[] mmMyInterestsItems; private MMMyInterestsArrayAdapter mmMyInterestsArrayAdapter; private MMOnMyInterestsFragmentItemClickListener myInterestsFragmentItemClickListener; @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_myinterests_screen, container, false); elvInterests = (MMExpandedListView) view.findViewById(R.id.elvinterests); try { interests = new JSONArray(getArguments().getString(MMSDKConstants.KEY_INTENT_EXTRA_INTERESTS)); if(!userPrefs.getString(MMSDKConstants.SHARED_PREFS_KEY_MY_INTERESTS, MMSDKConstants.DEFAULT_STRING_EMPTY).equals(MMSDKConstants.DEFAULT_STRING_EMPTY)) { selectedInterests = new JSONArray(userPrefs.getString(MMSDKConstants.SHARED_PREFS_KEY_MY_INTERESTS, MMSDKConstants.DEFAULT_STRING_EMPTY)); } else { selectedInterests = new JSONArray(); } setInterestsList(); } catch(Exception e) { e.printStackTrace(); } return view; } @Override public void onAttach(Activity activity) { super.onAttach(activity); if(activity instanceof MMOnMyInterestsFragmentItemClickListener) { myInterestsFragmentItemClickListener = (MMOnMyInterestsFragmentItemClickListener) activity; if(activity instanceof MMOnFragmentFinishListener) { fragmentFinishListener = (MMOnFragmentFinishListener) activity; } } } /* (non-Javadoc) * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long) */ @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { String category = ((TextView) view.findViewById(R.id.tvlabel)).getText().toString(); JSONArray subCategories = MMCategories.getSubCategoriesWithCategoryName(getActivity(), category, interests); if(subCategories.length() > 1) { myInterestsFragmentItemClickListener.onMyInterestsFragmentItemClick(subCategories, false); } else { try { updateInterests(mmMyInterestsArrayAdapter.getItem(position).getInterestJObj(), position); mmMyInterestsArrayAdapter.notifyDataSetChanged(); } catch (JSONException e) { e.printStackTrace(); } } } @Override public void onFragmentBackPressed() { saveMyInterests(); fragmentFinishListener.onFragmentFinish(); } /** * * @throws JSONException */ private void setInterestsList() throws JSONException { boolean topLevel = getArguments().getBoolean(MMSDKConstants.KEY_INTENT_EXTRA_TOP_LEVEL, true); mmMyInterestsItems = new MMMyInterestsItem[interests.length()]; for(int i = 0; i < interests.length(); i++) { JSONObject interest = interests.getJSONObject(i); String interestName = interest.getString(Locale.getDefault().getLanguage()); mmMyInterestsItems[i] = new MMMyInterestsItem(); mmMyInterestsItems[i].setInterestJObj(interest); mmMyInterestsItems[i].setInterestName(interestName); if(topLevel) { mmMyInterestsItems[i].setInterestIconId(MMConstants.topLevelCatIcons[i]); } else { mmMyInterestsItems[i].setInterestIconId(MMSDKConstants.DEFAULT_INT_ZERO); } JSONArray subCategories = MMCategories.getSubCategoriesWithCategoryName(getActivity(), interestName, interests); if(subCategories.length() > 1) { mmMyInterestsItems[i].setInterestIndicatorIconId(R.drawable.listview_accessory_indicator); } else { mmMyInterestsItems[i].setInterestIndicatorIconId(android.R.drawable.checkbox_off_background); for(int j = 0; j < selectedInterests.length(); j++) { if(interestName.equals(selectedInterests.getJSONObject(j).getString(Locale.getDefault().getLanguage()))) { mmMyInterestsItems[i].setInterestIndicatorIconId(android.R.drawable.checkbox_on_background); break; } } } } mmMyInterestsArrayAdapter = new MMMyInterestsArrayAdapter(getActivity(), R.layout.listview_row_searchcategory, mmMyInterestsItems); elvInterests.setAdapter(mmMyInterestsArrayAdapter); elvInterests.setOnItemClickListener(MyInterestsFragment.this); } /** * * @param interest * @param position * @throws JSONException */ private void updateInterests(JSONObject interest, int position) throws JSONException { for(int j = 0; j < selectedInterests.length(); j++) { if(interest.getString(Locale.getDefault().getLanguage()).equals(selectedInterests.getJSONObject(j).getString(Locale.getDefault().getLanguage()))) { removeFromSelectedInterests(interest); mmMyInterestsItems[position].setInterestIndicatorIconId(android.R.drawable.checkbox_off_background); return; } } addToSelectedInterests(interest); mmMyInterestsItems[position].setInterestIndicatorIconId(android.R.drawable.checkbox_on_background); } /** * * @param interestToAdd * @throws JSONException */ private void addToSelectedInterests(JSONObject interestToAdd) throws JSONException { ArrayList<JSONObject> interests = new ArrayList<JSONObject>(); for(int i = 0; i < selectedInterests.length(); i++) { interests.add(selectedInterests.getJSONObject(i)); } interests.add(interestToAdd); selectedInterests = new JSONArray(interests); } /** * * @param interestToRemove * @throws JSONException */ private void removeFromSelectedInterests(JSONObject interestToRemove) throws JSONException { ArrayList<JSONObject> interests = new ArrayList<JSONObject>(); for(int i = 0; i < selectedInterests.length(); i++) { if(!selectedInterests.getJSONObject(i).getString(Locale.getDefault().getLanguage()).equals(interestToRemove.getString(Locale.getDefault().getLanguage()))) { interests.add(selectedInterests.getJSONObject(i)); } } selectedInterests = new JSONArray(interests); } /** * */ private void saveMyInterests() { userPrefsEditor.putString(MMSDKConstants.SHARED_PREFS_KEY_MY_INTERESTS, selectedInterests.toString()); userPrefsEditor.commit(); } }