jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/344687 )
Change subject: Show an accurate message in the link preview when a page
doesn't exist
......................................................................
Show an accurate message in the link preview when a page doesn't exist
Updates the link preview to show a "page does not exist" message when
appropriate.
Bug: T161008
Change-Id: I3b95431abb9305b191250ff527272d1869208c54
---
M app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
A app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewErrorType.java
A app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewErrorView.java
M app/src/main/java/org/wikipedia/util/ThrowableUtil.java
A app/src/main/res/drawable/ic_portable_wifi_off_black_24px.xml
M app/src/main/res/layout/dialog_link_preview.xml
A app/src/main/res/layout/view_link_preview_error.xml
M app/src/main/res/values-ast/strings.xml
M app/src/main/res/values-bn/strings.xml
M app/src/main/res/values-br/strings.xml
M app/src/main/res/values-cnh/strings.xml
M app/src/main/res/values-de/strings.xml
M app/src/main/res/values-es/strings.xml
M app/src/main/res/values-fa/strings.xml
M app/src/main/res/values-fi/strings.xml
M app/src/main/res/values-fr/strings.xml
M app/src/main/res/values-gl/strings.xml
M app/src/main/res/values-hu/strings.xml
M app/src/main/res/values-iw/strings.xml
M app/src/main/res/values-ko/strings.xml
M app/src/main/res/values-mk/strings.xml
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values-ru/strings.xml
M app/src/main/res/values-sv/strings.xml
M app/src/main/res/values-tr/strings.xml
M app/src/main/res/values-uk/strings.xml
M app/src/main/res/values-zh-rTW/strings.xml
M app/src/main/res/values-zh/strings.xml
M app/src/main/res/values/strings.xml
29 files changed, 261 insertions(+), 75 deletions(-)
Approvals:
Niedzielski: Looks good to me, approved
jenkins-bot: Verified
diff --git
a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
index 09154c2..007de8a 100755
--- a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
+++ b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
@@ -45,12 +45,13 @@
import static org.wikipedia.util.L10nUtil.getStringForArticleLanguage;
import static org.wikipedia.util.L10nUtil.setConditionalLayoutDirection;
+import static org.wikipedia.util.ThrowableUtil.is404;
+import static org.wikipedia.util.ThrowableUtil.isOffline;
public class LinkPreviewDialog extends ExtendedBottomSheetDialogFragment
- implements DialogInterface.OnDismissListener {
+ implements LinkPreviewErrorView.Callback,
DialogInterface.OnDismissListener {
public interface Callback {
- void onLinkPreviewLoadPage(@NonNull PageTitle title, @NonNull
HistoryEntry entry,
- boolean inNewTab);
+ void onLinkPreviewLoadPage(@NonNull PageTitle title, @NonNull
HistoryEntry entry, boolean inNewTab);
void onLinkPreviewCopyLink(@NonNull PageTitle title);
void onLinkPreviewAddToList(@NonNull PageTitle title);
void onLinkPreviewShareLink(@NonNull PageTitle title);
@@ -60,7 +61,7 @@
private LinearLayout dialogContainer;
private View contentContainer;
- private View offlineContainer;
+ private LinkPreviewErrorView errorContainer;
private ProgressBar progressBar;
private TextView extractText;
private SimpleDraweeView thumbnailView;
@@ -88,8 +89,7 @@
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
WikipediaApp app = WikipediaApp.getInstance();
pageTitle = getArguments().getParcelable("title");
entrySource = getArguments().getInt("entrySource");
@@ -98,7 +98,7 @@
View rootView = inflater.inflate(R.layout.dialog_link_preview,
container);
dialogContainer = (LinearLayout)
rootView.findViewById(R.id.dialog_link_preview_container);
contentContainer =
rootView.findViewById(R.id.dialog_link_preview_content_container);
- offlineContainer =
rootView.findViewById(R.id.dialog_link_preview_offline_container);
+ errorContainer = (LinkPreviewErrorView)
rootView.findViewById(R.id.dialog_link_preview_error_container);
progressBar = (ProgressBar)
rootView.findViewById(R.id.link_preview_progress);
toolbarView = rootView.findViewById(R.id.link_preview_toolbar);
toolbarView.setOnClickListener(goToPageListener);
@@ -198,6 +198,18 @@
}
}
+ @Override
+ public void onAddToList() {
+ if (callback() != null) {
+ callback().onLinkPreviewAddToList(pageTitle);
+ }
+ }
+
+ @Override
+ public void onDismiss() {
+ dismiss();
+ }
+
private void loadContent() {
PageClientFactory
.create(pageTitle.getWikiSite(), pageTitle.namespace())
@@ -205,7 +217,7 @@
.enqueue(linkPreviewNetworkOnLoadCallback);
}
- private void tryLoadingFromCache() {
+ private void tryLoadingFromCache(@Nullable final Throwable
networkException) {
L.v("Loading link preview from Saved Pages");
new LoadSavedPageTask(pageTitle) {
@Override public void onFinish(Page page) {
@@ -219,7 +231,11 @@
if (!isAdded()) {
return;
}
- showPreviewOfflineNotice();
+ if (networkException != null) {
+ showError(networkException);
+ } else {
+ showError(caught);
+ }
L.e("Page summary cache request failed", caught);
}
}.execute();
@@ -230,14 +246,17 @@
setPreviewContents(contents);
}
- private void showPreviewOfflineNotice() {
+ private void showError(@Nullable Throwable caught) {
dialogContainer.setLayoutTransition(null);
progressBar.setVisibility(View.GONE);
contentContainer.setVisibility(View.GONE);
- offlineContainer.setVisibility(View.VISIBLE);
-
overlayView.setPrimaryButtonText(getResources().getString(R.string.button_add_to_reading_list));
overlayView.showSecondaryButton(false);
- overlayView.setCallback(new OverlayViewOfflineCallback());
+ errorContainer.setVisibility(View.VISIBLE);
+ errorContainer.setError(caught);
+ errorContainer.setCallback(this);
+ LinkPreviewErrorType errorType =
LinkPreviewErrorType.get(getContext(), caught);
+
overlayView.setPrimaryButtonText(getResources().getString(errorType.buttonText()));
+ overlayView.setCallback(errorType.buttonAction(errorContainer));
}
private void setPreviewContents(@NonNull LinkPreviewContents contents) {
@@ -258,15 +277,22 @@
if (summary != null && !summary.hasError()) {
showPreview(new LinkPreviewContents(summary,
pageTitle.getWikiSite()));
} else {
- tryLoadingFromCache();
+ tryLoadingFromCache(null);
logError(summary.hasError() ? summary.getError() : null,
"Page summary network request failed");
}
}
- @Override public void onFailure(Call<PageSummary> call, Throwable t) {
- tryLoadingFromCache();
- L.e(t);
+ @Override public void onFailure(Call<PageSummary> call, Throwable
caught) {
+ L.e(caught);
+ if (is404(getContext(), caught)) {
+ // If the page doesn't exist, show an error immediately
without checking the cache.
+ showError(caught);
+ } else {
+ // If we're offline, check the cache but pass along the
exception so that we show
+ // the correct error message if the page isn't found in the
cache.
+ tryLoadingFromCache(isOffline(caught) ? caught : null);
+ }
}
};
@@ -369,19 +395,6 @@
@Override
public void onSecondaryClick() {
goToExternalMapsApp();
- }
- }
-
- private class OverlayViewOfflineCallback implements
LinkPreviewOverlayView.Callback {
- @Override
- public void onPrimaryClick() {
- if (callback() != null) {
- callback().onLinkPreviewAddToList(pageTitle);
- }
- }
-
- @Override
- public void onSecondaryClick() {
}
}
diff --git
a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewErrorType.java
b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewErrorType.java
new file mode 100644
index 0000000..f15221f
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewErrorType.java
@@ -0,0 +1,73 @@
+package org.wikipedia.page.linkpreview;
+
+import android.content.Context;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
+
+import org.wikipedia.R;
+import org.wikipedia.util.ThrowableUtil;
+
+enum LinkPreviewErrorType {
+ // Note: The string resource corresponding to the 'text' field will be
updated programmatically
+ // for the OFFLINE type to accommodate error view design requirements. See
+ // LinkPreviewErrorView.setError() for further discussion.
+ OFFLINE(R.drawable.ic_portable_wifi_off_black_24px,
R.string.error_message_generic,
+ R.string.button_add_to_reading_list) {
+ @NonNull @Override
+ LinkPreviewOverlayView.Callback buttonAction(@NonNull
LinkPreviewErrorView errorView) {
+ return errorView.addToListCallback();
+ }
+ },
+
+ PAGE_MISSING(R.drawable.ic_error_black_24dp,
R.string.error_page_does_not_exist,
+ R.string.view_link_preview_error_button_dismiss) {
+ @NonNull @Override
+ LinkPreviewOverlayView.Callback buttonAction(@NonNull
LinkPreviewErrorView errorView) {
+ return errorView.dismissCallback();
+ }
+ },
+
+ GENERIC(R.drawable.ic_error_black_24dp, R.string.error_message_generic,
+ R.string.view_link_preview_error_button_dismiss) {
+ @NonNull @Override
+ LinkPreviewOverlayView.Callback buttonAction(@NonNull
LinkPreviewErrorView errorView) {
+ return errorView.dismissCallback();
+ }
+ };
+
+ @DrawableRes private final int icon;
+ @StringRes private final int text;
+ @StringRes private final int buttonText;
+
+ LinkPreviewErrorType(@DrawableRes int icon, @StringRes int text,
@StringRes int buttonText) {
+ this.icon = icon;
+ this.text = text;
+ this.buttonText = buttonText;
+ }
+
+ @DrawableRes int icon() {
+ return icon;
+ }
+
+ @StringRes int text() {
+ return text;
+ }
+
+ @StringRes public int buttonText() {
+ return buttonText;
+ }
+
+ @NonNull abstract LinkPreviewOverlayView.Callback buttonAction(@NonNull
LinkPreviewErrorView errorView);
+
+ @NonNull public static LinkPreviewErrorType get(@NonNull Context context,
@Nullable Throwable caught) {
+ if (caught != null && ThrowableUtil.is404(context, caught)) {
+ return LinkPreviewErrorType.PAGE_MISSING;
+ }
+ if (caught != null && ThrowableUtil.isOffline(caught)) {
+ return LinkPreviewErrorType.OFFLINE;
+ }
+ return LinkPreviewErrorType.GENERIC;
+ }
+}
diff --git
a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewErrorView.java
b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewErrorView.java
new file mode 100644
index 0000000..46faa82
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewErrorView.java
@@ -0,0 +1,92 @@
+package org.wikipedia.page.linkpreview;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.content.ContextCompat;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import org.wikipedia.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class LinkPreviewErrorView extends LinearLayout {
+ @BindView(R.id.view_link_preview_error_icon) ImageView icon;
+ @BindView(R.id.view_link_preview_error_text) TextView textView;
+
+ public interface Callback {
+ void onAddToList();
+ void onDismiss();
+ }
+
+ @Nullable private Callback callback;
+ @NonNull private OverlayViewAddToListCallback addToListCallback = new
OverlayViewAddToListCallback();
+ @NonNull private OverlayViewDismissCallback dismissCallback = new
OverlayViewDismissCallback();
+
+ public LinkPreviewErrorView(Context context) {
+ this(context, null);
+ }
+
+ public LinkPreviewErrorView(Context context, @Nullable AttributeSet attrs)
{
+ this(context, attrs, 0);
+ }
+
+ public LinkPreviewErrorView(Context context, @Nullable AttributeSet attrs,
int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ inflate(context, R.layout.view_link_preview_error, this);
+ ButterKnife.bind(this);
+ }
+
+ public void setCallback(@Nullable Callback callback) {
+ this.callback = callback;
+ }
+
+ @NonNull OverlayViewAddToListCallback addToListCallback() {
+ return addToListCallback;
+ }
+
+ @NonNull OverlayViewDismissCallback dismissCallback() {
+ return dismissCallback;
+ }
+
+ public void setError(@Nullable Throwable caught) {
+ LinkPreviewErrorType errorType =
LinkPreviewErrorType.get(getContext(), caught);
+ icon.setImageDrawable(ContextCompat.getDrawable(getContext(),
errorType.icon()));
+
+ // HACK: This message is delivered in one piece in a link preview but
as a separate primary
+ // message and subtitle in the full page view. Figure out a good way
to handle this.
+ if (errorType == LinkPreviewErrorType.OFFLINE) {
+ String message =
getResources().getString(R.string.page_offline_notice_cannot_load_while_offline)
+ + " " +
getResources().getString(R.string.page_offline_notice_add_to_reading_list);
+ textView.setText(message);
+ } else {
+
textView.setText(getContext().getResources().getString(errorType.text()));
+ }
+ }
+
+ private class OverlayViewAddToListCallback implements
LinkPreviewOverlayView.Callback {
+ @Override public void onPrimaryClick() {
+ if (callback != null) {
+ callback.onAddToList();
+ }
+ }
+
+ @Override public void onSecondaryClick() {
+ }
+ }
+
+ private class OverlayViewDismissCallback implements
LinkPreviewOverlayView.Callback {
+ @Override public void onPrimaryClick() {
+ if (callback != null) {
+ callback.onDismiss();
+ }
+ }
+
+ @Override public void onSecondaryClick() {
+ }
+ }
+}
diff --git a/app/src/main/java/org/wikipedia/util/ThrowableUtil.java
b/app/src/main/java/org/wikipedia/util/ThrowableUtil.java
index e8881f7..447bc30 100644
--- a/app/src/main/java/org/wikipedia/util/ThrowableUtil.java
+++ b/app/src/main/java/org/wikipedia/util/ThrowableUtil.java
@@ -11,6 +11,7 @@
import org.wikipedia.R;
import org.wikipedia.createaccount.CreateAccountException;
import org.wikipedia.dataclient.mwapi.MwException;
+import org.wikipedia.dataclient.okhttp.HttpStatusException;
import org.wikipedia.login.LoginClient;
import java.net.UnknownHostException;
@@ -53,8 +54,10 @@
getApiErrorMessage(context, (ApiException)
inner));
} else if (isNetworkError(e)) {
result = new
AppError(context.getString(R.string.error_network_error),
-
context.getString(R.string.format_error_server_message,
- inner.getLocalizedMessage()));
+ context.getString(R.string.format_error_server_message,
+ inner.getLocalizedMessage()));
+ } else if (e instanceof HttpStatusException) {
+ result = new AppError(e.getMessage(),
Integer.toString(((HttpStatusException) e).code()));
} else if (inner instanceof LoginClient.LoginFailedException
|| inner instanceof CreateAccountException
|| inner instanceof MwException) {
@@ -78,6 +81,10 @@
return e.getDetail() != null && e.getDetail().contains("404");
}
+ public static boolean isOffline(@NonNull Throwable caught) {
+ return caught instanceof UnknownHostException;
+ }
+
private static boolean isNetworkError(@NonNull Throwable e) {
return ThrowableUtil.throwableContainsException(e,
HttpRequest.HttpRequestException.class)
|| ThrowableUtil.throwableContainsException(e,
UnknownHostException.class)
diff --git a/app/src/main/res/drawable/ic_portable_wifi_off_black_24px.xml
b/app/src/main/res/drawable/ic_portable_wifi_off_black_24px.xml
new file mode 100644
index 0000000..98b6999
--- /dev/null
+++ b/app/src/main/res/drawable/ic_portable_wifi_off_black_24px.xml
@@ -0,0 +1,5 @@
+<vector android:autoMirrored="true" android:height="24dp"
+ android:viewportHeight="24.0" android:viewportWidth="24.0"
+ android:width="24dp"
xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#000000"
android:pathData="M17.56,14.24c0.28,-0.69 0.44,-1.45 0.44,-2.24 0,-3.31
-2.69,-6 -6,-6 -0.79,0 -1.55,0.16 -2.24,0.44l1.62,1.62c0.2,-0.03 0.41,-0.06
0.62,-0.06 2.21,0 4,1.79 4,4 0,0.21 -0.02,0.42
-0.05,0.63l1.61,1.61zM12,4c4.42,0 8,3.58 8,8 0,1.35 -0.35,2.62
-0.95,3.74l1.47,1.47C21.46,15.69 22,13.91 22,12c0,-5.52 -4.48,-10 -10,-10
-1.91,0 -3.69,0.55 -5.21,1.47l1.46,1.46C9.37,4.34 10.65,4
12,4zM3.27,2.5L2,3.77l2.1,2.1C2.79,7.57 2,9.69 2,12c0,3.7 2.01,6.92
4.99,8.65l1,-1.73C5.61,17.53 4,14.96 4,12c0,-1.76 0.57,-3.38
1.53,-4.69l1.43,1.44C6.36,9.68 6,10.8 6,12c0,2.22 1.21,4.15
3,5.19l1,-1.74c-1.19,-0.7 -2,-1.97 -2,-3.45 0,-0.65 0.17,-1.25
0.44,-1.79l1.58,1.58L10,12c0,1.1 0.9,2 2,2l0.21,-0.02 0.01,0.01
7.51,7.51L21,20.23 4.27,3.5l-1,-1z"/>
+</vector>
diff --git a/app/src/main/res/layout/dialog_link_preview.xml
b/app/src/main/res/layout/dialog_link_preview.xml
index 17863f4..9cb7f8a 100755
--- a/app/src/main/res/layout/dialog_link_preview.xml
+++ b/app/src/main/res/layout/dialog_link_preview.xml
@@ -94,31 +94,14 @@
android:layout_gravity="center_horizontal" />
</LinearLayout>
- <LinearLayout
- android:id="@+id/dialog_link_preview_offline_container"
+ <org.wikipedia.page.linkpreview.LinkPreviewErrorView
+ android:id="@+id/dialog_link_preview_error_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="gone">
- <ImageView
- android:layout_width="72dp"
- android:layout_height="72dp"
- android:layout_margin="24dp"
- android:layout_gravity="center_horizontal"
- app:srcCompat="@drawable/ic_no_article"
- android:tint="?attr/link_preview_offline_text_color"
- android:contentDescription="@null"/>
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="42dp"
- android:layout_marginRight="42dp"
- android:textSize="18sp"
- android:textColor="?attr/link_preview_offline_text_color"
- android:textAlignment="center"
- android:lineSpacingMultiplier="1.2"
- android:text="@string/dialog_link_preview_offline_notice"/>
- </LinearLayout>
+ </org.wikipedia.page.linkpreview.LinkPreviewErrorView>
<!-- Bottom padding for overlay button -->
<View
diff --git a/app/src/main/res/layout/view_link_preview_error.xml
b/app/src/main/res/layout/view_link_preview_error.xml
new file mode 100644
index 0000000..ade29d7
--- /dev/null
+++ b/app/src/main/res/layout/view_link_preview_error.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ <ImageView
+ android:id="@+id/view_link_preview_error_icon"
+ android:layout_width="72dp"
+ android:layout_height="72dp"
+ android:layout_margin="24dp"
+ android:layout_gravity="center_horizontal"
+ app:srcCompat="@drawable/ic_error_black_24dp"
+ android:tint="?attr/link_preview_offline_text_color"
+ android:contentDescription="@null"/>
+ <TextView
+ android:id="@+id/view_link_preview_error_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="42dp"
+ android:layout_marginRight="42dp"
+ android:textSize="18sp"
+ android:textColor="?attr/link_preview_offline_text_color"
+ android:gravity="center"
+ android:textAlignment="center"
+ android:lineSpacingMultiplier="1.2"
+ android:text="@string/error_message_generic"/>
+</merge>
\ No newline at end of file
diff --git a/app/src/main/res/values-ast/strings.xml
b/app/src/main/res/values-ast/strings.xml
index c3dc0ca..f49fe41 100644
--- a/app/src/main/res/values-ast/strings.xml
+++ b/app/src/main/res/values-ast/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Testu copiáu al cartafueyu.</string>
<string name="button_continue_to_article">Lleer el artículu</string>
<string name="button_add_to_reading_list">Añadir a llista de
llectura</string>
- <string name="dialog_link_preview_offline_notice">L\'artículu nun puede
cargase mentanto teas sin conexón. Añádelo a una llista de llectura y
descargaráse cuando vuelvas a coneutate.</string>
<string name="button_get_directions">Recibir indicaciones</string>
<string name="error_no_maps_app">Nun pudo alcontrase nenguna app qu\'ufra
indicaciones</string>
<string name="preference_title_show_link_previews">Amosar vistes previes de
los enllaces</string>
diff --git a/app/src/main/res/values-bn/strings.xml
b/app/src/main/res/values-bn/strings.xml
index 1a3aa6b..14b5882 100644
--- a/app/src/main/res/values-bn/strings.xml
+++ b/app/src/main/res/values-bn/strings.xml
@@ -226,7 +226,6 @@
<string name="text_copied">লেখা ক্লিপবোর্ডে অনুলিপি হয়েছে।</string>
<string name="button_continue_to_article">নিবন্ধ পড়ুন</string>
<string name="button_add_to_reading_list">পড়ার তালিকায় যোগ করুন</string>
- <string name="dialog_link_preview_offline_notice">অফলাইনে থাকাকালীন নিবন্ধ
লোড করা যাবে না। একটি পড়ার তালিকায় যোগ করুন ও যখন আপনি অনলাইনে আসবেন তখন এটি
ডাউনলোড করা হবে।</string>
<string name="button_get_directions">দিক নির্দেশনা পান</string>
<string name="error_no_maps_app">দিক নির্দেশনা প্রদান করে এমন কোন
অ্যাপ্লিকেশন খুঁজে পাওয়া যায়নি।</string>
<string name="preference_title_show_link_previews">লিঙ্ক প্রাকদর্শন
দেখান</string>
diff --git a/app/src/main/res/values-br/strings.xml
b/app/src/main/res/values-br/strings.xml
index 67391e8..bad6e71 100644
--- a/app/src/main/res/values-br/strings.xml
+++ b/app/src/main/res/values-br/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Testenn kopiet er golver.</string>
<string name="button_continue_to_article">Lenn ar pennad</string>
<string name="button_add_to_reading_list">Ouzhpennañ d\'ar roll lenn</string>
- <string name="dialog_link_preview_offline_notice">N\'haller ket kargañ ar
pennad pa vezit ezlinenn. E ouzhpennañ d\'ar roll lenn ha pellgarget e vo
diwezhatoc\'h pa viot enlinenn.</string>
<string name="button_get_directions">Kaout an tuioù</string>
<string name="error_no_maps_app">Ne c\'haller kavout arload ebet hag a ro
tuioù.</string>
<string name="preference_title_show_link_previews">Diskwel alberzoù al
liammoù</string>
diff --git a/app/src/main/res/values-cnh/strings.xml
b/app/src/main/res/values-cnh/strings.xml
index 2a7a673..040367d 100644
--- a/app/src/main/res/values-cnh/strings.xml
+++ b/app/src/main/res/values-cnh/strings.xml
@@ -178,5 +178,4 @@
<string name="format_error_server_message">Cakuat: \"%s\"</string>
<string name="format_error_server_code">Code: \"%s\"</string>
<string name="button_add_to_reading_list">Relding cazin ah telh</string>
- <string name="dialog_link_preview_offline_notice">Hi cabia cu offline in a
rel kho lo. Na relding cazin ah telh law, na online tikah a download te
lai.</string>
</resources>
diff --git a/app/src/main/res/values-de/strings.xml
b/app/src/main/res/values-de/strings.xml
index a08ec68..a7a6bc2 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Text in die Zwischenablage kopiert.</string>
<string name="button_continue_to_article">Artikel lesen</string>
<string name="button_add_to_reading_list">Zur Leseliste hinzufügen</string>
- <string name="dialog_link_preview_offline_notice">Der Artikel kann nicht
geladen werden, während du offline bist. Füge ihn zu einer Leseliste hinzu und
er wird heruntergeladen, sobald du wieder online bist.</string>
<string name="button_get_directions">Richtungen abrufen</string>
<string name="error_no_maps_app">Es konnten keine Apps gefunden werden, die
Richtungen zur Verfügung stellen.</string>
<string name="preference_title_show_link_previews">Vorschaubilder von Links
anzeigen</string>
diff --git a/app/src/main/res/values-es/strings.xml
b/app/src/main/res/values-es/strings.xml
index c5fdaf3..7c5b525 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Texto copiado en el portapapeles.</string>
<string name="button_continue_to_article">Leer artículo</string>
<string name="button_add_to_reading_list">Añadir a lista de lectura</string>
- <string name="dialog_link_preview_offline_notice">El artículo no se puede
cargar mientras estás sin conexión. Añádelo a una lista de lectura y se
descargará cuando te conectes.</string>
<string name="button_get_directions">Obtener indicaciones</string>
<string name="error_no_maps_app">No se pudo encontrar ninguna aplicación que
proporcione indicaciones.</string>
<string name="preference_title_show_link_previews">Mostrar vistas previas de
enlaces</string>
diff --git a/app/src/main/res/values-fa/strings.xml
b/app/src/main/res/values-fa/strings.xml
index a1acdf2..6d898f2 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">متن در حافظهٔ موقت ذخیره شد.</string>
<string name="button_continue_to_article">مطالعهٔ مقاله</string>
<string name="button_add_to_reading_list">افزودن به فهرست مطالعه</string>
- <string name="dialog_link_preview_offline_notice">در حالت آفلاین امکان
بارگیری مقاله وجود ندارد. به فهرست مطالعه افزوده شود تا در زمانی که اینترنت در
دسترس بود قابل مطالعه باشد.</string>
<string name="button_get_directions">دریافت مسیر</string>
<string name="error_no_maps_app">نمی تواند اپلیکیشنی برای یافتن جهت پیدا
کند.</string>
<string name="preference_title_show_link_previews">نمایش پیوند
پیشنمایشها</string>
diff --git a/app/src/main/res/values-fi/strings.xml
b/app/src/main/res/values-fi/strings.xml
index e5c1e4d..ae12eec 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -224,7 +224,6 @@
<string name="text_copied">Teksti kopioitu leikepöydälle.</string>
<string name="button_continue_to_article">Lue artikkeli</string>
<string name="button_add_to_reading_list">Lisää lukulistaan</string>
- <string name="dialog_link_preview_offline_notice">Artikkelia ei voi ladata
offline-tilassa. Lisää lukulistaan ja se tullaan lataamaan, kun olet taas
online-tilassa.</string>
<string name="button_get_directions">Hae reittiohjeet</string>
<string name="error_no_maps_app">Yhtäkään reittiohjeita tarjoavaa sovellusta
ei löytynyt</string>
<string name="preference_title_show_link_previews">Näytä linkkien
esikatselut</string>
diff --git a/app/src/main/res/values-fr/strings.xml
b/app/src/main/res/values-fr/strings.xml
index b1eac3d..03bebd5 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -228,7 +228,6 @@
<string name="text_copied">Texte copié dans le presse-papier.</string>
<string name="button_continue_to_article">Lire l’article</string>
<string name="button_add_to_reading_list">Ajouter à la liste de
lecture</string>
- <string name="dialog_link_preview_offline_notice">L’article ne peut pas être
chargé hors connexion. Ajoutez-le à une liste de lecture et il sera téléchargé
une fois que vous serez connecté.</string>
<string name="button_get_directions">Obtenir les directions</string>
<string name="error_no_maps_app">Impossible de trouver une application qui
fournit des directions.</string>
<string name="preference_title_show_link_previews">Afficher les aperçus de
lien</string>
diff --git a/app/src/main/res/values-gl/strings.xml
b/app/src/main/res/values-gl/strings.xml
index 72cffca..d254418 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">O texto copiouse no portapapeis.</string>
<string name="button_continue_to_article">Artigo lido</string>
<string name="button_add_to_reading_list">Engadir á lista de lectura</string>
- <string name="dialog_link_preview_offline_notice">O artigo non se pode
cargar mentras está sen conexión. Engádao a unha lista de lectura e
descargarase cando estea conectado.</string>
<string name="button_get_directions">Obter as direccións</string>
<string name="error_no_maps_app">Imposible atopar unha aplicación que
proporcione as direccións.</string>
<string name="preference_title_show_link_previews">Mostrar vistas previas de
ligazóns</string>
diff --git a/app/src/main/res/values-hu/strings.xml
b/app/src/main/res/values-hu/strings.xml
index b217a92..3e20ce2 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -225,7 +225,6 @@
<string name="text_copied">Szöveg másolva a vágólapra.</string>
<string name="button_continue_to_article">Olvasd el a cikket</string>
<string name="button_add_to_reading_list">Hozzáadás az
olvasólistához</string>
- <string name="dialog_link_preview_offline_notice">Nem lehet betölteni a
szócikket kapcsolat nélkül. Add hozzá egy olvasólistához, hogy automatikusan
letöltődjön, amikor kapcsolódsz az internethez.</string>
<string name="button_get_directions">Útvonalterv</string>
<string name="error_no_maps_app">Nem található útvonaltervező
alkalmazás.</string>
<string name="preference_title_show_link_previews">Linkek előnézetének
megjelenítése</string>
diff --git a/app/src/main/res/values-iw/strings.xml
b/app/src/main/res/values-iw/strings.xml
index 3c6ea85..cbf1eb9 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">הטקסט הועתק ללוח.</string>
<string name="button_continue_to_article">לקרוא את הערך</string>
<string name="button_add_to_reading_list">הוספה לרשימת קריאה</string>
- <string name="dialog_link_preview_offline_notice">אי־אפשר לטעון ערך ללא
חיבור לרשת. אפשר להוסיף ערך לרשימת קריאה והוא ייטען ויישמר אחרי התחברות
לרשת.</string>
<string name="button_get_directions">לקבל כיוונים</string>
<string name="error_no_maps_app">לא מצאתי שום אפליקציה שנותנת
כיוונים.</string>
<string name="preference_title_show_link_previews">תצוגה מקדימה של
קישורים</string>
diff --git a/app/src/main/res/values-ko/strings.xml
b/app/src/main/res/values-ko/strings.xml
index 2dff7a6..4b0d41a 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -225,7 +225,6 @@
<string name="text_copied">텍스트가 클립보드에 복사되었습니다.</string>
<string name="button_continue_to_article">문서 읽기</string>
<string name="button_add_to_reading_list">읽기 목록에 추가</string>
- <string name="dialog_link_preview_offline_notice">오프라인 상태에서는 글을 불러올 수 없습니다.
글을 읽기 목록에 추가하면 온라인 상태일 때 다운로드됩니다.</string>
<string name="button_get_directions">경로 얻기</string>
<string name="error_no_maps_app">주어진 경로의 앱을 찾지 못하였습니다.</string>
<string name="preference_title_show_link_previews">링크 미리보기 보이기</string>
diff --git a/app/src/main/res/values-mk/strings.xml
b/app/src/main/res/values-mk/strings.xml
index 91b5864..d960614 100644
--- a/app/src/main/res/values-mk/strings.xml
+++ b/app/src/main/res/values-mk/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Текстот е ставен во меѓускладот.</string>
<string name="button_continue_to_article">Прочитајте ја статијата</string>
<string name="button_add_to_reading_list">Додај во список за читање</string>
- <string name="dialog_link_preview_offline_notice">Статијата не може да се
вчита додека не сте на линија. Додајте ја во списокот за читање за да се
преземе кога ќе добиете линија.</string>
<string name="button_get_directions">Дај насоки</string>
<string name="error_no_maps_app">Не можев да најдам прилози што даваат
насоки.</string>
<string name="preference_title_show_link_previews">Прегледи на врски</string>
diff --git a/app/src/main/res/values-qq/strings.xml
b/app/src/main/res/values-qq/strings.xml
index db76529..5ada8a8 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -348,7 +348,8 @@
<string name="text_copied">Message shown after copying text to the system
clipboard.</string>
<string name="button_continue_to_article">Button to continue to the full
article from the current link preview.</string>
<string name="button_add_to_reading_list">Button text for adding the current
page to a reading list.</string>
- <string name="dialog_link_preview_offline_notice">Notice informing the user
that the article cannot be loaded while the app is offline, and inviting the
user to add the page to a reading list to be donwloaded when back
online.</string>
+ <string name="page_offline_notice_cannot_load_while_offline">Message
informing the user that an article cannot be loaded while the app is offline.
This message is followed by page_offline_notice_add_to_reading_list.</string>
+ <string name="page_offline_notice_add_to_reading_list">Message inviting the
user to add the requested article to a reading list to be donwloaded when the
app is online. This message follows
page_offline_notice_cannot_load_while_offline.</string>
<string name="button_get_directions">Button to obtain directions to the
location specified in the link preview.</string>
<string name="error_no_maps_app">Error displayed when the device does not
have any apps installed that are capable of providing directions to a
location.</string>
<string name="preference_title_show_link_previews">Title of the preference
for enabling or disabling link previews.
@@ -369,6 +370,9 @@
<string name="location_permissions_enable_action">Button label for
requesting to turn on location permissions.</string>
<string name="error_webview_updating">Error informing the user that the
System WebView is being updated, meaning that the app cannot be launched right
now, and that the user should try again in a moment.</string>
<string name="multi_select_items_selected">Toolbar title shown when the user
is selecting multiple items in a list. The \"%d\" symbol is replaced with the
number of items currently selected.</string>
+ <string name="error_message_generic">Generic message informing the user that
an error occurred</string>
+ <string name="view_link_preview_error_button_dismiss">Button label for a
button to dismiss a link preview</string>
+ <string name="error_page_does_not_exist">Error message informing the user
that the requested page does not exist</string>
<string name="crash_report_dialog_title">Title of the dialog that pops up
when the app crashes, asking user to send a report</string>
<string name="crash_report_dialog_text">Text asking the user to send us a
crash report</string>
<string name="crash_report_dialog_dont_send_button">In the dialog that pops
up when the app crashes, text for button that doesn\'t send a crash report.
diff --git a/app/src/main/res/values-ru/strings.xml
b/app/src/main/res/values-ru/strings.xml
index 07fcbd8..3359095 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Текст скопирован в буфер обмена.</string>
<string name="button_continue_to_article">Читать статью</string>
<string name="button_add_to_reading_list">Добавить в список для
чтения</string>
- <string name="dialog_link_preview_offline_notice">Статья не может быть
загружена при нахождении в автономном режиме. Добавьте её в список для чтения,
и он будет загружена, как только вы окажетесь онлайн.</string>
<string name="button_get_directions">Проложить маршрут</string>
<string name="error_no_maps_app">Не удалось найти ни одного приложения,
которое бы прокладывало маршрут.</string>
<string name="preference_title_show_link_previews">Показывать предпросмотр
ссылок</string>
diff --git a/app/src/main/res/values-sv/strings.xml
b/app/src/main/res/values-sv/strings.xml
index 0b39aed..aff4e7b 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Texten kopierades till urklipp.</string>
<string name="button_continue_to_article">Läs artikeln</string>
<string name="button_add_to_reading_list">Lägg till i läslista</string>
- <string name="dialog_link_preview_offline_notice">Artikeln kan inte läsas in
när du är offline. Lägg till den i en läslista så kommer den laddas ned när du
är online.</string>
<string name="button_get_directions">Få vägbeskrivningar</string>
<string name="error_no_maps_app">Kunde inte hitta några appar som kan ge
vägbeskrivningar.</string>
<string name="preference_title_show_link_previews">Visa förhandsvisning för
länkar</string>
diff --git a/app/src/main/res/values-tr/strings.xml
b/app/src/main/res/values-tr/strings.xml
index 0874ab3..d59928c 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Metin panoya kopyalandı.</string>
<string name="button_continue_to_article">Maddeyi oku</string>
<string name="button_add_to_reading_list">Okuma listesine ekle</string>
- <string name="dialog_link_preview_offline_notice">Madde çevrimdışı olarak
yüklenemez. Bir okuma listesine eklerseniz, çevrimiçi olduğunuzda
indirilecektir.</string>
<string name="button_get_directions">Yol tarifi al</string>
<string name="error_no_maps_app">Tarif verebilecek herhangi bir uygulama
bulunamadı.</string>
<string name="preference_title_show_link_previews">Bağlantı ön izlemelerini
görüntüle</string>
diff --git a/app/src/main/res/values-uk/strings.xml
b/app/src/main/res/values-uk/strings.xml
index e531d9e..9599f08 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">Текст скопійовано в буфер обміну.</string>
<string name="button_continue_to_article">Читати статтю</string>
<string name="button_add_to_reading_list">Додати до списку для
читання</string>
- <string name="dialog_link_preview_offline_notice">Статтю не можна
завантажити без інтернет-з\'єднання. Додайте її до списку для читання, і її
буде завантажено, як тільки Ви знову матимете доступ до інтернету.</string>
<string name="button_get_directions">Прокласти маршрут</string>
<string name="error_no_maps_app">Не вдалося знайти жодної програми, яка
прокладала б маршрут.</string>
<string name="preference_title_show_link_previews">Показувати попередній
перегляд посилань</string>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml
b/app/src/main/res/values-zh-rTW/strings.xml
index 3e07f1c..f4243a0 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">文字已複製至剪貼簿。</string>
<string name="button_continue_to_article">閱讀條目</string>
<string name="button_add_to_reading_list">新增至閱讀清單</string>
- <string
name="dialog_link_preview_offline_notice">條目不能在離線時載入。若添加條目至閱讀清單可在您重新上線時下載。</string>
<string name="button_get_directions">取得路線</string>
<string name="error_no_maps_app">無法找到任何提供路線的應用程式。</string>
<string name="preference_title_show_link_previews">顯示連結預覽</string>
diff --git a/app/src/main/res/values-zh/strings.xml
b/app/src/main/res/values-zh/strings.xml
index 39a4c3b..9af5c76 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -227,7 +227,6 @@
<string name="text_copied">文本已复制至剪贴板。</string>
<string name="button_continue_to_article">阅读条目</string>
<string name="button_add_to_reading_list">添加至阅读列表</string>
- <string
name="dialog_link_preview_offline_notice">条目不能在离线时加载。可添加到阅读列表,这样当您恢复在线时条目将自动下载。</string>
<string name="button_get_directions">路线导航</string>
<string name="error_no_maps_app">找不到任何提供导航的应用程序。</string>
<string name="preference_title_show_link_previews">显示链接预览</string>
diff --git a/app/src/main/res/values/strings.xml
b/app/src/main/res/values/strings.xml
index 04ec038..859a3a1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -242,7 +242,8 @@
<string name="text_copied">Text copied to clipboard.</string>
<string name="button_continue_to_article">Read article</string>
<string name="button_add_to_reading_list">Add to reading list</string>
- <string name="dialog_link_preview_offline_notice">Article cannot be loaded
while offline. Add to a reading list and it will be downloaded once you\'re
back online.</string>
+ <string name="page_offline_notice_cannot_load_while_offline">Article
cannot be loaded while offline.</string>
+ <string name="page_offline_notice_add_to_reading_list">Add the article to
a reading list and it will be downloaded once you\'re back online.</string>
<string name="button_get_directions">Get directions</string>
<string name="error_no_maps_app">Could not find any apps that provide
directions.</string>
<string name="preference_title_show_link_previews">Show link
previews</string>
@@ -255,6 +256,9 @@
<string name="location_permissions_enable_action">Turn on</string>
<string name="error_webview_updating">The Android System WebView is
currently being updated. Please try again in a moment.</string>
<string name="multi_select_items_selected">%d selected</string>
+ <string name="error_message_generic">An error occurred</string>
+ <string name="view_link_preview_error_button_dismiss">Dismiss</string>
+ <string name="error_page_does_not_exist">This page does not exist</string>
<!-- Crash reporter -->
<string name="crash_report_dialog_title">Sorry, app crashed last
time</string>
--
To view, visit https://gerrit.wikimedia.org/r/344687
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3b95431abb9305b191250ff527272d1869208c54
Gerrit-PatchSet: 5
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits