From f70a0551b4975dd7f62d1df4247b1e9fd2e5c8ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Padarian?= Date: Sun, 12 Apr 2020 19:46:12 +1000 Subject: [PATCH 1/3] Added option to show image title or alt as caption --- .../readrops/app/activities/ItemActivity.java | 56 ++++++++++++++----- .../app/fragments/ImageCaptionFragment.java | 41 ++++++++++++++ .../readrops/app/utils/ReadropsWebView.java | 5 ++ app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values/arrays.xml | 1 + app/src/main/res/values/strings.xml | 2 + 6 files changed, 94 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/com/readrops/app/fragments/ImageCaptionFragment.java diff --git a/app/src/main/java/com/readrops/app/activities/ItemActivity.java b/app/src/main/java/com/readrops/app/activities/ItemActivity.java index 79653de1..935ae3fe 100644 --- a/app/src/main/java/com/readrops/app/activities/ItemActivity.java +++ b/app/src/main/java/com/readrops/app/activities/ItemActivity.java @@ -1,6 +1,7 @@ package com.readrops.app.activities; import android.Manifest; +import android.app.DialogFragment; import android.app.DownloadManager; import android.content.Intent; 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.floatingactionbutton.FloatingActionButton; import com.readrops.app.R; +import com.readrops.app.fragments.ImageCaptionFragment; import com.readrops.readropsdb.entities.Item; import com.readrops.readropsdb.pojo.ItemWithFeed; 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.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.IMAGE_URL; import static com.readrops.app.utils.ReadropsKeys.ITEM_ID; @@ -79,6 +84,7 @@ public class ItemActivity extends AppCompatActivity { private CoordinatorLayout rootLayout; private String urlToDownload; + private String imageTitle; @Override protected void onCreate(Bundle savedInstanceState) { @@ -278,23 +284,47 @@ public class ItemActivity extends AppCompatActivity { if (hitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE || hitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { - new MaterialDialog.Builder(this) - .title(R.string.image_options) - .items(R.array.image_options) - .itemsCallback((dialog, itemView, position, text) -> { - if (position == 0) - shareImage(hitTestResult.getExtra()); + MaterialDialog.Builder builder = new MaterialDialog.Builder(this); + builder.title(R.string.image_options); + builder.items(R.array.image_options); + builder.itemsCallback((dialog, itemView, position, text) -> { + switch (position) { + case 0: + shareImage(hitTestResult.getExtra()); + break; + case 1: + if (PermissionManager.isPermissionGranted(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) + downloadImage(hitTestResult.getExtra()); else { - if (PermissionManager.isPermissionGranted(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) - downloadImage(hitTestResult.getExtra()); - else { - urlToDownload = hitTestResult.getExtra(); - PermissionManager.requestPermissions(this, WRITE_EXTERNAL_STORAGE_REQUEST, Manifest.permission.WRITE_EXTERNAL_STORAGE); + urlToDownload = hitTestResult.getExtra(); + 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("()"); + Matcher m = p.matcher(content); + if (m.matches()) { + Pattern p2 = Pattern.compile(""); + Matcher m2 = p2.matcher(content); + if (m2.matches()) { + imageTitle = m2.group(2); + } else { + imageTitle = ""; } } - }) - .show(); + DialogFragment newFragment = ImageCaptionFragment.newInstance(urlToDownload, imageTitle); + newFragment.show(getFragmentManager(), "dialog"); + break; + default: + throw new IllegalStateException("Unexpected value: " + position); + } + + }); + builder.show(); } } diff --git a/app/src/main/java/com/readrops/app/fragments/ImageCaptionFragment.java b/app/src/main/java/com/readrops/app/fragments/ImageCaptionFragment.java new file mode 100644 index 00000000..6fc0a7f2 --- /dev/null +++ b/app/src/main/java/com/readrops/app/fragments/ImageCaptionFragment.java @@ -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(); + } +} diff --git a/app/src/main/java/com/readrops/app/utils/ReadropsWebView.java b/app/src/main/java/com/readrops/app/utils/ReadropsWebView.java index 3258c658..6aa661d6 100644 --- a/app/src/main/java/com/readrops/app/utils/ReadropsWebView.java +++ b/app/src/main/java/com/readrops/app/utils/ReadropsWebView.java @@ -48,6 +48,11 @@ public class ReadropsWebView extends WebView { 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) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ReadropsWebView); textColor = typedArray.getColor(R.styleable.ReadropsWebView_textColor, 0); diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 58133580..4b8efac5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -129,5 +129,7 @@ La synchronisation automatique est désactivée Les notifications nécessitent l\'activation de la synchronisation automatique pour fonctionner.\nVoulez-vous ouvrir les paramètres ? Ouvrir + Retour + Afficher la légende \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 3e96e77c..f196a218 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -13,6 +13,7 @@ @string/share_image @string/download_image + @string/show_caption diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 070b60a2..22ede252 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -135,4 +135,6 @@ Automatic synchronization is disabled To be displayed, notifications need auto synchronization to be activated.\nDo you want to open settings ? Open + Back + Show caption From 6b56e914b32973bc43c8866abc6fc60f7dfc2ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Padarian?= Date: Tue, 14 Apr 2020 09:35:00 +1000 Subject: [PATCH 2/3] Changed from DialogFragment to MaterialDialog --- .../readrops/app/activities/ItemActivity.java | 9 ++-- .../app/fragments/ImageCaptionFragment.java | 41 ------------------- 2 files changed, 4 insertions(+), 46 deletions(-) delete mode 100644 app/src/main/java/com/readrops/app/fragments/ImageCaptionFragment.java diff --git a/app/src/main/java/com/readrops/app/activities/ItemActivity.java b/app/src/main/java/com/readrops/app/activities/ItemActivity.java index 935ae3fe..acb177f2 100644 --- a/app/src/main/java/com/readrops/app/activities/ItemActivity.java +++ b/app/src/main/java/com/readrops/app/activities/ItemActivity.java @@ -1,7 +1,6 @@ package com.readrops.app.activities; import android.Manifest; -import android.app.DialogFragment; import android.app.DownloadManager; import android.content.Intent; import android.content.pm.PackageManager; @@ -40,7 +39,6 @@ import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.readrops.app.R; -import com.readrops.app.fragments.ImageCaptionFragment; import com.readrops.readropsdb.entities.Item; import com.readrops.readropsdb.pojo.ItemWithFeed; import com.readrops.app.utils.DateUtils; @@ -315,9 +313,10 @@ public class ItemActivity extends AppCompatActivity { imageTitle = ""; } } - - DialogFragment newFragment = ImageCaptionFragment.newInstance(urlToDownload, imageTitle); - newFragment.show(getFragmentManager(), "dialog"); + MaterialDialog.Builder captionBuilder = new MaterialDialog.Builder(this); + captionBuilder.title(urlToDownload); + captionBuilder.content(imageTitle); + captionBuilder.show(); break; default: throw new IllegalStateException("Unexpected value: " + position); diff --git a/app/src/main/java/com/readrops/app/fragments/ImageCaptionFragment.java b/app/src/main/java/com/readrops/app/fragments/ImageCaptionFragment.java deleted file mode 100644 index 6fc0a7f2..00000000 --- a/app/src/main/java/com/readrops/app/fragments/ImageCaptionFragment.java +++ /dev/null @@ -1,41 +0,0 @@ -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(); - } -} From 4d94d6bced833f8342e5e9732c01541d743bfe5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Padarian?= Date: Sun, 19 Apr 2020 14:45:55 +1000 Subject: [PATCH 3/3] Reformatting --- .../readrops/app/activities/ItemActivity.java | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/com/readrops/app/activities/ItemActivity.java b/app/src/main/java/com/readrops/app/activities/ItemActivity.java index acb177f2..2416576d 100644 --- a/app/src/main/java/com/readrops/app/activities/ItemActivity.java +++ b/app/src/main/java/com/readrops/app/activities/ItemActivity.java @@ -282,48 +282,48 @@ public class ItemActivity extends AppCompatActivity { if (hitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE || hitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { - MaterialDialog.Builder builder = new MaterialDialog.Builder(this); - builder.title(R.string.image_options); - builder.items(R.array.image_options); - builder.itemsCallback((dialog, itemView, position, text) -> { - switch (position) { - case 0: - shareImage(hitTestResult.getExtra()); - break; - case 1: - if (PermissionManager.isPermissionGranted(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) - downloadImage(hitTestResult.getExtra()); - else { - urlToDownload = hitTestResult.getExtra(); - PermissionManager.requestPermissions(this, WRITE_EXTERNAL_STORAGE_REQUEST, Manifest.permission.WRITE_EXTERNAL_STORAGE); - } - break; - case 2: - urlToDownload = hitTestResult.getExtra(); - String content = webView.getItemContent(); + new MaterialDialog.Builder(this) + .title(R.string.image_options) + .items(R.array.image_options) + .itemsCallback((dialog, itemView, position, text) -> { + switch (position) { + case 0: + shareImage(hitTestResult.getExtra()); + break; + case 1: + if (PermissionManager.isPermissionGranted(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) + downloadImage(hitTestResult.getExtra()); + else { + urlToDownload = hitTestResult.getExtra(); + 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("()"); - Matcher m = p.matcher(content); - if (m.matches()) { - Pattern p2 = Pattern.compile(""); - Matcher m2 = p2.matcher(content); - if (m2.matches()) { - imageTitle = m2.group(2); - } else { - imageTitle = ""; - } + Pattern p = Pattern.compile("()"); + Matcher m = p.matcher(content); + if (m.matches()) { + Pattern p2 = Pattern.compile(""); + Matcher m2 = p2.matcher(content); + if (m2.matches()) { + imageTitle = m2.group(2); + } else { + imageTitle = ""; + } + } + new MaterialDialog.Builder(this) + .title(urlToDownload) + .content(imageTitle) + .show(); + break; + default: + throw new IllegalStateException("Unexpected value: " + position); } - MaterialDialog.Builder captionBuilder = new MaterialDialog.Builder(this); - captionBuilder.title(urlToDownload); - captionBuilder.content(imageTitle); - captionBuilder.show(); - break; - default: - throw new IllegalStateException("Unexpected value: " + position); - } - }); - builder.show(); + }) + .show(); } }