displaying current values into favourites list

fix/get-all-stations-hangout
Mateusz Lubecki 2021-11-10 23:04:05 +01:00
rodzic 78093e489c
commit 022016d605
12 zmienionych plików z 518 dodań i 15 usunięć

140
.gitignore vendored
Wyświetl plik

@ -13,3 +13,143 @@
.externalNativeBuild
.cxx
local.properties
# Built application files
*.apk
*.ap_
*.aab
# Files for the ART/Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
# Gradle files
.gradle
.gradle/
build/
# Signing files
.signing/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio
/*/build/
/*/local.properties
/*/out
/*/*/build
/*/*/production
captures/
.navigation/
*.ipr
*~
*.swp
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
# google-services.json
# Android Patch
gen-external-apklibs
# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
# NDK
obj/
# IntelliJ IDEA
*.iml
*.iws
/out/
# User-specific configurations
.idea/caches/
.idea/libraries/
.idea/shelf/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
.idea/datasources.xml
.idea/dataSources.ids
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
.idea/assetWizardSettings.xml
.idea/gradle.xml
.idea/jarRepositories.xml
.idea/navEditor.xml
# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Legacy Eclipse project files
.classpath
.project
.cproject
.settings/
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.war
*.ear
# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml)
hs_err_pid*
## Plugin-specific files:
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Mongo Explorer plugin
.idea/mongoSettings.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
### AndroidStudio Patch ###
!/gradle/wrapper/gradle-wrapper.jar

Wyświetl plik

@ -12,6 +12,6 @@
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2021-08-22T19:33:57.901403Z" />
<timeTargetWasSelectedWithDropDown value="2021-11-09T11:30:18.926154Z" />
</component>
</project>

Wyświetl plik

@ -3,12 +3,14 @@
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="../../../../../layout/custom_preview.xml" value="0.2171875" />
<entry key="app/src/main/res/layout/activity_all_stations.xml" value="0.3651041666666667" />
<entry key="app/src/main/res/layout/activity_all_stations_linear_layout.xml" value="0.3651041666666667" />
<entry key="app/src/main/res/layout/activity_export_data.xml" value="0.67" />
<entry key="app/src/main/res/layout/activity_favourites.xml" value="0.3651041666666667" />
<entry key="app/src/main/res/layout/activity_favourites_empty.xml" value="0.3651041666666667" />
<entry key="app/src/main/res/layout/activity_favourites_linear_layout.xml" value="0.3651041666666667" />
<entry key="app/src/main/res/layout/activity_favourites_linear_layout_data.xml" value="0.5" />
<entry key="app/src/main/res/layout/activity_main.xml" value="0.3651041666666667" />
<entry key="app/src/main/res/layout/activity_station_details.xml" value="0.3651041666666667" />
<entry key="app/src/main/res/layout/activity_station_details_plots.xml" value="0.3651041666666667" />

156
app/.gitignore vendored
Wyświetl plik

@ -1 +1,155 @@
/build
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
# Built application files
*.apk
*.ap_
*.aab
# Files for the ART/Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
# Gradle files
.gradle
.gradle/
build/
# Signing files
.signing/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio
/*/build/
/*/local.properties
/*/out
/*/*/build
/*/*/production
captures/
.navigation/
*.ipr
*~
*.swp
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
# google-services.json
# Android Patch
gen-external-apklibs
# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
# NDK
obj/
# IntelliJ IDEA
*.iml
*.iws
/out/
# User-specific configurations
.idea/caches/
.idea/libraries/
.idea/shelf/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
.idea/datasources.xml
.idea/dataSources.ids
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
.idea/assetWizardSettings.xml
.idea/gradle.xml
.idea/jarRepositories.xml
.idea/navEditor.xml
# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Legacy Eclipse project files
.classpath
.project
.cproject
.settings/
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.war
*.ear
# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml)
hs_err_pid*
## Plugin-specific files:
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Mongo Explorer plugin
.idea/mongoSettings.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
### AndroidStudio Patch ###
!/gradle/wrapper/gradle-wrapper.jar

Wyświetl plik

