From 48b3b5e76377333b559c636677bb0da0863042a5 Mon Sep 17 00:00:00 2001
From: maniac103 <dannybaumann@web.de>
Date: Fri, 31 May 2019 18:02:49 +0000
Subject: [PATCH] Fix chart and image widget scaling. (#1382)

Only enforce passed desired size in HTTP bitmap loading if needed, and
for charts it certainly isn't needed.

Signed-off-by: Danny Baumann <dannybaumann@web.de>
---
 .../main/java/org/openhab/habdroid/ui/MainActivity.java   | 2 +-
 .../java/org/openhab/habdroid/ui/WidgetListFragment.java  | 2 +-
 .../org/openhab/habdroid/ui/widget/WidgetImageView.java   | 2 +-
 .../java/org/openhab/habdroid/util/AsyncHttpClient.java   | 6 ++++--
 .../main/java/org/openhab/habdroid/util/HttpClient.java   | 8 +++++---
 .../java/org/openhab/habdroid/util/SyncHttpClient.java    | 8 ++++----
 6 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/MainActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/MainActivity.java
index f0188f83..cfb66a5e 100644
--- a/mobile/src/main/java/org/openhab/habdroid/ui/MainActivity.java
+++ b/mobile/src/main/java/org/openhab/habdroid/ui/MainActivity.java
@@ -706,7 +706,7 @@ public class MainActivity extends AbstractBaseActivity implements
             return;
         }
         mConnection.getAsyncHttpClient().get(url,
-                new AsyncHttpClient.BitmapResponseHandler(defaultIcon.getIntrinsicWidth()) {
+                new AsyncHttpClient.BitmapResponseHandler(defaultIcon.getIntrinsicWidth(), true) {
             @Override
             public void onFailure(Request request, int statusCode, Throwable error) {
                 Log.w(TAG, "Could not fetch icon for sitemap " + sitemap.name());
diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetListFragment.java b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetListFragment.java
index 16793e77..83fda2c5 100644
--- a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetListFragment.java
+++ b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetListFragment.java
@@ -311,7 +311,7 @@ public class WidgetListFragment extends Fragment
                      **/
                     int foregroundSize = (int) Util.convertDpToPixel(46, context);
                     Bitmap bitmap = connection.getSyncHttpClient().get(url)
-                            .asBitmap(foregroundSize).response;
+                            .asBitmap(foregroundSize, true).response;
                     if (bitmap != null) {
                         bitmap = addBackgroundAndBorder(bitmap,
                                 (int) Util.convertDpToPixel(31, context));
diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/widget/WidgetImageView.java b/mobile/src/main/java/org/openhab/habdroid/ui/widget/WidgetImageView.java
index 2a142a58..7ecff3a0 100644
--- a/mobile/src/main/java/org/openhab/habdroid/ui/widget/WidgetImageView.java
+++ b/mobile/src/main/java/org/openhab/habdroid/ui/widget/WidgetImageView.java
@@ -273,7 +273,7 @@ public class WidgetImageView extends AppCompatImageView {
         private Call mCall;
 
         public HttpImageRequest(int size, AsyncHttpClient client, HttpUrl url, long timeoutMillis) {
-            super(size);
+            super(size, false);
             mClient = client;
             mUrl = url;
             mTimeoutMillis = timeoutMillis;
diff --git a/mobile/src/main/java/org/openhab/habdroid/util/AsyncHttpClient.java b/mobile/src/main/java/org/openhab/habdroid/util/AsyncHttpClient.java
index 08ab6d5e..84ae662e 100644
--- a/mobile/src/main/java/org/openhab/habdroid/util/AsyncHttpClient.java
+++ b/mobile/src/main/java/org/openhab/habdroid/util/AsyncHttpClient.java
@@ -42,14 +42,16 @@ public class AsyncHttpClient extends HttpClient {
 
     public abstract static class BitmapResponseHandler implements ResponseHandler<Bitmap> {
         private final int mSize;
+        private final boolean mEnforceSize;
 
-        public BitmapResponseHandler(int sizePx) {
+        public BitmapResponseHandler(int sizePx, boolean enforceSize) {
             mSize = sizePx;
+            mEnforceSize = enforceSize;
         }
 
         @Override
         public Bitmap convertBodyInBackground(ResponseBody body) throws IOException {
-            return getBitmapFromResponseBody(body, mSize);
+            return getBitmapFromResponseBody(body, mSize, mEnforceSize);
         }
     }
 
diff --git a/mobile/src/main/java/org/openhab/habdroid/util/HttpClient.java b/mobile/src/main/java/org/openhab/habdroid/util/HttpClient.java
index f5cbd682..3996cf80 100644
--- a/mobile/src/main/java/org/openhab/habdroid/util/HttpClient.java
+++ b/mobile/src/main/java/org/openhab/habdroid/util/HttpClient.java
@@ -122,8 +122,8 @@ public abstract class HttpClient {
         return builder;
     }
 
-    protected static Bitmap getBitmapFromResponseBody(ResponseBody body, int size)
-            throws IOException {
+    protected static Bitmap getBitmapFromResponseBody(ResponseBody body,
+            int size, boolean enforceSize) throws IOException {
         MediaType contentType = body.contentType();
         boolean isSvg = contentType != null
                 && contentType.type().equals("image")
@@ -138,7 +138,9 @@ public abstract class HttpClient {
         } else {
             Bitmap bitmap = BitmapFactory.decodeStream(is);
             if (bitmap != null) {
-                return Bitmap.createScaledBitmap(bitmap, size, size, false);
+                return enforceSize
+                        ? Bitmap.createScaledBitmap(bitmap, size, size, false)
+                        : bitmap;
             }
             throw new IOException("Bitmap decoding failed");
         }
diff --git a/mobile/src/main/java/org/openhab/habdroid/util/SyncHttpClient.java b/mobile/src/main/java/org/openhab/habdroid/util/SyncHttpClient.java
index 41e0e5b6..e75e4d1b 100644
--- a/mobile/src/main/java/org/openhab/habdroid/util/SyncHttpClient.java
+++ b/mobile/src/main/java/org/openhab/habdroid/util/SyncHttpClient.java
@@ -63,8 +63,8 @@ public class SyncHttpClient extends HttpClient {
             return new HttpTextResult(this);
         }
 
-        public HttpBitmapResult asBitmap(int sizeInPixels) {
-            return new HttpBitmapResult(this, sizeInPixels);
+        public HttpBitmapResult asBitmap(int sizeInPixels, boolean enforceSize) {
+            return new HttpBitmapResult(this, sizeInPixels, enforceSize);
         }
 
         public HttpStatusResult asStatus() {
@@ -124,7 +124,7 @@ public class SyncHttpClient extends HttpClient {
         public final Throwable error;
         public final int statusCode;
 
-        HttpBitmapResult(HttpResult result, int size) {
+        HttpBitmapResult(HttpResult result, int size, boolean enforceSize) {
             this.request = result.request;
             this.statusCode = result.statusCode;
             if (result.response == null) {
@@ -134,7 +134,7 @@ public class SyncHttpClient extends HttpClient {
                 Bitmap response = null;
                 Throwable error = result.error;
                 try {
-                    response = getBitmapFromResponseBody(result.response, size);
+                    response = getBitmapFromResponseBody(result.response, size, enforceSize);
                 } catch (IOException e) {
                     error = e;
                 }
-- 
GitLab