From 3a717d255e1388a1e3dcf4ed5cbf3ca0dd6aa076 Mon Sep 17 00:00:00 2001 From: Anushree Ganjam Date: Tue, 7 Nov 2017 17:34:47 -0800 Subject: [PATCH] BugFix : Event is not bookmarked/unbookmarked when event is bookmarked/unbookmarked in detail Activity and we return to List of events --- .../features/detail/DetailActivity.java | 14 ++++++++++++ .../funmapsf/features/home/HomeActivity.java | 11 ++++++++++ .../funmapsf/features/home/HomeFragment.java | 19 ++++++++++++++++ .../features/home/HomePagerAdapter.java | 22 +++++++++++++++++++ .../features/list/ListBaseFragment.java | 11 ++++++++++ .../features/list/adapters/EventAdapter.java | 16 ++++++++++++++ .../list/adapters/EventDelegateAdapter.java | 6 +++-- 7 files changed, 97 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/funcheap/funmapsf/features/detail/DetailActivity.java b/app/src/main/java/com/funcheap/funmapsf/features/detail/DetailActivity.java index 5efa7e2..e9fe732 100644 --- a/app/src/main/java/com/funcheap/funmapsf/features/detail/DetailActivity.java +++ b/app/src/main/java/com/funcheap/funmapsf/features/detail/DetailActivity.java @@ -49,7 +49,10 @@ public class DetailActivity extends AppCompatActivity { public static final String EVENT_EXTRA_ID = "event_extra_id"; private static final String EVENT_EXTRA = "event_extra"; + private static final String EVENT_POSITION = "event_position"; + private static final String EVENT_BOOKMARK = "event_bookmark"; private final String TAG = this.getClass().getSimpleName(); + private int position; private static final String EVENT_TYPE = "vnd.android.cursor.item/event"; private static final String EVENT_BEGIN_TIME = "beginTime"; @@ -110,6 +113,7 @@ private void initEvent() { if (intent.hasExtra(EVENT_EXTRA)) { // Get event directly Events event = getIntent().getExtras().getParcelable(EVENT_EXTRA); + position = getIntent().getExtras().getInt(EVENT_POSITION); mDetailViewModel.setEventData(event); mDetailViewModel.getEventData().observe(this, this::bindEvent); } else if (intent.hasExtra(EVENT_EXTRA_ID)) { @@ -190,6 +194,16 @@ private void initCategories() { } } + + @Override + public void onBackPressed() { + Intent intent = new Intent(); + intent.putExtra(EVENT_POSITION,position); + intent.putExtra(EVENT_BOOKMARK, mEvent.isBookmarked()); + setResult(RESULT_OK,intent); + super.onBackPressed(); + } + private void initBookmark() { // Setup bookmark final Drawable bookmark = this.getDrawable(R.drawable.ic_bookmark); diff --git a/app/src/main/java/com/funcheap/funmapsf/features/home/HomeActivity.java b/app/src/main/java/com/funcheap/funmapsf/features/home/HomeActivity.java index 17025a1..508cf44 100644 --- a/app/src/main/java/com/funcheap/funmapsf/features/home/HomeActivity.java +++ b/app/src/main/java/com/funcheap/funmapsf/features/home/HomeActivity.java @@ -41,6 +41,7 @@ public class HomeActivity extends AppCompatActivity implements private final String TAG_MAP_FRAGMENT = "map_fragment"; private final String TAG_FILTERS_FRAGMENT = "filters_fragment"; private final String TAG_BOOKMARKS_FRAGMENT = "bookmarks_fragment"; + private static final int REQUEST_CODE = 1; @BindView(R.id.bottom_navigation) public BottomNavigation mBottomNav; @@ -83,6 +84,16 @@ private void checkNotification() { } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if(requestCode == REQUEST_CODE){ + if(resultCode == RESULT_OK){ + mHomeFragment.onActivityResult(REQUEST_CODE,RESULT_OK,data); + } + } + } + /** * Load Home fragment initially */ diff --git a/app/src/main/java/com/funcheap/funmapsf/features/home/HomeFragment.java b/app/src/main/java/com/funcheap/funmapsf/features/home/HomeFragment.java index cca17fa..7223489 100644 --- a/app/src/main/java/com/funcheap/funmapsf/features/home/HomeFragment.java +++ b/app/src/main/java/com/funcheap/funmapsf/features/home/HomeFragment.java @@ -1,6 +1,8 @@ package com.funcheap.funmapsf.features.home; +import android.app.Activity; import android.arch.lifecycle.ViewModelProviders; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.constraint.ConstraintLayout; @@ -26,6 +28,7 @@ import com.funcheap.funmapsf.commons.models.Filter; import com.funcheap.funmapsf.commons.utils.ChipUtils; import com.funcheap.funmapsf.features.filter.SaveFilterDialogFragment; +import com.funcheap.funmapsf.features.list.home.ListHomeFragment; import com.funcheap.funmapsf.features.map.MapsViewModel; import com.vpaliy.chips_lover.ChipView; import com.vpaliy.chips_lover.ChipsLayout; @@ -57,6 +60,9 @@ public class HomeFragment extends Fragment implements OnBackClickCallback { "Eating & Drinking","Fairs & Festivals","Free Stuff","Fun & Games","Live Music","Movies","Shopping & Fashion" }; + private static final int REQUEST_CODE = 1; + private static final String EVENT_POSITION = "event_position"; + private static final String EVENT_BOOKMARK = "event_bookmark"; private MapsViewModel mMapsViewModel; // Home Fragment @@ -270,4 +276,17 @@ private void initFilterListener() { } }); } + + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if(requestCode == REQUEST_CODE){ + if(resultCode == Activity.RESULT_OK){ + if(mHomePager.getCurrentItem()==1) { + ((ListHomeFragment) ((HomePagerAdapter) mHomePager.getAdapter()).getRegisteredFragment(1)). + modifyAdapter(data.getExtras().getInt(EVENT_POSITION), data.getExtras().getBoolean(EVENT_BOOKMARK)); + } + } + } + } } diff --git a/app/src/main/java/com/funcheap/funmapsf/features/home/HomePagerAdapter.java b/app/src/main/java/com/funcheap/funmapsf/features/home/HomePagerAdapter.java index 34a8409..e417db9 100644 --- a/app/src/main/java/com/funcheap/funmapsf/features/home/HomePagerAdapter.java +++ b/app/src/main/java/com/funcheap/funmapsf/features/home/HomePagerAdapter.java @@ -5,6 +5,8 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.util.Log; +import android.util.SparseArray; +import android.view.ViewGroup; import com.funcheap.funmapsf.features.list.home.ListHomeFragment; import com.funcheap.funmapsf.features.map.MapFragment; @@ -17,6 +19,8 @@ public class HomePagerAdapter extends FragmentPagerAdapter { + SparseArray registeredFragments = new SparseArray<>(); + private final String TAG = this.getClass().getSimpleName(); private final int PAGE_COUNT = 2; private String mTabTitles[] = new String[] { "Map", "List" }; @@ -50,4 +54,22 @@ public int getCount() { public CharSequence getPageTitle(int position) { return mTabTitles[position]; } + + + @Override + public Object instantiateItem(ViewGroup container, int position) { + Fragment fragment = (Fragment) super.instantiateItem(container, position); + registeredFragments.put(position, fragment); + return fragment; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + registeredFragments.remove(position); + super.destroyItem(container, position, object); + } + + public Fragment getRegisteredFragment(int position) { + return registeredFragments.get(position); + } } diff --git a/app/src/main/java/com/funcheap/funmapsf/features/list/ListBaseFragment.java b/app/src/main/java/com/funcheap/funmapsf/features/list/ListBaseFragment.java index 53eec2d..e333717 100644 --- a/app/src/main/java/com/funcheap/funmapsf/features/list/ListBaseFragment.java +++ b/app/src/main/java/com/funcheap/funmapsf/features/list/ListBaseFragment.java @@ -78,6 +78,17 @@ protected void bindData() { }); } + public void modifyAdapter(int position, boolean isBookmarked){ + ((EventAdapter) mEventRecycler.getAdapter()).updateEventBookmark(position,isBookmarked); + } + + + public void modifyBookmarks(int position, boolean isBookmarked){ + ((EventAdapter) mEventRecycler.getAdapter()).removeEventBookmark(position,isBookmarked); + } + + + /** * This runs each time a change is detected in the list of Events. * @param eventsList the new list of Events. diff --git a/app/src/main/java/com/funcheap/funmapsf/features/list/adapters/EventAdapter.java b/app/src/main/java/com/funcheap/funmapsf/features/list/adapters/EventAdapter.java index 0c9a466..e3ed86b 100644 --- a/app/src/main/java/com/funcheap/funmapsf/features/list/adapters/EventAdapter.java +++ b/app/src/main/java/com/funcheap/funmapsf/features/list/adapters/EventAdapter.java @@ -69,6 +69,22 @@ public void replaceEvents(List events) { } + public void updateEventBookmark(int position, boolean isBookmarked) { + if(mEvents.get(position).isBookmarked()!=isBookmarked) { + mEvents.get(position).setBookmark(isBookmarked); + this.notifyItemChanged(position); + } + } + + + public void removeEventBookmark(int position, boolean isBookmarked) { + if(!isBookmarked) { + mEvents.remove(position); + this.notifyItemRemoved(position); + } + } + + private void insertHeaders() { // add headers here if(mEvents.size()>0) { diff --git a/app/src/main/java/com/funcheap/funmapsf/features/list/adapters/EventDelegateAdapter.java b/app/src/main/java/com/funcheap/funmapsf/features/list/adapters/EventDelegateAdapter.java index 658ca61..5c65616 100644 --- a/app/src/main/java/com/funcheap/funmapsf/features/list/adapters/EventDelegateAdapter.java +++ b/app/src/main/java/com/funcheap/funmapsf/features/list/adapters/EventDelegateAdapter.java @@ -47,6 +47,8 @@ public class EventDelegateAdapter extends AdapterDelegate> { private ListBaseViewModel mListBaseViewModel; private final String TAG = this.getClass().getSimpleName(); private static final String EVENT_EXTRA = "event_extra"; + private static final String EVENT_POSITION = "event_position"; + private static final int REQUEST_CODE = 1; public EventDelegateAdapter(Activity activity) { this.mInflater = activity.getLayoutInflater(); @@ -122,10 +124,10 @@ protected void onBindViewHolder( { Intent intent = new Intent(mContext, DetailActivity.class); intent.putExtra(EVENT_EXTRA, items.get(position)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(EVENT_POSITION, position); ActivityOptionsCompat options = ActivityOptionsCompat. makeSceneTransitionAnimation((Activity) mContext, viewHolder.imgView, "profile"); - mContext.startActivity(intent, options.toBundle()); + ((Activity) mContext).startActivityForResult(intent, REQUEST_CODE ,options.toBundle()); } });