From da8db5a2ca872bf5b1142f9ffae70d72301a9620 Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Wed, 23 Oct 2013 07:05:41 +0530 Subject: [PATCH] Add refresh button only for Campaigns Temp. hack to let people see new images when they come through Change-Id: I986bc274ccebd53fef75dbaeffcdff891a4f77bf --- commons/res/menu/fragment_contributions_list.xml | 4 ++++ commons/res/values-qq/strings.xml | 1 + commons/res/values/strings.xml | 1 + .../contributions/ContributionsActivity.java | 16 ++++++++++++---- .../contributions/ContributionsListFragment.java | 14 ++++++++++++-- .../commons/contributions/MediaListAdapter.java | 15 +++++++++++++++ 6 files changed, 45 insertions(+), 6 deletions(-) diff --git a/commons/res/menu/fragment_contributions_list.xml b/commons/res/menu/fragment_contributions_list.xml index b9382fa9c..14cc7322e 100644 --- a/commons/res/menu/fragment_contributions_list.xml +++ b/commons/res/menu/fragment_contributions_list.xml @@ -26,5 +26,9 @@ android:showAsAction="never" android:icon="@android:drawable/ic_menu_send" /> + diff --git a/commons/res/values-qq/strings.xml b/commons/res/values-qq/strings.xml index cd783dcd9..437eb90f7 100644 --- a/commons/res/values-qq/strings.xml +++ b/commons/res/values-qq/strings.xml @@ -3,6 +3,7 @@ The name of the application. {{Identical|Wikimedia Commons}} Name of the beta version of the application + Label for menu item that refreshes current list of images. Label for menu item to show settings. {{Identical|Settings}} {{Identical|Username}} diff --git a/commons/res/values/strings.xml b/commons/res/values/strings.xml index 664de8594..aedac8dff 100644 --- a/commons/res/values/strings.xml +++ b/commons/res/values/strings.xml @@ -141,4 +141,5 @@ No description Unknown license Campaigns + Refresh diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java index b4236ac00..9152cacab 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java @@ -29,7 +29,8 @@ public class ContributionsActivity AdapterView.OnItemClickListener, MediaDetailPagerFragment.MediaDetailProvider, ContributionsListFragment.CurrentCampaignProvider, - FragmentManager.OnBackStackChangedListener { + FragmentManager.OnBackStackChangedListener, + ContributionsListFragment.SourceRefresher { private Cursor allContributions; @@ -219,7 +220,11 @@ public class ContributionsActivity getSupportActionBar().setSubtitle(getResources().getQuantityString(R.plurals.contributions_subtitle, cursor.getCount(), cursor.getCount())); } else { - contributionsList.setAdapter(new MediaListAdapter(this, (ArrayList) result)); + if(contributionsList.getAdapter() == null) { + contributionsList.setAdapter(new MediaListAdapter(this, (ArrayList) result)); + } else { + ((MediaListAdapter)contributionsList.getAdapter()).updateMediaList((ArrayList) result); + } } } @@ -227,8 +232,7 @@ public class ContributionsActivity if(campaign == null) { ((CursorAdapter) contributionsList.getAdapter()).swapCursor(null); } else { - //((MediaListAdapter) contributionsList.getAdapter()). - // DO SOMETHING! + contributionsList.setAdapter(null); } } @@ -262,4 +266,8 @@ public class ContributionsActivity public Campaign getCurrentCampaign() { return campaign; } + + public void refreshSource() { + getSupportLoaderManager().restartLoader(0, null, this); + } } diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsListFragment.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsListFragment.java index fea1c7f9f..8af96a32b 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsListFragment.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsListFragment.java @@ -27,6 +27,10 @@ public class ContributionsListFragment extends SherlockFragment { Campaign getCurrentCampaign(); } + public interface SourceRefresher { + void refreshSource(); + } + private GridView contributionsList; private TextView waitingMessage; private TextView emptyMessage; @@ -87,7 +91,9 @@ public class ContributionsListFragment extends SherlockFragment { feedbackIntent.putExtra(Intent.EXTRA_SUBJECT, String.format(CommonsApplication.FEEDBACK_EMAIL_SUBJECT, CommonsApplication.APPLICATION_VERSION)); startActivity(feedbackIntent); return true; - + case R.id.menu_refresh: + ((SourceRefresher)getActivity()).refreshSource(); + return true; default: return super.onOptionsItemSelected(item); } @@ -102,6 +108,9 @@ public class ContributionsListFragment extends SherlockFragment { if (!app.deviceHasCamera()) { menu.findItem(R.id.menu_from_camera).setEnabled(false); } + if(campaign == null) { + menu.findItem(R.id.menu_refresh).setVisible(false); + } } @Override @@ -119,7 +128,8 @@ public class ContributionsListFragment extends SherlockFragment { public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - controller = new ContributionController(this, ((CurrentCampaignProvider)getActivity()).getCurrentCampaign()); + campaign = ((CurrentCampaignProvider)getActivity()).getCurrentCampaign(); + controller = new ContributionController(this, campaign); controller.loadState(savedInstanceState); contributionsList = (GridView)getView().findViewById(R.id.contributionsList); diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/MediaListAdapter.java b/commons/src/main/java/org/wikimedia/commons/contributions/MediaListAdapter.java index 33f846043..532120212 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/MediaListAdapter.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/MediaListAdapter.java @@ -20,6 +20,21 @@ public class MediaListAdapter extends BaseAdapter { this.activity = activity; } + public void updateMediaList(ArrayList newMediaList) { + // FIXME: Hack for now, replace with something more efficient later on + for(Media newMedia: newMediaList) { + boolean isDuplicate = false; + for(Media oldMedia: mediaList ) { + if(newMedia.getFilename().equals(oldMedia.getFilename())) { + isDuplicate = true; + break; + } + } + if(!isDuplicate) { + mediaList.add(0, newMedia); + } + } + } public int getCount() { return mediaList.size(); }