From 6423966f9f6fd137d9f5ce85d056ee40901fad02 Mon Sep 17 00:00:00 2001 From: Mateusz Lubecki Date: Fri, 26 Nov 2021 10:13:46 +0100 Subject: [PATCH] changed the way background image is downloaded --- .../pogodacc/activity/MainActivity.java | 1 + .../activity/StationDetailsActivity.java | 43 ++++------------- .../trend/pressure/PressureTrendFragment.java | 9 ++++ .../temperature/TemperatureTrendFragment.java | 9 ++++ .../trend/wind/WindTrendFragment.java | 8 ++++ .../StationBackgroundImageUpdater.java | 47 +++++++++++++++++++ .../mobile/pogodacc/type/WeatherStation.java | 7 ++- .../web/StationBackgroundDownloader.java | 39 +++++++++++++++ .../activity_all_stations_linear_layout.xml | 2 +- .../main/res/layout/activity_export_data.xml | 5 -- app/src/main/res/layout/fragment_pressure.xml | 1 + .../main/res/layout/fragment_temperature.xml | 1 + app/src/main/res/layout/fragment_wind.xml | 1 + 13 files changed, 132 insertions(+), 41 deletions(-) create mode 100644 app/src/main/java/cc/pogoda/mobile/pogodacc/activity/updater/StationBackgroundImageUpdater.java create mode 100644 app/src/main/java/cc/pogoda/mobile/pogodacc/web/StationBackgroundDownloader.java diff --git a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/MainActivity.java b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/MainActivity.java index 1235699..fcc0540 100644 --- a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/MainActivity.java +++ b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/MainActivity.java @@ -99,6 +99,7 @@ public class MainActivity extends AppCompatActivity { fromFavs.setDisplayedLocation(fromAllStations.getDisplayedLocation()); fromFavs.setTimezone(fromAllStations.getTimezone()); fromFavs.setCallsignSsid(fromAllStations.getCallsignSsid()); + fromFavs.setStationNameTextColor(fromAllStations.getStationNameTextColor()); // there is no need to delete and put object on the list once again // as a list does not make a copy of the object. It (ArrayList) keeps diff --git a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/StationDetailsActivity.java b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/StationDetailsActivity.java index e730aab..369dc0c 100644 --- a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/StationDetailsActivity.java +++ b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/StationDetailsActivity.java @@ -11,6 +11,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.icu.text.LocaleDisplayNames; import android.os.Bundle; +import android.os.Handler; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -33,9 +34,11 @@ import cc.pogoda.mobile.pogodacc.activity.handler.StationDetailsActWindDirection import cc.pogoda.mobile.pogodacc.activity.handler.StationDetailsActWindSpeedPlotsButtonClickEvent; import cc.pogoda.mobile.pogodacc.activity.handler.StationDetailsActSummaryButtonClickEvent; import cc.pogoda.mobile.pogodacc.activity.handler.StationDetailsActWindRoseButtonClickEvent; +import cc.pogoda.mobile.pogodacc.activity.updater.StationBackgroundImageUpdater; import cc.pogoda.mobile.pogodacc.config.AppConfiguration; import cc.pogoda.mobile.pogodacc.type.WeatherStation; import cc.pogoda.mobile.pogodacc.type.WeatherStationListEvent; +import cc.pogoda.mobile.pogodacc.web.StationBackgroundDownloader; public class StationDetailsActivity extends AppCompatActivity { @@ -87,41 +90,12 @@ public class StationDetailsActivity extends AppCompatActivity { */ int selectedLn = 0; - /** - * This class downloads the background JPG image from the internet and - */ - private class DownloadImage implements Runnable { - - ImageView iv; - String image_url; - - Bitmap bitmap; - - public DownloadImage(ImageView background, String url) { - iv = background; - image_url = url; - } - - @Override - public void run() { - try { - InputStream in = new java.net.URL(image_url).openStream(); - bitmap = BitmapFactory.decodeStream(in); - - iv.setImageBitmap(bitmap); - - } catch (Exception e) { - e.printStackTrace(); - } - } - } + Handler handler; public StationDetailsActivity() { stationName = null; } - - @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_station_details, menu); @@ -277,11 +251,12 @@ public class StationDetailsActivity extends AppCompatActivity { stationSponsorUrl.setText(station.getSponsorUrl()); stationMoreInfo.setText(station.getMoreInfo()); - - DownloadImage downloadImage = new DownloadImage(topBackground, station.getImageUrl()); - Thread t = new Thread(downloadImage); + StationBackgroundDownloader downloader = new StationBackgroundDownloader(station); + Thread t = new Thread(downloader); t.start(); - //runOnUiThread(downloadImage); + + handler = new Handler(); + handler.postDelayed(new StationBackgroundImageUpdater(topBackground, stationName, station, downloader, handler), 100); if (station_lat > 0.0f && station_lon > 0.0f) { // europe diff --git a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/pressure/PressureTrendFragment.java b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/pressure/PressureTrendFragment.java index 296c938..f9af48c 100644 --- a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/pressure/PressureTrendFragment.java +++ b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/pressure/PressureTrendFragment.java @@ -3,6 +3,7 @@ package cc.pogoda.mobile.pogodacc.activity.trend.pressure; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; +import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -53,7 +54,15 @@ public class PressureTrendFragment extends Fragment { eightHours = root.findViewById(R.id.textViewPressureTrendEightHoursVal); pressureTrendViewModel.getStationName().observe(getViewLifecycleOwner(), s -> { + if (s.length() < 18) { + stationName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 38); + } + else { + stationName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 28); + } + stationName.setText(s); + }); pressureTrendViewModel.getLastMeasuremenetTime().observe(getViewLifecycleOwner(), s -> { diff --git a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/temperature/TemperatureTrendFragment.java b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/temperature/TemperatureTrendFragment.java index 2e4b141..d834002 100644 --- a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/temperature/TemperatureTrendFragment.java +++ b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/temperature/TemperatureTrendFragment.java @@ -3,6 +3,7 @@ package cc.pogoda.mobile.pogodacc.activity.trend.temperature; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; +import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -72,6 +73,14 @@ public class TemperatureTrendFragment extends Fragment { textViewTemperatureTrendEightHoursHVal = root.findViewById(R.id.textViewTemperatureTrendEightHoursHVal); temperatureTrendViewModel.getDisplayedStationName().observe(getViewLifecycleOwner(), s -> { + + if (s.length() < 18) { + textViewTemperatureTrendStationName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 38); + } + else { + textViewTemperatureTrendStationName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 28); + } + textViewTemperatureTrendStationName.setText(s); }); diff --git a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/wind/WindTrendFragment.java b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/wind/WindTrendFragment.java index 77de1f9..383416d 100644 --- a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/wind/WindTrendFragment.java +++ b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/wind/WindTrendFragment.java @@ -3,6 +3,7 @@ package cc.pogoda.mobile.pogodacc.activity.trend.wind; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; +import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -64,6 +65,13 @@ public class WindTrendFragment extends Fragment { textViewWindTrendEightHoursGustsVal = root.findViewById(R.id.textViewTemperatureTrendEightHoursHVal); windTrendViewModel.getDisplayedStationName().observe(getViewLifecycleOwner(), s -> { + if (s.length() < 18) { + textViewWindTrendStationName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 38); + } + else { + textViewWindTrendStationName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 28); + } + textViewWindTrendStationName.setText(s); }); diff --git a/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/updater/StationBackgroundImageUpdater.java b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/updater/StationBackgroundImageUpdater.java new file mode 100644 index 0000000..4de8157 --- /dev/null +++ b/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/updater/StationBackgroundImageUpdater.java @@ -0,0 +1,47 @@ +package cc.pogoda.mobile.pogodacc.activity.updater; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.widget.ImageView; +import android.widget.TextView; + +import java.io.InputStream; + +import cc.pogoda.mobile.pogodacc.type.WeatherStation; +import cc.pogoda.mobile.pogodacc.web.StationBackgroundDownloader; + +public class StationBackgroundImageUpdater implements Runnable{ + ImageView iv; + + TextView station_name; + WeatherStation station; + StationBackgroundDownloader downloader; + + Handler handler; + + public StationBackgroundImageUpdater(ImageView _background, TextView _station_name, WeatherStation _station, StationBackgroundDownloader _downloader, Handler _handler) { + iv = _background; + station = _station; + station_name = _station_name; + downloader = _downloader; + handler = _handler; + } + + @Override + public void run() { + + Bitmap bitmap = downloader.getBitmap(); + + if (bitmap != null) { + station_name.setTextColor(station.getStationNameTextColor()); + station_name.setText(station.getDisplayedName()); + + iv.setImageBitmap(bitmap); + } + else { + handler.postDelayed(this, 200); + } + + } +} diff --git a/app/src/main/java/cc/pogoda/mobile/pogodacc/type/WeatherStation.java b/app/src/main/java/cc/pogoda/mobile/pogodacc/type/WeatherStation.java index 3b5fc8b..9f6e773 100644 --- a/app/src/main/java/cc/pogoda/mobile/pogodacc/type/WeatherStation.java +++ b/app/src/main/java/cc/pogoda/mobile/pogodacc/type/WeatherStation.java @@ -73,7 +73,12 @@ public class WeatherStation implements Serializable { } public int getStationNameTextColor() { - return stationNameTextColor; + if (stationNameTextColor == 0) { + return -16777216; + } + else { + return stationNameTextColor; + } } public void setStationNameTextColor(int stationNameTextColor) { diff --git a/app/src/main/java/cc/pogoda/mobile/pogodacc/web/StationBackgroundDownloader.java b/app/src/main/java/cc/pogoda/mobile/pogodacc/web/StationBackgroundDownloader.java new file mode 100644 index 0000000..56d3b9b --- /dev/null +++ b/app/src/main/java/cc/pogoda/mobile/pogodacc/web/StationBackgroundDownloader.java @@ -0,0 +1,39 @@ +package cc.pogoda.mobile.pogodacc.web; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import java.io.IOException; +import java.io.InputStream; + +import cc.pogoda.mobile.pogodacc.type.WeatherStation; + +public class StationBackgroundDownloader implements Runnable { + + private WeatherStation station; + + public Bitmap getBitmap() { + return bitmap; + } + + private Bitmap bitmap; + + public StationBackgroundDownloader(WeatherStation _wx_station) { + station = _wx_station; + + bitmap = null; + } + + @Override + public void run() { + InputStream in = null; + try { + in = new java.net.URL(station.getImageUrl()).openStream(); + bitmap = BitmapFactory.decodeStream(in); + + } catch (IOException e) { + e.printStackTrace(); + bitmap = null; + } + } +} diff --git a/app/src/main/res/layout/activity_all_stations_linear_layout.xml b/app/src/main/res/layout/activity_all_stations_linear_layout.xml index 587017a..04f27ea 100644 --- a/app/src/main/res/layout/activity_all_stations_linear_layout.xml +++ b/app/src/main/res/layout/activity_all_stations_linear_layout.xml @@ -13,7 +13,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - /> + android:textSize="20sp" />