Yuvipanda has uploaded a new change for review.
https://gerrit.wikimedia.org/r/75999
Change subject: Add Campaign Activity, Fragment and Fetcher
......................................................................
Add Campaign Activity, Fragment and Fetcher
Exposed as a separate launcher icon. Will add more cohesive UI in
the future
Change-Id: I9f15a9ac850d636d72b4892f2b5153f7e2b8ba28
---
M commons/AndroidManifest.xml
A commons/res/layout/activity_campaigns.xml
A commons/res/layout/fragment_campaigns.xml
A commons/res/layout/layout_campaign_item.xml
A commons/src/main/java/org/wikimedia/commons/campaigns/CampaignActivity.java
A
commons/src/main/java/org/wikimedia/commons/campaigns/CampaignsListAdapter.java
A
commons/src/main/java/org/wikimedia/commons/campaigns/CampaignsListFragment.java
A commons/src/main/java/org/wikimedia/commons/campaigns/FetchCampaignsTask.java
8 files changed, 213 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/commons
refs/changes/99/75999/1
diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml
index a9b6f8d..f3cb11f 100644
--- a/commons/AndroidManifest.xml
+++ b/commons/AndroidManifest.xml
@@ -82,6 +82,15 @@
android:label="@string/title_activity_settings"
/>
<activity android:name=".AboutActivity"
android:label="@string/title_activity_about"/>
+ <activity android:name=".campaigns.CampaignActivity"
android:label="Campaigns"
+ android:icon="@drawable/ic_launcher"
+ >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ </activity>
+
<service android:name=".upload.UploadService" >
</service>
<service
diff --git a/commons/res/layout/activity_campaigns.xml
b/commons/res/layout/activity_campaigns.xml
new file mode 100644
index 0000000..197ccb2
--- /dev/null
+++ b/commons/res/layout/activity_campaigns.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <fragment
+ android:id="@+id/campaignsListFragment"
+ class="org.wikimedia.commons.campaigns.CampaignsListFragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ />
+</FrameLayout>
\ No newline at end of file
diff --git a/commons/res/layout/fragment_campaigns.xml
b/commons/res/layout/fragment_campaigns.xml
new file mode 100644
index 0000000..3ff614f
--- /dev/null
+++ b/commons/res/layout/fragment_campaigns.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <GridView android:id="@+id/campaignsList"
+ android:layout_height="fill_parent"
+ android:layout_width="fill_parent"
+ android:stretchMode="columnWidth"
+ android:columnWidth="240dp"
+ android:numColumns="auto_fit"
+ android:listSelector="@null"
+ android:fadingEdge="none"
+ android:fastScrollEnabled="false"
+ />
+</LinearLayout>
\ No newline at end of file
diff --git a/commons/res/layout/layout_campaign_item.xml
b/commons/res/layout/layout_campaign_item.xml
new file mode 100644
index 0000000..79c0355
--- /dev/null
+++ b/commons/res/layout/layout_campaign_item.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <TextView
+ android:id="@+id/campaignItemName"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ />
+</LinearLayout>
\ No newline at end of file
diff --git
a/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignActivity.java
b/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignActivity.java
new file mode 100644
index 0000000..d2ec068
--- /dev/null
+++
b/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignActivity.java
@@ -0,0 +1,15 @@
+package org.wikimedia.commons.campaigns;
+
+import android.app.Activity;
+import android.os.Bundle;
+import com.actionbarsherlock.app.SherlockFragmentActivity;
+import org.wikimedia.commons.R;
+
+public class CampaignActivity extends SherlockFragmentActivity {
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_campaigns);
+ }
+
+
+}
\ No newline at end of file
diff --git
a/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignsListAdapter.java
b/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignsListAdapter.java
new file mode 100644
index 0000000..f1bc1fb
--- /dev/null
+++
b/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignsListAdapter.java
@@ -0,0 +1,54 @@
+package org.wikimedia.commons.campaigns;
+
+import android.app.Activity;
+import android.view.*;
+import android.widget.*;
+import org.wikimedia.commons.R;
+
+import java.util.ArrayList;
+
+public class CampaignsListAdapter extends BaseAdapter {
+ private ArrayList<Campaign> campaigns;
+ private Activity activity;
+
+ public CampaignsListAdapter(Activity activity, ArrayList<Campaign>
campaigns) {
+ this.campaigns = campaigns;
+ this.activity = activity;
+ }
+
+ public ArrayList<Campaign> getCampaigns() {
+ return campaigns;
+ }
+
+ public void setCampaigns(ArrayList<Campaign> campaigns) {
+ this.campaigns = campaigns;
+ }
+
+ public int getCount() {
+ if(campaigns == null) {
+ return 0;
+ }
+ return campaigns.size();
+ }
+
+ public Object getItem(int i) {
+ return campaigns.get(i);
+ }
+
+ public long getItemId(int i) {
+ return i;
+ }
+
+ public View getView(int i, View view, ViewGroup viewGroup) {
+ if(view == null) {
+ view =
activity.getLayoutInflater().inflate(R.layout.layout_campaign_item, null);
+ }
+
+ TextView campaignName =
(TextView)view.findViewById(R.id.campaignItemName);
+
+ Campaign campaign = campaigns.get(i);
+
+ campaignName.setText(campaign.getName());
+ return view;
+ }
+}
diff --git
a/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignsListFragment.java
b/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignsListFragment.java
new file mode 100644
index 0000000..51a2f4f
--- /dev/null
+++
b/commons/src/main/java/org/wikimedia/commons/campaigns/CampaignsListFragment.java
@@ -0,0 +1,39 @@
+package org.wikimedia.commons.campaigns;
+
+import android.os.*;
+import android.view.*;
+import android.widget.*;
+import com.actionbarsherlock.app.SherlockFragment;
+import org.wikimedia.commons.*;
+
+import java.util.*;
+
+public class CampaignsListFragment extends SherlockFragment {
+ private ArrayList<Campaign> campaigns;
+ private CampaignsListAdapter listAdapter;
+ private GridView campaignsListView;
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.fragment_campaigns, container,
false);
+ campaignsListView = (GridView)view.findViewById(R.id.campaignsList);
+ return view;
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ listAdapter = new CampaignsListAdapter(getActivity(), campaigns);
+ campaignsListView.setAdapter(listAdapter);
+ Utils.executeAsyncTask(new FetchCampaignsTask(getActivity()){
+ @Override
+ protected void onPostExecute(ArrayList<Campaign> campaigns) {
+ super.onPostExecute(campaigns);
+ CampaignsListFragment.this.campaigns = campaigns;
+ listAdapter.setCampaigns(campaigns);
+ listAdapter.notifyDataSetChanged();
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git
a/commons/src/main/java/org/wikimedia/commons/campaigns/FetchCampaignsTask.java
b/commons/src/main/java/org/wikimedia/commons/campaigns/FetchCampaignsTask.java
new file mode 100644
index 0000000..8a822de
--- /dev/null
+++
b/commons/src/main/java/org/wikimedia/commons/campaigns/FetchCampaignsTask.java
@@ -0,0 +1,52 @@
+package org.wikimedia.commons.campaigns;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.util.Log;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.mediawiki.api.ApiResult;
+import org.mediawiki.api.MWApi;
+import org.wikimedia.commons.CommonsApplication;
+import org.wikimedia.commons.Utils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class FetchCampaignsTask extends AsyncTask<Void, Void,
ArrayList<Campaign>>{
+
+ private Context context;
+ private MWApi api;
+
+ public FetchCampaignsTask(Context context) {
+ this.context = context;
+ this.api =
((CommonsApplication)context.getApplicationContext()).getApi();
+ }
+
+ @Override
+ protected ArrayList<Campaign> doInBackground(Void... voids) {
+ ArrayList<Campaign> campaigns = new ArrayList<Campaign>();
+ ApiResult result;
+ try {
+ result = api.action("query").param("prop", "revisions")
+ .param("rvprop", "content").param("generator", "allpages")
+ .param("gapnamespace", 460).param("gaplimit", 500).get();
//FIXME: Actually paginate!
+ } catch (IOException e) {
+ throw new RuntimeException(e); // FIXME: Do something else ;)
+ }
+ ArrayList<ApiResult> pageNodes =
result.getNodes("/api/query/pages/page");
+ for(ApiResult pageNode : pageNodes) {
+ Log.d("Commons", Utils.getStringFromDOM(pageNode.getDocument()));
+ String configString = pageNode.getString("revisions/rev");
+ String pageName = pageNode.getString("@title").split(":")[1];
+ JSONObject config;
+ try {
+ config = new JSONObject(configString);
+ } catch (JSONException e) {
+ throw new RuntimeException(e); // NEVER HAPPENS!
+ }
+ campaigns.add(new Campaign(pageName, config));
+ }
+ return campaigns;
+ }
+}
--
To view, visit https://gerrit.wikimedia.org/r/75999
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9f15a9ac850d636d72b4892f2b5153f7e2b8ba28
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/commons
Gerrit-Branch: campaigns
Gerrit-Owner: Yuvipanda <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits