Added option to show image title or alt as caption
This commit is contained in:
parent
2fd2f21e6f
commit
f70a0551b4
@ -1,6 +1,7 @@
|
|||||||
package com.readrops.app.activities;
|
package com.readrops.app.activities;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
|
import android.app.DialogFragment;
|
||||||
import android.app.DownloadManager;
|
import android.app.DownloadManager;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@ -39,6 +40,7 @@ import com.google.android.material.appbar.AppBarLayout;
|
|||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
import com.readrops.app.R;
|
import com.readrops.app.R;
|
||||||
|
import com.readrops.app.fragments.ImageCaptionFragment;
|
||||||
import com.readrops.readropsdb.entities.Item;
|
import com.readrops.readropsdb.entities.Item;
|
||||||
import com.readrops.readropsdb.pojo.ItemWithFeed;
|
import com.readrops.readropsdb.pojo.ItemWithFeed;
|
||||||
import com.readrops.app.utils.DateUtils;
|
import com.readrops.app.utils.DateUtils;
|
||||||
@ -49,6 +51,9 @@ import com.readrops.app.utils.SharedPreferencesManager;
|
|||||||
import com.readrops.app.utils.Utils;
|
import com.readrops.app.utils.Utils;
|
||||||
import com.readrops.app.viewmodels.ItemViewModel;
|
import com.readrops.app.viewmodels.ItemViewModel;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static com.readrops.app.utils.ReadropsKeys.ACTION_BAR_COLOR;
|
import static com.readrops.app.utils.ReadropsKeys.ACTION_BAR_COLOR;
|
||||||
import static com.readrops.app.utils.ReadropsKeys.IMAGE_URL;
|
import static com.readrops.app.utils.ReadropsKeys.IMAGE_URL;
|
||||||
import static com.readrops.app.utils.ReadropsKeys.ITEM_ID;
|
import static com.readrops.app.utils.ReadropsKeys.ITEM_ID;
|
||||||
@ -79,6 +84,7 @@ public class ItemActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private CoordinatorLayout rootLayout;
|
private CoordinatorLayout rootLayout;
|
||||||
private String urlToDownload;
|
private String urlToDownload;
|
||||||
|
private String imageTitle;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -278,23 +284,47 @@ public class ItemActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
if (hitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE ||
|
if (hitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE ||
|
||||||
hitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
|
hitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
|
||||||
new MaterialDialog.Builder(this)
|
MaterialDialog.Builder builder = new MaterialDialog.Builder(this);
|
||||||
.title(R.string.image_options)
|
builder.title(R.string.image_options);
|
||||||
.items(R.array.image_options)
|
builder.items(R.array.image_options);
|
||||||
.itemsCallback((dialog, itemView, position, text) -> {
|
builder.itemsCallback((dialog, itemView, position, text) -> {
|
||||||
if (position == 0)
|
switch (position) {
|
||||||
|
case 0:
|
||||||
shareImage(hitTestResult.getExtra());
|
shareImage(hitTestResult.getExtra());
|
||||||
else {
|
break;
|
||||||
|
case 1:
|
||||||
if (PermissionManager.isPermissionGranted(this, Manifest.permission.WRITE_EXTERNAL_STORAGE))
|
if (PermissionManager.isPermissionGranted(this, Manifest.permission.WRITE_EXTERNAL_STORAGE))
|
||||||
downloadImage(hitTestResult.getExtra());
|
downloadImage(hitTestResult.getExtra());
|
||||||
else {
|
else {
|
||||||
urlToDownload = hitTestResult.getExtra();
|
urlToDownload = hitTestResult.getExtra();
|
||||||
PermissionManager.requestPermissions(this, WRITE_EXTERNAL_STORAGE_REQUEST, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
PermissionManager.requestPermissions(this, WRITE_EXTERNAL_STORAGE_REQUEST, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
urlToDownload = hitTestResult.getExtra();
|
||||||
|
String content = webView.getItemContent();
|
||||||
|
|
||||||
|
Pattern p = Pattern.compile("(<img.*src=\"" + urlToDownload + "\".*>)");
|
||||||
|
Matcher m = p.matcher(content);
|
||||||
|
if (m.matches()) {
|
||||||
|
Pattern p2 = Pattern.compile("<img.*(title|alt)=\"(.*?)\".*>");
|
||||||
|
Matcher m2 = p2.matcher(content);
|
||||||
|
if (m2.matches()) {
|
||||||
|
imageTitle = m2.group(2);
|
||||||
|
} else {
|
||||||
|
imageTitle = "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
DialogFragment newFragment = ImageCaptionFragment.newInstance(urlToDownload, imageTitle);
|
||||||
.show();
|
newFragment.show(getFragmentManager(), "dialog");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Unexpected value: " + position);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
builder.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package com.readrops.app.fragments;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.app.DialogFragment;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.readrops.app.R;
|
||||||
|
|
||||||
|
public class ImageCaptionFragment extends DialogFragment {
|
||||||
|
|
||||||
|
public static ImageCaptionFragment newInstance(CharSequence title, CharSequence message) {
|
||||||
|
ImageCaptionFragment f = new ImageCaptionFragment();
|
||||||
|
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putCharSequence("title", title);
|
||||||
|
args.putCharSequence("message", message);
|
||||||
|
f.setArguments(args);
|
||||||
|
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
CharSequence title = getArguments().getCharSequence("title");
|
||||||
|
CharSequence message = getArguments().getCharSequence("message");
|
||||||
|
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
|
builder.setTitle(title);
|
||||||
|
builder.setMessage(message);
|
||||||
|
builder.setNegativeButton(R.string.back, new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
|
// User cancelled the dialog
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return builder.create();
|
||||||
|
}
|
||||||
|
}
|
@ -48,6 +48,11 @@ public class ReadropsWebView extends WebView {
|
|||||||
loadData(base64Content, "text/html; charset=utf-8", "base64");
|
loadData(base64Content, "text/html; charset=utf-8", "base64");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getItemContent() {
|
||||||
|
String content = itemWithFeed.getItem().getContent();
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
private void getColors(Context context, AttributeSet attrs) {
|
private void getColors(Context context, AttributeSet attrs) {
|
||||||
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ReadropsWebView);
|
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ReadropsWebView);
|
||||||
textColor = typedArray.getColor(R.styleable.ReadropsWebView_textColor, 0);
|
textColor = typedArray.getColor(R.styleable.ReadropsWebView_textColor, 0);
|
||||||
|
@ -129,5 +129,7 @@
|
|||||||
<string name="auto_synchro_disabled">La synchronisation automatique est désactivée</string>
|
<string name="auto_synchro_disabled">La synchronisation automatique est désactivée</string>
|
||||||
<string name="enable_auto_synchro_text">Les notifications nécessitent l\'activation de la synchronisation automatique pour fonctionner.\nVoulez-vous ouvrir les paramètres ?</string>
|
<string name="enable_auto_synchro_text">Les notifications nécessitent l\'activation de la synchronisation automatique pour fonctionner.\nVoulez-vous ouvrir les paramètres ?</string>
|
||||||
<string name="open">Ouvrir</string>
|
<string name="open">Ouvrir</string>
|
||||||
|
<string name="back">Retour</string>
|
||||||
|
<string name="show_caption">Afficher la légende</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -13,6 +13,7 @@
|
|||||||
<string-array name="image_options">
|
<string-array name="image_options">
|
||||||
<item>@string/share_image</item>
|
<item>@string/share_image</item>
|
||||||
<item>@string/download_image</item>
|
<item>@string/download_image</item>
|
||||||
|
<item>@string/show_caption</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="items_per_feed_numbers_values">
|
<string-array name="items_per_feed_numbers_values">
|
||||||
|
@ -135,4 +135,6 @@
|
|||||||
<string name="auto_synchro_disabled">Automatic synchronization is disabled</string>
|
<string name="auto_synchro_disabled">Automatic synchronization is disabled</string>
|
||||||
<string name="enable_auto_synchro_text">To be displayed, notifications need auto synchronization to be activated.\nDo you want to open settings ?</string>
|
<string name="enable_auto_synchro_text">To be displayed, notifications need auto synchronization to be activated.\nDo you want to open settings ?</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="back">Back</string>
|
||||||
|
<string name="show_caption">Show caption</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user