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 af0c690..a4d638d 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 @@ -51,7 +51,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"; @@ -114,6 +117,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)) { @@ -196,6 +200,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 eb349b7..7f97b32 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 @@ -45,6 +45,7 @@ public class HomeActivity extends AppCompatActivity { private final String TAG_HOME_FRAGMENT = "home_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; @@ -175,6 +176,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 b87439a..8041d3b 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,5 +1,6 @@ package com.funcheap.funmapsf.features.home; +import android.app.Activity; import android.arch.lifecycle.ViewModelProviders; import android.content.Intent; import android.os.Build; @@ -62,6 +63,10 @@ public class HomeFragment extends Fragment "San Francisco", "Oakland", "Berkeley", "Mill Valley", "Mountain View", "Brisbane", "Alameda", "Palo Alto", "Fremont", "San Jose", "Santa Clara", "Livermore", "Dublin", "Burlingame", "San Carlos" }; + + private static final int REQUEST_CODE = 1; + private static final String EVENT_POSITION = "event_position"; + private static final String EVENT_BOOKMARK = "event_bookmark"; private static final String TAG_MAP_FRAGMENT = "map_fragment"; private static final String TAG_LIST_FRAGMENT = "list_fragment"; @@ -399,4 +404,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()); } });