Dbrant has uploaded a new change for review.
https://gerrit.wikimedia.org/r/178416
Change subject: Image viewer.
......................................................................
Image viewer.
- Added an Activity for viewing individual images clicked from a page.
Eventually the activity may be adapted to accommodate a scrollable
gallery of images.
- The activity has a Toolbar with a gradient background, as well as a
blank container for description and license information, and a stub menu
item for displaying additional (exif) information.
- Created task for retrieving metadata for an individual File page.
Change-Id: I739d68860e957b84a7a927e089db10b3695d9598
---
M wikipedia/AndroidManifest.xml
M wikipedia/assets/bundle.js
M wikipedia/assets/preview.js
A wikipedia/res/drawable/gallery_toolbar_shape.xml
A wikipedia/res/layout/activity_gallery.xml
A wikipedia/res/menu/menu_gallery.xml
M wikipedia/res/values-qq/strings.xml
M wikipedia/res/values/colors.xml
M wikipedia/res/values/strings.xml
M wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
M wikipedia/src/main/java/org/wikipedia/page/PageProperties.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
A wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java
A wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryItem.java
A wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryItemFetchTask.java
M wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
M www/js/actions.js
17 files changed, 414 insertions(+), 5 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/16/178416/1
diff --git a/wikipedia/AndroidManifest.xml b/wikipedia/AndroidManifest.xml
index 7e0e7c8..bc8f8c3 100644
--- a/wikipedia/AndroidManifest.xml
+++ b/wikipedia/AndroidManifest.xml
@@ -97,6 +97,9 @@
<activity android:name=".onboarding.OnboardingActivity"
android:theme="@style/NoTitle"
/>
+ <activity android:name=".page.gallery.GalleryActivity"
+ android:theme="@style/NoTitle"
+ />
<provider
android:authorities="${applicationId}.history"
diff --git a/wikipedia/assets/bundle.js b/wikipedia/assets/bundle.js
index 17efe11..e2a7621 100644
--- a/wikipedia/assets/bundle.js
+++ b/wikipedia/assets/bundle.js
@@ -84,6 +84,8 @@
} else {
handleReference( targetId, ancestorContainsClass(
sourceNode, "mw-cite-backlink" ) );
}
+ } else if (sourceNode.classList.contains( 'image' )) {
+ bridge.sendMessage( 'imageClicked', { "href": href } );
} else {
bridge.sendMessage( 'linkClicked', { "href": href } );
}
@@ -1194,4 +1196,4 @@
try { module.exports = parseCSSColor } catch(e) { }
-},{}]},{},[6,14,7,8,11,12,2,1,4,5,3,10,9,13])
+},{}]},{},[6,14,7,8,11,12,2,1,4,5,3,10,9,13])
\ No newline at end of file
diff --git a/wikipedia/assets/preview.js b/wikipedia/assets/preview.js
index 764411c..596af18 100644
--- a/wikipedia/assets/preview.js
+++ b/wikipedia/assets/preview.js
@@ -84,6 +84,8 @@
} else {
handleReference( targetId, ancestorContainsClass(
sourceNode, "mw-cite-backlink" ) );
}
+ } else if (sourceNode.classList.contains( 'image' )) {
+ bridge.sendMessage( 'imageClicked', { "href": href } );
} else {
bridge.sendMessage( 'linkClicked', { "href": href } );
}
diff --git a/wikipedia/res/drawable/gallery_toolbar_shape.xml
b/wikipedia/res/drawable/gallery_toolbar_shape.xml
new file mode 100644
index 0000000..f822213
--- /dev/null
+++ b/wikipedia/res/drawable/gallery_toolbar_shape.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <gradient
+ android:startColor="#b8000000"
+ android:endColor="#00000000"
+ android:angle="270"/>
+</shape>
\ No newline at end of file
diff --git a/wikipedia/res/layout/activity_gallery.xml
b/wikipedia/res/layout/activity_gallery.xml
new file mode 100644
index 0000000..08a4297
--- /dev/null
+++ b/wikipedia/res/layout/activity_gallery.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/gallery_background">
+
+ <ImageView
+ android:id="@+id/gallery_image"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:scaleType="fitCenter"
+ />
+
+ <FrameLayout
+ android:id="@+id/gallery_toolbar_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/gallery_toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="64dp"
+ android:background="@drawable/gallery_toolbar_shape">
+ </android.support.v7.widget.Toolbar>
+ <ProgressBar
+ android:id="@+id/gallery_progressbar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="top"
+ android:layout_marginTop="-7.5dp"
+ style="?android:attr/progressBarStyleHorizontal"/>
+ </FrameLayout>
+
+ <LinearLayout
+ android:id="@+id/gallery_info_container"
+ android:layout_width="match_parent"
+ android:layout_height="160dp"
+ android:layout_gravity="bottom"
+ android:orientation="vertical"
+ android:background="@drawable/lead_title_gradient">
+
+ </LinearLayout>
+</FrameLayout>
diff --git a/wikipedia/res/menu/menu_gallery.xml
b/wikipedia/res/menu/menu_gallery.xml
new file mode 100644
index 0000000..a98c472
--- /dev/null
+++ b/wikipedia/res/menu/menu_gallery.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ >
+ <item android:id="@+id/menu_gallery_more_info"
+ android:title="@string/gallery_menu_more_info"
+ app:showAsAction="never"/>
+
+</menu>
diff --git a/wikipedia/res/values-qq/strings.xml
b/wikipedia/res/values-qq/strings.xml
index 47375ec..f7e0763 100644
--- a/wikipedia/res/values-qq/strings.xml
+++ b/wikipedia/res/values-qq/strings.xml
@@ -360,4 +360,6 @@
<string name="preference_title_show_images">Preference title for selecting
whether images are loaded in pages</string>
<string name="preference_summary_show_images">Description of the preference
for whether images are loaded, mentioning that this setting should be disabled
if the user\'s internet connection is slow, or if their data plan is limited or
restricted.</string>
<string name="read_more_section">Title of the Read More section at the
bottom of each page.</string>
+ <string name="gallery_menu_more_info">Menu label for displaying additional
information about the current image being shown in the gallery.</string>
+ <string name="gallery_error_draw_failed">Error message shown when the
current image could not be displayed.</string>
</resources>
diff --git a/wikipedia/res/values/colors.xml b/wikipedia/res/values/colors.xml
index b77ab6e..019e64a 100644
--- a/wikipedia/res/values/colors.xml
+++ b/wikipedia/res/values/colors.xml
@@ -66,6 +66,8 @@
<color name="lead_disabled_text_light">#ff000000</color>
<color name="lead_disabled_text_dark">#ffffffff</color>
+ <color name="gallery_background">#ff303030</color>
+
<color name="syntax_highlight_template_light">#a0a0a0</color>
<color name="syntax_highlight_template_dark">#505050</color>
diff --git a/wikipedia/res/values/strings.xml b/wikipedia/res/values/strings.xml
index b8f999e..6aa775e 100644
--- a/wikipedia/res/values/strings.xml
+++ b/wikipedia/res/values/strings.xml
@@ -279,4 +279,6 @@
<string name="preference_title_show_images">Show images</string>
<string name="preference_summary_show_images">Enable or disable loading of
images in pages. Uncheck this setting if your internet connection is slow, or
if your data plan is limited.</string>
<string name="read_more_section">Read more</string>
+ <string name="gallery_menu_more_info">More information</string>
+ <string name="gallery_error_draw_failed">Could not draw the image.</string>
</resources>
diff --git a/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
b/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
index 7b51c7d..3db2bd2 100644
--- a/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
@@ -6,6 +6,7 @@
import org.mediawiki.api.json.ApiResult;
import org.mediawiki.api.json.RequestBuilder;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -21,6 +22,13 @@
this.site = site;
}
+ public PageQueryTask(int concurrencyLevel, Api api, Site site, PageTitle
title) {
+ super(concurrencyLevel, api);
+ this.titles = new ArrayList<PageTitle>();
+ titles.add(title);
+ this.site = site;
+ }
+
@Override
public RequestBuilder buildRequest(Api api) {
RequestBuilder builder = api.action("query")
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageProperties.java
b/wikipedia/src/main/java/org/wikipedia/page/PageProperties.java
index d448b3b..913e445 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageProperties.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageProperties.java
@@ -23,6 +23,7 @@
private final String editProtectionStatus;
private final boolean isMainPage;
private final String leadImageUrl;
+ private final String leadImageName;
private SimpleDateFormat sdf = new
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT);
/**
@@ -40,7 +41,7 @@
*/
public PageProperties(String lastModifiedText, String displayTitleText,
String editProtectionStatus, boolean canEdit,
boolean isMainPage,
- String leadImageUrl) {
+ String leadImageUrl, String leadImageName) {
lastModified = new Date();
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
@@ -53,6 +54,7 @@
this.canEdit = canEdit;
this.isMainPage = isMainPage;
this.leadImageUrl = leadImageUrl;
+ this.leadImageName = leadImageName;
}
public Date getLastModified() {
@@ -79,6 +81,10 @@
return leadImageUrl;
}
+ public String getLeadImageName() {
+ return leadImageName;
+ }
+
@Override
public int describeContents() {
return 0;
@@ -92,6 +98,7 @@
parcel.writeInt(canEdit ? 1 : 0);
parcel.writeInt(isMainPage ? 1 : 0);
parcel.writeString(leadImageUrl);
+ parcel.writeString(leadImageName);
}
private PageProperties(Parcel in) {
@@ -102,6 +109,7 @@
canEdit = in.readInt() == 1;
isMainPage = in.readInt() == 1;
leadImageUrl = in.readString();
+ leadImageName = in.readString();
}
public static final Parcelable.Creator<PageProperties> CREATOR
@@ -131,7 +139,8 @@
&& canEdit == that.canEdit
&& isMainPage == that.isMainPage
&& TextUtils.equals(editProtectionStatus,
that.editProtectionStatus)
- && TextUtils.equals(leadImageUrl, that.leadImageUrl);
+ && TextUtils.equals(leadImageUrl, that.leadImageUrl)
+ && TextUtils.equals(leadImageName, that.leadImageName);
}
@Override
@@ -175,6 +184,11 @@
thumbObject.put("url", leadImageUrl);
json.put("thumb", thumbObject);
}
+ if (leadImageName != null) {
+ JSONObject imageObject = new JSONObject();
+ imageObject.put("file", leadImageUrl);
+ json.put("image", imageObject);
+ }
} catch (JSONException e) {
// Goddamn it Java
throw new RuntimeException(e);
@@ -202,13 +216,19 @@
if (thumb != null) {
leadImageUrl = thumb.optString("url");
}
+ String leadImageName = null;
+ JSONObject image = json.optJSONObject("image");
+ if (image != null) {
+ leadImageName = image.optString("file");
+ }
return new PageProperties(
json.optString("lastmodified"),
json.optString("displaytitle"),
editProtection,
json.optBoolean("editable"),
json.has("mainpage"),
- leadImageUrl
+ leadImageUrl,
+ leadImageName
);
}
}
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
index 522c86b..db8660f 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
@@ -17,6 +17,7 @@
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.interlanguage.LangLinksActivity;
import org.wikipedia.page.bottomcontent.BottomContentHandler;
+import org.wikipedia.page.gallery.GalleryActivity;
import org.wikipedia.page.leadimages.LeadImagesHandler;
import org.wikipedia.pageimages.PageImage;
import org.wikipedia.pageimages.PageImagesTask;
@@ -56,6 +57,8 @@
import android.widget.TextView;
import android.widget.Toast;
import javax.net.ssl.SSLException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -491,6 +494,24 @@
bottomContentHandler.beginLayout();
}
});
+ bridge.addListener("imageClicked", new
CommunicationBridge.JSEventListener() {
+ @Override
+ public void onMessage(String messageType, JSONObject
messagePayload) {
+ try {
+ String href =
URLDecoder.decode(messagePayload.getString("href"), "UTF-8");
+ if (href.startsWith("/wiki/")) {
+ PageTitle imageTitle =
title.getSite().titleForInternalLink(href);
+ showImageGallery(imageTitle);
+ } else {
+ linkHandler.onUrlClick(href);
+ }
+ } catch (JSONException e) {
+ //nope
+ } catch (UnsupportedEncodingException e) {
+ //nope
+ }
+ }
+ });
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
@@ -709,6 +730,18 @@
}
/**
+ * Launch the image gallery activity, and start with the provided image.
+ * @param imageTitle Image with which to begin the gallery.
+ */
+ public void showImageGallery(PageTitle imageTitle) {
+ Intent galleryIntent = new Intent();
+ galleryIntent.setClass(getActivity(), GalleryActivity.class);
+ galleryIntent.putExtra(GalleryActivity.EXTRA_IMAGETITLE, imageTitle);
+ galleryIntent.putExtra(GalleryActivity.EXTRA_PAGETITLE, title);
+ getActivity().startActivity(galleryIntent);
+ }
+
+ /**
* Save the history entry for the specified page.
*/
private class SaveHistoryTask extends SaneAsyncTask<Void> {
@@ -738,7 +771,7 @@
@Override
public RequestBuilder buildRequest(Api api) {
RequestBuilder builder = super.buildRequest(api);
- builder.param("prop", builder.getParams().get("prop") + "|thumb|"
+ builder.param("prop", builder.getParams().get("prop") +
"|thumb|image|"
+ Page.API_REQUEST_PROPS);
builder.param("thumbsize",
Integer.toString((int)(getResources().getDimension(R.dimen.leadImageWidth)
/ getResources().getDisplayMetrics().density)));
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java
b/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java
new file mode 100644
index 0000000..56512b8
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java
@@ -0,0 +1,182 @@
+package org.wikipedia.page.gallery;
+
+import org.wikipedia.PageTitle;
+import org.wikipedia.R;
+import org.wikipedia.ThemedActionBarActivity;
+import org.wikipedia.ViewAnimations;
+import org.wikipedia.WikipediaApp;
+import android.os.Bundle;
+import android.support.v7.widget.Toolbar;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import com.squareup.picasso.Callback;
+import com.squareup.picasso.Picasso;
+import de.keyboardsurfer.android.widget.crouton.Crouton;
+import de.keyboardsurfer.android.widget.crouton.Style;
+import java.util.Map;
+
+public class GalleryActivity extends ThemedActionBarActivity {
+ public static final String TAG = "GalleryActivity";
+ public static final String EXTRA_PAGETITLE = "pageTitle";
+ public static final String EXTRA_IMAGETITLE = "imageTitle";
+
+ private WikipediaApp app;
+ private PageTitle pageTitle;
+
+ private ImageView mainImage;
+ private ViewGroup toolbarContainer;
+ private ViewGroup infoContainer;
+ private ProgressBar progressBar;
+
+ boolean controlsShowing = true;
+
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // force the theme to dark...
+ setTheme(WikipediaApp.THEME_DARK);
+ app = (WikipediaApp)getApplicationContext();
+
+ setContentView(R.layout.activity_gallery);
+
+ final Toolbar toolbar = (Toolbar) findViewById(R.id.gallery_toolbar);
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setTitle("");
+
+ mainImage = (ImageView) findViewById(R.id.gallery_image);
+ toolbarContainer = (ViewGroup)
findViewById(R.id.gallery_toolbar_container);
+ infoContainer = (ViewGroup) findViewById(R.id.gallery_info_container);
+ progressBar = (ProgressBar) findViewById(R.id.gallery_progressbar);
+
+ pageTitle = getIntent().getParcelableExtra(EXTRA_PAGETITLE);
+ PageTitle imageTitle =
getIntent().getParcelableExtra(EXTRA_IMAGETITLE);
+ Log.d(TAG, "image title: " + imageTitle.getPrefixedText());
+
+ if (savedInstanceState != null) {
+ controlsShowing = savedInstanceState.getBoolean("controlsShowing");
+ }
+ toolbarContainer.post(new Runnable() {
+ @Override
+ public void run() {
+ setControlsShowing(controlsShowing);
+ }
+ });
+
+ mainImage.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ setControlsShowing(!controlsShowing);
+ }
+ });
+
+ updateProgressBar(false, true, 0);
+ updateGalleryItem(imageTitle);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ Crouton.cancelAllCroutons();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putBoolean("controlsShowing", controlsShowing);
+ }
+
+ public void updateProgressBar(boolean visible, boolean indeterminate, int
value) {
+ progressBar.setIndeterminate(indeterminate);
+ if (!indeterminate) {
+ progressBar.setProgress(value);
+ }
+ progressBar.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_gallery, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ onBackPressed();
+ return true;
+ case R.id.menu_gallery_more_info:
+ return true;
+ default:
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void setControlsShowing(boolean showing) {
+ controlsShowing = showing;
+ if (controlsShowing) {
+ ViewAnimations.ensureTranslationY(toolbarContainer, 0);
+ ViewAnimations.ensureTranslationY(infoContainer, 0);
+ } else {
+ ViewAnimations.ensureTranslationY(toolbarContainer,
-toolbarContainer.getHeight());
+ ViewAnimations.ensureTranslationY(infoContainer,
infoContainer.getHeight());
+ }
+ }
+
+ private void updateGalleryItem(final PageTitle imageTitle) {
+ updateProgressBar(true, true, 0);
+ new GalleryItemFetchTask(app.getPrimarySiteApi(), pageTitle.getSite(),
imageTitle) {
+ @Override
+ public void onFinish(Map<PageTitle, GalleryItem> result) {
+ if (result.size() > 0) {
+ GalleryItem item =
(GalleryItem)result.values().toArray()[0];
+
+ // it's actually OK to use the thumbUrl in all cases, and
here's why:
+ // - in the case of a JPG or PNG image:
+ // - if the image is bigger than the requested
thumbnail size, then the
+ // thumbnail will correctly be a scaled-down version
of the image, so
+ // that it won't overload the device's bitmap buffer.
+ // - if the image is smaller than the requested
thumbnail size, then the
+ // thumbnail url will be the same as the actual
image url.
+ // - in the case of an SVG file:
+ // - we need the thumbnail image anyway, since the
ImageView can't
+ // display SVGs.
+ // - in the case of OGV videos:
+ // - definitely need a thumbnail
+ String url = item.getThumbUrl();
+ Log.d(TAG, "loading from url: " + url);
+
+ Picasso.with(GalleryActivity.this)
+ .load(url)
+ .into(mainImage, new Callback() {
+ @Override
+ public void onSuccess() {
+ updateProgressBar(false, true, 0);
+ }
+ @Override
+ public void onError() {
+
showError(getString(R.string.gallery_error_draw_failed));
+ }
+ });
+
+ } else {
+ showError(getString(R.string.error_network_error));
+ }
+ }
+ @Override
+ public void onCatch(Throwable caught) {
+ showError(getString(R.string.error_network_error));
+ }
+ private void showError(String errorStr) {
+ updateProgressBar(false, true, 0);
+ Crouton.makeText(GalleryActivity.this, errorStr, Style.ALERT,
toolbarContainer)
+ .show();
+ }
+ }.execute();
+ }
+}
\ No newline at end of file
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryItem.java
b/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryItem.java
new file mode 100644
index 0000000..9891f1d
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryItem.java
@@ -0,0 +1,49 @@
+package org.wikipedia.page.gallery;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+public class GalleryItem {
+ private final String name;
+ public String getName() { return name; }
+
+ private final String url;
+ public String getUrl() { return url; }
+
+ private final String mimeType;
+ public String getMimeType() { return mimeType; }
+
+ private final HashMap<String, String> metadata;
+ public Map<String, String> getMetadata() { return metadata; }
+
+ private final String thumbUrl;
+ public String getThumbUrl() { return thumbUrl; }
+
+ private final int width;
+ public int getWidth() { return width; }
+
+ private final int height;
+ public int getHeight() { return height; }
+
+ public GalleryItem(JSONObject json) throws JSONException {
+ this.name = json.getString("title");
+ JSONObject imageinfo =
(JSONObject)json.getJSONArray("imageinfo").get(0);
+ this.url = imageinfo.getString("url");
+ this.mimeType = imageinfo.getString("mime");
+ this.thumbUrl = imageinfo.getString("thumburl");
+ this.width = imageinfo.getInt("width");
+ this.height = imageinfo.getInt("height");
+ metadata = new HashMap<>();
+ JSONObject extmetadata = imageinfo.optJSONObject("extmetadata");
+ if (extmetadata != null) {
+ Iterator<String> keys = extmetadata.keys();
+ while (keys.hasNext()) {
+ String key = keys.next();
+ metadata.put(key,
extmetadata.getJSONObject(key).getString("value"));
+ }
+ }
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryItemFetchTask.java
b/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryItemFetchTask.java
new file mode 100644
index 0000000..cd9d2b2
--- /dev/null
+++
b/wikipedia/src/main/java/org/wikipedia/page/gallery/GalleryItemFetchTask.java
@@ -0,0 +1,26 @@
+package org.wikipedia.page.gallery;
+
+import org.json.JSONObject;
+import org.mediawiki.api.json.Api;
+import org.mediawiki.api.json.RequestBuilder;
+import org.wikipedia.PageQueryTask;
+import org.wikipedia.PageTitle;
+import org.wikipedia.Site;
+
+public class GalleryItemFetchTask extends PageQueryTask<GalleryItem> {
+ public GalleryItemFetchTask(Api api, Site site, PageTitle title) {
+ super(LOW_CONCURRENCY, api, site, title);
+ }
+
+ @Override
+ public void buildQueryParams(RequestBuilder builder) {
+ builder.param("prop", "imageinfo")
+ .param("iiprop", "url|dimensions|mime|extmetadata")
+ .param("iiurlwidth", "2048");
+ }
+
+ @Override
+ public GalleryItem processPage(int pageId, PageTitle pageTitle, JSONObject
pageData) throws Throwable {
+ return new GalleryItem(pageData);
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
b/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
index 1ff88b5..0fb4445 100644
---
a/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
+++
b/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
@@ -131,6 +131,21 @@
.getWindowManager().getDefaultDisplay().getHeight() /
displayDensity);
}
+ image1.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String imageName =
parentFragment.getFragment().getPage().getPageProperties()
+ .getLeadImageName();
+ if (imageName == null) {
+ return;
+ }
+ PageTitle imageTitle = new PageTitle("File:" + imageName,
+
parentFragment.getFragment().getTitle()
+ .getSite());
+ parentFragment.getFragment().showImageGallery(imageTitle);
+ }
+ });
+
// hide ourselves by default
hide();
diff --git a/www/js/actions.js b/www/js/actions.js
index f8bc183..464d28f 100644
--- a/www/js/actions.js
+++ b/www/js/actions.js
@@ -83,6 +83,8 @@
} else {
handleReference( targetId, ancestorContainsClass(
sourceNode, "mw-cite-backlink" ) );
}
+ } else if (sourceNode.classList.contains( 'image' )) {
+ bridge.sendMessage( 'imageClicked', { "href": href } );
} else {
bridge.sendMessage( 'linkClicked', { "href": href } );
}
--
To view, visit https://gerrit.wikimedia.org/r/178416
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I739d68860e957b84a7a927e089db10b3695d9598
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits