package com.mobmonkey.mobmonkeyandroid; import java.util.Stack; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; import com.mobmonkey.mobmonkeyandroid.fragments.*; import com.mobmonkey.mobmonkeyandroid.listeners.*; import com.mobmonkey.mobmonkeyandroid.utils.MMFragment; import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants; /** * @author Dezapp, LLC * */ public class SearchLocationsActivity extends FragmentActivity implements MMOnCreateHotSpotFragmentClickListener, MMOnNearbyLocationsItemClickListener, MMOnHistoryFragmentItemClickListener, MMOnCategoryFragmentItemClickListener, MMOnMasterLocationNearbyLocationsFragmentItemClickListener, MMOnCategoryResultsFragmentItemClickListener, MMOnExistingHotSpotsFragmentItemClickListener, MMOnExistingHotSpotsFragmentCreateHotSpotClickListener, MMOnSearchResultsFragmentItemClickListener, MMOnAddressFragmentItemClickListener, MMOnAddNotificationsFragmentItemClickListener, MMOnFragmentMultipleBackListener, MMOnDeleteHotSpotFragmentFinishListener { private static final String TAG = "SearchLocationsActivity: "; private FragmentManager fragmentManager; private Stack<MMFragment> fragmentStack; /* * (non-Javadoc) * @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment_container); fragmentManager = getSupportFragmentManager(); fragmentStack = new Stack<MMFragment>(); if(findViewById(R.id.llfragmentcontainer) != null) { if(savedInstanceState != null) { return; } SearchLocationsFragment searchLocationsFragment = new SearchLocationsFragment(); fragmentManager.beginTransaction().add(R.id.llfragmentcontainer, fragmentStack.push(searchLocationsFragment)).commit(); } } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnCreateHotSpotFragmentClickListener#onCreateHotSpotClick(org.json.JSONArray) */ @Override public void onCreateHotSpotClick(JSONArray jArr) { MasterLocationFragment masterLocationFragment = new MasterLocationFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_NEARBY_LOCATIONS, jArr.toString()); masterLocationFragment.setArguments(data); performTransaction(masterLocationFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnNearbyLocationsItemClickListener#onNearbyLocationsItemClick(org.json.JSONObject) */ @Override public void onNearbyLocationsItemClick(String location) { LocationDetailsFragment locationDetailsFragment = new LocationDetailsFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_LOCATION_DETAILS, location); locationDetailsFragment.setArguments(data); performTransaction(locationDetailsFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnHistoryFragmentItemClickListener#onHistoryItemClick() */ @Override public void onHistoryItemClick() { performTransaction(new HistoryFragment()); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnCategoryFragmentItemClickListener#onCategoryFragmentItemClick(java.lang.String, org.json.JSONArray, boolean) */ @Override public void onCategoryFragmentItemClick(String selectedCategory, JSONArray subCategories, boolean isTopLevel) { CategoriesFragment categoriesFragment = new CategoriesFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_CATEGORY_TITLE, selectedCategory); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_CATEGORIES, subCategories.toString()); data.putBoolean(MMSDKConstants.KEY_INTENT_EXTRA_TOP_LEVEL, isTopLevel); categoriesFragment.setArguments(data); performTransaction(categoriesFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnMasterLocationNearbyLocationsFragmentItemClickListener#onMasterLocationNearbyLocationsItemClick(org.json.JSONObject) */ @Override public void onMasterLocationNearbyLocationsItemClick(JSONObject jObj, int requestCode) { MMFragment mmFragment = null; Bundle data = new Bundle(); if(jObj.isNull(MMSDKConstants.JSON_KEY_SUB_LOCATIONS)) { mmFragment = new NewHotSpotFragment(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_HOT_SPOT_LOCATION, jObj.toString()); data.putInt(MMSDKConstants.REQUEST_CODE, requestCode); } else { mmFragment = new ExistingHotSpotsFragment(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_EXISTING_HOT_SPOTS, jObj.toString()); } mmFragment.setArguments(data); performTransaction(mmFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnCategoryResultsFragmentItemClickListener#onCategoriesResultsFragmentItemClick(java.lang.String, java.lang.String) */ @Override public void onCategoriesResultsFragmentItemClick(String searchCategory, String results) { SearchResultsFragment searchResultsFragment = new SearchResultsFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_SEARCH_RESULT_TITLE, searchCategory); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_SEARCH_RESULTS, results); searchResultsFragment.setArguments(data); performTransaction(searchResultsFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnExistingHotSpotsFragmentItemClickListener#onExistingHotSpotsItemClick(org.json.JSONObject) */ @Override public void onExistingHotSpotsItemClick(JSONObject jObj) { LocationDetailsFragment locationDetailsFragment = new LocationDetailsFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_LOCATION_DETAILS, jObj.toString()); locationDetailsFragment.setArguments(data); performTransaction(locationDetailsFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnExistingHotSpotsFragmentCreateHotSpotClickListener#onExistingHotSpotsCreateHotSpotClick(org.json.JSONObject) */ @Override public void onExistingHotSpotsCreateHotSpotClick(JSONObject jObj, int requestCode) { NewHotSpotFragment newHotSpotFragment = new NewHotSpotFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_HOT_SPOT_LOCATION, jObj.toString()); data.putInt(MMSDKConstants.KEY_INTENT_EXTRA_REQUEST_CODE, requestCode); newHotSpotFragment.setArguments(data); performTransaction(newHotSpotFragment); } /* * (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnSearchResultsFragmentItemClickListener#onSearchResultsFragmentItemClick(org.json.JSONObject) */ @Override public void onSearchResultsFragmentItemClick(String locationInfo) { LocationDetailsFragment locationDetailsFragment = new LocationDetailsFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_LOCATION_DETAILS, locationInfo); locationDetailsFragment.setArguments(data); performTransaction(locationDetailsFragment); } /* * (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnLocationDetailsFragmentItemClickListener#onLocationDetailsFragmentItemClick(int, java.lang.Object) */ @Override public void onAddressFragmentItemClick(JSONObject jObj) { LocationDetailsMapFragment locationsDetailsMapFragment = new LocationDetailsMapFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_LOCATION_DETAILS, jObj.toString()); locationsDetailsMapFragment.setArguments(data); performTransaction(locationsDetailsMapFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnCreateHotSpotFragmentClickListener#onCreateHotSpotClick(org.json.JSONObject) */ @Override public void onCreateHotSpotClick(JSONObject jObj, int requestCode) { NewHotSpotFragment newHotSpotFragment = new NewHotSpotFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_HOT_SPOT_LOCATION, jObj.toString()); data.putInt(MMSDKConstants.KEY_INTENT_EXTRA_REQUEST_CODE, requestCode); newHotSpotFragment.setArguments(data); performTransaction(newHotSpotFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnAddNotificationsFragmentItemClickListener#onAddNotificationsFragmentItemClick(org.json.JSONObject) */ @Override public void onAddNotificationsFragmentItemClick(JSONObject jObj) { AddNotificationsFragment addNotificationsFragment = new AddNotificationsFragment(); Bundle data = new Bundle(); data.putString(MMSDKConstants.KEY_INTENT_EXTRA_LOCATION_DETAILS, jObj.toString()); addNotificationsFragment.setArguments(data); performTransaction(addNotificationsFragment); } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnDeleteHotSpotFinishFragmentListener#onFinishDeleteHotSpot(java.lang.String, java.lang.String) */ @Override public void onDeleteHotSpotFinish(String locationId, String providerId) { if(fragmentStack.size() > 1) { MMFragment mmFragment = fragmentStack.pop(); mmFragment.onFragmentBackPressed(); mmFragment = fragmentStack.peek(); Bundle data = new Bundle(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_right_out); fragmentTransaction.replace(R.id.llfragmentcontainer, fragmentStack.peek()); fragmentTransaction.commit(); } } /* (non-Javadoc) * @see com.mobmonkey.mobmonkeyandroid.listeners.MMOnFragmentMultipleBackListener#onFragmentMultipleBack() */ @Override public void onFragmentMultipleBack() { FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); while(fragmentStack.size() > 1) { Log.d(TAG, TAG + "fragment: " + fragmentStack.peek()); fragmentTransaction.remove(fragmentStack.pop()); if(fragmentStack.peek() instanceof SearchLocationsFragment) { fragmentTransaction.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_right_out); fragmentTransaction.replace(R.id.llfragmentcontainer, fragmentStack.peek()); fragmentTransaction.commit(); } } } /** * Handler when back button is pressed, it will not close and destroy the current {@link Activity} but instead it will remain on the current {@link Activity} */ /* (non-Javadoc) * @see android.app.Activity#onBackPressed() */ @Override public void onBackPressed() { if(fragmentStack.size() > 1) { MMFragment mmFragment = fragmentStack.pop(); mmFragment.onFragmentBackPressed(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_right_out); fragmentTransaction.replace(R.id.llfragmentcontainer, fragmentStack.peek()); fragmentTransaction.commit(); } else { fragmentStack.peek().onFragmentBackPressed(); } moveTaskToBack(true); return; } /** * * @param mmFragment */ private void performTransaction(MMFragment mmFragment) { FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.slide_right_in, R.anim.slide_left_out); fragmentTransaction.replace(R.id.llfragmentcontainer, fragmentStack.push(mmFragment)); fragmentTransaction.commitAllowingStateLoss(); } }