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();
}