@ -10,6 +10,7 @@ import cc.pogoda.mobile.pogodacc.dao.AllStationsDao;
import cc.pogoda.mobile.pogodacc.dao.LastStationDataDao;
import cc.pogoda.mobile.pogodacc.dao.SummaryDao;
import cc.pogoda.mobile.pogodacc.dao.mock.AllStationsDaoMock;
import cc.pogoda.mobile.pogodacc.type.ParceableFavsCallReason;
import cc.pogoda.mobile.pogodacc.type.ParceableStationsList;
import cc.pogoda.mobile.pogodacc.type.web.ListOfStationData;
import cc.pogoda.mobile.pogodacc.type.web.Summary;
@ -37,7 +38,7 @@ public class AllStationsActivity extends AppCompatActivity {
WeatherStationRecyclerViewAdapter adapter = null;
adapter = new WeatherStationRecyclerViewAdapter(allStationsList.getList(), this, null);
adapter = new WeatherStationRecyclerViewAdapter(allStationsList.getList(), this, ParceableFavsCallReason.Reason.ALL_STATIONS);
recyclerViewAllStations.setAdapter(adapter);

Wyświetl plik

@ -30,7 +30,7 @@ public class AllStationsActRecyclerViewButtonClickEvent implements View.OnClickL
@Override
public void onClick(View v) {
if (reason == null || reason == ParceableFavsCallReason.Reason.FAVOURITES) {
if (reason == null || reason == ParceableFavsCallReason.Reason.FAVOURITES || reason == ParceableFavsCallReason.Reason.ALL_STATIONS) {
intent = new Intent(p, StationDetailsActivity.class);
intent.putExtra("station", station);

Wyświetl plik

@ -9,17 +9,29 @@ import androidx.recyclerview.widget.RecyclerView;
import cc.pogoda.mobile.pogodacc.R;
import cc.pogoda.mobile.pogodacc.activity.handler.AllStationsActRecyclerViewButtonClickEvent;
import cc.pogoda.mobile.pogodacc.type.ParceableFavsCallReason;
public class AllStationsActRecyclerViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public Button button;
public TextView textViewData;
public AllStationsActRecyclerViewHolder(@NonNull View itemView) {
public AllStationsActRecyclerViewHolder(@NonNull View itemView, ParceableFavsCallReason.Reason callReason) {
super(itemView);
textView = itemView.findViewById(R.id.station_name);
button = itemView.findViewById(R.id.station_button);
if (callReason.equals(ParceableFavsCallReason.Reason.EXPORT_SELECT) || callReason.equals(ParceableFavsCallReason.Reason.ALL_STATIONS)) {
textView = itemView.findViewById(R.id.station_name);
button = itemView.findViewById(R.id.station_button);
textViewData = null;
}
else {
textView = itemView.findViewById(R.id.station_name_fav);
button = itemView.findViewById(R.id.station_button_fav);
textViewData = itemView.findViewById(R.id.station_data_fav);
}
}
}

Wyświetl plik

@ -16,8 +16,11 @@ import java.util.List;
import cc.pogoda.mobile.pogodacc.R;
import cc.pogoda.mobile.pogodacc.activity.handler.AllStationsActRecyclerViewButtonClickEvent;
import cc.pogoda.mobile.pogodacc.activity.view.AllStationsActRecyclerViewHolder;
import cc.pogoda.mobile.pogodacc.dao.SummaryDao;
import cc.pogoda.mobile.pogodacc.type.ParceableFavsCallReason;
import cc.pogoda.mobile.pogodacc.type.WeatherStation;
import cc.pogoda.mobile.pogodacc.type.web.QualityFactor;
import cc.pogoda.mobile.pogodacc.type.web.Summary;
public class WeatherStationRecyclerViewAdapter extends RecyclerView.Adapter<AllStationsActRecyclerViewHolder> {
@ -27,10 +30,13 @@ public class WeatherStationRecyclerViewAdapter extends RecyclerView.Adapter<AllS
ParceableFavsCallReason.Reason reason;
SummaryDao summaryDao;
public WeatherStationRecyclerViewAdapter(List<WeatherStation> stations, AppCompatActivity parentActivity, ParceableFavsCallReason.Reason callReason) {
this.stations = stations;
this.activity = parentActivity;
this.reason = callReason;
this.summaryDao = new SummaryDao();
}
@NonNull
@ -39,17 +45,27 @@ public class WeatherStationRecyclerViewAdapter extends RecyclerView.Adapter<AllS
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
// Inflate the custom layout
View view = inflater.inflate(R.layout.activity_all_stations_linear_layout, parent, false);
View view;
// check the call reason
if (reason.equals(ParceableFavsCallReason.Reason.FAVOURITES)) {
// inflate custom layout
view = inflater.inflate(R.layout.activity_favourites_linear_layout_data, parent, false);
}
else {
// Inflate the custom layout without current data
view = inflater.inflate(R.layout.activity_all_stations_linear_layout, parent, false);
}
// Return a new holder instance
AllStationsActRecyclerViewHolder viewHolder = new AllStationsActRecyclerViewHolder(view);
AllStationsActRecyclerViewHolder viewHolder = new AllStationsActRecyclerViewHolder(view, reason);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull AllStationsActRecyclerViewHolder holder, int position) {
TextView textView = holder.textView;
TextView textViewData = holder.textViewData;
Button button = holder.button;
WeatherStation station = stations.get(position);
@ -61,6 +77,33 @@ public class WeatherStationRecyclerViewAdapter extends RecyclerView.Adapter<AllS
button.setOnClickListener(new AllStationsActRecyclerViewButtonClickEvent(station, activity, reason));
}
if (textViewData != null) {
Summary summary = summaryDao.getStationSummary(station.getSystemName());
if (summary != null) {
String str;
if (summary.wind_qf_native.equals(QualityFactor.FULL) || summary.wind_qf_native.equals(QualityFactor.DEGRADED)) {
if (summary.humidity_qf_native.equals(QualityFactor.FULL) || summary.humidity_qf_native.equals(QualityFactor.DEGRADED)) {
str = String.format("%d°C %d%% %s %3.1f m/s max %3.1f m/s", Math.round(summary.avg_temperature), summary.humidity, summary.getWindDirStr(), summary.average_speed, summary.gusts);
}
else {
str = String.format("%d°C %s %3.1f m/s max %3.1f m/s", Math.round(summary.avg_temperature), summary.getWindDirStr(), summary.average_speed, summary.gusts);
}
}
else {
if (summary.humidity_qf_native.equals(QualityFactor.FULL) || summary.humidity_qf_native.equals(QualityFactor.DEGRADED)) {
str = String.format("%d°C %d%%", Math.round(summary.avg_temperature), summary.humidity);
}
else {
str = String.format("%d°C", Math.round(summary.avg_temperature));
}
}
textViewData.setText(str);
}
}
}
@Override

Wyświetl plik

@ -7,7 +7,8 @@ public class ParceableFavsCallReason implements Parcelable {
public enum Reason {
FAVOURITES,
EXPORT_SELECT
EXPORT_SELECT,
ALL_STATIONS
}
public Reason getReason() {
@ -26,6 +27,7 @@ public class ParceableFavsCallReason implements Parcelable {
switch (reasonInt) {
case 1: reason = Reason.FAVOURITES; break;
case 2: reason = Reason.EXPORT_SELECT; break;
case 3: reason = Reason.ALL_STATIONS; break;
default: reason = null;
}
}
@ -35,6 +37,7 @@ public class ParceableFavsCallReason implements Parcelable {
switch (reason) {
case FAVOURITES: dest.writeInt(1); break;
case EXPORT_SELECT: dest.writeInt(2); break;
case ALL_STATIONS: dest.writeInt(3); break;
}
}

Wyświetl plik

@ -93,6 +93,10 @@ public class StationWindRoseActElements implements StationActivityElements {
}
}
// create strings with wind speed, gusts etc
String average_speed = String.format("%3.1f", data.average_speed);
String gusts_speed = String.format("%3.1f", data.gusts);
// check if wind data is avaliable in the input data set
if (!no_data && !data.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
windArrow.setRotation(data.direction - 225.0f);
@ -103,13 +107,13 @@ public class StationWindRoseActElements implements StationActivityElements {
}
if (!no_data && !data.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
windSpeed.setText(activity.getResources().getString(R.string.mean_value) + '\n' + data.average_speed + "m/s");
windSpeed.setText(activity.getResources().getString(R.string.mean_value) + '\n' + average_speed + "m/s");
} else {
windSpeed.setText(activity.getResources().getString(R.string.mean_value) + '\n' + "---");
}
if (!no_data && !data.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
windGusts.setText(activity.getResources().getString(R.string.wind_gust_short) + '\n' + data.gusts + "m/s");
windGusts.setText(activity.getResources().getString(R.string.wind_gust_short) + '\n' + gusts_speed + "m/s");
} else {
windGusts.setText(activity.getResources().getString(R.string.wind_gust_short) + '\n' + "---");
@ -129,9 +133,12 @@ public class StationWindRoseActElements implements StationActivityElements {
}
if (!no_data && !old_data) {
String hour_max_gusts = String.format("%3.1f", data.hour_gusts);
String hour_min_avg = String.format("%3.1f", data.hour_min_average_speed);
pressure.setText(activity.getResources().getString(R.string.qnh) + ": " + String.format("%d hPa", data.qnh));
maxGust.setText(activity.getResources().getString(R.string.max_1h_gust) + ": " + data.hour_gusts + "m/s");
minAverage.setText(activity.getResources().getString(R.string.min_1h_avg) + ": " + data.hour_min_average_speed + "m/s");
maxGust.setText(activity.getResources().getString(R.string.max_1h_gust) + ": " + hour_max_gusts + "m/s");
minAverage.setText(activity.getResources().getString(R.string.min_1h_avg) + ": " + hour_min_avg + "m/s");
} else if (!no_data && old_data) {
maxGust.setText(activity.getResources().getString(R.string.warning));
maxGust.setTextColor(Color.RED);

Wyświetl plik

@ -46,4 +46,99 @@ public class Summary {
wind_qf_native = QualityFactor.UNSET;
}
public String getWindDirStr() {
String out;
if (direction <= 11 && direction >= 349) {
out = String.format("%5s", "N");
}
else if (direction <= 34 && direction > 11) {
out = String.format("%5s", "N NE");
}
else if (direction <= 56 && direction > 34) {
out = String.format("%5s", "NE");
}
else if (direction <= 79 && direction > 56) {
out = String.format("%5s", "E NE");
}
else if (direction <= 101 && direction > 79) {
out = String.format("%5s", "E");
}
else if (direction <= 124 && direction > 101) {
out = String.format("%5s", "E SE");
}
else if (direction <= 146 && direction > 124) {
out = String.format("%5s", "SE");
}
else if (direction <= 169 && direction > 146) {
out = String.format("%5s", "S SE");
}
else if (direction <= 191 && direction > 169) {
out = String.format("%5s", "S");
}
else if (direction <= 214 && direction > 191) {
out = String.format("%5s", "S SW");
}
else if (direction <= 236 && direction > 214) {
out = String.format("%5s", "SW");
}
else if (direction <= 259 && direction > 236) {
out = String.format("%5s", "W SW");
}
else if (direction <= 281 && direction > 259) {
out = String.format("%5s", "W");
}
else if (direction <= 304 && direction > 281) {
out = String.format("%5s", "W NW");
}
else if (direction <= 327 && direction > 304) {
out = String.format("%5s", "NW");
}
else if (direction <= 349 && direction > 327) {
out = String.format("%5s", "N NW");
}
else {
out = "";
}
return out;
}
/**
*
if (WX.wind_direction <= 11 && WX.wind_direction >= 349)
html << "- N";
else if (WX.wind_direction <= 34 && WX.wind_direction > 11)
html << "- N NE";
else if (WX.wind_direction <= 56 && WX.wind_direction > 34)
html << "- NE";
else if (WX.wind_direction <= 79 && WX.wind_direction > 56)
html << "- E NE";
else if (WX.wind_direction <= 101 && WX.wind_direction > 79)
html << "- E";
else if (WX.wind_direction <= 124 && WX.wind_direction > 101)
html << "- E SE";
else if (WX.wind_direction <= 146 && WX.wind_direction > 124)
html << "- SE";
else if (WX.wind_direction <= 169 && WX.wind_direction > 146)
html << "- S SE";
else if (WX.wind_direction <= 191 && WX.wind_direction > 169)
html << "- S";
else if (WX.wind_direction <= 214 && WX.wind_direction > 191)
html << "- S SW";
else if (WX.wind_direction <= 236 && WX.wind_direction > 214)
html << "- SW";
else if (WX.wind_direction <= 259 && WX.wind_direction > 236)
html <<"- W SW";
else if (WX.wind_direction <= 281 && WX.wind_direction > 259)
html << "- W";
else if (WX.wind_direction <= 304 && WX.wind_direction > 281)
html << "- W NW";
else if (WX.wind_direction <= 327 && WX.wind_direction > 304)
html << "- NW";
else if (WX.wind_direction <= 349 && WX.wind_direction > 327)
html << "- N NW";
else;
*/
}

Wyświetl plik

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/cLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/station_name_fav"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="24dp"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="@+id/station_button_fav"
app:layout_constraintEnd_toStartOf="@+id/station_button_fav"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/station_button_fav" />
<Button
android:id="@+id/station_button_fav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/station_name_fav"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/station_data_fav"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="@+id/station_button_fav"
app:layout_constraintEnd_toStartOf="@+id/station_button_fav"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/station_name_fav" />
</androidx.constraintlayout.widget.ConstraintLayout>